diff --git a/.env.dist b/.env.dist index 0a9bdd3f7..881374f80 100644 --- a/.env.dist +++ b/.env.dist @@ -40,7 +40,7 @@ APP_SECRET=change_this_to_something_unique #================================================================================ # Running behind reverse proxies? Try these: # TRUSTED_PROXIES=127.0.0.1,127.0.0.2 -# TRUSTED_HOSTS=localhost,example.com +# TRUSTED_HOSTS=localhost|example.com #================================================================================ # unlikely, that you need to change this one diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index e22c7932d..93d715a04 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -53,6 +53,7 @@ body: attributes: label: Which PHP version are you using? options: + - "8.5" - "8.4" - "8.2" - "8.3" diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml index 9763f7616..76f8741e8 100644 --- a/.github/release-drafter.yml +++ b/.github/release-drafter.yml @@ -7,6 +7,7 @@ exclude-labels: - 'release' exclude-contributors: - 'dependabot' + - 'weblate' change-template: '- $TITLE (#$NUMBER)' change-title-escapes: '\<*_&`#@' version-resolver: @@ -21,8 +22,8 @@ version-resolver: - 'translation' default: patch template: | - **Compatible with PHP 8.1 to 8.4** + **Compatible with PHP 8.1 to 8.5** $CHANGES - Involved in this release: $CONTRIBUTORS - thank you! + Involved in this release: $CONTRIBUTORS diff --git a/.github/workflows/lockfiles.yaml b/.github/workflows/lockfiles.yaml index 746d9d301..1a46030ac 100644 --- a/.github/workflows/lockfiles.yaml +++ b/.github/workflows/lockfiles.yaml @@ -1,23 +1,21 @@ name: Check .lock files on: - pull_request: null + pull_request_target: null push: branches: - main + +permissions: + pull-requests: read + jobs: lockfiles: runs-on: ubuntu-latest name: Verify lock file integrity steps: - - - name: Clone Kimai - uses: actions/checkout@v4 - with: - persist-credentials: false - - name: Prevent file change - uses: xalvarez/prevent-file-change-action@v1 + uses: xalvarez/prevent-file-change-action@v3 with: githubToken: ${{ secrets.GITHUB_TOKEN }} - pattern: .*\.lock$ + pattern: .*\.lock$|^\.github\/.*$ trustedAuthors: kevinpapst, dependabot diff --git a/.github/workflows/testing.yaml b/.github/workflows/testing.yaml index cf4061573..8b369ed68 100644 --- a/.github/workflows/testing.yaml +++ b/.github/workflows/testing.yaml @@ -19,7 +19,7 @@ jobs: options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3 strategy: matrix: - php: ['8.1', '8.2', '8.3', '8.4'] + php: ['8.1', '8.2', '8.3', '8.4', '8.5'] name: Integration (${{ matrix.php }}) steps: @@ -62,7 +62,7 @@ jobs: run: APP_ENV=dev bin/console kimai:reload -n - name: Check codestyles - run: PHP_CS_FIXER_IGNORE_ENV=1 vendor/bin/php-cs-fixer fix --dry-run --verbose --config=.php-cs-fixer.dist.php --using-cache=no --show-progress=none --format=checkstyle | cs2pr + run: vendor/bin/php-cs-fixer fix --dry-run --verbose --config=.php-cs-fixer.dist.php --using-cache=no --show-progress=none --format=checkstyle | cs2pr - name: Run PHPStan for application run: vendor/bin/phpstan analyse -c phpstan.neon --no-progress --error-format=checkstyle | cs2pr @@ -87,7 +87,7 @@ jobs: MAILER_URL: null://localhost - name: Full test-suite - if: matrix.php != '8.2' + if: matrix.php != '8.5' run: vendor/bin/phpunit tests/ env: DATABASE_URL: mysql://root:kimai@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/kimai?charset=utf8mb4&serverVersion=8.0.35 @@ -95,7 +95,7 @@ jobs: MAILER_URL: null://localhost - name: Full test-suite with coverage - if: matrix.php == '8.2' + if: matrix.php == '8.5' run: vendor/bin/phpunit tests/ --coverage-clover=coverage.xml env: DATABASE_URL: mysql://root:kimai@127.0.0.1:${{ job.services.mysql.ports['3306'] }}/kimai?charset=utf8mb4&serverVersion=8.0.35 @@ -103,8 +103,8 @@ jobs: MAILER_URL: null://localhost - name: Upload code coverage - if: matrix.php == '8.2' - uses: codecov/codecov-action@v4 + if: matrix.php == '8.5' + uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} files: ./coverage.xml diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index fda0daaea..004c3b46e 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -25,7 +25,7 @@ jobs: echo "Using input provided: $input" version="$input" fi - + echo "kimai_version=$version" >> $GITHUB_ENV if [[ ! $version =~ ^2\.(0|[1-9]*)(0?)\.(0|[0-9]*)(0?)$ ]]; then diff --git a/.gitignore b/.gitignore index 40a21331e..5b8323ad2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +var/share/ # some hosters require a htaccess to change the PHP version /public/.htaccess /.env-* diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php index 1001853aa..a35e07fd9 100644 --- a/.php-cs-fixer.dist.php +++ b/.php-cs-fixer.dist.php @@ -8,6 +8,7 @@ file that was distributed with this source code. COMMENT; $fixer = new PhpCsFixer\Config(); +$fixer->setUnsupportedPhpVersionAllowed(true); $fixer ->setParallelConfig(PhpCsFixer\Runner\Parallel\ParallelConfigFactory::detect()) ->setRiskyAllowed(true) @@ -142,7 +143,7 @@ $fixer 'whitespace_after_comma_in_array' => true, 'yoda_style' => false, 'ternary_to_null_coalescing' => true, - 'visibility_required' => ['elements' => [ + 'modifier_keywords' => ['elements' => [ 'const', 'method', 'property', diff --git a/README.md b/README.md index a60bd9ee9..a1fe18b89 100644 --- a/README.md +++ b/README.md @@ -21,13 +21,6 @@ authentication via SAML/LDAP/Database, two-factor authentication (2FA) with TOTP user/customer/project specific rates, advanced search & filtering, money and time budgets, advanced reporting, support for [plugins](https://www.kimai.org/store/) and so much more. -### Versions - -There are two [versions](https://www.kimai.org/documentation/versions.html) of Kimai existing: - -- [Version 2](https://github.com/kimai/kimai) — the current stable release (PHP 8.1+) -- [Version 1](https://github.com/kimai/kimai/tree/1.x) — do **NOT** use, EOL since mid of 2023 (PHP 7.4) - ### Links - [Home](https://www.kimai.org) — Kimai project homepage @@ -36,7 +29,7 @@ There are two [versions](https://www.kimai.org/documentation/versions.html) of K ### Requirements -- PHP 8.1.3 minimum (support for PHP 8.2 and 8.3) +- PHP 8.1.3 minimum with support for 8.2, 8.3, 8.4, 8.5 - MariaDB or MySQL - A webserver and subdomain (subdirectory is not supported) - PHP extensions: `gd`, `intl`, `json`, `mbstring`, `pdo`, `tokenizer`, `xml`, `xsl`, `zip` @@ -51,7 +44,7 @@ There are two [versions](https://www.kimai.org/documentation/versions.html) of K There are more documented ways for [on-premise hosting](https://www.kimai.org/documentation/chapter-on-premise.html). -And if you don't want to host Kimai, you can use [the Cloud version](https://www.kimai.cloud/) of it. +And if you don't want to host Kimai, you can use the [Cloud version](https://www.kimai.cloud/) of it. ### Updating Kimai diff --git a/UPGRADING-3.md b/UPGRADING-3.md index 5e20a4c42..eccea7112 100644 --- a/UPGRADING-3.md +++ b/UPGRADING-3.md @@ -13,6 +13,8 @@ Perform EACH version specific task between your version and the new one, otherwi ### Developer +Do not use method chaining: all fluent interface, especially in Entities, are no longer supported. + Removed translations: - `action.edit`: use `edit` instead - `my.profile`: use `user_profile` instead diff --git a/assets/highlight.js b/assets/highlight.js new file mode 100644 index 000000000..604736258 --- /dev/null +++ b/assets/highlight.js @@ -0,0 +1,5 @@ +require('highlight.js/styles/github-dark.css'); + +const hljs = require('highlight.js/lib/common'); + +global.hljs = hljs; \ No newline at end of file diff --git a/assets/invoice.js b/assets/invoice.js index f8f9c8be7..4f6080969 100644 --- a/assets/invoice.js +++ b/assets/invoice.js @@ -1,2 +1,4 @@ - +/** + * @deprecated use invoice-pdf instead + */ require('./sass/_invoice.scss'); diff --git a/assets/js/forms/KimaiAutocompleteTags.js b/assets/js/forms/KimaiAutocompleteTags.js index 353a8c559..d55a134e8 100644 --- a/assets/js/forms/KimaiAutocompleteTags.js +++ b/assets/js/forms/KimaiAutocompleteTags.js @@ -24,7 +24,7 @@ export default class KimaiAutocompleteTags extends KimaiAutocomplete { API.get(apiUrl, {'name': query}, (data) => { let results = []; for (let item of data) { - results.push({text: item.name, value: item.name, color: item['color-safe']}); + results.push({text: item.name, value: item.name, color: item.color}); } callback(results); }, () => { diff --git a/assets/js/forms/KimaiDateNowForm.js b/assets/js/forms/KimaiDateNowForm.js index da90658aa..c8bf05d3c 100644 --- a/assets/js/forms/KimaiDateNowForm.js +++ b/assets/js/forms/KimaiDateNowForm.js @@ -43,7 +43,10 @@ export default class KimaiDateNowForm extends KimaiFormPlugin { const formElement = document.getElementById(linkTarget.dataset.target); if (!formElement.disabled) { formElement.value = this.getDateUtils().format(linkTarget.dataset.format, null); + // this should usually work formElement.dispatchEvent(new Event('change', {bubbles: true})); + // this is required for Litepicker to pick the new date (with autoRefresh option) + formElement.dispatchEvent(new Event('keyup', {bubbles: true})); } event.preventDefault(); diff --git a/assets/js/forms/KimaiFormSelect.js b/assets/js/forms/KimaiFormSelect.js index 3086d8070..ee8392bd2 100644 --- a/assets/js/forms/KimaiFormSelect.js +++ b/assets/js/forms/KimaiFormSelect.js @@ -62,13 +62,10 @@ export default class KimaiFormSelect extends KimaiFormTomselectPlugin { plugins.push('remove_button'); } - /* - const isOrdering = false; - if (isOrdering) { - plugins.push('caret_position'); + if (node.dataset['order'] !== undefined && node.dataset['order'] === '1') { + //plugins.push('caret_position'); plugins.push('drag_drop'); } - */ let options = { // see https://github.com/orchidjs/tom-select/issues/543#issuecomment-1664342257 @@ -83,8 +80,11 @@ export default class KimaiFormSelect extends KimaiFormTomselectPlugin { // if there are more than X entries, the other ones are hidden and can only be found // by typing some characters to trigger the internal option search // see App\Form\Type\TagsType::MAX_AMOUNT_SELECT + // TODO make this value configurable with a data attribute maxOptions: 500, sortField:[{field: '$order'}, {field: '$score'}], + // required so it works in table.responsive, but requires z-index 1056, because bootstrap modal would otherwise hide it + dropdownParent: 'body', }; let render = { diff --git a/assets/js/forms/KimaiFormTomselectPlugin.js b/assets/js/forms/KimaiFormTomselectPlugin.js index 4e4c5e791..08747788f 100644 --- a/assets/js/forms/KimaiFormTomselectPlugin.js +++ b/assets/js/forms/KimaiFormTomselectPlugin.js @@ -6,7 +6,7 @@ */ /*! - * [KIMAI] KimaiFormPlugin: base class for all none ID plugin that handle forms + * [KIMAI] KimaiFormTomselectPlugin: base form plugin for everyone using tomselect */ import KimaiFormPlugin from './KimaiFormPlugin'; diff --git a/assets/js/forms/KimaiTimesheetForm.js b/assets/js/forms/KimaiTimesheetForm.js index 965f6de1b..2acc9fb68 100644 --- a/assets/js/forms/KimaiTimesheetForm.js +++ b/assets/js/forms/KimaiTimesheetForm.js @@ -40,17 +40,27 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { if (this._beginTime !== undefined) { this._beginTime.removeEventListener('change', this._beginListener); + delete this._beginListener; + this._beginTime.removeEventListener('blur', this._beginBlurListener); + delete this._beginBlurListener; delete this._beginTime; } if (this._endTime !== undefined) { this._endTime.removeEventListener('change', this._endListener); + delete this._endListener; + this._endTime.removeEventListener('blur', this._endBlurListener); + delete this._endBlurListener; delete this._endTime; } if (this._duration !== undefined) { this._duration.removeEventListener('change', this._durationListener); delete this._durationListener; + this._duration.removeEventListener('keydown', this._durationKeyListener); + delete this._durationKeyListener; + this._duration.removeEventListener('blur', this._durationBlurListener); + delete this._durationBlurListener; delete this._duration; } @@ -108,13 +118,21 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { } this._beginListener = () => this._changedBegin(); + this._beginBlurListener = () => this._parseBeginTime(); this._endListener = () => this._changedEnd(); + this._endBlurListener = () => this._parseEndTime(); this._durationListener = () => this._changedDuration(); + this._durationKeyListener = (event) => this._changeDurationOnKeypress(event); + this._durationBlurListener = () => this._parseDuration(); this._beginDate.addEventListener('change', this._beginListener); this._beginTime.addEventListener('change', this._beginListener); + this._beginTime.addEventListener('blur', this._beginBlurListener); this._endTime.addEventListener('change', this._endListener); + this._endTime.addEventListener('blur', this._endBlurListener); this._duration.addEventListener('change', this._durationListener); + this._duration.addEventListener('keydown', this._durationKeyListener); + this._duration.addEventListener('blur', this._durationBlurListener); if (this._duration !== null && this._durationToggle !== null) { this._durationToggleListener = () => { @@ -124,6 +142,159 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { } } + _parseBeginTime() + { + if (this._beginTime.value === '') { + return; + } + + let newBeginTime = this._formatTimeForParsing(this._beginTime.value, this._beginTime.dataset['format']); + if (newBeginTime !== this._beginTime.value) { + this._beginTime.value = newBeginTime; + this._changedBegin(); + } + } + + _parseEndTime() + { + if (this._endTime.value === '') { + return; + } + + let newEndTime = this._formatTimeForParsing(this._endTime.value, this._endTime.dataset['format']); + if (newEndTime !== this._endTime.value) { + this._endTime.value = newEndTime; + this._changedEnd(); + } + } + + _parseDuration() + { + if (this._duration.value === '') { + return; + } + + this._setDurationAsString(this._getParsedDuration()); + } + + /** + * Receives a time, written by a human, probably in an invalid format. + * This method supports 12-hour or 24-hour format, the format string contains an uppercase "A" in case of the 12-hour format. + * If it is 12-hour format, then always en-US locallized with AM/PM. + * + * Ruleset: + * - Some locales use a dot instead of a colon, always replace the dot in HH.mm with a colon as in HH:mm + * - If there is an "am" or "pm", always uppercase them + * - Split the string into time and prefix: if AM/PM is included remove it and remember for later + * - If the time is a 1 or 2 character long number: use as hours + * - If the time now is 3 character long: use the 1 char as hour and the 2 and 3 char as minute + * - If the time now is 4 character long: use the 1 and 2 char as hour and the 3 and 4 char as minutes + * - If the format is 12-hour: try to identify the correct time and suffix + * - If the format is 12-hour and misses the AM/PM: try to detect whether it + * - If the time contains AM or PM, make sure that it is always prefixed by a space character + * + * @param {string} time + * @param {string} format + * @returns {string} + * @private + */ + _formatTimeForParsing(time, format) + { + let formatted = time.trim(); + + // replace invalid separators with colon + formatted = formatted.replace(/\.|;|,/g, ':'); + // uppercase 12-hour format + formatted = formatted.replace(/am/i, 'AM'); + formatted = formatted.replace(/pm/i, 'PM'); + + // Split time and AM/PM suffix if present + let suffix = ''; + let hour = 0; + let minute = 0; + + let timePart = formatted; + const ampmMatch = formatted.match(/\s*(AM|PM)$/i); + if (ampmMatch) { + suffix = ampmMatch[1].toUpperCase(); + timePart = formatted.replace(/\s*(AM|PM)$/i, '').trim(); + } + + if (timePart.indexOf(':') !== -1) { + const match = timePart.match(/(?:(\d+):)?(\d+)/); + hour = parseInt(match?.[1] || 0, 10); + minute = parseInt(match?.[2] || 0, 10); + } else { + timePart = timePart.replace(/:/, ''); + + if (/^\d{1,2}$/.test(timePart)) { + hour = timePart; + } + + if (/^\d{3}$/.test(timePart)) { + hour = timePart.slice(0, 1); + minute = timePart.slice(1); + } + + if (/^\d{4}$/.test(timePart)) { + hour = timePart.slice(0, 2); + minute = timePart.slice(2); + } + } + + hour = parseInt(hour); + minute = parseInt(minute); + + // just in case a person entered a wrong time like 35 hours + hour = hour % 24; + minute = minute % 60; + + // format is 12-hour + if (format.toUpperCase().indexOf('A') !== -1) { + // time entered in 24-hour: convert to 12-hour format + if (hour > 12 && hour < 24) { + hour = hour - 12; + suffix = 'PM'; + } + + // if the person forgot to add a suffix, calculate it and convert time + if (suffix === '') { + if (hour === 0) { + hour = 12; + suffix = 'AM'; + } else if (hour === 12) { + suffix = 'PM'; + } else { + suffix = 'AM'; + } + } + + if (suffix === 'PM' && hour === 0) { + hour = 12; + } + + } else { + // this is the 34-hour format branch + + // check if the person entered time in 12-hour format and convert it + if (suffix === 'AM' && hour === 12) { + hour = 0; + } else if (suffix === 'PM' && hour !== 12) { + hour = (hour + 12) % 24; + } + + // make sure we have no suffix + suffix = ''; + } + + formatted = hour + ':' + minute.toString().padStart(2, '0'); + if (suffix !== '') { + formatted = formatted + ' ' + suffix.trim(); + } + + return formatted; + } + _isDurationConnected() { if (this._duration === null && this._durationToggle === null) { @@ -287,14 +458,14 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { /** * Ruleset: - * - invalid duration => skip + * - invalid or empty duration => skip * - if begin and end are empty: set begin to now and end to duration * - if begin is empty and end is not empty: set begin to end minus duration * - if begin is not empty and end is empty and duration is > 0 (running records = 0): set end to begin plus duration */ _changedDuration() { - if (!this._isDurationConnected()) { + if (!this._isDurationConnected() || this._duration.value === '') { return; } @@ -315,11 +486,11 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { if (begin === null && end === null) { const newBegin = DateTime.now(); this._applyDateToField(newBegin, this._beginDate, this._beginTime); - this._applyDateToField(newBegin.plus({seconds: seconds}), null, this._endTime); + this._addSecondsToEndDate(newBegin, seconds); } else if (begin === null && end !== null) { this._applyDateToField(end.minus({seconds: seconds}), this._beginDate, this._beginTime); } else if (begin !== null && seconds >= 0) { - this._applyDateToField(begin.plus({seconds: seconds}), null, this._endTime); + this._addSecondsToEndDate(begin, seconds); } } @@ -367,7 +538,23 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { */ _getParsedDuration() { - return this.getDateUtils().parseDuration(this._duration.value.toUpperCase()); + return this.getDateUtils().parseDuration(this._duration.value); + } + + /** + * @param {DateTime} dateTime + * @param {int} seconds + * @private + */ + _addSecondsToEndDate(dateTime, seconds) + { + // if the duration is longer than one day, the end field should be empty + // so kimai can calculate it after submitting the data from start + duration + if (seconds < 86400) { + this._applyDateToField(dateTime.plus({seconds: seconds}), null, this._endTime); + } else { + this._endTime.value = ''; + } } /** @@ -390,4 +577,122 @@ export default class KimaiTimesheetForm extends KimaiFormPlugin { timeField.value = this.getDateUtils().format(timeField.dataset['format'], dateTime); } + /** + * @param {KeyboardEvent} event + * @private + */ + _changeDurationOnKeypress(event) + { + switch (event.key) { + case 'ArrowUp': + case 'ArrowDown': + case 'PageUp': + case 'PageDown': + case 'Home': + case 'End': + this._setDurationAsString(this._getParsedDuration()); + break; + default: + return; // Ignore other keys + } + + this._changeTimeOnKeypress(event, this._duration, 99999, this._durationListener); + } + + /** + * This method helps the user to change a duration field with simple keyboard interaction: + * - Read the current duration from the given timeField input in format HH:MM (no seconds) + * - Change the duration based on the rules below + * - Write the new duration back to the field + * - If the field is empty or invalid it uses 00:00 as start-time + * - Duration cannot exceed maxtime (which is given in minutes) + * - Duration cannot drop below 00:00 + * - Read the position of the cursor and decide whether to increase minutes or hours: if the cursor is in the hour section (before the colon) change hours, if the cursor is in the minute section (after the colon) change minutes + * - It reads the pressed key from the given KeyboardEvent and changes the duration accordingly to the rules below + * + * Rules to apply when a key is pressed: + * - ArrowUp key to increase the duration (either 5 minutes or 1 hour, depending on the cursor position) + * - ArrowDown key to decrease the duration (either 5 minutes or 1 hour, depending on the cursor position) + * - PageUp key to increase the duration by 1 hour + * - PageDown key to decrease the duration by 1 hour + * - Home key to set the duration to 08:00 + * - End key to set the duration to 00:00 + * - all other keys are ignored + * + * @param {KeyboardEvent} event + * @param {HTMLElement} timeField + * @param {int} maxTime + * @param {function} changeCallback + * @private + */ + _changeTimeOnKeypress(event, timeField, maxTime, changeCallback) + { + // Parse current value or default to 00:00 + let value = timeField.value || '00:00'; + let [hours, minutes] = value.split(':').map(Number); + if (isNaN(hours)) { hours = 0; } + if (isNaN(minutes)) { minutes = 0; } + + // Cursor position: before or after colon + const cursorPos = timeField.selectionStart || 0; + const colonPos = value.indexOf(':'); + const inHour = cursorPos <= colonPos; + + // Helper to clamp values + const clamp = (h, m) => { + let total = h * 60 + m; + if (total < 0) { total = 0; } + if (total > maxTime) { total = maxTime; } + h = Math.floor(total / 60); + m = total % 60; + return [h, m]; + }; + + switch (event.key) { + case 'ArrowUp': + if (inHour) { + [hours, minutes] = clamp(hours + 1, minutes); + } else { + [hours, minutes] = clamp(hours, minutes + 5); + } + break; + case 'ArrowDown': + if (inHour) { + [hours, minutes] = clamp(hours - 1, minutes); + } else { + [hours, minutes] = clamp(hours, minutes - 5); + } + break; + case 'PageUp': + [hours, minutes] = clamp(hours + 1, minutes); + event.preventDefault(); + break; + case 'PageDown': + [hours, minutes] = clamp(hours - 1, minutes); + event.preventDefault(); + break; + case 'Home': + // TODO this should use the configured working time for today + hours = 8; + minutes = 0; + event.preventDefault(); + break; + case 'End': + hours = 0; + minutes = 0; + event.preventDefault(); + break; + default: + return; // Ignore other keys + } + + // Format and set value + timeField.value = `${hours}:${minutes.toString().padStart(2, '0')}`; + // trigger update of linked fields + changeCallback(timeField); + // Move cursor to original position if possible + setTimeout(() => { + timeField.setSelectionRange(cursorPos, cursorPos); + }, 0); + } } diff --git a/assets/js/plugins/KimaiDateUtils.js b/assets/js/plugins/KimaiDateUtils.js index f80d8d6c9..8ee810fb6 100644 --- a/assets/js/plugins/KimaiDateUtils.js +++ b/assets/js/plugins/KimaiDateUtils.js @@ -273,7 +273,10 @@ export default class KimaiDateUtils extends KimaiPlugin { let luxonDuration = null; if (duration.indexOf(':') !== -1) { - const [, hours, minutes, seconds] = duration.match(/(\d+):(\d+)(?::(\d+))*/); + const match = duration.match(/(?:(\d+):)?(\d+)(?::(\d+))?/); + const hours = parseInt(match?.[1] || 0, 10); + const minutes = parseInt(match?.[2] || 0, 10); + const seconds = parseInt(match?.[3] || 0, 10); luxonDuration = Duration.fromObject({hours: hours, minutes: minutes, seconds: seconds}); } else if (duration.indexOf('.') !== -1 || duration.indexOf(',') !== -1) { duration = duration.replace(/,/, '.'); diff --git a/assets/js/plugins/KimaiRemoteModal.js b/assets/js/plugins/KimaiRemoteModal.js index c84e8536e..14a603138 100644 --- a/assets/js/plugins/KimaiRemoteModal.js +++ b/assets/js/plugins/KimaiRemoteModal.js @@ -6,12 +6,17 @@ */ /*! - * [KIMAI] KimaiRecentActivities: responsible to reload the users recent activities + * [KIMAI] KimaiRemoteModal: load remote content (without forms) into a modal */ import KimaiPlugin from '../KimaiPlugin'; import { Modal } from 'bootstrap'; +/** + * Use like this: + * Modal + * Modal + */ export default class KimaiRemoteModal extends KimaiPlugin { constructor() @@ -39,38 +44,6 @@ export default class KimaiRemoteModal extends KimaiPlugin { for (let link of document.querySelectorAll(this._selector)) { link.addEventListener('click', this.handle); } - - document.addEventListener('kimai.closeRemoteModal', () => { this._hide(); }); - } - - /** - * @param {HTMLElement} element - * @private - */ - _initElement(element) - { - for (let link of element.querySelectorAll('a.remote-modal-reload')) { - link.addEventListener('click', this.handle); - } - } - - _hide() - { - this._getModal().hide(); - } - - _getModalElement() - { - return document.getElementById('remote_modal'); - } - - /** - * @returns {Modal} - * @private - */ - _getModal() - { - return Modal.getOrCreateInstance(this._getModalElement()); } /** @@ -85,21 +58,33 @@ export default class KimaiRemoteModal extends KimaiPlugin { return; } + let modalSelector = 'remote_modal'; + if (element.dataset['modalId'] !== undefined) { + modalSelector = element.dataset['modalId']; + } + const modalElement = document.getElementById(modalSelector); + if (modalElement === null) { + console.log('Could not find modal with ID: ' + modalSelector); + } + return response.text().then(html => { - const newFormHtml = document.createElement('div'); - newFormHtml.classList.add('modal-body'); - newFormHtml.classList.add('p-0'); - newFormHtml.innerHTML = html; + const modalBody = document.createElement('div'); + modalBody.classList.add('modal-body'); + if (element.dataset['modalClass'] !== undefined) { + modalBody.classList.add(element.dataset['modalClass']); + } + modalBody.innerHTML = html; - this._initElement(newFormHtml); - - const modal = this._getModalElement(); - modal.querySelector('.modal-body').replaceWith(newFormHtml); - if (element.dataset['modalTitle'] !== undefined) { - modal.querySelector('.modal-title').textContent = element.dataset['modalTitle']; + for (let link of modalBody.querySelectorAll('a.remote-modal-reload')) { + link.addEventListener('click', this.handle); } - this._getModal().show(); + modalElement.querySelector('.modal-body').replaceWith(modalBody); + if (element.dataset['modalTitle'] !== undefined) { + modalElement.querySelector('.modal-title').textContent = element.dataset['modalTitle']; + } + + Modal.getOrCreateInstance(modalElement).show(); }); }) .catch((reason) => { diff --git a/assets/js/plugins/KimaiThemeInitializer.js b/assets/js/plugins/KimaiThemeInitializer.js index 26eec33c2..9c934ba15 100644 --- a/assets/js/plugins/KimaiThemeInitializer.js +++ b/assets/js/plugins/KimaiThemeInitializer.js @@ -48,7 +48,7 @@ export default class KimaiThemeInitializer extends KimaiPlugin { } const temp = document.createElement('div'); - temp.innerHTML = '
'; + temp.innerHTML = '
'; this.overlay = temp.firstElementChild; document.querySelector(container).append(this.overlay); }); diff --git a/assets/js/plugins/KimaiUser.js b/assets/js/plugins/KimaiUser.js index b3b7e13b1..f60ea8f4d 100644 --- a/assets/js/plugins/KimaiUser.js +++ b/assets/js/plugins/KimaiUser.js @@ -49,4 +49,11 @@ export default class KimaiUser extends KimaiPlugin { return this.user.superAdmin; } + /** + * @returns {array} + */ + getRoles() { + return this.user.roles; + } + } diff --git a/assets/js/widgets/KimaiCalendar.js b/assets/js/widgets/KimaiCalendar.js index a651aa41d..cf0c66408 100644 --- a/assets/js/widgets/KimaiCalendar.js +++ b/assets/js/widgets/KimaiCalendar.js @@ -49,6 +49,7 @@ import enGbLocale from '@fullcalendar/core/locales/en-gb'; import enUsLocale from '@fullcalendar/core/locales/en-gb'; import KimaiColor from './KimaiColor'; import KimaiContextMenu from "./KimaiContextMenu"; +import { DateTime } from 'luxon'; export default class KimaiCalendar { @@ -72,21 +73,6 @@ export default class KimaiCalendar { /** @type {KimaiAlert} ALERT */ const ALERT = this.kimai.getPlugin('alert'); - let initialView = 'dayGridMonth'; - switch (options['initialView']) { - case 'month': - initialView = 'dayGridMonth'; - break; - case 'agendaWeek': - case 'week': - initialView = 'timeGridWeek'; - break; - case 'agendaDay': - case 'day': - initialView = 'timeGridDay'; - break; - } - // Instead of using "buttonIcons" the theme needs to be adjusted directly // https://fullcalendar.io/docs/buttonIcons BootstrapTheme.prototype.classes = { @@ -119,7 +105,8 @@ export default class KimaiCalendar { esLocale, euLocale, faLocale, fiLocale, frLocale, heLocale, hrLocale, huLocale, itLocale, jaLocale, koLocale, nbLocale, nlLocale, plLocale, ptLocale, ptBrLocale, roLocale, ruLocale, skLocale, svLocale, trLocale, zhLocale, viLocale ], plugins: [ bootstrap5Plugin, dayGridPlugin, timeGridPlugin, googlePlugin, iCalendarPlugin, interactionPlugin ], - initialView: initialView, + initialView: this.toInternalViewName(this.options['initialView']), + initialDate: this.options['initialDate'], // https://fullcalendar.io/docs/theming themeSystem: 'bootstrap5', // https://fullcalendar.io/docs/headerToolbar @@ -154,8 +141,9 @@ export default class KimaiCalendar { slotMinTime: this.options['timeframeBegin'] + ':00', slotMaxTime: this.options['timeframeEnd'] === '23:59' ? '24:00:00' : (this.options['timeframeEnd'] + ':59'), - // auto calculation seems to do the better job, therefor deactivated - //slotLabelInterval: this.options['slotDuration'], + // deactivate for auto calculation, which does a good job. + // but 1h seems to be a "normal distance" for calendar apps (like Google and Apple) + slotLabelInterval: '1:00', // how long should entries look like when they don't have an end defaultTimedEventDuration: this.options['slotDuration'], @@ -171,14 +159,20 @@ export default class KimaiCalendar { // once we can configure working days // hiddenDays: [ 2, 4 ] - // when we support holidays and other full day events - // allDaySlot: false, // dropAccept dayMaxEventRows: true, eventMaxStack: this.options['dayLimit'], dayMaxEvents: this.options['dayLimit'], + // the callbacks "viewDidMount" and "viewWillUnmount" are only called when switching between month and others, not between week and day + datesSet: (dateInfo) => { + document.dispatchEvent(new CustomEvent('kimai.calendar.changeDate', {detail: { + view: this.toExternalViewName(dateInfo.view.type), + date: dateInfo.start.toISOString().split('T')[0], + }})); + }, + views: { dayGrid: { dayMaxEventRows: this.options['dayLimit'] @@ -266,6 +260,12 @@ export default class KimaiCalendar { } }); }, + + // called after all events of one source were set, so this can + // and will be called multiple times before the calendar is initialized + eventsSet: (events) => { + this._renderDayAndWeekSum(this.getCalendar().getCurrentData().viewSpec.type, events); + } }; // ============= DRAG & DROP ============= @@ -528,6 +528,44 @@ export default class KimaiCalendar { return (event.source.id.indexOf('kimai-') === 0); } + /** + * @param {string} viewName + * @returns {string} + */ + toExternalViewName(viewName) { + switch(viewName) { + case 'timeGridDay': + return 'day'; + case 'timeGridWeek': + return 'week'; + case 'dayGridMonth': + default: + return 'month'; + } + } + + /** + * @param {string} viewName + * @returns {string} + */ + toInternalViewName(viewName) { + switch(viewName) { + case 'day': + case 'agendaDay': + case 'timeGridDay': + return 'timeGridDay'; + case 'week': + case 'agendaWeek': + case 'timeGridWeek': + return 'timeGridWeek'; + case 'month': + case 'agendaMonth': + case 'dayGridMonth': + default: + return 'dayGridMonth'; + } + } + /** * @param {string} name * @return {boolean} @@ -687,4 +725,73 @@ export default class KimaiCalendar { }); } -} + /** + * @param {string} view + * @param {EventApi[]} events + * @private + */ + _renderDayAndWeekSum(view, events) { + if (view === 'dayGridMonth') { + // currently we do not display totals in month view + return; + } + + /** @type {KimaiDateUtils} DATES */ + const DATES = this.kimai.getPlugin('date'); + + const durations = {}; + + if (view === 'timeGridWeek') { + // make sure we have an entry for every day of the week, even days without timesheets + document.querySelectorAll(`th.fc-col-header-cell[data-date]`).forEach(cell => { + durations[cell.dataset.date] = 0; + }); + } + + events.forEach(item => { + const start = DateTime.fromJSDate(item.start).toUTC(); + const dateStr = start.toFormat('yyyy-MM-dd'); + + if (!durations[dateStr]) { + durations[dateStr] = 0; + } + + // absences or public holidays are all day + if (item.end !== null) { + const end = DateTime.fromJSDate(item.end).toUTC(); + const duration = end.diff(start, 'hours').as('seconds'); + durations[dateStr] += duration; + } + }); + + const dailyTotals = document.querySelectorAll('.fc-dailytotal'); + dailyTotals.forEach(element => element.remove()); + for (const dateValue in durations) { + const durationValue = durations[dateValue]; + + if (view === 'timeGridWeek') { // this is the week view + const headerCells = document.querySelectorAll(`th.fc-col-header-cell[data-date="${dateValue}"]`); + + headerCells.forEach(cell => { + const newElement = document.createElement('div'); + newElement.classList.add('fc-dailytotal'); + newElement.textContent = DATES.formatSeconds(durationValue); + cell.appendChild(newElement); + }); + } + } + + // this is the day view + if (view === 'timeGridDay') { + const dayEl = document.querySelector('th.fc-day'); + const dayDate = dayEl.dataset.date; + const dayTotal = document.querySelectorAll('.fc-dailytotal'); + dayTotal.forEach(element => element.remove()); + + const newElement = document.createElement('div'); + newElement.classList.add('fc-dailytotal'); + newElement.textContent = DATES.formatSeconds(durations[dayDate]); + dayEl.appendChild(newElement); + } + } +} \ No newline at end of file diff --git a/assets/js/widgets/KimaiPaginatedBoxWidget.js b/assets/js/widgets/KimaiPaginatedBoxWidget.js index 6e5665cf1..1515c032e 100644 --- a/assets/js/widgets/KimaiPaginatedBoxWidget.js +++ b/assets/js/widgets/KimaiPaginatedBoxWidget.js @@ -16,7 +16,6 @@ export default class KimaiPaginatedBoxWidget { constructor(boxId) { this.selector = boxId; const widget = document.querySelector(this.selector); - this.href = widget.dataset['href']; if (widget.dataset['reload'] !== undefined) { this.events = widget.dataset['reload'].split(' '); @@ -93,7 +92,7 @@ export default class KimaiPaginatedBoxWidget { if (node.tagName !== undefined && node.tagName === 'SCRIPT') { const script = document.createElement('script'); script.text = node.innerHTML; - node.parentNode.replaceChild(script, node ); + node.parentNode.replaceChild(script, node); } else { for (const child of node.childNodes) { this._makeScriptExecutable(child); diff --git a/assets/sass/_app-rtl.scss b/assets/sass/_app-rtl.scss index 65726d923..e2927dd80 100644 --- a/assets/sass/_app-rtl.scss +++ b/assets/sass/_app-rtl.scss @@ -5,13 +5,20 @@ * file that was distributed with this source code. */ -$modal-backdrop-opacity: 0.6 !default; +$modal-backdrop-opacity: 0.7 !default; + +@import "~@tabler/core/scss/config"; /* THIS DOES NOT WORK AS EXPECTED, AS TABLER IS NOT REGENERATED HERE. SO WE CANNOT CHANGE VARIABLES, LIKE THE ABOVE... */ @import '~@tabler/core/dist/css/tabler.rtl.css'; +@import '~@tabler/core/dist/css/tabler-themes.rtl.css'; + +@import '~tom-select/dist/scss/tom-select'; +@import '~tom-select/dist/scss/tom-select.bootstrap5'; + @import '~@tabler/core/dist/css/tabler-vendors.rtl.css'; /** @@ -23,21 +30,6 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts/"; @import '~@fortawesome/fontawesome-free/scss/solid'; @import '~@fortawesome/fontawesome-free/scss/brands'; -/** - * We need that, to compile the rest of the file - */ -@import "~bootstrap/scss/functions"; - -@import "~@tabler/core/src/scss/variables"; -@import "~@tabler/core/src/scss/variables-dark"; -@import "~@tabler/core/src/scss/mixins"; - -@import "~bootstrap/scss/variables"; -@import "~bootstrap/scss/variables-dark"; -@import "~bootstrap/scss/maps"; -@import "~bootstrap/scss/mixins"; -@import "~bootstrap/scss/utilities"; - /** * Kimai related stuff */ diff --git a/assets/sass/_app.scss b/assets/sass/_app.scss index b81d47934..876950028 100644 --- a/assets/sass/_app.scss +++ b/assets/sass/_app.scss @@ -5,11 +5,14 @@ * file that was distributed with this source code. */ -$modal-backdrop-opacity: 0.6 !default; +$modal-backdrop-opacity: 0.7 !default; -@import '~@tabler/core/src/scss/tabler'; -@import '~@tabler/core/src/scss/vendor/litepicker'; -@import '~@tabler/core/src/scss/vendor/tom-select'; +@import '~@tabler/core/scss/tabler'; +@import '~@tabler/core/scss/tabler-themes'; +@import '~@tabler/core/scss/vendor/litepicker'; + +@import '~tom-select/dist/scss/tom-select.bootstrap5'; +@import '~@tabler/core/scss/vendor/tom-select'; /** * Everyone needs icons diff --git a/assets/sass/_kimai.scss b/assets/sass/_kimai.scss index 817f4f307..121c8b3af 100644 --- a/assets/sass/_kimai.scss +++ b/assets/sass/_kimai.scss @@ -11,8 +11,7 @@ @import "modal"; @import "progressbar"; @import "avatar"; -@import "theme-dark"; -@import "pages"; +@import "weekly-hours"; @import "tabler-fixes"; @import "help"; @import "chart"; diff --git a/assets/sass/content.scss b/assets/sass/content.scss index e3a571201..9da6e1ca2 100644 --- a/assets/sass/content.scss +++ b/assets/sass/content.scss @@ -93,3 +93,19 @@ table.dataTable thead > tr > th.hw-min { width: 30%; } } + +.markdown { + blockquote { + p { + /* Parsedown wraps content in a

like

*/ + margin: 0; + } + /* Tabler doesn't style blockquotes */ + border-left: 15px var(--tblr-border-style) var(--tblr-border-color); + background-color: var(--tblr-bg-surface-secondary); + } + pre code.hljs { + padding: 0; + background-color: var(--tblr-bg-surface-dark); + } +} \ No newline at end of file diff --git a/assets/sass/forms.scss b/assets/sass/forms.scss index 02b7635cf..0250b52a0 100644 --- a/assets/sass/forms.scss +++ b/assets/sass/forms.scss @@ -55,4 +55,19 @@ fieldset > .mb-3.row:last-child { .form-fieldset-light:last-child { border:none; +} + +.dropdown-item { + .dropdown-action { + visibility: hidden; + opacity: 0.5; + } + &:hover { + .dropdown-action { + visibility: visible; + &:hover { + opacity: 1.0; + } + } + } } \ No newline at end of file diff --git a/assets/sass/loading-spinner.scss b/assets/sass/loading-spinner.scss index d262327c0..cc2a5504b 100644 --- a/assets/sass/loading-spinner.scss +++ b/assets/sass/loading-spinner.scss @@ -12,14 +12,6 @@ width: 100%; height: 100%; z-index: 1021; - background: rgba(255, 255, 255, 0.7); - > .fas { - position: absolute; - top: 50vh; - left: 50vw; - margin-left: -15px; - margin-top: -15px; - color: #000; - font-size: 30px; - } + background-color: var(--tblr-backdrop-bg); + opacity: $modal-backdrop-opacity; } diff --git a/assets/sass/pages.scss b/assets/sass/pages.scss deleted file mode 100644 index 629891b41..000000000 --- a/assets/sass/pages.scss +++ /dev/null @@ -1,39 +0,0 @@ -/* - * This file is part of the Kimai time-tracking app. - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -/* - ----------- This file contains rules that only page to certain pages ----------- - */ - -/* weekly working times AKA quick-entries form */ -section.quick-entry-page { - - #quick_entry_form { - display: none; - } - - /* shrinks the dropdown elements for project and activity to fit into the table, instead of adjusting to the longest option element */ - .ts-wrapper { - display: table; - table-layout: fixed; - } - - /* make the duration field and dropdown smaller */ - #quick_entry_box { - .duration-widget { - .input-group { - min-width: 85px; - } - .btn-duration-preset { - padding: 7px 8px 7px 5px; - } - input { - padding: 7px 3px 7px 7px; - } - } - } -} diff --git a/assets/sass/print.scss b/assets/sass/print.scss index 506e74883..7ab3cc7f0 100644 --- a/assets/sass/print.scss +++ b/assets/sass/print.scss @@ -15,12 +15,11 @@ .content-wrapper { margin: 0!important; } - section.content { - margin: 0; - padding: 0; - } span i.dot { display: none; margin-right: 0!important; } + .float-help { + display: none; + } } diff --git a/assets/sass/selectpicker.scss b/assets/sass/selectpicker.scss index ce2225cea..a48114279 100644 --- a/assets/sass/selectpicker.scss +++ b/assets/sass/selectpicker.scss @@ -1,7 +1,11 @@ -/* bootstrap thead.sticky-top has z-index 1020 and tomselect dropdowns often hide behind that */ +/* +1. bootstrap thead.sticky-top has z-index 1020 and tomselect dropdowns often hide behind that: use 1021 +2. bootstrap modal uses 1055, tomselect with dropdownParent: 'body' (required for use in table.responsive, e.g quick.entry on small devices) needs 1056, so it works in modals +*/ .ts-dropdown { - z-index: 1021; + z-index: 1056; + } /* Tabler defines a min-width of 7rem, what makes many input fields become a two-line field diff --git a/assets/sass/tabler-fixes.scss b/assets/sass/tabler-fixes.scss index 710b748c7..0bbe07da2 100644 --- a/assets/sass/tabler-fixes.scss +++ b/assets/sass/tabler-fixes.scss @@ -17,16 +17,6 @@ fieldset.form-fieldset > legend { --tblr-dropdown-divider-margin-y: .5rem; } -/* fix translucent scroll border (e.g. timesheet modal duration dropdown) - see https://github.com/tabler/tabler/issues/1606 */ -.dropdown-menu { - background-clip: border-box; -} - -/* hide empty fieldset - see https://github.com/tabler/tabler/issues/1650 */ -fieldset:empty { - display: none; -} - :host,:root,[data-bs-theme=light] { /* remove the shadow from all form element groups */ --tblr-box-shadow-input: none; @@ -43,20 +33,19 @@ fieldset:empty { border-style: solid; } -[data-bs-theme=dark] { - /* fixes https://github.com/tabler/tabler/issues/1974 */ - .litepicker .container__days .day-item.is-in-range { - --litepicker-is-in-range-color: var(--tblr-primary-text-emphasis); - } -} - /* fixes contrast of batch-update checkboxes - https://github.com/kimai/kimai/issues/5146 */ -.multiupdater[type=checkbox] -{ +.multiupdater[type=checkbox] { --tblr-border-color-translucent: rgba(4, 32, 69, .2); } /* fixes height for long tags https://github.com/kimai/kimai/issues/5169 */ .tag { --tblr-tag-height: unset; +} + +/* Page title (e.g. Dashboard) does not work properly in navbar, just outside */ +.navbar { + .page-title { + color: var(--tblr-body-color); + } } \ No newline at end of file diff --git a/assets/sass/tables.scss b/assets/sass/tables.scss index c159e1191..1e468d375 100644 --- a/assets/sass/tables.scss +++ b/assets/sass/tables.scss @@ -17,22 +17,18 @@ table.dataTable { position: relative; } - thead .sorting_asc, - thead .sorting_desc { - font-weight: bold; - } - thead .sorting:after, thead .sorting_asc:after, thead .sorting_desc:after { padding-left: 5px; - font-family: 'Font Awesome 6 Free'; + font-family: 'Font Awesome\ 6 Free'; opacity: 0.5; font-size: 12px; + font-weight: 700 } thead .sorting:after { opacity: 0.2; - content: "\f0dc"; /* sort */ + content: "\f0dc"; } thead .sorting_asc:after { content: "\f077"; @@ -42,7 +38,7 @@ table.dataTable { } thead > tr > th { - vertical-align: top; + vertical-align: middle; white-space: nowrap; } @@ -92,7 +88,7 @@ table.dataTable { &.summary td { font-weight: bold; border: 0; - background-color: var(--tblr-bg-surface-secondary); + background-color: var(--tblr-secondary-lt); } th.multiCheckbox { width: 15px; @@ -135,14 +131,6 @@ table.dataTable { } } -/* Quick entry form */ -.form-dataTable { - table.dataTable { - .form-group { - margin-bottom: 0; - } - } -} table.table-hover { tr { diff --git a/assets/sass/theme-dark.scss b/assets/sass/theme-dark.scss deleted file mode 100644 index 0907948bf..000000000 --- a/assets/sass/theme-dark.scss +++ /dev/null @@ -1,42 +0,0 @@ - -@include color-mode(dark, true) { - $dark-font-opacity: 0.6; - - /* - --tblr-body-bg: #1e222b; - --tblr-bg-surface-tertiary: #1e222b; - --tblr-bg-surface: #1e222b; - --tblr-bg-surface-secondary: #17202b; - //--tblr-muted: #d9dcdf; - */ - - .table thead th { - color: inherit; - opacity: $dark-font-opacity; - } - table.dataTable { - thead .sorting:after { - opacity: $dark-font-opacity; - } - } - - .overlay { - background: rgba(0, 0, 0, 0.5); - - > .fas { - color: var(--tblr-white); - } - } - /* Fix tabs pills (e.g. user profile) */ - .nav { - --tblr-nav-link-color: inherit; - opacity: $dark-font-opacity; - } - .datagrid-title { - color: inherit; - opacity: $dark-font-opacity; - } - .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { - color: inherit; - } -} \ No newline at end of file diff --git a/assets/sass/weekly-hours.scss b/assets/sass/weekly-hours.scss new file mode 100644 index 000000000..f874be6c4 --- /dev/null +++ b/assets/sass/weekly-hours.scss @@ -0,0 +1,178 @@ +/* + * This file is part of the Kimai time-tracking app. + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +/* This file contains rules for the "weekly-hours" AKA "quick-entries" form */ + +.quick-entry-page { + + .form-dataTable { + table.dataTable { + .form-group { + margin-bottom: 0; + } + } + } + + #quick_entry_form { + display: none; + } + + .ts-wrapper { + min-height: 36px; + max-height: 36px; + max-width: 150px; + + .ts-control { + white-space: nowrap; + .item { + overflow: hidden; + } + } + } + + .table tbody td:not(.total) { + padding: 3px; + } + + .duration-widget input.duration-input { + min-width: 40px; + } + + /* make the duration field and dropdown smaller */ + #quick_entry_box { + .duration-widget { + .input-group { + max-width: 50px; + min-width: 50px; + } + .btn-duration-preset { + display: none; + min-width: 30px; + } + input.duration-input { + padding: 7px 5px; + max-width: 50px; + border-bottom-right-radius: var(--tblr-border-radius); + border-top-right-radius: var(--tblr-border-radius); + } + } + } + + /* make sure dropdown never hides behind table responsive */ + .dropdown-menu { + z-index: 1056; + } +} + +@media (min-width: 900px) { + .quick-entry-page { + .ts-wrapper { + max-width: 170px; + } + } +} + +@media (min-width: 992px) { + .quick-entry-page { + .ts-wrapper { + max-width: 100px; + } + } +} + +@media (min-width: 1100px) { + .quick-entry-page { + .ts-wrapper { + max-width: 160px; + } + } +} + +@media (min-width: 1200px) { + .quick-entry-page { + .ts-wrapper { + max-width: 165px; + } + .duration-widget { + max-width: 100%; + } + } +} + +@media (min-width: 1250px) { + .quick-entry-page { + #quick_entry_box { + .duration-widget { + .input-group { + max-width: 85px; + min-width: 75px; + } + .btn-duration-preset { + display: flex; + } + input.duration-input { + border-bottom-right-radius: 0; + border-top-right-radius: 0; + } + } + } + } +} + +@media (min-width: 1300px) { + .quick-entry-page { + #quick_entry_box { + .duration-widget { + input.duration-input { + max-width: 100%; + } + } + } + .ts-wrapper { + max-width: 190px; + } + } +} + +@media (min-width: 1400px) { + .quick-entry-page { + .ts-wrapper { + max-width: 235px; + } + } +} + +@media (min-width: 1500px) { + .quick-entry-page { + .ts-wrapper { + max-width: 290px; + } + } +} + +@media (min-width: 1600px) { + .quick-entry-page { + .ts-wrapper { + max-width: 340px; + } + } +} + +@media (min-width: 1800px) { + .quick-entry-page { + .ts-wrapper { + max-width: 450px; + } + #quick_entry_box { + .duration-widget { + .input-group { + max-width: 100%; + } + } + } + } +} diff --git a/composer.json b/composer.json index 995389312..1aca19c6a 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ } ], "require": { - "php": "8.1.*||8.2.*||8.3.*||8.4.*", + "php": "8.1.*||8.2.*||8.3.*||8.4.*||8.5.*", "ext-gd": "*", "ext-intl": "*", "ext-json": "*", @@ -30,15 +30,18 @@ "doctrine/doctrine-bundle": "^2.7", "doctrine/doctrine-migrations-bundle": "^3.3", "doctrine/orm": "^2.8", + "easybill/zugferd-php": "^2.1", "endroid/qr-code": "^4.8", "erusev/parsedown": "^1.6", "friendsofsymfony/rest-bundle": "^3.0", "gedmo/doctrine-extensions": "^3.6", + "horstoeko/zugferd": "^1.0", + "horstoeko/zugferdublbridge": "^1.0", "jms/serializer-bundle": "^5.0", - "kevinpapst/tabler-bundle": "^1.4", + "kevinpapst/tabler-bundle": "^2.0", "league/csv": "^9.4", "mpdf/mpdf": "^8.0", - "nelmio/api-doc-bundle": "^4.0", + "nelmio/api-doc-bundle": "^5.0", "nelmio/cors-bundle": "^2.0", "onelogin/php-saml": "^4.0", "openspout/openspout": "^4.0", diff --git a/composer.lock b/composer.lock index 7fba77aad..aa1268831 100644 --- a/composer.lock +++ b/composer.lock @@ -4,34 +4,34 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "41bb07bb455c3336e8da2e906c33d08f", + "content-hash": "4f02c81fc72ab3bd887f6e8cf1361757", "packages": [ { "name": "azuyalabs/yasumi", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/azuyalabs/yasumi.git", - "reference": "37d1215d4f4012d3185bb9990c76ca17a4ff1c30" + "reference": "cc07874da062070fdc201a4297a7724f7d6aafb2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/azuyalabs/yasumi/zipball/37d1215d4f4012d3185bb9990c76ca17a4ff1c30", - "reference": "37d1215d4f4012d3185bb9990c76ca17a4ff1c30", + "url": "https://api.github.com/repos/azuyalabs/yasumi/zipball/cc07874da062070fdc201a4297a7724f7d6aafb2", + "reference": "cc07874da062070fdc201a4297a7724f7d6aafb2", "shasum": "" }, "require": { "ext-json": "*", - "php": ">=8.0" + "php": ">=8.1" }, "require-dev": { + "azuyalabs/php-cs-fixer-config": "^0.3", "ext-intl": "*", - "friendsofphp/php-cs-fixer": "^2.19 || ^3.40", "mikey179/vfsstream": "^1.6", - "phan/phan": "^5.4", - "phpstan/phpstan": "^1.10", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-deprecation-rules": "^2.0", "phpunit/phpunit": "^8.5 || ^9.6", - "vimeo/psalm": "^5.16" + "vimeo/psalm": "^6.12" }, "suggest": { "ext-calendar": "For calculating the date of Easter" @@ -50,10 +50,11 @@ { "name": "Sacha Telgenhof", "email": "me@sachatelgenhof.com", + "homepage": "https://www.sachatelgenhof.com", "role": "Maintainer" } ], - "description": "The easy PHP Library for calculating holidays.", + "description": "The easy PHP Library for calculating holidays", "homepage": "https://www.yasumi.dev", "keywords": [ "Bank", @@ -77,7 +78,7 @@ "type": "other" } ], - "time": "2024-01-07T14:12:44+00:00" + "time": "2025-07-13T15:40:05+00:00" }, { "name": "bacon/bacon-qr-code", @@ -133,55 +134,6 @@ }, "time": "2022-12-07T17:46:57+00:00" }, - { - "name": "behat/transliterator", - "version": "v1.5.0", - "source": { - "type": "git", - "url": "https://github.com/Behat/Transliterator.git", - "reference": "baac5873bac3749887d28ab68e2f74db3a4408af" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Behat/Transliterator/zipball/baac5873bac3749887d28ab68e2f74db3a4408af", - "reference": "baac5873bac3749887d28ab68e2f74db3a4408af", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "chuyskywalker/rolling-curl": "^3.1", - "php-yaoi/php-yaoi": "^1.0", - "phpunit/phpunit": "^8.5.25 || ^9.5.19" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Behat\\Transliterator\\": "src/Behat/Transliterator" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Artistic-1.0" - ], - "description": "String transliterator", - "keywords": [ - "i18n", - "slug", - "transliterator" - ], - "support": { - "issues": "https://github.com/Behat/Transliterator/issues", - "source": "https://github.com/Behat/Transliterator/tree/v1.5.0" - }, - "time": "2022-03-30T09:27:43+00:00" - }, { "name": "composer/pcre", "version": "3.3.2", @@ -263,16 +215,16 @@ }, { "name": "composer/semver", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "url": "https://api.github.com/repos/composer/semver/zipball/198166618906cb2de69b95d7d47e5fa8aa1b2b95", + "reference": "198166618906cb2de69b95d7d47e5fa8aa1b2b95", "shasum": "" }, "require": { @@ -324,7 +276,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" + "source": "https://github.com/composer/semver/tree/3.4.4" }, "funding": [ { @@ -334,26 +286,22 @@ { "url": "https://github.com/composer", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" } ], - "time": "2024-09-19T14:15:21+00:00" + "time": "2025-08-20T19:15:30+00:00" }, { "name": "dasprid/enum", - "version": "1.0.6", + "version": "1.0.7", "source": { "type": "git", "url": "https://github.com/DASPRiD/Enum.git", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90" + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/8dfd07c6d2cf31c8da90c53b83c026c7696dda90", - "reference": "8dfd07c6d2cf31c8da90c53b83c026c7696dda90", + "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/b5874fa9ed0043116c72162ec7f4fb50e02e7cce", + "reference": "b5874fa9ed0043116c72162ec7f4fb50e02e7cce", "shasum": "" }, "require": { @@ -388,9 +336,9 @@ ], "support": { "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.6" + "source": "https://github.com/DASPRiD/Enum/tree/1.0.7" }, - "time": "2024-08-09T14:30:48+00:00" + "time": "2025-09-16T12:23:56+00:00" }, { "name": "doctrine/cache", @@ -483,33 +431,34 @@ "type": "tidelift" } ], + "abandoned": true, "time": "2022-05-20T20:07:39+00:00" }, { "name": "doctrine/collections", - "version": "2.2.2", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/doctrine/collections.git", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" + "reference": "9acfeea2e8666536edff3d77c531261c63680160" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", + "url": "https://api.github.com/repos/doctrine/collections/zipball/9acfeea2e8666536edff3d77c531261c63680160", + "reference": "9acfeea2e8666536edff3d77c531261c63680160", "shasum": "" }, "require": { "doctrine/deprecations": "^1", - "php": "^8.1" + "php": "^8.1", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "ext-json": "*", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.11" + "phpstan/phpstan": "^2.1.30", + "phpstan/phpstan-phpunit": "^2.0.7", + "phpunit/phpunit": "^10.5.58 || ^11.5.42 || ^12.4" }, "type": "library", "autoload": { @@ -553,7 +502,7 @@ ], "support": { "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.2.2" + "source": "https://github.com/doctrine/collections/tree/2.4.0" }, "funding": [ { @@ -569,7 +518,7 @@ "type": "tidelift" } ], - "time": "2024-04-18T06:56:21+00:00" + "time": "2025-10-25T09:18:13+00:00" }, { "name": "doctrine/common", @@ -664,38 +613,41 @@ }, { "name": "doctrine/dbal", - "version": "3.9.4", + "version": "3.10.4", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" + "reference": "63a46cb5aa6f60991186cc98c1d1b50c09311868" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/63a46cb5aa6f60991186cc98c1d1b50c09311868", + "reference": "63a46cb5aa6f60991186cc98c1d1b50c09311868", "shasum": "" }, "require": { "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", "doctrine/deprecations": "^0.5.3|^1", "doctrine/event-manager": "^1|^2", "php": "^7.4 || ^8.0", "psr/cache": "^1|^2|^3", "psr/log": "^1|^2|^3" }, + "conflict": { + "doctrine/cache": "< 1.11" + }, "require-dev": { - "doctrine/coding-standard": "12.0.0", + "doctrine/cache": "^1.11|^2.0", + "doctrine/coding-standard": "14.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.1", + "phpstan/phpstan": "2.1.30", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.22", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0" + "phpunit/phpunit": "9.6.29", + "slevomat/coding-standard": "8.24.0", + "squizlabs/php_codesniffer": "4.0.0", + "symfony/cache": "^5.4|^6.0|^7.0|^8.0", + "symfony/console": "^4.4|^5.4|^6.0|^7.0|^8.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -755,7 +707,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.4" + "source": "https://github.com/doctrine/dbal/tree/3.10.4" }, "funding": [ { @@ -771,30 +723,33 @@ "type": "tidelift" } ], - "time": "2025-01-16T08:28:55+00:00" + "time": "2025-11-29T10:46:08+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "1.4.10 || 2.0.3", + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", "psr/log": "^1 || ^2 || ^3" }, "suggest": { @@ -814,68 +769,69 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.4" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2024-12-07T21:18:45+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/doctrine-bundle", - "version": "2.13.2", + "version": "2.18.2", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "2363c43d9815a11657e452625cd64172d5587486" + "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/2363c43d9815a11657e452625cd64172d5587486", - "reference": "2363c43d9815a11657e452625cd64172d5587486", + "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/0ff098b29b8b3c68307c8987dcaed7fd829c6546", + "reference": "0ff098b29b8b3c68307c8987dcaed7fd829c6546", "shasum": "" }, "require": { - "doctrine/cache": "^1.11 || ^2.0", "doctrine/dbal": "^3.7.0 || ^4.0", - "doctrine/persistence": "^2.2 || ^3", + "doctrine/deprecations": "^1.0", + "doctrine/persistence": "^3.1 || ^4", "doctrine/sql-formatter": "^1.0.1", - "php": "^7.4 || ^8.0", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.46 || ~6.3.12 || ^6.4.3 || ^7.0.3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" + "php": "^8.1", + "symfony/cache": "^6.4 || ^7.0", + "symfony/config": "^6.4 || ^7.0", + "symfony/console": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/doctrine-bridge": "^6.4.3 || ^7.0.3", + "symfony/framework-bundle": "^6.4 || ^7.0", + "symfony/service-contracts": "^2.5 || ^3" }, "conflict": { "doctrine/annotations": ">=3.0", + "doctrine/cache": "< 1.11", "doctrine/orm": "<2.17 || >=4.0", - "twig/twig": "<1.34 || >=2.0 <2.4" + "symfony/var-exporter": "< 6.4.1 || 7.0.0", + "twig/twig": "<2.13 || >=3.0 <3.0.4" }, "require-dev": { "doctrine/annotations": "^1 || ^2", - "doctrine/coding-standard": "^12", - "doctrine/deprecations": "^1.0", - "doctrine/orm": "^2.17 || ^3.0", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^14", + "doctrine/orm": "^2.17 || ^3.1", "friendsofphp/proxy-manager-lts": "^1.0", "phpstan/phpstan": "2.1.1", "phpstan/phpstan-phpunit": "2.0.3", "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "^9.5.26", + "phpunit/phpunit": "^10.5.53 || ^12.3.10", "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^6.1 || ^7.0", - "symfony/property-info": "^5.4 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^5.4 || ^6.0", - "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/string": "^5.4 || ^6.0 || ^7.0", - "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", - "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0", - "twig/twig": "^1.34 || ^2.12 || ^3.0" + "symfony/doctrine-messenger": "^6.4 || ^7.0", + "symfony/expression-language": "^6.4 || ^7.0", + "symfony/messenger": "^6.4 || ^7.0", + "symfony/property-info": "^6.4 || ^7.0", + "symfony/security-bundle": "^6.4 || ^7.0", + "symfony/stopwatch": "^6.4 || ^7.0", + "symfony/string": "^6.4 || ^7.0", + "symfony/twig-bridge": "^6.4 || ^7.0", + "symfony/validator": "^6.4 || ^7.0", + "symfony/var-exporter": "^6.4.1 || ^7.0.1", + "symfony/web-profiler-bundle": "^6.4 || ^7.0", + "symfony/yaml": "^6.4 || ^7.0", + "twig/twig": "^2.14.7 || ^3.0.4" }, "suggest": { "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", @@ -920,7 +876,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.2" + "source": "https://github.com/doctrine/DoctrineBundle/tree/2.18.2" }, "funding": [ { @@ -936,42 +892,41 @@ "type": "tidelift" } ], - "time": "2025-01-15T11:12:38+00:00" + "time": "2025-12-20T21:35:32+00:00" }, { "name": "doctrine/doctrine-migrations-bundle", - "version": "3.4.1", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "e858ce0f5c12b266dce7dce24834448355155da7" + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/e858ce0f5c12b266dce7dce24834448355155da7", - "reference": "e858ce0f5c12b266dce7dce24834448355155da7", + "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/1e380c6dd8ac8488217f39cff6b77e367f1a644b", + "reference": "1e380c6dd8ac8488217f39cff6b77e367f1a644b", "shasum": "" }, "require": { - "doctrine/doctrine-bundle": "^2.4", + "doctrine/doctrine-bundle": "^2.4 || ^3.0", "doctrine/migrations": "^3.2", "php": "^7.2 || ^8.0", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "composer/semver": "^3.0", - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^12 || ^14", "doctrine/orm": "^2.6 || ^3", - "doctrine/persistence": "^2.0 || ^3", "phpstan/phpstan": "^1.4 || ^2", "phpstan/phpstan-deprecation-rules": "^1 || ^2", "phpstan/phpstan-phpunit": "^1 || ^2", "phpstan/phpstan-strict-rules": "^1.1 || ^2", "phpstan/phpstan-symfony": "^1.3 || ^2", "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/phpunit-bridge": "^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6 || ^7" + "symfony/phpunit-bridge": "^6.3 || ^7 || ^8", + "symfony/var-exporter": "^5.4 || ^6 || ^7 || ^8" }, "type": "symfony-bundle", "autoload": { @@ -1006,7 +961,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.4.1" + "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.7.0" }, "funding": [ { @@ -1022,7 +977,7 @@ "type": "tidelift" } ], - "time": "2025-01-27T22:48:22+00:00" + "time": "2025-11-15T19:02:59+00:00" }, { "name": "doctrine/event-manager", @@ -1117,33 +1072,32 @@ }, { "name": "doctrine/inflector", - "version": "2.0.10", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -1188,7 +1142,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" + "source": "https://github.com/doctrine/inflector/tree/2.1.0" }, "funding": [ { @@ -1204,7 +1158,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/instantiator", @@ -1355,16 +1309,16 @@ }, { "name": "doctrine/migrations", - "version": "3.8.2", + "version": "3.9.5", "source": { "type": "git", "url": "https://github.com/doctrine/migrations.git", - "reference": "5007eb1168691225ac305fe16856755c20860842" + "reference": "1b823afbc40f932dae8272574faee53f2755eac5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/5007eb1168691225ac305fe16856755c20860842", - "reference": "5007eb1168691225ac305fe16856755c20860842", + "url": "https://api.github.com/repos/doctrine/migrations/zipball/1b823afbc40f932dae8272574faee53f2755eac5", + "reference": "1b823afbc40f932dae8272574faee53f2755eac5", "shasum": "" }, "require": { @@ -1374,29 +1328,29 @@ "doctrine/event-manager": "^1.2 || ^2.0", "php": "^8.1", "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.2 || ^7.0" + "symfony/console": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/var-exporter": "^6.2 || ^7.0 || ^8.0" }, "conflict": { "doctrine/orm": "<2.12 || >=4" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "doctrine/orm": "^2.13 || ^3", - "doctrine/persistence": "^2 || ^3", + "doctrine/persistence": "^2 || ^3 || ^4", "doctrine/sql-formatter": "^1.0", "ext-pdo_sqlite": "*", "fig/log-test": "^1", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpstan/phpstan-strict-rules": "^1.4", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^10.3", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-phpunit": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpstan/phpstan-symfony": "^2", + "phpunit/phpunit": "^10.3 || ^11.0 || ^12.0", + "symfony/cache": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/process": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", @@ -1438,7 +1392,7 @@ ], "support": { "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.2" + "source": "https://github.com/doctrine/migrations/tree/3.9.5" }, "funding": [ { @@ -1454,20 +1408,20 @@ "type": "tidelift" } ], - "time": "2024-10-10T21:35:27+00:00" + "time": "2025-11-20T11:15:36+00:00" }, { "name": "doctrine/orm", - "version": "2.20.2", + "version": "2.20.9", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "19912de9270fa6abb3d25a1a37784af6b818d534" + "reference": "87f1ba74e04c8694ca00099f3c64706ebac0b114" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/19912de9270fa6abb3d25a1a37784af6b818d534", - "reference": "19912de9270fa6abb3d25a1a37784af6b818d534", + "url": "https://api.github.com/repos/doctrine/orm/zipball/87f1ba74e04c8694ca00099f3c64706ebac0b114", + "reference": "87f1ba74e04c8694ca00099f3c64706ebac0b114", "shasum": "" }, "require": { @@ -1485,7 +1439,7 @@ "ext-ctype": "*", "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0", + "symfony/console": "^4.2 || ^5.0 || ^6.0 || ^7.0 || ^8.0", "symfony/polyfill-php72": "^1.23", "symfony/polyfill-php80": "^1.16" }, @@ -1494,17 +1448,16 @@ }, "require-dev": { "doctrine/annotations": "^1.13 || ^2", - "doctrine/coding-standard": "^9.0.2 || ^12.0", + "doctrine/coding-standard": "^9.0.2 || ^14.0", "phpbench/phpbench": "^0.16.10 || ^1.0", "phpstan/extension-installer": "~1.1.0 || ^1.4", - "phpstan/phpstan": "~1.4.10 || 2.0.3", + "phpstan/phpstan": "~1.4.10 || 2.1.23", "phpstan/phpstan-deprecation-rules": "^1 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", - "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1554,22 +1507,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.20.2" + "source": "https://github.com/doctrine/orm/tree/2.20.9" }, - "time": "2025-02-04T19:17:01+00:00" + "time": "2025-11-29T14:03:56+00:00" }, { "name": "doctrine/persistence", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff" + "reference": "d59e6ef7caffe6a30f4b6f9e9079a75f52c64ae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/0ea965320cec355dba75031c1b23d4c78362e3ff", - "reference": "0ea965320cec355dba75031c1b23d4c78362e3ff", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/d59e6ef7caffe6a30f4b6f9e9079a75f52c64ae0", + "reference": "d59e6ef7caffe6a30f4b6f9e9079a75f52c64ae0", "shasum": "" }, "require": { @@ -1581,11 +1534,11 @@ "doctrine/common": "<2.10" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^12 || ^14", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.12.7", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", + "phpstan/phpstan": "^1 || 2.1.30", + "phpstan/phpstan-phpunit": "^1 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", "phpunit/phpunit": "^8.5.38 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0 || ^7.0" }, @@ -1636,7 +1589,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.4.0" + "source": "https://github.com/doctrine/persistence/tree/3.4.3" }, "funding": [ { @@ -1652,30 +1605,30 @@ "type": "tidelift" } ], - "time": "2024-10-30T19:48:12+00:00" + "time": "2025-10-21T15:21:39+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.5.2", + "version": "1.5.3", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8" + "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d6d00aba6fd2957fe5216fe2b7673e9985db20c8", - "reference": "d6d00aba6fd2957fe5216fe2b7673e9985db20c8", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/a8af23a8e9d622505baa2997465782cbe8bb7fc7", + "reference": "a8af23a8e9d622505baa2997465782cbe8bb7fc7", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^12", - "ergebnis/phpunit-slow-test-detector": "^2.14", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5" + "doctrine/coding-standard": "^14", + "ergebnis/phpunit-slow-test-detector": "^2.20", + "phpstan/phpstan": "^2.1.31", + "phpunit/phpunit": "^10.5.58" }, "bin": [ "bin/sql-formatter" @@ -1705,22 +1658,86 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.5.2" + "source": "https://github.com/doctrine/sql-formatter/tree/1.5.3" }, - "time": "2025-01-24T11:45:48+00:00" + "time": "2025-10-26T09:35:14+00:00" }, { - "name": "egulias/email-validator", - "version": "4.0.3", + "name": "easybill/zugferd-php", + "version": "v2.1.1", "source": { "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b115554301161fa21467629f1e1391c1936de517" + "url": "https://github.com/easybill/zugferd-php.git", + "reference": "376749138f5ecd216b73b5cdd5d4473f2a2d3252" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", - "reference": "b115554301161fa21467629f1e1391c1936de517", + "url": "https://api.github.com/repos/easybill/zugferd-php/zipball/376749138f5ecd216b73b5cdd5d4473f2a2d3252", + "reference": "376749138f5ecd216b73b5cdd5d4473f2a2d3252", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "jms/serializer": "^3.16", + "php": "^8.1" + }, + "require-dev": { + "ext-libxml": "*", + "friendsofphp/php-cs-fixer": "^3.16", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-strict-rules": "^1.5", + "phpunit/phpunit": "^9.3", + "rector/rector": "^1.0", + "symfony/finder": "^5.4" + }, + "suggest": { + "ext-libxml": "Needed for XSD validation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Easybill\\ZUGFeRD\\": "src/zugferd10", + "Easybill\\ZUGFeRD2\\": "src/zugferd2" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Patrick Romowicz", + "email": "patrick@romowicz.de" + }, + { + "name": "Jan Nöhles", + "email": "jan.noehles@easybill.de" + } + ], + "description": "ZUGFeRD PHP SDK (Factur-X, XRechnung) - Convert PHP Objects to XML and back.", + "keywords": [ + "ZUGFeRD", + "factur-x", + "xrechnung" + ], + "support": { + "issues": "https://github.com/easybill/zugferd-php/issues", + "source": "https://github.com/easybill/zugferd-php/tree/v2.1.1" + }, + "time": "2024-11-07T08:28:44+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -1766,7 +1783,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1774,7 +1791,7 @@ "type": "github" } ], - "time": "2024-12-27T00:36:43+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "endroid/qr-code", @@ -2009,20 +2026,19 @@ }, { "name": "gedmo/doctrine-extensions", - "version": "v3.19.0", + "version": "v3.22.0", "source": { "type": "git", "url": "https://github.com/doctrine-extensions/DoctrineExtensions.git", - "reference": "5b0b8a442d19e6701ae64535dc08f7944e2895d2" + "reference": "e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/5b0b8a442d19e6701ae64535dc08f7944e2895d2", - "reference": "5b0b8a442d19e6701ae64535dc08f7944e2895d2", + "url": "https://api.github.com/repos/doctrine-extensions/DoctrineExtensions/zipball/e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57", + "reference": "e4350ee2daa7f34aa5806f2e1ea11fa4b5800e57", "shasum": "" }, "require": { - "behat/transliterator": "^1.2", "doctrine/collections": "^1.2 || ^2.0", "doctrine/deprecations": "^1.0", "doctrine/event-manager": "^1.2 || ^2.0", @@ -2030,9 +2046,11 @@ "php": "^7.4 || ^8.0", "psr/cache": "^1 || ^2 || ^3", "psr/clock": "^1", - "symfony/cache": "^5.4 || ^6.0 || ^7.0" + "symfony/cache": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/string": "^5.4 || ^6.4 || ^7.3 || ^8.0" }, "conflict": { + "behat/transliterator": "<1.2 || >=2.0", "doctrine/annotations": "<1.13 || >=3.0", "doctrine/common": "<2.13 || >=4.0", "doctrine/dbal": "<3.7 || >=5.0", @@ -2040,25 +2058,26 @@ "doctrine/orm": "<2.20 || >=3.0 <3.3 || >=4.0" }, "require-dev": { + "behat/transliterator": "^1.2", "doctrine/annotations": "^1.13 || ^2.0", "doctrine/cache": "^1.11 || ^2.0", "doctrine/common": "^2.13 || ^3.0", "doctrine/dbal": "^3.7 || ^4.0", - "doctrine/doctrine-bundle": "^2.3", + "doctrine/doctrine-bundle": "^2.3 || ^3.0", "doctrine/mongodb-odm": "^2.3", "doctrine/orm": "^2.20 || ^3.3", - "friendsofphp/php-cs-fixer": "^3.70", + "friendsofphp/php-cs-fixer": "^3.89", "nesbot/carbon": "^2.71 || ^3.0", - "phpstan/phpstan": "^2.1.1", + "phpstan/phpstan": "^2.1.31", "phpstan/phpstan-doctrine": "^2.0.1", "phpstan/phpstan-phpunit": "^2.0.3", "phpunit/phpunit": "^9.6", - "rector/rector": "^2.0.6", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/phpunit-bridge": "^6.0 || ^7.0", - "symfony/uid": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "rector/rector": "^2.2.6", + "symfony/console": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/doctrine-bridge": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/phpunit-bridge": "^6.4 || ^7.3 || ^8.0", + "symfony/uid": "^5.4 || ^6.4 || ^7.3 || ^8.0", + "symfony/yaml": "^5.4 || ^6.4 || ^7.3 || ^8.0" }, "suggest": { "doctrine/mongodb-odm": "to use the extensions with the MongoDB ODM", @@ -2113,10 +2132,9 @@ "uploadable" ], "support": { - "email": "gediminas.morkevicius@gmail.com", + "docs": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/main/doc", "issues": "https://github.com/doctrine-extensions/DoctrineExtensions/issues", - "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.19.0", - "wiki": "https://github.com/Atlantic18/DoctrineExtensions/tree/main/doc" + "source": "https://github.com/doctrine-extensions/DoctrineExtensions/tree/v3.22.0" }, "funding": [ { @@ -2136,33 +2154,344 @@ "type": "github" } ], - "time": "2025-02-24T22:12:57+00:00" + "time": "2025-12-13T19:37:35+00:00" }, { - "name": "jms/metadata", - "version": "2.8.0", + "name": "goetas-webservices/xsd2php-runtime", + "version": "v0.2.17", "source": { "type": "git", - "url": "https://github.com/schmittjoh/metadata.git", - "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6" + "url": "https://github.com/goetas-webservices/xsd2php-runtime.git", + "reference": "be15c48cda6adfab82e180a69dfa1937e208cfe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/7ca240dcac0c655eb15933ee55736ccd2ea0d7a6", - "reference": "7ca240dcac0c655eb15933ee55736ccd2ea0d7a6", + "url": "https://api.github.com/repos/goetas-webservices/xsd2php-runtime/zipball/be15c48cda6adfab82e180a69dfa1937e208cfe1", + "reference": "be15c48cda6adfab82e180a69dfa1937e208cfe1", + "shasum": "" + }, + "require": { + "jms/serializer": "^1.2|^2.0|^3.0", + "php": ">=7.1", + "symfony/yaml": "^2.2|^3.0|^4.0|^5.0|^6.0|^7.0" + }, + "conflict": { + "jms/serializer": "1.4.1|1.6.1|1.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.2-dev" + } + }, + "autoload": { + "psr-4": { + "GoetasWebservices\\Xsd\\XsdToPhpRuntime\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Asmir Mustafic" + } + ], + "description": "Convert XSD (XML Schema) definitions into PHP classes", + "keywords": [ + "converter", + "jms", + "php", + "serializer", + "xml", + "xsd" + ], + "support": { + "issues": "https://github.com/goetas-webservices/xsd2php-runtime/issues", + "source": "https://github.com/goetas-webservices/xsd2php-runtime/tree/v0.2.17" + }, + "time": "2024-04-12T22:55:31+00:00" + }, + { + "name": "horstoeko/mimedb", + "version": "v1.0.8", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/mimedb.git", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/mimedb/zipball/2d50f2b6bf63f14741514682869b53fc97232308", + "reference": "2d50f2b6bf63f14741514682869b53fc97232308", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "pdepend/pdepend": "^2", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1.8", + "phpunit/phpunit": "^9", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "type": "package", + "autoload": { + "psr-4": { + "horstoeko\\mimedb\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Erling", + "email": "daniel@erling.com.de", + "role": "lead" + } + ], + "description": "Get mimetypes by fileextensions and visa versa", + "homepage": "https://github.com/horstoeko/mimedb", + "keywords": [ + "file extension", + "mimetype" + ], + "support": { + "issues": "https://github.com/horstoeko/mimedb/issues", + "source": "https://github.com/horstoeko/mimedb/tree/v1.0.8" + }, + "time": "2024-12-03T10:57:28+00:00" + }, + { + "name": "horstoeko/stringmanagement", + "version": "v1.0.12", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/stringmanagement.git", + "reference": "d304a094e34c39d35f275bccf4944176dd8f1722" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/stringmanagement/zipball/d304a094e34c39d35f275bccf4944176dd8f1722", + "reference": "d304a094e34c39d35f275bccf4944176dd8f1722", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "nette/php-generator": "*", + "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "type": "package", + "autoload": { + "psr-4": { + "horstoeko\\stringmanagement\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Erling", + "email": "daniel@erling.com.de", + "role": "lead" + } + ], + "description": "A library for string manipulation utilities", + "homepage": "https://github.com/horstoeko/stringmanagement", + "keywords": [ + "stringmanagement" + ], + "support": { + "issues": "https://github.com/horstoeko/stringmanagement/issues", + "source": "https://github.com/horstoeko/stringmanagement/tree/v1.0.12" + }, + "time": "2025-03-15T09:04:46+00:00" + }, + { + "name": "horstoeko/zugferd", + "version": "v1.0.118", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/zugferd.git", + "reference": "5259a34da6a5e5e92a764e7dd39cd7330335a579" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/5259a34da6a5e5e92a764e7dd39cd7330335a579", + "reference": "5259a34da6a5e5e92a764e7dd39cd7330335a579", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "goetas-webservices/xsd2php-runtime": "^0.2.13", + "horstoeko/mimedb": "^1", + "horstoeko/stringmanagement": "^1", + "jms/serializer": "^3", + "php": ">=7.3", + "setasign/fpdf": "^1", + "setasign/fpdi": "^2", + "smalot/pdfparser": "^0|^2", + "symfony/finder": "^5|^6|^7|^8", + "symfony/process": "^5|^6|^7|^8", + "symfony/validator": "^5|^6|^7|^8", + "symfony/yaml": "^5|^6|^7|^8" + }, + "require-dev": { + "goetas-webservices/xsd2php": "^0", + "nette/php-generator": "*", + "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "type": "package", + "autoload": { + "psr-4": { + "horstoeko\\zugferd\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Erling", + "email": "daniel@erling.com.de", + "role": "lead" + } + ], + "description": "A library for creating and reading european electronic invoices", + "homepage": "https://github.com/horstoeko/zugferd", + "keywords": [ + "ZUGFeRD", + "electronic", + "factur-x", + "invoice", + "xrechnung" + ], + "support": { + "issues": "https://github.com/horstoeko/zugferd/issues", + "source": "https://github.com/horstoeko/zugferd/tree/v1.0.118" + }, + "time": "2025-12-10T06:08:16+00:00" + }, + { + "name": "horstoeko/zugferdublbridge", + "version": "v1.0.16", + "source": { + "type": "git", + "url": "https://github.com/horstoeko/zugferdublbridge.git", + "reference": "db1ba7fdc3e3cf7b5c8b89d03e44dd6c651ffb0e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/horstoeko/zugferdublbridge/zipball/db1ba7fdc3e3cf7b5c8b89d03e44dd6c651ffb0e", + "reference": "db1ba7fdc3e3cf7b5c8b89d03e44dd6c651ffb0e", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "horstoeko/stringmanagement": "^1", + "nette/php-generator": "*", + "pdepend/pdepend": "^2", + "phpdocumentor/reflection-docblock": "^5", + "phploc/phploc": "^7", + "phpmd/phpmd": "^2", + "phpstan/phpstan": "^1|^2", + "phpunit/phpunit": "^9", + "rector/rector": "*", + "sebastian/phpcpd": "^6", + "squizlabs/php_codesniffer": "^3" + }, + "type": "package", + "autoload": { + "psr-4": { + "horstoeko\\zugferdublbridge\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Daniel Erling", + "email": "daniel@erling.com.de", + "role": "lead" + } + ], + "description": "Convert Factur-X/ZUGFeRD (CII-Syntax) to PEPPOL (UBL-Syntax) and visa versa", + "homepage": "https://github.com/horstoeko/zugferdublbridge", + "keywords": [ + "ZUGFeRD", + "cii", + "convert", + "electronic", + "factur-x", + "invoice", + "ubl", + "xrechnung" + ], + "support": { + "issues": "https://github.com/horstoeko/zugferdublbridge/issues", + "source": "https://github.com/horstoeko/zugferdublbridge/tree/v1.0.16" + }, + "time": "2025-12-17T15:18:02+00:00" + }, + { + "name": "jms/metadata", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/metadata.git", + "reference": "554319d2e5f0c5d8ccaeffe755eac924e14da330" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/metadata/zipball/554319d2e5f0c5d8ccaeffe755eac924e14da330", + "reference": "554319d2e5f0c5d8ccaeffe755eac924e14da330", "shasum": "" }, "require": { "php": "^7.2|^8.0" }, "require-dev": { - "doctrine/cache": "^1.0", + "doctrine/cache": "^1.0|^2.0", "doctrine/coding-standard": "^8.0", "mikey179/vfsstream": "^1.6.7", - "phpunit/phpunit": "^8.5|^9.0", + "phpunit/phpunit": "^8.5.42|^9.6.23", "psr/container": "^1.0|^2.0", - "symfony/cache": "^3.1|^4.0|^5.0", - "symfony/dependency-injection": "^3.1|^4.0|^5.0" + "symfony/cache": "^3.1|^4.0|^5.0|^6.0|^7.0|^8.0", + "symfony/dependency-injection": "^3.1|^4.0|^5.0|^6.0|^7.0|^8.0" }, "type": "library", "extra": { @@ -2198,22 +2527,22 @@ ], "support": { "issues": "https://github.com/schmittjoh/metadata/issues", - "source": "https://github.com/schmittjoh/metadata/tree/2.8.0" + "source": "https://github.com/schmittjoh/metadata/tree/2.9.0" }, - "time": "2023-02-15T13:44:18+00:00" + "time": "2025-11-30T20:12:26+00:00" }, { "name": "jms/serializer", - "version": "3.32.3", + "version": "3.32.6", "source": { "type": "git", "url": "https://github.com/schmittjoh/serializer.git", - "reference": "033c9beab9eb708509a3d400e9f0ffeb2d440e71" + "reference": "b02a6c00d8335ef68c163bf7c9e39f396dc5853f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/033c9beab9eb708509a3d400e9f0ffeb2d440e71", - "reference": "033c9beab9eb708509a3d400e9f0ffeb2d440e71", + "url": "https://api.github.com/repos/schmittjoh/serializer/zipball/b02a6c00d8335ef68c163bf7c9e39f396dc5853f", + "reference": "b02a6c00d8335ef68c163bf7c9e39f396dc5853f", "shasum": "" }, "require": { @@ -2236,16 +2565,15 @@ "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^9.0 || ^10.0 || ^11.0", "psr/container": "^1.0 || ^2.0", - "rector/rector": "^1.0.0 || ^2.0@dev", - "slevomat/coding-standard": "dev-master#f2cc4c553eae68772624ffd7dd99022343b69c31 as 8.11.9999", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/expression-language": "^5.4 || ^6.0 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.0 || ^7.0", - "symfony/form": "^5.4 || ^6.0 || ^7.0", - "symfony/translation": "^5.4 || ^6.0 || ^7.0", - "symfony/uid": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0", + "rector/rector": "^1.0.0 || ^2.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/expression-language": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/form": "^5.4.45 || ^6.4.27 || ^7.0 || ^8.0", + "symfony/translation": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/uid": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/validator": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0", "twig/twig": "^1.34 || ^2.4 || ^3.0" }, "suggest": { @@ -2290,52 +2618,56 @@ ], "support": { "issues": "https://github.com/schmittjoh/serializer/issues", - "source": "https://github.com/schmittjoh/serializer/tree/3.32.3" + "source": "https://github.com/schmittjoh/serializer/tree/3.32.6" }, "funding": [ { "url": "https://github.com/goetas", "type": "github" + }, + { + "url": "https://github.com/scyzoryck", + "type": "github" } ], - "time": "2025-02-11T23:16:25+00:00" + "time": "2025-11-28T12:37:32+00:00" }, { "name": "jms/serializer-bundle", - "version": "5.5.1", + "version": "5.5.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/JMSSerializerBundle.git", - "reference": "0538a2bae32a448fdeded53d729308816b5ad2e8" + "reference": "34d01be85521e99ca29079438002672af35ff9b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/0538a2bae32a448fdeded53d729308816b5ad2e8", - "reference": "0538a2bae32a448fdeded53d729308816b5ad2e8", + "url": "https://api.github.com/repos/schmittjoh/JMSSerializerBundle/zipball/34d01be85521e99ca29079438002672af35ff9b0", + "reference": "34d01be85521e99ca29079438002672af35ff9b0", "shasum": "" }, "require": { "jms/metadata": "^2.6", "jms/serializer": "^3.31", "php": "^7.4 || ^8.0", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + "symfony/config": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "doctrine/annotations": "^1.14 || ^2.0", "doctrine/coding-standard": "^12.0", - "doctrine/orm": "^2.14", + "doctrine/orm": "^2.14 || ^3.0", "phpunit/phpunit": "^8.0 || ^9.0", - "symfony/expression-language": "^5.4 || ^6.0 || ^7.0", - "symfony/finder": "^5.4 || ^6.0 || ^7.0", - "symfony/form": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", + "symfony/expression-language": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/finder": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/form": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0 || ^8.0", "symfony/templating": "^5.4 || ^6.0", - "symfony/twig-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/uid": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "symfony/twig-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/uid": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/validator": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "suggest": { "symfony/expression-language": "Required for opcache preloading ^5.4 || ^6.0 || ^7.0", @@ -2379,7 +2711,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/JMSSerializerBundle/issues", - "source": "https://github.com/schmittjoh/JMSSerializerBundle/tree/5.5.1" + "source": "https://github.com/schmittjoh/JMSSerializerBundle/tree/5.5.2" }, "funding": [ { @@ -2387,34 +2719,34 @@ "type": "github" } ], - "time": "2024-11-06T12:45:22+00:00" + "time": "2025-11-25T21:41:31+00:00" }, { "name": "kevinpapst/tabler-bundle", - "version": "1.7.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/kevinpapst/TablerBundle.git", - "reference": "39b5e2946c0d4fea5ad05be9b1cdad686d7035b3" + "reference": "6a3942ea16c97e8163bf20b9a24f4263ce6d8bd7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/kevinpapst/TablerBundle/zipball/39b5e2946c0d4fea5ad05be9b1cdad686d7035b3", - "reference": "39b5e2946c0d4fea5ad05be9b1cdad686d7035b3", + "url": "https://api.github.com/repos/kevinpapst/TablerBundle/zipball/6a3942ea16c97e8163bf20b9a24f4263ce6d8bd7", + "reference": "6a3942ea16c97e8163bf20b9a24f4263ce6d8bd7", "shasum": "" }, "require": { "php": "^8.1", - "symfony/asset": "^6.0 || ^7.0", - "symfony/config": "^6.0 || ^7.0", - "symfony/dependency-injection": "^6.0 || ^7.0", - "symfony/event-dispatcher": "^6.0 || ^7.0", - "symfony/http-foundation": "^6.0 || ^7.0", - "symfony/http-kernel": "^6.0 || ^7.0", - "symfony/options-resolver": "^6.0 || ^7.0", - "symfony/security-core": "^6.0 || ^7.0", - "symfony/translation": "^6.0 || ^7.0", - "symfony/twig-bridge": "^6.0 || ^7.0", + "symfony/asset": "^6.0 || ^7.0 || ^8.0", + "symfony/config": "^6.0 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^6.0 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^6.0 || ^7.0 || ^8.0", + "symfony/http-foundation": "^6.0 || ^7.0 || ^8.0", + "symfony/http-kernel": "^6.0 || ^7.0 || ^8.0", + "symfony/options-resolver": "^6.0 || ^7.0 || ^8.0", + "symfony/security-core": "^6.0 || ^7.0 || ^8.0", + "symfony/translation": "^6.0 || ^7.0 || ^8.0", + "symfony/twig-bridge": "^6.0 || ^7.0 || ^8.0", "twig/twig": "^3.0" }, "require-dev": { @@ -2426,7 +2758,7 @@ "phpstan/phpstan-strict-rules": "^2.0", "phpstan/phpstan-symfony": "^2.0", "phpunit/phpunit": "^9.0", - "symfony/framework-bundle": "^6.0 || ^7.0" + "symfony/framework-bundle": "^6.0 || ^7.0 || ^8.0" }, "suggest": { "knplabs/knp-menu-bundle": "Allows easy menu integration" @@ -2450,7 +2782,7 @@ "description": "Admin/Backend theme bundle for Symfony based on Tabler.io", "support": { "issues": "https://github.com/kevinpapst/TablerBundle/issues", - "source": "https://github.com/kevinpapst/TablerBundle/tree/1.7.0" + "source": "https://github.com/kevinpapst/TablerBundle/tree/2.0.2" }, "funding": [ { @@ -2462,20 +2794,20 @@ "type": "github" } ], - "time": "2025-02-13T08:14:16+00:00" + "time": "2025-12-19T17:20:55+00:00" }, { "name": "league/csv", - "version": "9.21.0", + "version": "9.27.1", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "72196d11ebba22d868954cb39c0c7346207430cc" + "reference": "26de738b8fccf785397d05ee2fc07b6cd8749797" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/72196d11ebba22d868954cb39c0c7346207430cc", - "reference": "72196d11ebba22d868954cb39c0c7346207430cc", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/26de738b8fccf785397d05ee2fc07b6cd8749797", + "reference": "26de738b8fccf785397d05ee2fc07b6cd8749797", "shasum": "" }, "require": { @@ -2485,19 +2817,23 @@ "require-dev": { "ext-dom": "*", "ext-xdebug": "*", - "friendsofphp/php-cs-fixer": "^3.64.0", - "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.12.11", + "friendsofphp/php-cs-fixer": "^3.75.0", + "phpbench/phpbench": "^1.4.1", + "phpstan/phpstan": "^1.12.27", "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.1", - "phpstan/phpstan-strict-rules": "^1.6.1", - "phpunit/phpunit": "^10.5.16 || ^11.4.3", - "symfony/var-dumper": "^6.4.8 || ^7.1.8" + "phpstan/phpstan-phpunit": "^1.4.2", + "phpstan/phpstan-strict-rules": "^1.6.2", + "phpunit/phpunit": "^10.5.16 || ^11.5.22 || ^12.3.6", + "symfony/var-dumper": "^6.4.8 || ^7.3.0" }, "suggest": { "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", "ext-iconv": "Needed to ease transcoding CSV using iconv stream filters", - "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters" + "ext-mbstring": "Needed to ease transcoding CSV using mb stream filters", + "ext-mysqli": "Requiered to use the package with the MySQLi extension", + "ext-pdo": "Required to use the package with the PDO extension", + "ext-pgsql": "Requiered to use the package with the PgSQL extension", + "ext-sqlite3": "Required to use the package with the SQLite3 extension" }, "type": "library", "extra": { @@ -2510,7 +2846,7 @@ "src/functions_include.php" ], "psr-4": { - "League\\Csv\\": "src/" + "League\\Csv\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -2549,7 +2885,7 @@ "type": "github" } ], - "time": "2025-01-08T19:27:58+00:00" + "time": "2025-10-25T08:35:20+00:00" }, { "name": "lorenzo/pinky", @@ -2790,16 +3126,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -2877,7 +3213,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -2889,20 +3225,20 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "mpdf/mpdf", - "version": "v8.2.5", + "version": "v8.2.7", "source": { "type": "git", "url": "https://github.com/mpdf/mpdf.git", - "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f" + "reference": "b59670a09498689c33ce639bac8f5ba26721dab3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/e175b05e3e00977b85feb96a8cccb174ac63621f", - "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f", + "url": "https://api.github.com/repos/mpdf/mpdf/zipball/b59670a09498689c33ce639bac8f5ba26721dab3", + "reference": "b59670a09498689c33ce639bac8f5ba26721dab3", "shasum": "" }, "require": { @@ -2912,7 +3248,7 @@ "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", "myclabs/deep-copy": "^1.7", "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0", "psr/http-message": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", "setasign/fpdi": "^2.1" @@ -2970,7 +3306,7 @@ "type": "custom" } ], - "time": "2024-11-18T15:30:42+00:00" + "time": "2025-12-01T10:18:02+00:00" }, { "name": "mpdf/psr-http-message-shim", @@ -3066,16 +3402,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.13.0", + "version": "1.13.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414" + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { @@ -3114,7 +3450,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" }, "funding": [ { @@ -3122,78 +3458,78 @@ "type": "tidelift" } ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2025-08-01T08:46:24+00:00" }, { "name": "nelmio/api-doc-bundle", - "version": "v4.37.1", + "version": "v5.7.1", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioApiDocBundle.git", - "reference": "1497977f82d396f1dda8120434c6d29f3de683e6" + "reference": "772d26a9d940c9a8d173f75f0fdbaab47c1c87f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/1497977f82d396f1dda8120434c6d29f3de683e6", - "reference": "1497977f82d396f1dda8120434c6d29f3de683e6", + "url": "https://api.github.com/repos/nelmio/NelmioApiDocBundle/zipball/772d26a9d940c9a8d173f75f0fdbaab47c1c87f2", + "reference": "772d26a9d940c9a8d173f75f0fdbaab47c1c87f2", "shasum": "" }, "require": { - "ext-json": "*", - "php": ">=7.4", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0", + "php": ">=8.1", + "phpdocumentor/reflection-docblock": "^5.0", "phpdocumentor/type-resolver": "^1.8.2", "psr/cache": "^1.0 || ^2.0 || ^3.0", "psr/container": "^1.0 || ^2.0", "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/config": "^5.4 || ^6.4 || ^7.1", - "symfony/console": "^5.4 || ^6.4 || ^7.1", - "symfony/dependency-injection": "^5.4 || ^6.4 || ^7.1", + "symfony/config": "^6.4 || ^7.1", + "symfony/console": "^6.4 || ^7.1", + "symfony/dependency-injection": "^6.4 || ^7.1", "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4.24 || ^6.4 || ^7.1", - "symfony/http-foundation": "^5.4 || ^6.4 || ^7.1", - "symfony/http-kernel": "^5.4 || ^6.4 || ^7.1", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.1", - "symfony/property-info": "^5.4.10 || ^6.4 || ^7.1", - "symfony/routing": "^5.4 || ^6.4 || ^7.1", + "symfony/framework-bundle": "^6.4 || ^7.1", + "symfony/http-foundation": "^6.4 || ^7.1", + "symfony/http-kernel": "^6.4 || ^7.1", + "symfony/options-resolver": "^6.4 || ^7.1", + "symfony/property-info": "^6.4 || ^7.1", + "symfony/routing": "^6.4 || ^7.1", "zircote/swagger-php": "^4.11.1 || ^5.0" }, "conflict": { - "zircote/swagger-php": "4.8.7" + "zircote/swagger-php": "4.8.7 || 5.5.0" }, "require-dev": { - "api-platform/core": "^2.7.0 || ^3", - "composer/package-versions-deprecated": "1.11.99.1", - "doctrine/annotations": "^2.0", + "api-platform/core": "^3.2", "friendsofphp/php-cs-fixer": "^3.52", - "friendsofsymfony/rest-bundle": "^2.8 || ^3.0", - "jms/serializer": "^1.14 || ^3.0", - "jms/serializer-bundle": "^2.3 || ^3.0 || ^4.0 || ^5.0", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-phpunit": "^1.3", - "phpstan/phpstan-strict-rules": "^1.5", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^9.6 || ^10.5", - "symfony/asset": "^5.4 || ^6.4 || ^7.1", - "symfony/browser-kit": "^5.4 || ^6.4 || ^7.1", - "symfony/cache": "^5.4 || ^6.4 || ^7.1", - "symfony/dom-crawler": "^5.4 || ^6.4 || ^7.1", - "symfony/expression-language": "^5.4 || ^6.4 || ^7.1", - "symfony/form": "^5.4 || ^6.4 || ^7.1", - "symfony/phpunit-bridge": "^6.4", - "symfony/property-access": "^5.4 || ^6.4 || ^7.1", - "symfony/security-csrf": "^5.4 || ^6.4 || ^7.1", - "symfony/serializer": "^5.4 || ^6.4 || ^7.1", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.1", - "symfony/templating": "^5.4 || ^6.4 || ^7.1", - "symfony/twig-bundle": "^5.4 || ^6.4 || ^7.1", - "symfony/uid": "^5.4 || ^6.4 || ^7.1", - "symfony/validator": "^5.4 || ^6.4 || ^7.1", - "willdurand/hateoas-bundle": "^1.0 || ^2.0" + "friendsofsymfony/rest-bundle": "^3.2.0", + "jms/serializer": "^3.32", + "jms/serializer-bundle": "^5.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpstan/phpstan-symfony": "^2.0", + "phpunit/phpunit": "^10.5", + "symfony/asset": "^6.4 || ^7.1", + "symfony/browser-kit": "^6.4 || ^7.1", + "symfony/cache": "^6.4 || ^7.1", + "symfony/dom-crawler": "^6.4 || ^7.1", + "symfony/expression-language": "^6.4 || ^7.1", + "symfony/finder": "^6.4 || ^7.1", + "symfony/form": "^6.4 || ^7.1", + "symfony/phpunit-bridge": "^6.4 || ^7.1", + "symfony/property-access": "^6.4 || ^7.1", + "symfony/security-csrf": "^6.4 || ^7.1", + "symfony/security-http": "^6.4 || ^7.1", + "symfony/serializer": "^6.4 || ^7.1", + "symfony/stopwatch": "^6.4 || ^7.1", + "symfony/templating": "^6.4 || ^7.1", + "symfony/translation": "^6.4 || ^7.1", + "symfony/twig-bundle": "^6.4 || ^7.1", + "symfony/uid": "^6.4 || ^7.1", + "symfony/validator": "^6.4 || ^7.1", + "willdurand/hateoas-bundle": "^2.7", + "willdurand/negotiation": "^3.0" }, "suggest": { "api-platform/core": "For using an API oriented framework.", - "doctrine/annotations": "For using doctrine annotations", "friendsofsymfony/rest-bundle": "For using the parameters annotations.", "jms/serializer-bundle": "For describing your models.", "symfony/asset": "For using the Swagger UI.", @@ -3209,7 +3545,8 @@ "type": "symfony-bundle", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-4.x": "4.x-dev", + "dev-5.x": "5.x-dev" } }, "autoload": { @@ -3227,7 +3564,7 @@ "homepage": "https://github.com/nelmio/NelmioApiDocBundle/contributors" } ], - "description": "Generates documentation for your REST API from annotations and attributes", + "description": "Generates documentation for your REST API from attributes", "keywords": [ "api", "doc", @@ -3236,7 +3573,7 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioApiDocBundle/issues", - "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v4.37.1" + "source": "https://github.com/nelmio/NelmioApiDocBundle/tree/v5.7.1" }, "funding": [ { @@ -3244,29 +3581,32 @@ "type": "github" } ], - "time": "2025-02-14T12:47:20+00:00" + "time": "2025-11-13T10:32:15+00:00" }, { "name": "nelmio/cors-bundle", - "version": "2.5.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544" + "reference": "530217472204881cacd3671909f634b960c7b948" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/3a526fe025cd20e04a6a11370cf5ab28dbb5a544", - "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/530217472204881cacd3671909f634b960c7b948", + "reference": "530217472204881cacd3671909f634b960c7b948", "shasum": "" }, "require": { "psr/log": "^1.0 || ^2.0 || ^3.0", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { - "mockery/mockery": "^1.3.6", - "symfony/phpunit-bridge": "^5.4 || ^6.0 || ^7.0" + "phpstan/phpstan": "^1.11.5", + "phpstan/phpstan-deprecation-rules": "^1.2.0", + "phpstan/phpstan-phpunit": "^1.4", + "phpstan/phpstan-symfony": "^1.4.4", + "phpunit/phpunit": "^8" }, "type": "symfony-bundle", "extra": { @@ -3304,22 +3644,22 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", - "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.5.0" + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.6.0" }, - "time": "2024-06-24T21:25:28+00:00" + "time": "2025-10-23T06:57:22+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -3338,7 +3678,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -3362,27 +3702,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "onelogin/php-saml", - "version": "4.2.0", + "version": "4.3.1", "source": { "type": "git", "url": "https://github.com/SAML-Toolkits/php-saml.git", - "reference": "d3b5172f137db2f412239432d77253ceaaa1e939" + "reference": "b009f160e4ac11f49366a45e0d45706b48429353" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/SAML-Toolkits/php-saml/zipball/d3b5172f137db2f412239432d77253ceaaa1e939", - "reference": "d3b5172f137db2f412239432d77253ceaaa1e939", + "url": "https://api.github.com/repos/SAML-Toolkits/php-saml/zipball/b009f160e4ac11f49366a45e0d45706b48429353", + "reference": "b009f160e4ac11f49366a45e0d45706b48429353", "shasum": "" }, "require": { "php": ">=7.3", - "robrichards/xmlseclibs": "^3.1" + "robrichards/xmlseclibs": ">=3.1.4" }, "require-dev": { "pdepend/pdepend": "^2.8.0", @@ -3428,7 +3768,7 @@ "type": "github" } ], - "time": "2024-05-30T15:10:40+00:00" + "time": "2025-12-09T10:50:49+00:00" }, { "name": "openspout/openspout", @@ -3628,16 +3968,16 @@ }, { "name": "paragonie/constant_time_encoding", - "version": "v2.7.0", + "version": "v2.8.2", "source": { "type": "git", "url": "https://github.com/paragonie/constant_time_encoding.git", - "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105" + "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/52a0d99e69f56b9ec27ace92ba56897fe6993105", - "reference": "52a0d99e69f56b9ec27ace92ba56897fe6993105", + "url": "https://api.github.com/repos/paragonie/constant_time_encoding/zipball/e30811f7bc69e4b5b6d5783e712c06c8eabf0226", + "reference": "e30811f7bc69e4b5b6d5783e712c06c8eabf0226", "shasum": "" }, "require": { @@ -3691,7 +4031,7 @@ "issues": "https://github.com/paragonie/constant_time_encoding/issues", "source": "https://github.com/paragonie/constant_time_encoding" }, - "time": "2024-05-08T12:18:48+00:00" + "time": "2025-09-24T15:12:37+00:00" }, { "name": "paragonie/random_compat", @@ -3798,16 +4138,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.1", + "version": "5.6.6", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", - "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/5cee1d3dfc2d2aa6599834520911d246f656bcb8", + "reference": "5cee1d3dfc2d2aa6599834520911d246f656bcb8", "shasum": "" }, "require": { @@ -3817,7 +4157,7 @@ "phpdocumentor/reflection-common": "^2.2", "phpdocumentor/type-resolver": "^1.7", "phpstan/phpdoc-parser": "^1.7|^2.0", - "webmozart/assert": "^1.9.1" + "webmozart/assert": "^1.9.1 || ^2" }, "require-dev": { "mockery/mockery": "~1.3.5 || ~1.6.0", @@ -3856,22 +4196,22 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.6" }, - "time": "2024-12-07T09:39:29+00:00" + "time": "2025-12-22T21:13:58+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.10.0", + "version": "1.12.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", - "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/92a98ada2b93d9b201a613cb5a33584dde25f195", + "reference": "92a98ada2b93d9b201a613cb5a33584dde25f195", "shasum": "" }, "require": { @@ -3914,22 +4254,22 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.12.0" }, - "time": "2024-11-09T15:12:26+00:00" + "time": "2025-11-21T15:09:14+00:00" }, { "name": "phpoffice/math", - "version": "0.2.0", + "version": "0.3.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/Math.git", - "reference": "fc2eb6d1a61b058d5dac77197059db30ee3c8329" + "reference": "fc31c8f57a7a81f962cbf389fd89f4d9d06fc99a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/Math/zipball/fc2eb6d1a61b058d5dac77197059db30ee3c8329", - "reference": "fc2eb6d1a61b058d5dac77197059db30ee3c8329", + "url": "https://api.github.com/repos/PHPOffice/Math/zipball/fc31c8f57a7a81f962cbf389fd89f4d9d06fc99a", + "reference": "fc31c8f57a7a81f962cbf389fd89f4d9d06fc99a", "shasum": "" }, "require": { @@ -3966,22 +4306,22 @@ ], "support": { "issues": "https://github.com/PHPOffice/Math/issues", - "source": "https://github.com/PHPOffice/Math/tree/0.2.0" + "source": "https://github.com/PHPOffice/Math/tree/0.3.0" }, - "time": "2024-08-12T07:30:45+00:00" + "time": "2025-05-29T08:31:49+00:00" }, { "name": "phpoffice/phpspreadsheet", - "version": "2.3.8", + "version": "2.4.2", "source": { "type": "git", "url": "https://github.com/PHPOffice/PhpSpreadsheet.git", - "reference": "7a700683743bf1c4a21837c84b266916f1aa7d25" + "reference": "931ad61fb2c229063fc4e7e665fb52b87249cc56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/7a700683743bf1c4a21837c84b266916f1aa7d25", - "reference": "7a700683743bf1c4a21837c84b266916f1aa7d25", + "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/931ad61fb2c229063fc4e7e665fb52b87249cc56", + "reference": "931ad61fb2c229063fc4e7e665fb52b87249cc56", "shasum": "" }, "require": { @@ -4002,7 +4342,7 @@ "maennchen/zipstream-php": "^2.1 || ^3.0", "markbaker/complex": "^3.0", "markbaker/matrix": "^3.0", - "php": "^8.1", + "php": ">=8.1.0 <8.6.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" @@ -4011,7 +4351,7 @@ "dealerdirect/phpcodesniffer-composer-installer": "dev-main", "dompdf/dompdf": "^2.0 || ^3.0", "friendsofphp/php-cs-fixer": "^3.2", - "mitoteam/jpgraph": "^10.3", + "mitoteam/jpgraph": "^10.5", "mpdf/mpdf": "^8.1.1", "phpcompatibility/php-compatibility": "^9.3", "phpstan/phpstan": "^1.1", @@ -4022,7 +4362,7 @@ }, "suggest": { "dompdf/dompdf": "Option for rendering PDF with PDF Writer", - "ext-intl": "PHP Internationalization Functions", + "ext-intl": "PHP Internationalization Functions, required for NumberFormatter Wizard", "mitoteam/jpgraph": "Option for rendering charts, or including charts with PDF or HTML Writers", "mpdf/mpdf": "Option for rendering PDF with PDF Writer", "tecnickcom/tcpdf": "Option for rendering PDF with PDF Writer" @@ -4071,50 +4411,49 @@ ], "support": { "issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues", - "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/2.3.8" + "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/2.4.2" }, - "time": "2025-02-08T03:01:45+00:00" + "time": "2025-11-24T15:59:19+00:00" }, { "name": "phpoffice/phpword", - "version": "1.3.0", + "version": "1.4.0", "source": { "type": "git", "url": "https://github.com/PHPOffice/PHPWord.git", - "reference": "8392134ce4b5dba65130ba956231a1602b848b7f" + "reference": "6d75328229bc93790b37e93741adf70646cea958" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/8392134ce4b5dba65130ba956231a1602b848b7f", - "reference": "8392134ce4b5dba65130ba956231a1602b848b7f", + "url": "https://api.github.com/repos/PHPOffice/PHPWord/zipball/6d75328229bc93790b37e93741adf70646cea958", + "reference": "6d75328229bc93790b37e93741adf70646cea958", "shasum": "" }, "require": { "ext-dom": "*", + "ext-gd": "*", "ext-json": "*", "ext-xml": "*", + "ext-zip": "*", "php": "^7.1|^8.0", - "phpoffice/math": "^0.2" + "phpoffice/math": "^0.3" }, "require-dev": { - "dompdf/dompdf": "^2.0", - "ext-gd": "*", + "dompdf/dompdf": "^2.0 || ^3.0", "ext-libxml": "*", - "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.3", - "mpdf/mpdf": "^8.1", + "mpdf/mpdf": "^7.0 || ^8.0", "phpmd/phpmd": "^2.13", - "phpstan/phpstan-phpunit": "@stable", + "phpstan/phpstan": "^0.12.88 || ^1.0.0", + "phpstan/phpstan-phpunit": "^1.0 || ^2.0", "phpunit/phpunit": ">=7.0", "symfony/process": "^4.4 || ^5.0", "tecnickcom/tcpdf": "^6.5" }, "suggest": { "dompdf/dompdf": "Allows writing PDF", - "ext-gd2": "Allows adding images", "ext-xmlwriter": "Allows writing OOXML and ODF", - "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template", - "ext-zip": "Allows writing OOXML and ODF" + "ext-xsl": "Allows applying XSL style sheet to headers, to main document part, and to footers of an OOXML template" }, "type": "library", "autoload": { @@ -4124,7 +4463,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-3.0" + "LGPL-3.0-only" ], "authors": [ { @@ -4180,22 +4519,22 @@ ], "support": { "issues": "https://github.com/PHPOffice/PHPWord/issues", - "source": "https://github.com/PHPOffice/PHPWord/tree/1.3.0" + "source": "https://github.com/PHPOffice/PHPWord/tree/1.4.0" }, - "time": "2024-08-30T18:03:42+00:00" + "time": "2025-06-05T10:32:36+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/1e0cd5370df5dd2e556a36b9c62f62e555870495", + "reference": "1e0cd5370df5dd2e556a36b9c62f62e555870495", "shasum": "" }, "require": { @@ -4227,9 +4566,9 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.0" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2025-08-30T15:50:23+00:00" }, { "name": "psr/cache", @@ -4694,16 +5033,16 @@ }, { "name": "robrichards/xmlseclibs", - "version": "3.1.3", + "version": "3.1.4", "source": { "type": "git", "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07" + "reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/2bdfd742624d739dfadbd415f00181b4a77aaf07", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/bc87389224c6de95802b505e5265b0ec2c5bcdbd", + "reference": "bc87389224c6de95802b505e5265b0ec2c5bcdbd", "shasum": "" }, "require": { @@ -4730,9 +5069,9 @@ ], "support": { "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.3" + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.4" }, - "time": "2024-11-20T21:13:56+00:00" + "time": "2025-12-08T11:57:53+00:00" }, { "name": "scheb/2fa-backup-code", @@ -4903,17 +5242,63 @@ "time": "2024-11-29T19:22:48+00:00" }, { - "name": "setasign/fpdi", - "version": "v2.6.3", + "name": "setasign/fpdf", + "version": "1.8.6", "source": { "type": "git", - "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "url": "https://github.com/Setasign/FPDF.git", + "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/Setasign/FPDF/zipball/0838e0ee4925716fcbbc50ad9e1799b5edfae0a0", + "reference": "0838e0ee4925716fcbbc50ad9e1799b5edfae0a0", + "shasum": "" + }, + "require": { + "ext-gd": "*", + "ext-zlib": "*" + }, + "type": "library", + "autoload": { + "classmap": [ + "fpdf.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Olivier Plathey", + "email": "oliver@fpdf.org", + "homepage": "http://fpdf.org/" + } + ], + "description": "FPDF is a PHP class which allows to generate PDF files with pure PHP. F from FPDF stands for Free: you may use it for any kind of usage and modify it to suit your needs.", + "homepage": "http://www.fpdf.org", + "keywords": [ + "fpdf", + "pdf" + ], + "support": { + "source": "https://github.com/Setasign/FPDF/tree/1.8.6" + }, + "time": "2023-06-26T14:44:25+00:00" + }, + { + "name": "setasign/fpdi", + "version": "v2.6.4", + "source": { + "type": "git", + "url": "https://github.com/Setasign/FPDI.git", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Setasign/FPDI/zipball/4b53852fde2734ec6a07e458a085db627c60eada", + "reference": "4b53852fde2734ec6a07e458a085db627c60eada", "shasum": "" }, "require": { @@ -4928,7 +5313,7 @@ "setasign/fpdf": "~1.8.6", "setasign/tfpdf": "~1.33", "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" + "tecnickcom/tcpdf": "^6.8" }, "suggest": { "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." @@ -4964,7 +5349,7 @@ ], "support": { "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "source": "https://github.com/Setasign/FPDI/tree/v2.6.4" }, "funding": [ { @@ -4972,7 +5357,58 @@ "type": "tidelift" } ], - "time": "2025-02-05T13:22:35+00:00" + "time": "2025-08-05T09:57:14+00:00" + }, + { + "name": "smalot/pdfparser", + "version": "v2.12.2", + "source": { + "type": "git", + "url": "https://github.com/smalot/pdfparser.git", + "reference": "370b7e983fafecb787a9bcfd73baab8038212ad1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/smalot/pdfparser/zipball/370b7e983fafecb787a9bcfd73baab8038212ad1", + "reference": "370b7e983fafecb787a9bcfd73baab8038212ad1", + "shasum": "" + }, + "require": { + "ext-iconv": "*", + "ext-zlib": "*", + "php": ">=7.1", + "symfony/polyfill-mbstring": "^1.18" + }, + "type": "library", + "autoload": { + "psr-0": { + "Smalot\\PdfParser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL-3.0" + ], + "authors": [ + { + "name": "Sebastien MALOT", + "email": "sebastien@malot.fr" + } + ], + "description": "Pdf parser library. Can read and extract information from pdf file.", + "homepage": "https://www.pdfparser.org", + "keywords": [ + "extract", + "parse", + "parser", + "pdf", + "text" + ], + "support": { + "issues": "https://github.com/smalot/pdfparser/issues", + "source": "https://github.com/smalot/pdfparser/tree/v2.12.2" + }, + "time": "2025-09-04T08:49:09+00:00" }, { "name": "spomky-labs/otphp", @@ -5058,16 +5494,16 @@ }, { "name": "symfony/asset", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/asset.git", - "reference": "2466c17d61d14539cddf77e57ebb9cc971185302" + "reference": "cfee7c0d64be113383db74a2fdd65d426b7f3aab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/2466c17d61d14539cddf77e57ebb9cc971185302", - "reference": "2466c17d61d14539cddf77e57ebb9cc971185302", + "url": "https://api.github.com/repos/symfony/asset/zipball/cfee7c0d64be113383db74a2fdd65d426b7f3aab", + "reference": "cfee7c0d64be113383db74a2fdd65d426b7f3aab", "shasum": "" }, "require": { @@ -5107,7 +5543,7 @@ "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/asset/tree/v6.4.13" + "source": "https://github.com/symfony/asset/tree/v6.4.24" }, "funding": [ { @@ -5118,25 +5554,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/cache", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "342e87b15ac02e4b4f0924ddc368e75d5262aab3" + "reference": "eb3272ed2daed13ed24816e862d73f73d995972a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/342e87b15ac02e4b4f0924ddc368e75d5262aab3", - "reference": "342e87b15ac02e4b4f0924ddc368e75d5262aab3", + "url": "https://api.github.com/repos/symfony/cache/zipball/eb3272ed2daed13ed24816e862d73f73d995972a", + "reference": "eb3272ed2daed13ed24816e862d73f73d995972a", "shasum": "" }, "require": { @@ -5203,7 +5643,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.19" + "source": "https://github.com/symfony/cache/tree/v6.4.30" }, "funding": [ { @@ -5214,25 +5654,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-26T09:12:57+00:00" + "time": "2025-12-01T16:41:59+00:00" }, { "name": "symfony/cache-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/cache-contracts.git", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/5d68a57d66910405e5c0b63d6f0af941e66fc868", + "reference": "5d68a57d66910405e5c0b63d6f0af941e66fc868", "shasum": "" }, "require": { @@ -5246,7 +5690,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -5279,7 +5723,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/cache-contracts/tree/v3.6.0" }, "funding": [ { @@ -5295,20 +5739,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-03-13T15:25:07+00:00" }, { "name": "symfony/clock", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b" + "reference": "fb2df4bc9e3037c4765ba7fd29e00167001a9b68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b2bf55c4dd115003309eafa87ee7df9ed3dde81b", - "reference": "b2bf55c4dd115003309eafa87ee7df9ed3dde81b", + "url": "https://api.github.com/repos/symfony/clock/zipball/fb2df4bc9e3037c4765ba7fd29e00167001a9b68", + "reference": "fb2df4bc9e3037c4765ba7fd29e00167001a9b68", "shasum": "" }, "require": { @@ -5353,7 +5797,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v6.4.13" + "source": "https://github.com/symfony/clock/tree/v6.4.30" }, "funding": [ { @@ -5364,25 +5808,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-11-11T21:24:34+00:00" }, { "name": "symfony/config", - "version": "v6.4.14", + "version": "v6.4.28", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef" + "reference": "15947c18ef3ddb0b2f4ec936b9e90e2520979f62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/4e55e7e4ffddd343671ea972216d4509f46c22ef", - "reference": "4e55e7e4ffddd343671ea972216d4509f46c22ef", + "url": "https://api.github.com/repos/symfony/config/zipball/15947c18ef3ddb0b2f4ec936b9e90e2520979f62", + "reference": "15947c18ef3ddb0b2f4ec936b9e90e2520979f62", "shasum": "" }, "require": { @@ -5428,7 +5876,7 @@ "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/config/tree/v6.4.14" + "source": "https://github.com/symfony/config/tree/v6.4.28" }, "funding": [ { @@ -5439,25 +5887,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-04T11:33:53+00:00" + "time": "2025-11-01T19:52:02+00:00" }, { "name": "symfony/console", - "version": "v6.4.17", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04" + "reference": "1b2813049506b39eb3d7e64aff033fd5ca26c97e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/799445db3f15768ecc382ac5699e6da0520a0a04", - "reference": "799445db3f15768ecc382ac5699e6da0520a0a04", + "url": "https://api.github.com/repos/symfony/console/zipball/1b2813049506b39eb3d7e64aff033fd5ca26c97e", + "reference": "1b2813049506b39eb3d7e64aff033fd5ca26c97e", "shasum": "" }, "require": { @@ -5522,7 +5974,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.17" + "source": "https://github.com/symfony/console/tree/v6.4.30" }, "funding": [ { @@ -5533,25 +5985,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-07T12:07:30+00:00" + "time": "2025-12-05T13:47:41+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e" + "reference": "9b784413143701aa3c94ac1869a159a9e53e8761" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/cb23e97813c5837a041b73a6d63a9ddff0778f5e", - "reference": "cb23e97813c5837a041b73a6d63a9ddff0778f5e", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/9b784413143701aa3c94ac1869a159a9e53e8761", + "reference": "9b784413143701aa3c94ac1869a159a9e53e8761", "shasum": "" }, "require": { @@ -5587,7 +6043,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.13" + "source": "https://github.com/symfony/css-selector/tree/v6.4.24" }, "funding": [ { @@ -5598,25 +6054,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "b343c3b2f1539fe41331657b37d5c96c1d1ea842" + "reference": "5328f994cbb0855ba25c3a54f4a31a279511640f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/b343c3b2f1539fe41331657b37d5c96c1d1ea842", - "reference": "b343c3b2f1539fe41331657b37d5c96c1d1ea842", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5328f994cbb0855ba25c3a54f4a31a279511640f", + "reference": "5328f994cbb0855ba25c3a54f4a31a279511640f", "shasum": "" }, "require": { @@ -5624,7 +6084,7 @@ "psr/container": "^1.1|^2.0", "symfony/deprecation-contracts": "^2.5|^3", "symfony/service-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.2.10|^7.0" + "symfony/var-exporter": "^6.4.20|^7.2.5" }, "conflict": { "ext-psr": "<1.1|>=2", @@ -5668,7 +6128,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.19" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.30" }, "funding": [ { @@ -5679,25 +6139,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-20T10:02:49+00:00" + "time": "2025-12-07T09:29:59+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -5710,7 +6174,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -5735,7 +6199,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -5751,20 +6215,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.19", + "version": "v6.4.26", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "22df1e858b8b00647c67fc201dfbea65c0fdab15" + "reference": "c14bb5a9125c411e73354954940e06b6e7fcc344" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/22df1e858b8b00647c67fc201dfbea65c0fdab15", - "reference": "22df1e858b8b00647c67fc201dfbea65c0fdab15", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/c14bb5a9125c411e73354954940e06b6e7fcc344", + "reference": "c14bb5a9125c411e73354954940e06b6e7fcc344", "shasum": "" }, "require": { @@ -5843,7 +6307,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.19" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.26" }, "funding": [ { @@ -5854,25 +6318,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-18T08:43:25+00:00" + "time": "2025-09-26T15:07:38+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.16", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5" + "reference": "924edbc9631b75302def0258ed1697948b17baf6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/1ac5e7e7e862d4d574258daf08bd569ba926e4a5", - "reference": "1ac5e7e7e862d4d574258daf08bd569ba926e4a5", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/924edbc9631b75302def0258ed1697948b17baf6", + "reference": "924edbc9631b75302def0258ed1697948b17baf6", "shasum": "" }, "require": { @@ -5917,7 +6385,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.16" + "source": "https://github.com/symfony/dotenv/tree/v6.4.30" }, "funding": [ { @@ -5928,25 +6396,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-27T11:08:19+00:00" + "time": "2025-11-14T17:33:48+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.19", + "version": "v6.4.26", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71" + "reference": "41bedcaec5b72640b0ec2096547b75fda72ead6c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/3d4e55cd2b8f1979a65eba9ab749d6466c316f71", - "reference": "3d4e55cd2b8f1979a65eba9ab749d6466c316f71", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/41bedcaec5b72640b0ec2096547b75fda72ead6c", + "reference": "41bedcaec5b72640b0ec2096547b75fda72ead6c", "shasum": "" }, "require": { @@ -5992,7 +6464,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.19" + "source": "https://github.com/symfony/error-handler/tree/v6.4.26" }, "funding": [ { @@ -6003,25 +6475,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-02T20:16:33+00:00" + "time": "2025-09-11T09:57:09+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.13", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e" + "reference": "b0cf3162020603587363f0551cd3be43958611ff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", - "reference": "0ffc48080ab3e9132ea74ef4e09d8dcf26bf897e", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b0cf3162020603587363f0551cd3be43958611ff", + "reference": "b0cf3162020603587363f0551cd3be43958611ff", "shasum": "" }, "require": { @@ -6072,7 +6548,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.13" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.25" }, "funding": [ { @@ -6083,25 +6559,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-08-13T09:41:44+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -6115,7 +6595,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6148,7 +6628,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -6164,20 +6644,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/expression-language", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/expression-language.git", - "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df" + "reference": "01906f3b379833b347de9abc8ddc326593e9122b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/3524904fb026356a5230cd197f9a4e6a61e0e7df", - "reference": "3524904fb026356a5230cd197f9a4e6a61e0e7df", + "url": "https://api.github.com/repos/symfony/expression-language/zipball/01906f3b379833b347de9abc8ddc326593e9122b", + "reference": "01906f3b379833b347de9abc8ddc326593e9122b", "shasum": "" }, "require": { @@ -6212,7 +6692,7 @@ "description": "Provides an engine that can compile and evaluate expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/expression-language/tree/v6.4.13" + "source": "https://github.com/symfony/expression-language/tree/v6.4.30" }, "funding": [ { @@ -6223,25 +6703,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-09T08:40:40+00:00" + "time": "2025-11-09T10:02:06+00:00" }, { "name": "symfony/filesystem", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3" + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4856c9cf585d5a0313d8d35afd681a526f038dd3", - "reference": "4856c9cf585d5a0313d8d35afd681a526f038dd3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/441c6b69f7222aadae7cbf5df588496d5ee37789", + "reference": "441c6b69f7222aadae7cbf5df588496d5ee37789", "shasum": "" }, "require": { @@ -6278,7 +6762,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.13" + "source": "https://github.com/symfony/filesystem/tree/v6.4.30" }, "funding": [ { @@ -6289,25 +6773,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-25T15:07:50+00:00" + "time": "2025-11-26T14:43:45+00:00" }, { "name": "symfony/finder", - "version": "v6.4.17", + "version": "v6.4.27", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" + "reference": "a1b6aa435d2fba50793b994a839c32b6064f063b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", - "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "url": "https://api.github.com/repos/symfony/finder/zipball/a1b6aa435d2fba50793b994a839c32b6064f063b", + "reference": "a1b6aa435d2fba50793b994a839c32b6064f063b", "shasum": "" }, "require": { @@ -6342,7 +6830,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.17" + "source": "https://github.com/symfony/finder/tree/v6.4.27" }, "funding": [ { @@ -6353,40 +6841,45 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-29T13:51:37+00:00" + "time": "2025-10-15T18:32:00+00:00" }, { "name": "symfony/flex", - "version": "v2.4.7", + "version": "v2.10.0", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402" + "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/92f4fba342161ff36072bd3b8e0b3c6c23160402", - "reference": "92f4fba342161ff36072bd3b8e0b3c6c23160402", + "url": "https://api.github.com/repos/symfony/flex/zipball/9cd384775973eabbf6e8b05784dda279fc67c28d", + "reference": "9cd384775973eabbf6e8b05784dda279fc67c28d", "shasum": "" }, "require": { "composer-plugin-api": "^2.1", - "php": ">=8.0" + "php": ">=8.1" }, "conflict": { - "composer/semver": "<1.7.2" + "composer/semver": "<1.7.2", + "symfony/dotenv": "<5.4" }, "require-dev": { "composer/composer": "^2.1", - "symfony/dotenv": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0" + "symfony/dotenv": "^6.4|^7.4|^8.0", + "symfony/filesystem": "^6.4|^7.4|^8.0", + "symfony/phpunit-bridge": "^6.4|^7.4|^8.0", + "symfony/process": "^6.4|^7.4|^8.0" }, "type": "composer-plugin", "extra": { @@ -6410,7 +6903,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.7" + "source": "https://github.com/symfony/flex/tree/v2.10.0" }, "funding": [ { @@ -6421,25 +6914,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-07T08:51:54+00:00" + "time": "2025-11-16T09:38:19+00:00" }, { "name": "symfony/form", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "0fe17f90af23908ddc11dc23507db98e66572046" + "reference": "e6378bc56d5d56db65754a09c91a7cf7c35b44db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/0fe17f90af23908ddc11dc23507db98e66572046", - "reference": "0fe17f90af23908ddc11dc23507db98e66572046", + "url": "https://api.github.com/repos/symfony/form/zipball/e6378bc56d5d56db65754a09c91a7cf7c35b44db", + "reference": "e6378bc56d5d56db65754a09c91a7cf7c35b44db", "shasum": "" }, "require": { @@ -6507,7 +7004,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.13" + "source": "https://github.com/symfony/form/tree/v6.4.30" }, "funding": [ { @@ -6518,25 +7015,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-09T08:40:40+00:00" + "time": "2025-12-05T07:26:17+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "078a6f11cb34d208d6efc74003d77f66a09fa3c2" + "reference": "3c212ec5cac588da8357f5c061194363a4e91010" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/078a6f11cb34d208d6efc74003d77f66a09fa3c2", - "reference": "078a6f11cb34d208d6efc74003d77f66a09fa3c2", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/3c212ec5cac588da8357f5c061194363a4e91010", + "reference": "3c212ec5cac588da8357f5c061194363a4e91010", "shasum": "" }, "require": { @@ -6656,7 +7157,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.19" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.30" }, "funding": [ { @@ -6667,25 +7168,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-26T07:27:07+00:00" + "time": "2025-11-29T11:31:32+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "3294a433fc9d12ae58128174896b5b1822c28dad" + "reference": "a67de2002d72f76ce7c57f830c4df503febc8d77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/3294a433fc9d12ae58128174896b5b1822c28dad", - "reference": "3294a433fc9d12ae58128174896b5b1822c28dad", + "url": "https://api.github.com/repos/symfony/http-client/zipball/a67de2002d72f76ce7c57f830c4df503febc8d77", + "reference": "a67de2002d72f76ce7c57f830c4df503febc8d77", "shasum": "" }, "require": { @@ -6693,6 +7198,7 @@ "psr/log": "^1|^2|^3", "symfony/deprecation-contracts": "^2.5|^3", "symfony/http-client-contracts": "~3.4.4|^3.5.2", + "symfony/polyfill-php83": "^1.29", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -6749,7 +7255,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.19" + "source": "https://github.com/symfony/http-client/tree/v6.4.30" }, "funding": [ { @@ -6760,25 +7266,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-13T09:55:13+00:00" + "time": "2025-12-04T16:42:50+00:00" }, { "name": "symfony/http-client-contracts", - "version": "v3.5.2", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645" + "reference": "75d7043853a42837e68111812f4d964b01e5101c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/ee8d807ab20fcb51267fdace50fbe3494c31e645", - "reference": "ee8d807ab20fcb51267fdace50fbe3494c31e645", + "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/75d7043853a42837e68111812f4d964b01e5101c", + "reference": "75d7043853a42837e68111812f4d964b01e5101c", "shasum": "" }, "require": { @@ -6791,7 +7301,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6827,7 +7337,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.2" + "source": "https://github.com/symfony/http-client-contracts/tree/v3.6.0" }, "funding": [ { @@ -6843,20 +7353,20 @@ "type": "tidelift" } ], - "time": "2024-12-07T08:49:48+00:00" + "time": "2025-04-29T11:18:49+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.18", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db" + "reference": "0384c62b79d96e9b22d77bc1272c9e83342ba3a6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0492d6217e5ab48f51fca76f64cf8e78919d0db", - "reference": "d0492d6217e5ab48f51fca76f64cf8e78919d0db", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/0384c62b79d96e9b22d77bc1272c9e83342ba3a6", + "reference": "0384c62b79d96e9b22d77bc1272c9e83342ba3a6", "shasum": "" }, "require": { @@ -6904,7 +7414,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.18" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.30" }, "funding": [ { @@ -6915,25 +7425,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-09T15:48:56+00:00" + "time": "2025-12-01T20:07:31+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c" + "reference": "ceac681e74e824bbf90468eb231d40988d6d18a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", - "reference": "88f2c9f7feff86bb7b9105c5151bc2c1404cd64c", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ceac681e74e824bbf90468eb231d40988d6d18a5", + "reference": "ceac681e74e824bbf90468eb231d40988d6d18a5", "shasum": "" }, "require": { @@ -7018,7 +7532,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.19" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.30" }, "funding": [ { @@ -7029,25 +7543,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-26T10:51:37+00:00" + "time": "2025-12-07T15:49:34+00:00" }, { "name": "symfony/intl", - "version": "v6.4.15", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/intl.git", - "reference": "b1d5e8d82615b60f229216edfee0b59e2ef66da6" + "reference": "5f40c7141be52f7ee86c4a42dce2845e6fbe3c85" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/b1d5e8d82615b60f229216edfee0b59e2ef66da6", - "reference": "b1d5e8d82615b60f229216edfee0b59e2ef66da6", + "url": "https://api.github.com/repos/symfony/intl/zipball/5f40c7141be52f7ee86c4a42dce2845e6fbe3c85", + "reference": "5f40c7141be52f7ee86c4a42dce2845e6fbe3c85", "shasum": "" }, "require": { @@ -7101,7 +7619,7 @@ "localization" ], "support": { - "source": "https://github.com/symfony/intl/tree/v6.4.15" + "source": "https://github.com/symfony/intl/tree/v6.4.30" }, "funding": [ { @@ -7112,25 +7630,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-08T15:28:48+00:00" + "time": "2025-11-24T13:57:00+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.18", + "version": "v6.4.27", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11" + "reference": "2f096718ed718996551f66e3a24e12b2ed027f95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", - "reference": "e93a6ae2767d7f7578c2b7961d9d8e27580b2b11", + "url": "https://api.github.com/repos/symfony/mailer/zipball/2f096718ed718996551f66e3a24e12b2ed027f95", + "reference": "2f096718ed718996551f66e3a24e12b2ed027f95", "shasum": "" }, "require": { @@ -7181,7 +7703,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.18" + "source": "https://github.com/symfony/mailer/tree/v6.4.27" }, "funding": [ { @@ -7192,25 +7714,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-24T15:27:15+00:00" + "time": "2025-10-24T13:29:09+00:00" }, { "name": "symfony/mime", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3" + "reference": "69aeef5d2692bb7c18ce133b09f67b27260b7acf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", - "reference": "ac537b6c55ccc2c749f3c979edfa9ec14aaed4f3", + "url": "https://api.github.com/repos/symfony/mime/zipball/69aeef5d2692bb7c18ce133b09f67b27260b7acf", + "reference": "69aeef5d2692bb7c18ce133b09f67b27260b7acf", "shasum": "" }, "require": { @@ -7266,7 +7792,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.19" + "source": "https://github.com/symfony/mime/tree/v6.4.30" }, "funding": [ { @@ -7277,25 +7803,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-17T21:23:52+00:00" + "time": "2025-11-16T09:57:53+00:00" }, { "name": "symfony/monolog-bridge", - "version": "v6.4.13", + "version": "v6.4.28", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452" + "reference": "d2f4b68e3247cf44d93f48545c8c072a75c17e5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/9d14621e59f22c2b6d030d92d37ffe5ae1e60452", - "reference": "9d14621e59f22c2b6d030d92d37ffe5ae1e60452", + "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/d2f4b68e3247cf44d93f48545c8c072a75c17e5b", + "reference": "d2f4b68e3247cf44d93f48545c8c072a75c17e5b", "shasum": "" }, "require": { @@ -7345,7 +7875,7 @@ "description": "Provides integration for Monolog with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.13" + "source": "https://github.com/symfony/monolog-bridge/tree/v6.4.28" }, "funding": [ { @@ -7356,53 +7886,52 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-14T08:49:08+00:00" + "time": "2025-10-30T19:57:08+00:00" }, { "name": "symfony/monolog-bundle", - "version": "v3.10.0", + "version": "v3.11.1", "source": { "type": "git", "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" + "reference": "0e675a6e08f791ef960dc9c7e392787111a3f0c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", - "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", + "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/0e675a6e08f791ef960dc9c7e392787111a3f0c1", + "reference": "0e675a6e08f791ef960dc9c7e392787111a3f0c1", "shasum": "" }, "require": { + "composer-runtime-api": "^2.0", "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "php": ">=7.2.5", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", - "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" + "php": ">=8.1", + "symfony/config": "^6.4 || ^7.0", + "symfony/dependency-injection": "^6.4 || ^7.0", + "symfony/deprecation-contracts": "^2.5 || ^3.0", + "symfony/http-kernel": "^6.4 || ^7.0", + "symfony/monolog-bridge": "^6.4 || ^7.0", + "symfony/polyfill-php84": "^1.30" }, "require-dev": { - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/phpunit-bridge": "^6.3 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" + "symfony/console": "^6.4 || ^7.0", + "symfony/phpunit-bridge": "^7.3.3", + "symfony/yaml": "^6.4 || ^7.0" }, "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Symfony\\Bundle\\MonologBundle\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7426,7 +7955,7 @@ ], "support": { "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" + "source": "https://github.com/symfony/monolog-bundle/tree/v3.11.1" }, "funding": [ { @@ -7437,25 +7966,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2023-11-06T17:08:13+00:00" + "time": "2025-12-08T07:58:26+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.4.16", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "368128ad168f20e22c32159b9f761e456cec0c78" + "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/368128ad168f20e22c32159b9f761e456cec0c78", - "reference": "368128ad168f20e22c32159b9f761e456cec0c78", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", + "reference": "eeaa8cabe54c7b3516938c72a4a161c0cc80a34f", "shasum": "" }, "require": { @@ -7493,7 +8026,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.4.16" + "source": "https://github.com/symfony/options-resolver/tree/v6.4.30" }, "funding": [ { @@ -7504,25 +8037,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-20T10:57:02+00:00" + "time": "2025-11-12T13:06:53+00:00" }, { "name": "symfony/password-hasher", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/password-hasher.git", - "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47" + "reference": "dcab5ac87450aaed26483ba49c2ce86808da7557" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/e97a1b31f60b8bdfc1fdedab4398538da9441d47", - "reference": "e97a1b31f60b8bdfc1fdedab4398538da9441d47", + "url": "https://api.github.com/repos/symfony/password-hasher/zipball/dcab5ac87450aaed26483ba49c2ce86808da7557", + "reference": "dcab5ac87450aaed26483ba49c2ce86808da7557", "shasum": "" }, "require": { @@ -7565,7 +8102,7 @@ "password" ], "support": { - "source": "https://github.com/symfony/password-hasher/tree/v6.4.13" + "source": "https://github.com/symfony/password-hasher/tree/v6.4.24" }, "funding": [ { @@ -7576,25 +8113,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "version": "v1.33.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/17f6f9a6b1735c0f163024d959f700cfbc5155e5", + "reference": "17f6f9a6b1735c0f163024d959f700cfbc5155e5", "shasum": "" }, "require": { @@ -7641,7 +8182,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.33.0" }, "funding": [ { @@ -7652,25 +8193,109 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2025-07-08T02:45:35+00:00" }, { - "name": "symfony/process", - "version": "v6.4.19", + "name": "symfony/polyfill-php84", + "version": "v1.33.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", - "reference": "7a1c12e87b08ec9c97abdd188c9b3f5a40e37fc3", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/d8ced4d875142b6a7426000426b8abc631d6b191", + "reference": "d8ced4d875142b6a7426000426b8abc631d6b191", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php84\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php84/tree/v1.33.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2025-06-24T13:30:11+00:00" + }, + { + "name": "symfony/process", + "version": "v6.4.26", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "48bad913268c8cafabbf7034b39c8bb24fbc5ab8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/48bad913268c8cafabbf7034b39c8bb24fbc5ab8", + "reference": "48bad913268c8cafabbf7034b39c8bb24fbc5ab8", "shasum": "" }, "require": { @@ -7702,7 +8327,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.19" + "source": "https://github.com/symfony/process/tree/v6.4.26" }, "funding": [ { @@ -7713,25 +8338,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-04T13:35:48+00:00" + "time": "2025-09-11T09:57:09+00:00" }, { "name": "symfony/property-access", - "version": "v6.4.18", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/property-access.git", - "reference": "80e0378f2f058b60d87dedc3c760caec882e992c" + "reference": "fedc771326d4978a7d3167fa009a509b06a2e168" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/80e0378f2f058b60d87dedc3c760caec882e992c", - "reference": "80e0378f2f058b60d87dedc3c760caec882e992c", + "url": "https://api.github.com/repos/symfony/property-access/zipball/fedc771326d4978a7d3167fa009a509b06a2e168", + "reference": "fedc771326d4978a7d3167fa009a509b06a2e168", "shasum": "" }, "require": { @@ -7779,7 +8408,7 @@ "reflection" ], "support": { - "source": "https://github.com/symfony/property-access/tree/v6.4.18" + "source": "https://github.com/symfony/property-access/tree/v6.4.25" }, "funding": [ { @@ -7790,25 +8419,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-16T14:42:05+00:00" + "time": "2025-08-12T15:42:57+00:00" }, { "name": "symfony/property-info", - "version": "v6.4.18", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e" + "reference": "13243e748cb77b3d2300c0bffa21c2d325dd6e98" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/94d18e5cc11a37fd92856d38b61d9cdf72536a1e", - "reference": "94d18e5cc11a37fd92856d38b61d9cdf72536a1e", + "url": "https://api.github.com/repos/symfony/property-info/zipball/13243e748cb77b3d2300c0bffa21c2d325dd6e98", + "reference": "13243e748cb77b3d2300c0bffa21c2d325dd6e98", "shasum": "" }, "require": { @@ -7865,7 +8498,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.18" + "source": "https://github.com/symfony/property-info/tree/v6.4.30" }, "funding": [ { @@ -7876,25 +8509,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-21T10:52:27+00:00" + "time": "2025-11-29T16:02:37+00:00" }, { "name": "symfony/rate-limiter", - "version": "v6.4.15", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/rate-limiter.git", - "reference": "e250d82fc17b277b97cbce94efef5414aff29bf9" + "reference": "15a9a10fd0f060243c88ce98d5c29e9cc4b886e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/e250d82fc17b277b97cbce94efef5414aff29bf9", - "reference": "e250d82fc17b277b97cbce94efef5414aff29bf9", + "url": "https://api.github.com/repos/symfony/rate-limiter/zipball/15a9a10fd0f060243c88ce98d5c29e9cc4b886e7", + "reference": "15a9a10fd0f060243c88ce98d5c29e9cc4b886e7", "shasum": "" }, "require": { @@ -7936,7 +8573,7 @@ "rate-limiter" ], "support": { - "source": "https://github.com/symfony/rate-limiter/tree/v6.4.15" + "source": "https://github.com/symfony/rate-limiter/tree/v6.4.24" }, "funding": [ { @@ -7947,25 +8584,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-09T07:19:24+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/routing", - "version": "v6.4.18", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68" + "reference": "ea50a13c2711eebcbb66b38ef6382e62e3262859" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/e9bfc94953019089acdfb9be51c1b9142c4afa68", - "reference": "e9bfc94953019089acdfb9be51c1b9142c4afa68", + "url": "https://api.github.com/repos/symfony/routing/zipball/ea50a13c2711eebcbb66b38ef6382e62e3262859", + "reference": "ea50a13c2711eebcbb66b38ef6382e62e3262859", "shasum": "" }, "require": { @@ -8019,7 +8660,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.18" + "source": "https://github.com/symfony/routing/tree/v6.4.30" }, "funding": [ { @@ -8030,25 +8671,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-09T08:51:02+00:00" + "time": "2025-11-22T09:51:35+00:00" }, { "name": "symfony/runtime", - "version": "v6.4.14", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/runtime.git", - "reference": "4facd4174f45cd37c65860403412b67c7381136a" + "reference": "fb3149ee85d3b639dd3e49ea9dda05656f0537e3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/4facd4174f45cd37c65860403412b67c7381136a", - "reference": "4facd4174f45cd37c65860403412b67c7381136a", + "url": "https://api.github.com/repos/symfony/runtime/zipball/fb3149ee85d3b639dd3e49ea9dda05656f0537e3", + "reference": "fb3149ee85d3b639dd3e49ea9dda05656f0537e3", "shasum": "" }, "require": { @@ -8098,7 +8743,7 @@ "runtime" ], "support": { - "source": "https://github.com/symfony/runtime/tree/v6.4.14" + "source": "https://github.com/symfony/runtime/tree/v6.4.30" }, "funding": [ { @@ -8109,25 +8754,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-05T16:39:55+00:00" + "time": "2025-12-05T10:55:13+00:00" }, { "name": "symfony/security-bundle", - "version": "v6.4.13", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3" + "reference": "508e67e68156cf3cb2b982504191b2ce34daa921" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3", - "reference": "181d1fcf5f88ef8212ed7f6434e5ff51c9d7dff3", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/508e67e68156cf3cb2b982504191b2ce34daa921", + "reference": "508e67e68156cf3cb2b982504191b2ce34daa921", "shasum": "" }, "require": { @@ -8210,7 +8859,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.4.13" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.30" }, "funding": [ { @@ -8221,25 +8870,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-12-04T18:05:02+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.18", + "version": "v6.4.27", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "0ae7ae716968e00287ab9b7768405e0dc9cad109" + "reference": "673018434b38e504eb04ca3c6d7e2e7c86735bfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/0ae7ae716968e00287ab9b7768405e0dc9cad109", - "reference": "0ae7ae716968e00287ab9b7768405e0dc9cad109", + "url": "https://api.github.com/repos/symfony/security-core/zipball/673018434b38e504eb04ca3c6d7e2e7c86735bfb", + "reference": "673018434b38e504eb04ca3c6d7e2e7c86735bfb", "shasum": "" }, "require": { @@ -8296,7 +8949,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.18" + "source": "https://github.com/symfony/security-core/tree/v6.4.27" }, "funding": [ { @@ -8307,25 +8960,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-22T20:59:03+00:00" + "time": "2025-10-23T19:49:35+00:00" }, { "name": "symfony/security-csrf", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/security-csrf.git", - "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3" + "reference": "9a1efc8c10b86bcedc9233affd10c716b54ca1b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/c34421b7d34efbaef5d611ab2e646a0ec464ffe3", - "reference": "c34421b7d34efbaef5d611ab2e646a0ec464ffe3", + "url": "https://api.github.com/repos/symfony/security-csrf/zipball/9a1efc8c10b86bcedc9233affd10c716b54ca1b7", + "reference": "9a1efc8c10b86bcedc9233affd10c716b54ca1b7", "shasum": "" }, "require": { @@ -8364,7 +9021,7 @@ "description": "Symfony Security Component - CSRF Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-csrf/tree/v6.4.13" + "source": "https://github.com/symfony/security-csrf/tree/v6.4.24" }, "funding": [ { @@ -8375,25 +9032,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/security-http", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "a57bb00b01036865e6c08d0c8540df429534df19" + "reference": "5705ae14ed77b38ac99990959d8c6dbcba86e513" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/a57bb00b01036865e6c08d0c8540df429534df19", - "reference": "a57bb00b01036865e6c08d0c8540df429534df19", + "url": "https://api.github.com/repos/symfony/security-http/zipball/5705ae14ed77b38ac99990959d8c6dbcba86e513", + "reference": "5705ae14ed77b38ac99990959d8c6dbcba86e513", "shasum": "" }, "require": { @@ -8452,7 +9113,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.4.19" + "source": "https://github.com/symfony/security-http/tree/v6.4.30" }, "funding": [ { @@ -8463,25 +9124,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-28T19:24:43+00:00" + "time": "2025-11-12T13:33:48+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "a221b2f6066af304d760cff7a26f201b4fab4aef" + "reference": "d7976be554af097c788d7df25e10dd99facbfe65" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/a221b2f6066af304d760cff7a26f201b4fab4aef", - "reference": "a221b2f6066af304d760cff7a26f201b4fab4aef", + "url": "https://api.github.com/repos/symfony/serializer/zipball/d7976be554af097c788d7df25e10dd99facbfe65", + "reference": "d7976be554af097c788d7df25e10dd99facbfe65", "shasum": "" }, "require": { @@ -8550,7 +9215,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.19" + "source": "https://github.com/symfony/serializer/tree/v6.4.30" }, "funding": [ { @@ -8561,25 +9226,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-24T08:42:36+00:00" + "time": "2025-11-12T13:46:18+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -8597,7 +9266,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -8633,7 +9302,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -8644,25 +9313,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.4.19", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c" + "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c", - "reference": "dfe1481c12c06266d0c3d58c0cb4b09bd497ab9c", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b67e94e06a05d9572c2fa354483b3e13e3cb1898", + "reference": "b67e94e06a05d9572c2fa354483b3e13e3cb1898", "shasum": "" }, "require": { @@ -8695,7 +9368,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.4.19" + "source": "https://github.com/symfony/stopwatch/tree/v6.4.24" }, "funding": [ { @@ -8706,25 +9379,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-21T10:06:30+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/string", - "version": "v6.4.15", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f" + "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", - "reference": "73a5e66ea2e1677c98d4449177c5a9cf9d8b4c6f", + "url": "https://api.github.com/repos/symfony/string/zipball/50590a057841fa6bf69d12eceffce3465b9e32cb", + "reference": "50590a057841fa6bf69d12eceffce3465b9e32cb", "shasum": "" }, "require": { @@ -8738,7 +9415,6 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", "symfony/http-client": "^5.4|^6.0|^7.0", "symfony/intl": "^6.2|^7.0", "symfony/translation-contracts": "^2.5|^3.0", @@ -8781,7 +9457,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.15" + "source": "https://github.com/symfony/string/tree/v6.4.30" }, "funding": [ { @@ -8792,25 +9468,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:12+00:00" + "time": "2025-11-21T18:03:05+00:00" }, { "name": "symfony/translation", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e" + "reference": "d1fdeefd0707d15eb150c04e8837bf0b15ebea39" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/3b9bf9f33997c064885a7bfc126c14b9daa0e00e", - "reference": "3b9bf9f33997c064885a7bfc126c14b9daa0e00e", + "url": "https://api.github.com/repos/symfony/translation/zipball/d1fdeefd0707d15eb150c04e8837bf0b15ebea39", + "reference": "d1fdeefd0707d15eb150c04e8837bf0b15ebea39", "shasum": "" }, "require": { @@ -8876,7 +9556,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.19" + "source": "https://github.com/symfony/translation/tree/v6.4.30" }, "funding": [ { @@ -8887,25 +9567,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-13T10:18:43+00:00" + "time": "2025-11-24T13:57:00+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -8918,7 +9602,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -8954,7 +9638,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -8965,25 +9649,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/twig-bridge", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "d6aecb7196bf610e63ebb64f937c33878d5d03b1" + "reference": "d77a78c7fffaf7cb0158d28db824ba78d89a9f34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d6aecb7196bf610e63ebb64f937c33878d5d03b1", - "reference": "d6aecb7196bf610e63ebb64f937c33878d5d03b1", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/d77a78c7fffaf7cb0158d28db824ba78d89a9f34", + "reference": "d77a78c7fffaf7cb0158d28db824ba78d89a9f34", "shasum": "" }, "require": { @@ -8996,7 +9684,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/console": "<5.4", - "symfony/form": "<6.3", + "symfony/form": "<6.4", "symfony/http-foundation": "<5.4", "symfony/http-kernel": "<6.4", "symfony/mime": "<6.2", @@ -9014,7 +9702,7 @@ "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/form": "^6.4|^7.0", + "symfony/form": "^6.4.30|~7.3.8|^7.4.1", "symfony/html-sanitizer": "^6.1|^7.0", "symfony/http-foundation": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^6.4|^7.0", @@ -9063,7 +9751,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.19" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.30" }, "funding": [ { @@ -9074,25 +9762,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-14T09:54:06+00:00" + "time": "2025-12-05T13:01:31+00:00" }, { "name": "symfony/twig-bundle", - "version": "v6.4.13", + "version": "v6.4.24", "source": { "type": "git", "url": "https://github.com/symfony/twig-bundle.git", - "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4" + "reference": "3b48b6e8225495c6d2438828982b4d219ca565ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/c3beeb5336aba1ea03c37e526968c2fde3ef25c4", - "reference": "c3beeb5336aba1ea03c37e526968c2fde3ef25c4", + "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/3b48b6e8225495c6d2438828982b4d219ca565ba", + "reference": "3b48b6e8225495c6d2438828982b4d219ca565ba", "shasum": "" }, "require": { @@ -9147,7 +9839,7 @@ "description": "Provides a tight integration of Twig into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v6.4.13" + "source": "https://github.com/symfony/twig-bundle/tree/v6.4.24" }, "funding": [ { @@ -9158,25 +9850,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-07-10T08:14:14+00:00" }, { "name": "symfony/validator", - "version": "v6.4.19", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "f3e853dffe7c5db675686b8216d6d890dad8c885" + "reference": "572dcc789ddf53174c61551aa5a3ec58d6a48b9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/f3e853dffe7c5db675686b8216d6d890dad8c885", - "reference": "f3e853dffe7c5db675686b8216d6d890dad8c885", + "url": "https://api.github.com/repos/symfony/validator/zipball/572dcc789ddf53174c61551aa5a3ec58d6a48b9b", + "reference": "572dcc789ddf53174c61551aa5a3ec58d6a48b9b", "shasum": "" }, "require": { @@ -9244,7 +9940,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.19" + "source": "https://github.com/symfony/validator/tree/v6.4.30" }, "funding": [ { @@ -9255,25 +9951,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-19T13:12:02+00:00" + "time": "2025-12-05T09:41:49+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.18", + "version": "v6.4.26", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837" + "reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/4ad10cf8b020e77ba665305bb7804389884b4837", - "reference": "4ad10cf8b020e77ba665305bb7804389884b4837", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfae1497a2f1eaad78dbc0590311c599c7178d4a", + "reference": "cfae1497a2f1eaad78dbc0590311c599c7178d4a", "shasum": "" }, "require": { @@ -9285,7 +9985,6 @@ "symfony/console": "<5.4" }, "require-dev": { - "ext-iconv": "*", "symfony/console": "^5.4|^6.0|^7.0", "symfony/error-handler": "^6.3|^7.0", "symfony/http-kernel": "^5.4|^6.0|^7.0", @@ -9329,7 +10028,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.18" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.26" }, "funding": [ { @@ -9340,25 +10039,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T11:26:11+00:00" + "time": "2025-09-25T15:37:27+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.19", + "version": "v6.4.26", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "be6e71b0c257884c1107313de5d247741cfea172" + "reference": "466fcac5fa2e871f83d31173f80e9c2684743bfc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be6e71b0c257884c1107313de5d247741cfea172", - "reference": "be6e71b0c257884c1107313de5d247741cfea172", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/466fcac5fa2e871f83d31173f80e9c2684743bfc", + "reference": "466fcac5fa2e871f83d31173f80e9c2684743bfc", "shasum": "" }, "require": { @@ -9406,7 +10109,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.19" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.26" }, "funding": [ { @@ -9417,41 +10120,45 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-13T09:33:32+00:00" + "time": "2025-09-11T09:57:09+00:00" }, { "name": "symfony/webpack-encore-bundle", - "version": "v2.2.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/symfony/webpack-encore-bundle.git", - "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c" + "reference": "5b932e0feddd81aaf0ecd7d5fcd2e450e5a7817e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/e335394b68a775a9b2bd173a8ba4fd2001f3870c", - "reference": "e335394b68a775a9b2bd173a8ba4fd2001f3870c", + "url": "https://api.github.com/repos/symfony/webpack-encore-bundle/zipball/5b932e0feddd81aaf0ecd7d5fcd2e450e5a7817e", + "reference": "5b932e0feddd81aaf0ecd7d5fcd2e450e5a7817e", "shasum": "" }, "require": { "php": ">=8.1.0", - "symfony/asset": "^5.4 || ^6.2 || ^7.0", - "symfony/config": "^5.4 || ^6.2 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0", - "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0", + "symfony/asset": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/config": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/dependency-injection": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/http-kernel": "^5.4 || ^6.2 || ^7.0 || ^8.0", "symfony/service-contracts": "^1.1.9 || ^2.1.3 || ^3.0" }, "require-dev": { - "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0", - "symfony/http-client": "^5.4 || ^6.2 || ^7.0", - "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0", - "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0", - "symfony/web-link": "^5.4 || ^6.2 || ^7.0" + "symfony/framework-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/http-client": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/phpunit-bridge": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/twig-bundle": "^5.4 || ^6.2 || ^7.0 || ^8.0", + "symfony/web-link": "^5.4 || ^6.2 || ^7.0 || ^8.0" }, "type": "symfony-bundle", "extra": { @@ -9478,7 +10185,7 @@ "description": "Integration of your Symfony app with Webpack Encore", "support": { "issues": "https://github.com/symfony/webpack-encore-bundle/issues", - "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.2.0" + "source": "https://github.com/symfony/webpack-encore-bundle/tree/v2.4.0" }, "funding": [ { @@ -9489,25 +10196,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-10-02T07:27:19+00:00" + "time": "2025-11-27T13:41:46+00:00" }, { "name": "symfony/yaml", - "version": "v6.4.18", + "version": "v6.4.30", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5" + "reference": "8207ae83da19ee3748d6d4f567b4d9a7c656e331" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", - "reference": "bf598c9d9bb4a22f495a4e26e4c4fce2f8ecefc5", + "url": "https://api.github.com/repos/symfony/yaml/zipball/8207ae83da19ee3748d6d4f567b4d9a7c656e331", + "reference": "8207ae83da19ee3748d6d4f567b4d9a7c656e331", "shasum": "" }, "require": { @@ -9550,7 +10261,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.4.18" + "source": "https://github.com/symfony/yaml/tree/v6.4.30" }, "funding": [ { @@ -9561,32 +10272,36 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-07T09:44:41+00:00" + "time": "2025-12-02T11:50:18+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d" + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^7.4 || ^8.0", - "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^2.0", @@ -9619,22 +10334,22 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" }, - "time": "2024-12-21T16:25:41+00:00" + "time": "2025-12-02T11:56:42+00:00" }, { "name": "twig/cssinliner-extra", - "version": "v3.20.0", + "version": "v3.22.0", "source": { "type": "git", "url": "https://github.com/twigphp/cssinliner-extra.git", - "reference": "378d29b61d6406c456e3a4afbd15bbeea0b72ea8" + "reference": "9bcbf04ca515e98fcde479fdceaa1d9d9e76173e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/378d29b61d6406c456e3a4afbd15bbeea0b72ea8", - "reference": "378d29b61d6406c456e3a4afbd15bbeea0b72ea8", + "url": "https://api.github.com/repos/twigphp/cssinliner-extra/zipball/9bcbf04ca515e98fcde479fdceaa1d9d9e76173e", + "reference": "9bcbf04ca515e98fcde479fdceaa1d9d9e76173e", "shasum": "" }, "require": { @@ -9678,7 +10393,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.20.0" + "source": "https://github.com/twigphp/cssinliner-extra/tree/v3.22.0" }, "funding": [ { @@ -9690,30 +10405,30 @@ "type": "tidelift" } ], - "time": "2025-01-31T20:45:36+00:00" + "time": "2025-07-29T08:07:07+00:00" }, { "name": "twig/extra-bundle", - "version": "v3.20.0", + "version": "v3.22.2", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876" + "reference": "09de9be7f6c0d19ede7b5a1dbfcfb2e9d1e0ea9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/9df5e1dbb6a68c0665ae5603f6f2c20815647876", - "reference": "9df5e1dbb6a68c0665ae5603f6f2c20815647876", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/09de9be7f6c0d19ede7b5a1dbfcfb2e9d1e0ea9e", + "reference": "09de9be7f6c0d19ede7b5a1dbfcfb2e9d1e0ea9e", "shasum": "" }, "require": { "php": ">=8.1.0", - "symfony/framework-bundle": "^5.4|^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.4|^7.0", + "symfony/framework-bundle": "^5.4|^6.4|^7.0|^8.0", + "symfony/twig-bundle": "^5.4|^6.4|^7.0|^8.0", "twig/twig": "^3.2|^4.0" }, "require-dev": { - "league/commonmark": "^1.0|^2.0", + "league/commonmark": "^2.7", "symfony/phpunit-bridge": "^6.4|^7.0", "twig/cache-extra": "^3.0", "twig/cssinliner-extra": "^3.0", @@ -9752,7 +10467,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.20.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.22.2" }, "funding": [ { @@ -9764,20 +10479,20 @@ "type": "tidelift" } ], - "time": "2025-02-08T09:47:15+00:00" + "time": "2025-12-05T08:51:53+00:00" }, { "name": "twig/inky-extra", - "version": "v3.20.0", + "version": "v3.22.0", "source": { "type": "git", "url": "https://github.com/twigphp/inky-extra.git", - "reference": "aacd79d94534b4a7fd6533cb5c33c4ee97239a0d" + "reference": "631f42c7123240d9c2497903679ec54bb25f2f52" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/aacd79d94534b4a7fd6533cb5c33c4ee97239a0d", - "reference": "aacd79d94534b4a7fd6533cb5c33c4ee97239a0d", + "url": "https://api.github.com/repos/twigphp/inky-extra/zipball/631f42c7123240d9c2497903679ec54bb25f2f52", + "reference": "631f42c7123240d9c2497903679ec54bb25f2f52", "shasum": "" }, "require": { @@ -9822,7 +10537,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/inky-extra/tree/v3.20.0" + "source": "https://github.com/twigphp/inky-extra/tree/v3.22.0" }, "funding": [ { @@ -9834,25 +10549,25 @@ "type": "tidelift" } ], - "time": "2025-01-31T20:45:36+00:00" + "time": "2025-07-29T08:07:07+00:00" }, { "name": "twig/intl-extra", - "version": "v3.20.0", + "version": "v3.22.1", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146" + "reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/05bc5d46b9df9e62399eae53e7c0b0633298b146", - "reference": "05bc5d46b9df9e62399eae53e7c0b0633298b146", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/93ac31e53cdd3f2e541f42690cd0c54ca8138ab1", + "reference": "93ac31e53cdd3f2e541f42690cd0c54ca8138ab1", "shasum": "" }, "require": { "php": ">=8.1.0", - "symfony/intl": "^5.4|^6.4|^7.0", + "symfony/intl": "^5.4|^6.4|^7.0|^8.0", "twig/twig": "^3.13|^4.0" }, "require-dev": { @@ -9886,7 +10601,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.20.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.22.1" }, "funding": [ { @@ -9898,25 +10613,25 @@ "type": "tidelift" } ], - "time": "2025-01-31T20:45:36+00:00" + "time": "2025-11-02T11:00:49+00:00" }, { "name": "twig/string-extra", - "version": "v3.20.0", + "version": "v3.22.1", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "4b3337544ac8f76c280def94e32b53acfaec0589" + "reference": "d5f16e0bec548bc96cce255b5f43d90492b8ce13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/4b3337544ac8f76c280def94e32b53acfaec0589", - "reference": "4b3337544ac8f76c280def94e32b53acfaec0589", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/d5f16e0bec548bc96cce255b5f43d90492b8ce13", + "reference": "d5f16e0bec548bc96cce255b5f43d90492b8ce13", "shasum": "" }, "require": { "php": ">=8.1.0", - "symfony/string": "^5.4|^6.4|^7.0", + "symfony/string": "^5.4|^6.4|^7.0|^8.0", "symfony/translation-contracts": "^1.1|^2|^3", "twig/twig": "^3.13|^4.0" }, @@ -9953,7 +10668,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.20.0" + "source": "https://github.com/twigphp/string-extra/tree/v3.22.1" }, "funding": [ { @@ -9965,20 +10680,20 @@ "type": "tidelift" } ], - "time": "2025-01-31T20:45:36+00:00" + "time": "2025-11-02T11:00:49+00:00" }, { "name": "twig/twig", - "version": "v3.20.0", + "version": "v3.22.2", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3468920399451a384bef53cf7996965f7cd40183" + "reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3468920399451a384bef53cf7996965f7cd40183", - "reference": "3468920399451a384bef53cf7996965f7cd40183", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/946ddeafa3c9f4ce279d1f34051af041db0e16f2", + "reference": "946ddeafa3c9f4ce279d1f34051af041db0e16f2", "shasum": "" }, "require": { @@ -10032,7 +10747,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.20.0" + "source": "https://github.com/twigphp/Twig/tree/v3.22.2" }, "funding": [ { @@ -10044,32 +10759,32 @@ "type": "tidelift" } ], - "time": "2025-02-13T08:34:43+00:00" + "time": "2025-12-14T11:28:47+00:00" }, { "name": "webmozart/assert", - "version": "1.11.0", + "version": "1.12.1", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/9be6926d8b485f55b9229203f962b51ed377ba68", + "reference": "9be6926d8b485f55b9229203f962b51ed377ba68", "shasum": "" }, "require": { "ext-ctype": "*", + "ext-date": "*", + "ext-filter": "*", "php": "^7.2 || ^8.0" }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" + "suggest": { + "ext-intl": "", + "ext-simplexml": "", + "ext-spl": "" }, "type": "library", "extra": { @@ -10100,9 +10815,9 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" + "source": "https://github.com/webmozarts/assert/tree/1.12.1" }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2025-10-29T15:56:20+00:00" }, { "name": "willdurand/jsonp-callback-validator", @@ -10205,26 +10920,27 @@ }, { "name": "zircote/swagger-php", - "version": "5.0.5", + "version": "5.7.6", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "2eb4005840058d8844a0bcc14403932331331068" + "reference": "e4727bad28cf426b026421162af384f893c0142c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/2eb4005840058d8844a0bcc14403932331331068", - "reference": "2eb4005840058d8844a0bcc14403932331331068", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e4727bad28cf426b026421162af384f893c0142c", + "reference": "e4727bad28cf426b026421162af384f893c0142c", "shasum": "" }, "require": { "ext-json": "*", "nikic/php-parser": "^4.19 || ^5.0", "php": ">=7.4", + "phpstan/phpdoc-parser": "^2.0", "psr/log": "^1.1 || ^2.0 || ^3.0", "symfony/deprecation-contracts": "^2 || ^3", - "symfony/finder": "^5.0 || ^6.0 || ^7.0", - "symfony/yaml": "^5.0 || ^6.0 || ^7.0" + "symfony/finder": "^5.0 || ^6.0 || ^7.0 || ^8.0", + "symfony/yaml": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "conflict": { "symfony/process": ">=6, <6.4.14" @@ -10239,7 +10955,8 @@ "vimeo/psalm": "^4.30 || ^5.0" }, "suggest": { - "doctrine/annotations": "^2.0" + "doctrine/annotations": "^2.0", + "radebatz/type-info-extras": "^1.0.2" }, "bin": [ "bin/openapi" @@ -10275,8 +10992,8 @@ "homepage": "https://radebatz.net" } ], - "description": "swagger-php - Generate interactive documentation for your RESTful API using phpdoc annotations", - "homepage": "https://github.com/zircote/swagger-php/", + "description": "Generate interactive documentation for your RESTful API using PHP attributes (preferred) or PHPDoc annotations", + "homepage": "https://github.com/zircote/swagger-php", "keywords": [ "api", "json", @@ -10285,9 +11002,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/5.0.5" + "source": "https://github.com/zircote/swagger-php/tree/5.7.6" }, - "time": "2025-02-24T00:48:00+00:00" + "time": "2025-12-04T01:33:01+00:00" } ], "packages-dev": [ @@ -10423,34 +11140,36 @@ }, { "name": "dama/doctrine-test-bundle", - "version": "v8.2.2", + "version": "v8.4.1", "source": { "type": "git", "url": "https://github.com/dmaicher/doctrine-test-bundle.git", - "reference": "eefe54fdf00d910f808efea9cfce9cc261064a0a" + "reference": "d9f4fb01a43da2e279ca190fa25ab9e26f15a0c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/eefe54fdf00d910f808efea9cfce9cc261064a0a", - "reference": "eefe54fdf00d910f808efea9cfce9cc261064a0a", + "url": "https://api.github.com/repos/dmaicher/doctrine-test-bundle/zipball/d9f4fb01a43da2e279ca190fa25ab9e26f15a0c8", + "reference": "d9f4fb01a43da2e279ca190fa25ab9e26f15a0c8", "shasum": "" }, "require": { "doctrine/dbal": "^3.3 || ^4.0", - "doctrine/doctrine-bundle": "^2.11.0", - "php": "^7.4 || ^8.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^5.4 || ^6.3 || ^7.0", - "symfony/framework-bundle": "^5.4 || ^6.3 || ^7.0" + "doctrine/doctrine-bundle": "^2.11.0 || ^3.0", + "php": ">= 8.1", + "psr/cache": "^2.0 || ^3.0", + "symfony/cache": "^6.4 || ^7.3 || ^8.0", + "symfony/framework-bundle": "^6.4 || ^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<10.0" }, "require-dev": { "behat/behat": "^3.0", "friendsofphp/php-cs-fixer": "^3.27", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^8.0 || ^9.0 || ^10.0 || ^11.0", - "symfony/phpunit-bridge": "^7.2", - "symfony/process": "^5.4 || ^6.3 || ^7.0", - "symfony/yaml": "^5.4 || ^6.3 || ^7.0" + "phpunit/phpunit": "^10.5.57 || ^11.5.41|| ^12.3.14", + "symfony/dotenv": "^6.4 || ^7.3 || ^8.0", + "symfony/process": "^6.4 || ^7.3 || ^8.0" }, "type": "symfony-bundle", "extra": { @@ -10460,7 +11179,7 @@ }, "autoload": { "psr-4": { - "DAMA\\DoctrineTestBundle\\": "src/DAMA/DoctrineTestBundle" + "DAMA\\DoctrineTestBundle\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -10484,22 +11203,22 @@ ], "support": { "issues": "https://github.com/dmaicher/doctrine-test-bundle/issues", - "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.2.2" + "source": "https://github.com/dmaicher/doctrine-test-bundle/tree/v8.4.1" }, - "time": "2025-02-04T14:37:36+00:00" + "time": "2025-12-07T21:48:15+00:00" }, { "name": "doctrine/data-fixtures", - "version": "2.0.2", + "version": "2.2.0", "source": { "type": "git", "url": "https://github.com/doctrine/data-fixtures.git", - "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e" + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/f7f1e12d6bceb58c204b3e77210a103c1c57601e", - "reference": "f7f1e12d6bceb58c204b3e77210a103c1c57601e", + "url": "https://api.github.com/repos/doctrine/data-fixtures/zipball/7a615ba135e45d67674bb623d90f34f6c7b6bd97", + "reference": "7a615ba135e45d67674bb623d90f34f6c7b6bd97", "shasum": "" }, "require": { @@ -10513,14 +11232,14 @@ "doctrine/phpcr-odm": "<1.3.0" }, "require-dev": { - "doctrine/coding-standard": "^12", + "doctrine/coding-standard": "^14", "doctrine/dbal": "^3.5 || ^4", "doctrine/mongodb-odm": "^1.3.0 || ^2.0.0", "doctrine/orm": "^2.14 || ^3", "ext-sqlite3": "*", "fig/log-test": "^1", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5.3", + "phpstan/phpstan": "2.1.31", + "phpunit/phpunit": "10.5.45 || 12.4.0", "symfony/cache": "^6.4 || ^7", "symfony/var-exporter": "^6.4 || ^7" }, @@ -10553,7 +11272,7 @@ ], "support": { "issues": "https://github.com/doctrine/data-fixtures/issues", - "source": "https://github.com/doctrine/data-fixtures/tree/2.0.2" + "source": "https://github.com/doctrine/data-fixtures/tree/2.2.0" }, "funding": [ { @@ -10569,27 +11288,27 @@ "type": "tidelift" } ], - "time": "2025-01-21T13:21:31+00:00" + "time": "2025-10-17T20:06:20+00:00" }, { "name": "doctrine/doctrine-fixtures-bundle", - "version": "3.7.1", + "version": "3.7.3", "source": { "type": "git", "url": "https://github.com/doctrine/DoctrineFixturesBundle.git", - "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9" + "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/bd59519a7532b9e1a41cef4049d5326dfac7def9", - "reference": "bd59519a7532b9e1a41cef4049d5326dfac7def9", + "url": "https://api.github.com/repos/doctrine/DoctrineFixturesBundle/zipball/4c3dfcc819ba2725a574f4286aa3f6459f582d5b", + "reference": "4c3dfcc819ba2725a574f4286aa3f6459f582d5b", "shasum": "" }, "require": { "doctrine/data-fixtures": "^1.5 || ^2.0", "doctrine/doctrine-bundle": "^2.2", "doctrine/orm": "^2.14.0 || ^3.0", - "doctrine/persistence": "^2.4 || ^3.0", + "doctrine/persistence": "^2.4 || ^3.0 || ^4", "php": "^7.4 || ^8.0", "psr/log": "^1 || ^2 || ^3", "symfony/config": "^5.4 || ^6.0 || ^7.0", @@ -10603,10 +11322,10 @@ "doctrine/dbal": "< 3" }, "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^2", - "phpunit/phpunit": "^9.6.13", - "symfony/phpunit-bridge": "^6.3.6" + "doctrine/coding-standard": "14.0.0", + "phpstan/phpstan": "2.1.32", + "phpunit/phpunit": "^9.6.13 || 11.4.14", + "symfony/phpunit-bridge": "7.3.4" }, "type": "symfony-bundle", "autoload": { @@ -10640,7 +11359,7 @@ ], "support": { "issues": "https://github.com/doctrine/DoctrineFixturesBundle/issues", - "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.1" + "source": "https://github.com/doctrine/DoctrineFixturesBundle/tree/3.7.3" }, "funding": [ { @@ -10656,7 +11375,7 @@ "type": "tidelift" } ], - "time": "2024-12-03T17:07:51+00:00" + "time": "2025-12-03T15:47:21+00:00" }, { "name": "evenement/evenement", @@ -10770,16 +11489,16 @@ }, { "name": "fidry/cpu-core-counter", - "version": "1.2.0", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "8520451a140d3f46ac33042715115e290cf5785f" + "reference": "db9508f7b1474469d9d3c53b86f817e344732678" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/8520451a140d3f46ac33042715115e290cf5785f", - "reference": "8520451a140d3f46ac33042715115e290cf5785f", + "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/db9508f7b1474469d9d3c53b86f817e344732678", + "reference": "db9508f7b1474469d9d3c53b86f817e344732678", "shasum": "" }, "require": { @@ -10789,10 +11508,10 @@ "fidry/makefile": "^0.2.0", "fidry/php-cs-fixer-config": "^1.1.2", "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^8.5.31 || ^9.5.26", "webmozarts/strict-phpunit": "^7.5" }, @@ -10819,7 +11538,7 @@ ], "support": { "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/1.2.0" + "source": "https://github.com/theofidry/cpu-core-counter/tree/1.3.0" }, "funding": [ { @@ -10827,61 +11546,62 @@ "type": "github" } ], - "time": "2024-08-06T10:04:20+00:00" + "time": "2025-08-14T07:29:31+00:00" }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.70.0", + "version": "v3.92.3", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e" + "reference": "2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e", - "reference": "2ecd5aae0edc937f0d5aa4a22d1d705c6b2e084e", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8", + "reference": "2ba8f5a60f6f42fb65758cfb3768434fa2d1c7e8", "shasum": "" }, "require": { - "clue/ndjson-react": "^1.0", + "clue/ndjson-react": "^1.3", "composer/semver": "^3.4", - "composer/xdebug-handler": "^3.0.3", + "composer/xdebug-handler": "^3.0.5", "ext-filter": "*", + "ext-hash": "*", "ext-json": "*", "ext-tokenizer": "*", - "fidry/cpu-core-counter": "^1.2", + "fidry/cpu-core-counter": "^1.3", "php": "^7.4 || ^8.0", - "react/child-process": "^0.6.5", - "react/event-loop": "^1.0", - "react/promise": "^2.0 || ^3.0", - "react/socket": "^1.0", - "react/stream": "^1.0", - "sebastian/diff": "^4.0 || ^5.1 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.4 || ^7.0", - "symfony/event-dispatcher": "^5.4 || ^6.4 || ^7.0", - "symfony/filesystem": "^5.4 || ^6.4 || ^7.0", - "symfony/finder": "^5.4 || ^6.4 || ^7.0", - "symfony/options-resolver": "^5.4 || ^6.4 || ^7.0", - "symfony/polyfill-mbstring": "^1.31", - "symfony/polyfill-php80": "^1.31", - "symfony/polyfill-php81": "^1.31", - "symfony/process": "^5.4 || ^6.4 || ^7.2", - "symfony/stopwatch": "^5.4 || ^6.4 || ^7.0" + "react/child-process": "^0.6.6", + "react/event-loop": "^1.5", + "react/socket": "^1.16", + "react/stream": "^1.4", + "sebastian/diff": "^4.0.6 || ^5.1.1 || ^6.0.2 || ^7.0", + "symfony/console": "^5.4.47 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/filesystem": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/finder": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/options-resolver": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0", + "symfony/polyfill-mbstring": "^1.33", + "symfony/polyfill-php80": "^1.33", + "symfony/polyfill-php81": "^1.33", + "symfony/polyfill-php84": "^1.33", + "symfony/process": "^5.4.47 || ^6.4.24 || ^7.2 || ^8.0", + "symfony/stopwatch": "^5.4.45 || ^6.4.24 || ^7.0 || ^8.0" }, "require-dev": { - "facile-it/paraunit": "^1.3.1 || ^2.5", - "infection/infection": "^0.29.10", - "justinrainbow/json-schema": "^5.3 || ^6.0", - "keradus/cli-executor": "^2.1", + "facile-it/paraunit": "^1.3.1 || ^2.7", + "infection/infection": "^0.31.0", + "justinrainbow/json-schema": "^6.5", + "keradus/cli-executor": "^2.2", "mikey179/vfsstream": "^1.6.12", - "php-coveralls/php-coveralls": "^2.7", - "php-cs-fixer/accessible-object": "^1.1", + "php-coveralls/php-coveralls": "^2.9", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.6", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.6", - "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.7", - "symfony/var-dumper": "^5.4.48 || ^6.4.18 || ^7.2.0", - "symfony/yaml": "^5.4.45 || ^6.4.18 || ^7.2.0" + "phpunit/phpunit": "^9.6.25 || ^10.5.53 || ^11.5.34", + "symfony/polyfill-php85": "^1.33", + "symfony/var-dumper": "^5.4.48 || ^6.4.24 || ^7.3.2 || ^8.0", + "symfony/yaml": "^5.4.45 || ^6.4.24 || ^7.3.2 || ^8.0" }, "suggest": { "ext-dom": "For handling output formats in XML", @@ -10896,7 +11616,7 @@ "PhpCsFixer\\": "src/" }, "exclude-from-classmap": [ - "src/Fixer/Internal/*" + "src/**/Internal/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -10922,7 +11642,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.70.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.92.3" }, "funding": [ { @@ -10930,20 +11650,20 @@ "type": "github" } ], - "time": "2025-02-22T23:30:51+00:00" + "time": "2025-12-18T10:45:02+00:00" }, { "name": "masterminds/html5", - "version": "2.9.0", + "version": "2.10.0", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" + "reference": "fcf91eb64359852f00d921887b219479b4f21251" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/fcf91eb64359852f00d921887b219479b4f21251", + "reference": "fcf91eb64359852f00d921887b219479b4f21251", "shasum": "" }, "require": { @@ -10995,9 +11715,9 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.10.0" }, - "time": "2024-03-31T07:05:07+00:00" + "time": "2025-07-25T09:04:22+00:00" }, { "name": "phar-io/manifest", @@ -11119,16 +11839,11 @@ }, { "name": "phpstan/phpstan", - "version": "2.1.6", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "6eaec7c6c9e90dcfe46ad1e1ffa5171e2dab641c" - }, + "version": "2.1.33", "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/6eaec7c6c9e90dcfe46ad1e1ffa5171e2dab641c", - "reference": "6eaec7c6c9e90dcfe46ad1e1ffa5171e2dab641c", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9e800e6bee7d5bd02784d4c6069b48032d16224f", + "reference": "9e800e6bee7d5bd02784d4c6069b48032d16224f", "shasum": "" }, "require": { @@ -11173,25 +11888,25 @@ "type": "github" } ], - "time": "2025-02-19T15:46:42+00:00" + "time": "2025-12-05T10:24:31+00:00" }, { "name": "phpstan/phpstan-deprecation-rules", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", - "reference": "1cc1259cb91ee4cfbb5c39bca9f635f067c910b4" + "reference": "468e02c9176891cc901143da118f09dc9505fc2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/1cc1259cb91ee4cfbb5c39bca9f635f067c910b4", - "reference": "1cc1259cb91ee4cfbb5c39bca9f635f067c910b4", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/468e02c9176891cc901143da118f09dc9505fc2f", + "reference": "468e02c9176891cc901143da118f09dc9505fc2f", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0" + "phpstan/phpstan": "^2.1.15" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", @@ -11218,27 +11933,27 @@ "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", "support": { "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", - "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.1" + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.3" }, - "time": "2024-11-28T21:56:36+00:00" + "time": "2025-05-14T10:56:57+00:00" }, { "name": "phpstan/phpstan-doctrine", - "version": "2.0.1", + "version": "2.0.12", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-doctrine.git", - "reference": "bdb6a835c5aa9725979694ae9b70591e180f4853" + "reference": "d20ee0373d22735271f1eb4d631856b5f847d399" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/bdb6a835c5aa9725979694ae9b70591e180f4853", - "reference": "bdb6a835c5aa9725979694ae9b70591e180f4853", + "url": "https://api.github.com/repos/phpstan/phpstan-doctrine/zipball/d20ee0373d22735271f1eb4d631856b5f847d399", + "reference": "d20ee0373d22735271f1eb4d631856b5f847d399", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0.3" + "phpstan/phpstan": "^2.1.13" }, "conflict": { "doctrine/collections": "<1.0", @@ -11262,11 +11977,13 @@ "gedmo/doctrine-extensions": "^3.8", "nesbot/carbon": "^2.49", "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-deprecation-rules": "^2.0.2", + "phpstan/phpstan-phpunit": "^2.0.8", "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.6.20", "ramsey/uuid": "^4.2", - "symfony/cache": "^5.4" + "symfony/cache": "^5.4", + "symfony/uid": "^5.4 || ^6.4 || ^7.3" }, "type": "phpstan-extension", "extra": { @@ -11289,33 +12006,35 @@ "description": "Doctrine extensions for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-doctrine/issues", - "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.1" + "source": "https://github.com/phpstan/phpstan-doctrine/tree/2.0.12" }, - "time": "2024-12-02T16:48:00+00:00" + "time": "2025-12-01T11:34:02+00:00" }, { "name": "phpstan/phpstan-phpunit", - "version": "2.0.4", + "version": "2.0.11", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "d09e152f403c843998d7a52b5d87040c937525dd" + "reference": "5e30669bef866eff70db8b58d72a5c185aa82414" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/d09e152f403c843998d7a52b5d87040c937525dd", - "reference": "d09e152f403c843998d7a52b5d87040c937525dd", + "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/5e30669bef866eff70db8b58d72a5c185aa82414", + "reference": "5e30669bef866eff70db8b58d72a5c185aa82414", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0.4" + "phpstan/phpstan": "^2.1.32" }, "conflict": { "phpunit/phpunit": "<7.0" }, "require-dev": { + "nikic/php-parser": "^5", "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-deprecation-rules": "^2.0", "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.6" }, @@ -11340,27 +12059,27 @@ "description": "PHPUnit extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.4" + "source": "https://github.com/phpstan/phpstan-phpunit/tree/2.0.11" }, - "time": "2025-01-22T13:07:38+00:00" + "time": "2025-12-19T09:05:35+00:00" }, { "name": "phpstan/phpstan-strict-rules", - "version": "2.0.3", + "version": "2.0.7", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "8b88b5f818bfa301e0c99154ab622dace071c3ba" + "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/8b88b5f818bfa301e0c99154ab622dace071c3ba", - "reference": "8b88b5f818bfa301e0c99154ab622dace071c3ba", + "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/d6211c46213d4181054b3d77b10a5c5cb0d59538", + "reference": "d6211c46213d4181054b3d77b10a5c5cb0d59538", "shasum": "" }, "require": { "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0.4" + "phpstan/phpstan": "^2.1.29" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", @@ -11388,38 +12107,38 @@ "description": "Extra strict and opinionated rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.3" + "source": "https://github.com/phpstan/phpstan-strict-rules/tree/2.0.7" }, - "time": "2025-01-21T10:52:14+00:00" + "time": "2025-09-26T11:19:08+00:00" }, { "name": "phpstan/phpstan-symfony", - "version": "2.0.2", + "version": "2.0.9", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan-symfony.git", - "reference": "65f02c7e585f3c7372e42e14d3d87da034031553" + "reference": "24d8c157aa483141b0579d705ef0aac9e1b95436" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/65f02c7e585f3c7372e42e14d3d87da034031553", - "reference": "65f02c7e585f3c7372e42e14d3d87da034031553", + "url": "https://api.github.com/repos/phpstan/phpstan-symfony/zipball/24d8c157aa483141b0579d705ef0aac9e1b95436", + "reference": "24d8c157aa483141b0579d705ef0aac9e1b95436", "shasum": "" }, "require": { "ext-simplexml": "*", "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.1.2" + "phpstan/phpstan": "^2.1.13" }, "conflict": { "symfony/framework-bundle": "<3.0" }, "require-dev": { "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-phpunit": "^2.0.8", "phpstan/phpstan-strict-rules": "^2.0", "phpunit/phpunit": "^9.6", - "psr/container": "1.0 || 1.1.1", + "psr/container": "1.1.2", "symfony/config": "^5.4 || ^6.1", "symfony/console": "^5.4 || ^6.1", "symfony/dependency-injection": "^5.4 || ^6.1", @@ -11459,9 +12178,9 @@ "description": "Symfony Framework extensions and rules for PHPStan", "support": { "issues": "https://github.com/phpstan/phpstan-symfony/issues", - "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.2" + "source": "https://github.com/phpstan/phpstan-symfony/tree/2.0.9" }, - "time": "2025-01-21T18:57:07+00:00" + "time": "2025-11-29T11:17:28+00:00" }, { "name": "phpunit/php-code-coverage", @@ -11786,16 +12505,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.45", + "version": "10.5.60", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8" + "reference": "f2e26f52f80ef77832e359205f216eeac00e320c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/f2e26f52f80ef77832e359205f216eeac00e320c", + "reference": "f2e26f52f80ef77832e359205f216eeac00e320c", "shasum": "" }, "require": { @@ -11805,7 +12524,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.1", @@ -11816,13 +12535,13 @@ "phpunit/php-timer": "^6.0.0", "sebastian/cli-parser": "^2.0.1", "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", + "sebastian/comparator": "^5.0.4", "sebastian/diff": "^5.1.1", "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", + "sebastian/exporter": "^5.1.4", "sebastian/global-state": "^6.0.2", "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", + "sebastian/recursion-context": "^5.0.1", "sebastian/type": "^4.0.0", "sebastian/version": "^4.0.1" }, @@ -11867,7 +12586,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.60" }, "funding": [ { @@ -11878,12 +12597,20 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2025-02-06T16:08:12+00:00" + "time": "2025-12-06T07:50:42+00:00" }, { "name": "react/cache", @@ -11959,16 +12686,16 @@ }, { "name": "react/child-process", - "version": "v0.6.6", + "version": "v0.6.7", "source": { "type": "git", "url": "https://github.com/reactphp/child-process.git", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159" + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/child-process/zipball/1721e2b93d89b745664353b9cfc8f155ba8a6159", - "reference": "1721e2b93d89b745664353b9cfc8f155ba8a6159", + "url": "https://api.github.com/repos/reactphp/child-process/zipball/970f0e71945556422ee4570ccbabaedc3cf04ad3", + "reference": "970f0e71945556422ee4570ccbabaedc3cf04ad3", "shasum": "" }, "require": { @@ -12022,7 +12749,7 @@ ], "support": { "issues": "https://github.com/reactphp/child-process/issues", - "source": "https://github.com/reactphp/child-process/tree/v0.6.6" + "source": "https://github.com/reactphp/child-process/tree/v0.6.7" }, "funding": [ { @@ -12030,20 +12757,20 @@ "type": "open_collective" } ], - "time": "2025-01-01T16:37:48+00:00" + "time": "2025-12-23T15:25:20+00:00" }, { "name": "react/dns", - "version": "v1.13.0", + "version": "v1.14.0", "source": { "type": "git", "url": "https://github.com/reactphp/dns.git", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5" + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/dns/zipball/eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", - "reference": "eb8ae001b5a455665c89c1df97f6fb682f8fb0f5", + "url": "https://api.github.com/repos/reactphp/dns/zipball/7562c05391f42701c1fccf189c8225fece1cd7c3", + "reference": "7562c05391f42701c1fccf189c8225fece1cd7c3", "shasum": "" }, "require": { @@ -12098,7 +12825,7 @@ ], "support": { "issues": "https://github.com/reactphp/dns/issues", - "source": "https://github.com/reactphp/dns/tree/v1.13.0" + "source": "https://github.com/reactphp/dns/tree/v1.14.0" }, "funding": [ { @@ -12106,20 +12833,20 @@ "type": "open_collective" } ], - "time": "2024-06-13T14:18:03+00:00" + "time": "2025-11-18T19:34:28+00:00" }, { "name": "react/event-loop", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/reactphp/event-loop.git", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354" + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/event-loop/zipball/bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", - "reference": "bbe0bd8c51ffc05ee43f1729087ed3bdf7d53354", + "url": "https://api.github.com/repos/reactphp/event-loop/zipball/ba276bda6083df7e0050fd9b33f66ad7a4ac747a", + "reference": "ba276bda6083df7e0050fd9b33f66ad7a4ac747a", "shasum": "" }, "require": { @@ -12170,7 +12897,7 @@ ], "support": { "issues": "https://github.com/reactphp/event-loop/issues", - "source": "https://github.com/reactphp/event-loop/tree/v1.5.0" + "source": "https://github.com/reactphp/event-loop/tree/v1.6.0" }, "funding": [ { @@ -12178,27 +12905,27 @@ "type": "open_collective" } ], - "time": "2023-11-13T13:48:05+00:00" + "time": "2025-11-17T20:46:25+00:00" }, { "name": "react/promise", - "version": "v3.2.0", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/reactphp/promise.git", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63" + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/promise/zipball/8a164643313c71354582dc850b42b33fa12a4b63", - "reference": "8a164643313c71354582dc850b42b33fa12a4b63", + "url": "https://api.github.com/repos/reactphp/promise/zipball/23444f53a813a3296c1368bb104793ce8d88f04a", + "reference": "23444f53a813a3296c1368bb104793ce8d88f04a", "shasum": "" }, "require": { "php": ">=7.1.0" }, "require-dev": { - "phpstan/phpstan": "1.10.39 || 1.4.10", + "phpstan/phpstan": "1.12.28 || 1.4.10", "phpunit/phpunit": "^9.6 || ^7.5" }, "type": "library", @@ -12243,7 +12970,7 @@ ], "support": { "issues": "https://github.com/reactphp/promise/issues", - "source": "https://github.com/reactphp/promise/tree/v3.2.0" + "source": "https://github.com/reactphp/promise/tree/v3.3.0" }, "funding": [ { @@ -12251,20 +12978,20 @@ "type": "open_collective" } ], - "time": "2024-05-24T10:39:05+00:00" + "time": "2025-08-19T18:57:03+00:00" }, { "name": "react/socket", - "version": "v1.16.0", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/reactphp/socket.git", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1" + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/reactphp/socket/zipball/23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", - "reference": "23e4ff33ea3e160d2d1f59a0e6050e4b0fb0eac1", + "url": "https://api.github.com/repos/reactphp/socket/zipball/ef5b17b81f6f60504c539313f94f2d826c5faa08", + "reference": "ef5b17b81f6f60504c539313f94f2d826c5faa08", "shasum": "" }, "require": { @@ -12323,7 +13050,7 @@ ], "support": { "issues": "https://github.com/reactphp/socket/issues", - "source": "https://github.com/reactphp/socket/tree/v1.16.0" + "source": "https://github.com/reactphp/socket/tree/v1.17.0" }, "funding": [ { @@ -12331,7 +13058,7 @@ "type": "open_collective" } ], - "time": "2024-07-26T10:38:09+00:00" + "time": "2025-11-19T20:47:34+00:00" }, { "name": "react/stream", @@ -12581,16 +13308,16 @@ }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "5.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/e8e53097718d2b53cfb2aa859b06a41abf58c62e", + "reference": "e8e53097718d2b53cfb2aa859b06a41abf58c62e", "shasum": "" }, "require": { @@ -12646,15 +13373,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2025-09-07T05:25:07+00:00" }, { "name": "sebastian/complexity", @@ -12847,16 +13586,16 @@ }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "5.1.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "0735b90f4da94969541dac1da743446e276defa6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/0735b90f4da94969541dac1da743446e276defa6", + "reference": "0735b90f4da94969541dac1da743446e276defa6", "shasum": "" }, "require": { @@ -12865,7 +13604,7 @@ "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -12913,15 +13652,27 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.4" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2025-09-24T06:09:11+00:00" }, { "name": "sebastian/global-state", @@ -13157,23 +13908,23 @@ }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "5.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/47e34210757a2f37a97dcd207d032e1b01e64c7a", + "reference": "47e34210757a2f37a97dcd207d032e1b01e64c7a", "shasum": "" }, "require": { "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^10.5" }, "type": "library", "extra": { @@ -13208,15 +13959,28 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2025-08-10T07:50:56+00:00" }, { "name": "sebastian/type", @@ -13329,16 +14093,16 @@ }, { "name": "symfony/browser-kit", - "version": "v6.4.19", + "version": "v6.4.28", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f" + "reference": "067e301786bbb58048077fc10507aceb18226e23" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ce95f3e3239159e7fa3be7690c6ce95a4714637f", - "reference": "ce95f3e3239159e7fa3be7690c6ce95a4714637f", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/067e301786bbb58048077fc10507aceb18226e23", + "reference": "067e301786bbb58048077fc10507aceb18226e23", "shasum": "" }, "require": { @@ -13377,7 +14141,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.4.19" + "source": "https://github.com/symfony/browser-kit/tree/v6.4.28" }, "funding": [ { @@ -13388,25 +14152,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-14T11:23:16+00:00" + "time": "2025-10-16T22:35:35+00:00" }, { "name": "symfony/debug-bundle", - "version": "v6.4.13", + "version": "v6.4.27", "source": { "type": "git", "url": "https://github.com/symfony/debug-bundle.git", - "reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff" + "reference": "21a61c55192d558a6b81cdb12e8c010fc9474fe0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/7bcfaff39e094cc09455201916d016d9b2ae08ff", - "reference": "7bcfaff39e094cc09455201916d016d9b2ae08ff", + "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/21a61c55192d558a6b81cdb12e8c010fc9474fe0", + "reference": "21a61c55192d558a6b81cdb12e8c010fc9474fe0", "shasum": "" }, "require": { @@ -13451,7 +14219,7 @@ "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v6.4.13" + "source": "https://github.com/symfony/debug-bundle/tree/v6.4.27" }, "funding": [ { @@ -13462,25 +14230,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:18:03+00:00" + "time": "2025-10-11T17:35:31+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.4.19", + "version": "v6.4.25", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "19073e3e0bb50cbc1cb286077069b3107085206f" + "reference": "976302990f9f2a6d4c07206836dd4ca77cae9524" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/19073e3e0bb50cbc1cb286077069b3107085206f", - "reference": "19073e3e0bb50cbc1cb286077069b3107085206f", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/976302990f9f2a6d4c07206836dd4ca77cae9524", + "reference": "976302990f9f2a6d4c07206836dd4ca77cae9524", "shasum": "" }, "require": { @@ -13518,7 +14290,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.4.19" + "source": "https://github.com/symfony/dom-crawler/tree/v6.4.25" }, "funding": [ { @@ -13529,25 +14301,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-14T17:58:34+00:00" + "time": "2025-08-05T18:56:08+00:00" }, { "name": "symfony/phpunit-bridge", - "version": "v6.4.16", + "version": "v6.4.26", "source": { "type": "git", "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "cebafe2f1ad2d1e745c1015b7c2519592341e4e6" + "reference": "406aa80401bf960e7a173a3ccf268ae82b6bc93f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/cebafe2f1ad2d1e745c1015b7c2519592341e4e6", - "reference": "cebafe2f1ad2d1e745c1015b7c2519592341e4e6", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/406aa80401bf960e7a173a3ccf268ae82b6bc93f", + "reference": "406aa80401bf960e7a173a3ccf268ae82b6bc93f", "shasum": "" }, "require": { @@ -13599,8 +14375,11 @@ ], "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", + "keywords": [ + "testing" + ], "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.16" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.4.26" }, "funding": [ { @@ -13611,25 +14390,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T15:06:22+00:00" + "time": "2025-09-12T08:37:02+00:00" }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.19", + "version": "v6.4.27", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "7d1026a8e950d416cb5148ae88ac23db5d264839" + "reference": "4c2ab411372e8bd854678cd7c81f1a9bfd6914aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/7d1026a8e950d416cb5148ae88ac23db5d264839", - "reference": "7d1026a8e950d416cb5148ae88ac23db5d264839", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/4c2ab411372e8bd854678cd7c81f1a9bfd6914aa", + "reference": "4c2ab411372e8bd854678cd7c81f1a9bfd6914aa", "shasum": "" }, "require": { @@ -13682,7 +14465,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.19" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.27" }, "funding": [ { @@ -13693,25 +14476,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-14T12:21:59+00:00" + "time": "2025-10-05T13:55:43+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b7489ce515e168639d17feec34b8847c326b0b3c", + "reference": "b7489ce515e168639d17feec34b8847c326b0b3c", "shasum": "" }, "require": { @@ -13740,7 +14527,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/1.3.1" }, "funding": [ { @@ -13748,7 +14535,7 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-11-17T20:03:58+00:00" } ], "aliases": [], @@ -13757,7 +14544,7 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": "8.1.*||8.2.*||8.3.*||8.4.*", + "php": "8.1.*||8.2.*||8.3.*||8.4.*||8.5.*", "ext-gd": "*", "ext-intl": "*", "ext-json": "*", diff --git a/config/locales.php b/config/locales.php index af28db594..024797a25 100644 --- a/config/locales.php +++ b/config/locales.php @@ -6,17 +6,24 @@ 'rtl' => true, 'translation' => true, ], + 'bg' => + [ + 'date' => 'd.MM.y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => true, + ], 'cs' => [ - 'date' => 'dd.MM.yy', - 'time' => 'H:mm', + 'date' => 'dd.MM.y', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'cs_CZ' => [ - 'date' => 'dd.MM.yy', - 'time' => 'H:mm', + 'date' => 'dd.MM.y', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], @@ -43,84 +50,84 @@ ], 'de' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'de_AT' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'de_BE' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'de_CH' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'de_DE' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'de_IT' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'de_LI' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'de_LU' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'el' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => true, ], 'el_CY' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'el_GR' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'en' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => true, @@ -148,7 +155,7 @@ ], 'en_AS' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -162,7 +169,7 @@ ], 'en_AU' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -176,14 +183,14 @@ ], 'en_BE' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'en_BI' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -204,14 +211,14 @@ ], 'en_BW' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'en_BZ' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -265,6 +272,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_CZ' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_DE' => [ 'date' => 'dd/MM/y', @@ -293,10 +307,17 @@ 'rtl' => false, 'translation' => false, ], + 'en_ES' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_FI' => [ 'date' => 'dd/MM/y', - 'time' => 'H.mm', + 'time' => 'HH.mm', 'rtl' => false, 'translation' => false, ], @@ -321,6 +342,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_FR' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_GB' => [ 'date' => 'dd/MM/y', @@ -363,9 +391,16 @@ 'rtl' => false, 'translation' => false, ], + 'en_GS' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_GU' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -384,6 +419,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_HU' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_ID' => [ 'date' => 'dd/MM/y', @@ -401,7 +443,7 @@ 'en_IL' => [ 'date' => 'dd/MM/y', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], @@ -414,7 +456,7 @@ ], 'en_IN' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -426,6 +468,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_IT' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_JE' => [ 'date' => 'dd/MM/y', @@ -498,7 +547,7 @@ ], 'en_MH' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -512,7 +561,7 @@ ], 'en_MP' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -540,7 +589,7 @@ ], 'en_MV' => [ - 'date' => 'd-M-yy', + 'date' => 'd-M-y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -587,6 +636,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_NO' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_NR' => [ 'date' => 'dd/MM/y', @@ -617,7 +673,7 @@ ], 'en_PH' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -629,6 +685,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_PL' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_PN' => [ 'date' => 'dd/MM/y', @@ -638,11 +701,18 @@ ], 'en_PR' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], + 'en_PT' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_PW' => [ 'date' => 'dd/MM/y', @@ -650,6 +720,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_RO' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_RW' => [ 'date' => 'dd/MM/y', @@ -687,7 +764,7 @@ ], 'en_SG' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -706,6 +783,13 @@ 'rtl' => false, 'translation' => false, ], + 'en_SK' => + [ + 'date' => 'M/d/y', + 'time' => 'HH:mm', + 'rtl' => false, + 'translation' => false, + ], 'en_SL' => [ 'date' => 'dd/MM/y', @@ -785,14 +869,14 @@ ], 'en_UM' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'en_US' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -813,7 +897,7 @@ ], 'en_VI' => [ - 'date' => 'M/d/yy', + 'date' => 'M/d/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -855,168 +939,168 @@ ], 'eo' => [ - 'date' => 'yy-MM-dd', + 'date' => 'y-MM-dd', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'es' => [ - 'date' => 'd/M/yy', - 'time' => 'H:mm', + 'date' => 'd/M/y', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'es_AR' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_BO' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_BR' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'es_BZ' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'es_CL' => [ - 'date' => 'dd-MM-yy', + 'date' => 'dd-MM-y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_CO' => [ - 'date' => 'd/MM/yy', + 'date' => 'd/MM/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_CR' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_CU' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_DO' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_EC' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_ES' => [ - 'date' => 'd/M/yy', - 'time' => 'H:mm', + 'date' => 'd/M/y', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'es_GQ' => [ - 'date' => 'd/M/yy', - 'time' => 'H:mm', + 'date' => 'd/M/y', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'es_GT' => [ - 'date' => 'd/MM/yy', + 'date' => 'd/MM/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_HN' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_MX' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_NI' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_PA' => [ - 'date' => 'MM/dd/yy', + 'date' => 'MM/dd/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_PE' => [ - 'date' => 'd/MM/yy', + 'date' => 'd/MM/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_PH' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_PR' => [ - 'date' => 'MM/dd/yy', + 'date' => 'MM/dd/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_PY' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_SV' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -1030,28 +1114,28 @@ ], 'es_UY' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'es_VE' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'eu' => [ - 'date' => 'yy/M/d', + 'date' => 'y/M/d', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'eu_ES' => [ - 'date' => 'yy/M/d', + 'date' => 'y/M/d', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1059,55 +1143,55 @@ 'fa' => [ 'date' => 'y/M/d', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => true, 'translation' => true, ], 'fa_AF' => [ 'date' => 'y/M/d', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => true, 'translation' => false, ], 'fa_IR' => [ 'date' => 'y/M/d', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => true, 'translation' => false, ], 'fi' => [ 'date' => 'd.M.y', - 'time' => 'H.mm', + 'time' => 'HH.mm', 'rtl' => false, 'translation' => true, ], 'fi_FI' => [ 'date' => 'd.M.y', - 'time' => 'H.mm', + 'time' => 'HH.mm', 'rtl' => false, 'translation' => false, ], 'fo' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'fo_DK' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'fo_FO' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1121,7 +1205,7 @@ ], 'fr_BE' => [ - 'date' => 'd/MM/yy', + 'date' => 'd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1184,7 +1268,7 @@ ], 'fr_CH' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1444,14 +1528,14 @@ 'he' => [ 'date' => 'd.M.y', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => true, 'translation' => true, ], 'he_IL' => [ 'date' => 'd.M.y', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => true, 'translation' => false, ], @@ -1464,7 +1548,7 @@ ], 'hr_BA' => [ - 'date' => 'd. M. yy.', + 'date' => 'd. M. y.', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1479,55 +1563,55 @@ 'hu' => [ 'date' => 'y. MM. dd.', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'hu_HU' => [ 'date' => 'y. MM. dd.', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'id' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH.mm', 'rtl' => false, 'translation' => true, ], 'it' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'it_CH' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'it_IT' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'it_SM' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'it_VA' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1535,41 +1619,41 @@ 'ja' => [ 'date' => 'y/MM/dd', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'ja_JP' => [ 'date' => 'y/MM/dd', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'ko' => [ - 'date' => 'yy. M. d.', + 'date' => 'y. M. d.', 'time' => 'h:mm a', 'rtl' => false, 'translation' => true, ], 'ko_CN' => [ - 'date' => 'yy. M. d.', + 'date' => 'y. M. d.', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'ko_KP' => [ - 'date' => 'yy. M. d.', + 'date' => 'y. M. d.', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'ko_KR' => [ - 'date' => 'yy. M. d.', + 'date' => 'y. M. d.', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, @@ -1639,7 +1723,7 @@ ], 'pa' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => true, @@ -1667,7 +1751,7 @@ ], 'pt_AO' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1681,70 +1765,70 @@ ], 'pt_CH' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_CV' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_GQ' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_GW' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_LU' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_MO' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'h:mm a', 'rtl' => false, 'translation' => false, ], 'pt_MZ' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_PT' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_ST' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'pt_TL' => [ - 'date' => 'dd/MM/yy', + 'date' => 'dd/MM/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1822,20 +1906,20 @@ 'sk' => [ 'date' => 'd. M. y', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'sk_SK' => [ 'date' => 'd. M. y', - 'time' => 'H:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'sl' => [ - 'date' => 'd. M. yy', + 'date' => 'd. M. y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, @@ -1868,6 +1952,13 @@ 'rtl' => false, 'translation' => false, ], + 'ta' => + [ + 'date' => 'd/M/y', + 'time' => 'h:mm a', + 'rtl' => false, + 'translation' => true, + ], 'tr' => [ 'date' => 'd.MM.y', @@ -1891,28 +1982,28 @@ ], 'uk' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'uk_UA' => [ - 'date' => 'dd.MM.yy', + 'date' => 'dd.MM.y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, ], 'vi' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'vi_VN' => [ - 'date' => 'd/M/yy', + 'date' => 'd/M/y', 'time' => 'HH:mm', 'rtl' => false, 'translation' => false, @@ -1927,14 +2018,14 @@ 'zh_Hant' => [ 'date' => 'y/M/d', - 'time' => 'Bh:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], 'zh_Hant_TW' => [ 'date' => 'y/M/d', - 'time' => 'Bh:mm', + 'time' => 'HH:mm', 'rtl' => false, 'translation' => true, ], diff --git a/config/packages/fos_rest.yaml b/config/packages/fos_rest.yaml index 4ef939b25..f65e4f35e 100644 --- a/config/packages/fos_rest.yaml +++ b/config/packages/fos_rest.yaml @@ -39,3 +39,5 @@ fos_rest: - { path: ^/api, prefer_extension: true, fallback_format: json, priorities: [ json ] } zone: - { path: ^/api/* } + service: + view_handler: App\API\ViewHandler \ No newline at end of file diff --git a/config/packages/framework.yaml b/config/packages/framework.yaml index 063104063..b798664ef 100644 --- a/config/packages/framework.yaml +++ b/config/packages/framework.yaml @@ -1,6 +1,7 @@ # see https://symfony.com/doc/current/reference/configuration/framework.html parameters: env(TRUSTED_PROXIES): '' + env(TRUSTED_HOSTS): '' framework: secret: '%env(APP_SECRET)%' @@ -14,6 +15,7 @@ framework: enable_attributes: true trusted_proxies: '%env(string:TRUSTED_PROXIES)%' + trusted_hosts: '%env(string:TRUSTED_HOSTS)%' exceptions: App\Validator\ValidationFailedException: @@ -25,6 +27,7 @@ framework: # Enables session support. Note that the session will ONLY be started if you read or write from it. # Remove or comment this section to explicitly disable session support. session: + name: KIMAI_SESSION handler_id: App\Security\SessionHandler cookie_secure: auto cookie_samesite: lax diff --git a/config/packages/kimai.yaml b/config/packages/kimai.yaml index 1f539b612..595a53bd1 100644 --- a/config/packages/kimai.yaml +++ b/config/packages/kimai.yaml @@ -119,8 +119,8 @@ kimai: roles: ROLE_USER: ['view_team_member','time_team_project','create_tag','view_reporting'] ROLE_TEAMLEAD: ['view_rate_own_timesheet','view_rate_other_timesheet','hourly-rate_own_profile','view_team_member','hours_other_profile'] - ROLE_ADMIN: ['hourly-rate_own_profile','edit_exported_timesheet','teams_own_profile','view_team_member','view_all_data','contract_other_profile','hours_other_profile'] - ROLE_SUPER_ADMIN: ['hourly-rate_own_profile','hourly-rate_other_profile','roles_own_profile','supervisor_own_profile','system_information','system_configuration','plugins','edit_exported_timesheet','teams_own_profile','view_team_member','upload_invoice_template','view_all_data','contract_other_profile','hours_other_profile'] + ROLE_ADMIN: ['hourly-rate_own_profile','edit_exported_timesheet','teams_own_profile','view_team_member','view_all_data','contract_other_profile','hours_other_profile','create_export_template'] + ROLE_SUPER_ADMIN: ['hourly-rate_own_profile','hourly-rate_other_profile','roles_own_profile','supervisor_own_profile','system_information','system_configuration','plugins','edit_exported_timesheet','teams_own_profile','view_team_member','upload_invoice_template','view_all_data','contract_other_profile','hours_other_profile','create_export_template'] # -------------------------------------------------------------------------------- diff --git a/config/packages/nelmio_api_doc.yaml b/config/packages/nelmio_api_doc.yaml index e06ca83b7..6046dc265 100644 --- a/config/packages/nelmio_api_doc.yaml +++ b/config/packages/nelmio_api_doc.yaml @@ -1,21 +1,22 @@ nelmio_api_doc: + operation_id_generation: conditionally_prepend models: use_jms: true names: - - { alias: CustomerEditForm, type: App\Form\API\CustomerApiEditForm, groups: [Default, Entity, Customer] } + - { alias: CustomerEditForm, type: App\Form\API\CustomerApiEditForm, groups: [Default, Entity, Customer, Customer_Entity] } - { alias: CustomerEntity, type: App\Entity\Customer, groups: [Default, Entity, Customer, Customer_Entity, Not_Expanded] } - { alias: Customer, type: App\Entity\Customer, groups: [Default, Not_Expanded] } - { alias: CustomerRate, type: App\Entity\CustomerRate, groups: [Default, Entity, Customer_Rate] } - { alias: CustomerRateForm, type: App\Form\API\CustomerRateApiForm, groups: [Default, Entity, Customer_Rate] } - { alias: CustomerCollection, type: App\Entity\Customer, groups: [Default, Collection, Customer] } - - { alias: ProjectEditForm, type: App\Form\API\ProjectApiEditForm, groups: [Default, Entity, Project] } + - { alias: ProjectEditForm, type: App\Form\API\ProjectApiEditForm, groups: [Default, Entity, Project, Project_Entity] } - { alias: ProjectEntity, type: App\Entity\Project, groups: [Default, Entity, Project, Project_Entity, Not_Expanded] } - { alias: Project, type: App\Entity\Project, groups: [Default, Not_Expanded] } - { alias: ProjectExpanded, type: App\Entity\Project, groups: [Default, Expanded] } - { alias: ProjectRate, type: App\Entity\ProjectRate, groups: [Default, Entity, Project_Rate] } - { alias: ProjectRateForm, type: App\Form\API\ProjectRateApiForm, groups: [Default, Entity, Project_Rate] } - { alias: ProjectCollection, type: App\Entity\Project, groups: [Default, Collection, Project] } - - { alias: ActivityEditForm, type: App\Form\API\ActivityApiEditForm, groups: [Default, Entity, Activity] } + - { alias: ActivityEditForm, type: App\Form\API\ActivityApiEditForm, groups: [Default, Entity, Activity, Activity_Entity] } - { alias: ActivityEntity, type: App\Entity\Activity, groups: [Default, Entity, Activity, Activity_Entity, Not_Expanded] } - { alias: Activity, type: App\Entity\Activity, groups: [Default, Not_Expanded] } - { alias: ActivityExpanded, type: App\Entity\Activity, groups: [Default, Expanded] } @@ -28,7 +29,7 @@ nelmio_api_doc: - { alias: TimesheetEntity, type: App\Entity\Timesheet, groups: [Default, Entity, Timesheet, Timesheet_Entity, Not_Expanded] } - { alias: TimesheetExpanded, type: App\Entity\Timesheet, groups: [Default, Entity, Timesheet, Timesheet_Entity, Expanded] } - { alias: TimesheetCollection, type: App\Entity\Timesheet, groups: [Default, Collection, Timesheet, Not_Expanded] } - - { alias: TimesheetCollectionExpanded, type: App\Entity\Timesheet, groups: [Default, Collection, Timesheet, Subresource, Expanded] } + - { alias: TimesheetCollectionExpanded, type: App\Entity\Timesheet, groups: [Default, Collection, Timesheet, Expanded] } - { alias: UserCreateForm, type: App\Form\API\UserApiCreateForm, groups: [Default, Entity, User, User_Entity] } - { alias: UserEditForm, type: App\Form\API\UserApiEditForm, groups: [Default, Entity, User, User_Entity] } - { alias: User, type: App\Entity\User, groups: [Default] } @@ -43,20 +44,28 @@ nelmio_api_doc: - { alias: Invoice, type: App\Entity\Invoice, groups: [Default, Entity, Invoice, Invoice_Entity] } - { alias: InvoiceCollection, type: App\Entity\Invoice, groups: [Default, Collection, Invoice] } areas: - path_patterns: - - ^/api(?!/doc) + default: + path_patterns: + - ^/api(?!/doc) + security: + bearer: + type: 'http' + description: 'API Token' + bearerFormat: 'KIMAI' + scheme: 'bearer' documentation: info: title: Kimai - API description: | - JSON API for the Kimai time-tracking software. Read our [API documentation](https://www.kimai.org/documentation/rest-api.html) and download the [Open API definition](doc.json) to import into your API client. - version: '1.0' - components: - securitySchemes: - bearer: - type: http - scheme: bearer - bearerFormat: KIMAI - description: API Token + JSON API for the Kimai time-tracking software. Find more infos in our [API documentation](https://www.kimai.org/documentation/rest-api.html). + version: '1.1' security: - bearer: [] + html_config: +# assets_mode: cdn + # https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/ + swagger_ui_config: [] + # https://redocly.com/docs/redoc/config/ + redocly_config: [] + # https://docs.stoplight.io/docs/elements/b074dc47b2826-elements-configuration-options + stoplight_config: { basePath: '/api/doc', router: 'memory', logo: '/touch-icon-192x192.png', hideInternal: true } diff --git a/config/packages/security.yaml b/config/packages/security.yaml index 009a6ef9a..dd3f10efc 100644 --- a/config/packages/security.yaml +++ b/config/packages/security.yaml @@ -42,6 +42,7 @@ security: - App\Saml\SamlAuthenticator remember_me: + name: KIMAI_REMEMBER secret: '%kernel.secret%' lifetime: 604800 path: / @@ -81,21 +82,21 @@ security: allow_if_all_abstain: false role_hierarchy: - ROLE_USER: ~ - ROLE_TEAMLEAD: ROLE_USER - ROLE_ADMIN: ROLE_TEAMLEAD + ROLE_USER: ~ + ROLE_TEAMLEAD: ROLE_USER + ROLE_ADMIN: ROLE_TEAMLEAD ROLE_SUPER_ADMIN: ROLE_ADMIN access_control: - - { path: '^/auth/2fa', role: IS_AUTHENTICATED_2FA_IN_PROGRESS } - - { path: '^/auth', roles: PUBLIC_ACCESS } - - { path: '^/{_locale}$', role: PUBLIC_ACCESS } - - { path: '^/{_locale}/auth', role: PUBLIC_ACCESS } - - { path: '^/{_locale}/login', role: PUBLIC_ACCESS } - - { path: '^/{_locale}/register', role: PUBLIC_ACCESS } - - { path: '^/{_locale}/resetting', role: PUBLIC_ACCESS } - - { path: '^/{_locale}/', roles: ROLE_USER } - - { path: '^/api', roles: IS_AUTHENTICATED } + - {path: '^/auth/2fa', role: IS_AUTHENTICATED_2FA_IN_PROGRESS} + - {path: '^/auth', roles: PUBLIC_ACCESS} + - {path: '^/{_locale}$', role: PUBLIC_ACCESS} + - {path: '^/{_locale}/auth', role: PUBLIC_ACCESS} + - {path: '^/{_locale}/login', role: PUBLIC_ACCESS} + - {path: '^/{_locale}/register', role: PUBLIC_ACCESS} + - {path: '^/{_locale}/resetting', role: PUBLIC_ACCESS} + - {path: '^/{_locale}/', roles: ROLE_USER} + - {path: '^/api', roles: IS_AUTHENTICATED} when@test: # this configuration simplifies testing URLs protected by the security mechanism @@ -105,6 +106,6 @@ when@test: App\Entity\User: algorithm: auto # see https://github.com/symfony/recipes/pull/1026 - cost: 4 # Lowest possible value for bcrypt - time_cost: 3 # Lowest possible value for argon - memory_cost: 10 # Lowest possible value for argon + cost: 4 # Lowest possible value for bcrypt + time_cost: 3 # Lowest possible value for argon + memory_cost: 10 # Lowest possible value for argon diff --git a/config/packages/tabler.yaml b/config/packages/tabler.yaml index 421f23181..480b49e7a 100644 --- a/config/packages/tabler.yaml +++ b/config/packages/tabler.yaml @@ -6,20 +6,18 @@ # tabler: options: - # dark or normal layout + theme_auto: true dark_mode: false - # condensed = one nav-bar, false = two nav-bars navbar_condensed: true - # overlap = https://preview.tabler.io/layout-navbar-overlap.html - navbar_overlap: true - # boxed layout (true) or full-screen (false) + navbar_overlap: false + navbar_dark: true boxed_layout: false - # right to left = true rtl_mode: false - # true = only avatar, false = show username and title as well - user_menu_condensed: true - # url to your company logo + user_menu_condensed: false logo_url: "touch-icon-192x192.png" + theme_base: "neutral" + theme_radius: 0.5 + theme_primary: "blue" knp_menu: enable: false @@ -47,6 +45,7 @@ tabler: barcode: fas fa-barcode bookmark: far fa-star bookmarked: fas fa-star + break: fas fa-utensils calendar: far fa-calendar-alt cancel: fas fa-times clock: far fa-clock @@ -68,10 +67,10 @@ tabler: documentation: fas fa-book dot: fas fa-circle download: fas fa-download - duration: far fa-hourglass + duration: fas fa-stopwatch edit: far fa-edit - end: fas fa-stopwatch - export: fas fa-file-export + end: fas fa-hourglass-end + export: fas fa-download failure: fas fa-times fax: fas fa-fax filter: fas fa-filter diff --git a/config/routes.yaml b/config/routes.yaml index ef0a21234..51e42a569 100644 --- a/config/routes.yaml +++ b/config/routes.yaml @@ -8,12 +8,7 @@ controllers: api.swagger_ui: path: /api/doc methods: GET - defaults: { _controller: nelmio_api_doc.controller.swagger_ui } - -api.swagger: - path: /api/doc.json - methods: GET - defaults: { _controller: nelmio_api_doc.controller.swagger } + defaults: { _controller: nelmio_api_doc.controller.stoplight } api: resource: ../src/API/ diff --git a/config/services.yaml b/config/services.yaml index e985506b8..57b64d43b 100644 --- a/config/services.yaml +++ b/config/services.yaml @@ -1,16 +1,14 @@ parameters: locale: en # can be regenerated with: bin/console kimai:reset:locales - kimai_locales: ['ar', 'ca', 'cs', 'da', 'de', 'de_CH', 'el', 'en', 'eo', 'es', 'eu', 'fa', 'fi', 'fo', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'nb_NO', 'nl', 'pa', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'sk', 'sl', 'sv', 'tr', 'uk', 'vi', 'zh_CN', 'zh_Hant', 'zh_Hant_TW', 'ca_AD', 'ca_ES', 'ca_FR', 'ca_IT', 'cs_CZ', 'da_DK', 'da_GL', 'de_AT', 'de_BE', 'de_CH', 'de_DE', 'de_IT', 'de_LI', 'de_LU', 'el_CY', 'el_GR', 'en_AE', 'en_AG', 'en_AI', 'en_AS', 'en_AT', 'en_AU', 'en_BB', 'en_BE', 'en_BI', 'en_BM', 'en_BS', 'en_BW', 'en_BZ', 'en_CA', 'en_CC', 'en_CH', 'en_CK', 'en_CM', 'en_CX', 'en_CY', 'en_DE', 'en_DG', 'en_DK', 'en_DM', 'en_ER', 'en_FI', 'en_FJ', 'en_FK', 'en_FM', 'en_GB', 'en_GD', 'en_GG', 'en_GH', 'en_GI', 'en_GM', 'en_GU', 'en_GY', 'en_HK', 'en_ID', 'en_IE', 'en_IL', 'en_IM', 'en_IN', 'en_IO', 'en_JE', 'en_JM', 'en_KE', 'en_KI', 'en_KN', 'en_KY', 'en_LC', 'en_LR', 'en_LS', 'en_MG', 'en_MH', 'en_MO', 'en_MP', 'en_MS', 'en_MT', 'en_MU', 'en_MV', 'en_MW', 'en_MY', 'en_NA', 'en_NF', 'en_NG', 'en_NH', 'en_NL', 'en_NR', 'en_NU', 'en_NZ', 'en_PG', 'en_PH', 'en_PK', 'en_PN', 'en_PR', 'en_PW', 'en_RH', 'en_RW', 'en_SB', 'en_SC', 'en_SD', 'en_SE', 'en_SG', 'en_SH', 'en_SI', 'en_SL', 'en_SS', 'en_SX', 'en_SZ', 'en_TC', 'en_TK', 'en_TO', 'en_TT', 'en_TV', 'en_TZ', 'en_UG', 'en_UM', 'en_US', 'en_VC', 'en_VG', 'en_VI', 'en_VU', 'en_WS', 'en_ZA', 'en_ZM', 'en_ZW', 'es_AR', 'es_BO', 'es_BR', 'es_BZ', 'es_CL', 'es_CO', 'es_CR', 'es_CU', 'es_DO', 'es_EA', 'es_EC', 'es_ES', 'es_GQ', 'es_GT', 'es_HN', 'es_IC', 'es_MX', 'es_NI', 'es_PA', 'es_PE', 'es_PH', 'es_PR', 'es_PY', 'es_SV', 'es_US', 'es_UY', 'es_VE', 'eu_ES', 'fa_AF', 'fa_IR', 'fi_FI', 'fo_DK', 'fo_FO', 'fr_BE', 'fr_BF', 'fr_BI', 'fr_BJ', 'fr_BL', 'fr_CA', 'fr_CD', 'fr_CF', 'fr_CG', 'fr_CH', 'fr_CI', 'fr_CM', 'fr_DJ', 'fr_DZ', 'fr_FR', 'fr_GA', 'fr_GF', 'fr_GN', 'fr_GP', 'fr_GQ', 'fr_HT', 'fr_KM', 'fr_LU', 'fr_MA', 'fr_MC', 'fr_MF', 'fr_MG', 'fr_ML', 'fr_MQ', 'fr_MR', 'fr_MU', 'fr_NC', 'fr_NE', 'fr_PF', 'fr_PM', 'fr_RE', 'fr_RW', 'fr_SC', 'fr_SN', 'fr_SY', 'fr_TD', 'fr_TG', 'fr_TN', 'fr_VU', 'fr_WF', 'fr_YT', 'he_IL', 'hr_BA', 'hr_HR', 'hu_HU', 'it_CH', 'it_IT', 'it_SM', 'it_VA', 'ja_JP', 'ko_CN', 'ko_KP', 'ko_KR', 'nl_AW', 'nl_BE', 'nl_BQ', 'nl_CW', 'nl_NL', 'nl_SR', 'nl_SX', 'pl_PL', 'pt_AO', 'pt_BR', 'pt_CH', 'pt_CV', 'pt_GQ', 'pt_GW', 'pt_LU', 'pt_MO', 'pt_MZ', 'pt_PT', 'pt_ST', 'pt_TL', 'ro_MD', 'ro_RO', 'ru_BY', 'ru_KG', 'ru_KZ', 'ru_MD', 'ru_RU', 'ru_UA', 'sk_SK', 'sv_AX', 'sv_FI', 'sv_SE', 'tr_CY', 'tr_TR', 'uk_UA', 'vi_VN'] + kimai_locales: ['ar', 'bg', 'cs', 'da', 'de', 'de_CH', 'el', 'en', 'eo', 'es', 'eu', 'fa', 'fi', 'fo', 'fr', 'he', 'hr', 'hu', 'id', 'it', 'ja', 'ko', 'nb_NO', 'nl', 'pa', 'pl', 'pt', 'pt_BR', 'ro', 'ru', 'sk', 'sl', 'sv', 'ta', 'tr', 'uk', 'vi', 'zh_CN', 'zh_Hant', 'zh_Hant_TW', 'cs_CZ', 'da_DK', 'da_GL', 'de_AT', 'de_BE', 'de_CH', 'de_DE', 'de_IT', 'de_LI', 'de_LU', 'el_CY', 'el_GR', 'en_AE', 'en_AG', 'en_AI', 'en_AS', 'en_AT', 'en_AU', 'en_BB', 'en_BE', 'en_BI', 'en_BM', 'en_BS', 'en_BW', 'en_BZ', 'en_CA', 'en_CC', 'en_CH', 'en_CK', 'en_CM', 'en_CX', 'en_CY', 'en_CZ', 'en_DE', 'en_DG', 'en_DK', 'en_DM', 'en_ER', 'en_ES', 'en_FI', 'en_FJ', 'en_FK', 'en_FM', 'en_FR', 'en_GB', 'en_GD', 'en_GG', 'en_GH', 'en_GI', 'en_GM', 'en_GS', 'en_GU', 'en_GY', 'en_HK', 'en_HU', 'en_ID', 'en_IE', 'en_IL', 'en_IM', 'en_IN', 'en_IO', 'en_IT', 'en_JE', 'en_JM', 'en_KE', 'en_KI', 'en_KN', 'en_KY', 'en_LC', 'en_LR', 'en_LS', 'en_MG', 'en_MH', 'en_MO', 'en_MP', 'en_MS', 'en_MT', 'en_MU', 'en_MV', 'en_MW', 'en_MY', 'en_NA', 'en_NF', 'en_NG', 'en_NH', 'en_NL', 'en_NO', 'en_NR', 'en_NU', 'en_NZ', 'en_PG', 'en_PH', 'en_PK', 'en_PL', 'en_PN', 'en_PR', 'en_PT', 'en_PW', 'en_RH', 'en_RO', 'en_RW', 'en_SB', 'en_SC', 'en_SD', 'en_SE', 'en_SG', 'en_SH', 'en_SI', 'en_SK', 'en_SL', 'en_SS', 'en_SX', 'en_SZ', 'en_TC', 'en_TK', 'en_TO', 'en_TT', 'en_TV', 'en_TZ', 'en_UG', 'en_UM', 'en_US', 'en_VC', 'en_VG', 'en_VI', 'en_VU', 'en_WS', 'en_ZA', 'en_ZM', 'en_ZW', 'es_AR', 'es_BO', 'es_BR', 'es_BZ', 'es_CL', 'es_CO', 'es_CR', 'es_CU', 'es_DO', 'es_EA', 'es_EC', 'es_ES', 'es_GQ', 'es_GT', 'es_HN', 'es_IC', 'es_MX', 'es_NI', 'es_PA', 'es_PE', 'es_PH', 'es_PR', 'es_PY', 'es_SV', 'es_US', 'es_UY', 'es_VE', 'eu_ES', 'fa_AF', 'fa_IR', 'fi_FI', 'fo_DK', 'fo_FO', 'fr_BE', 'fr_BF', 'fr_BI', 'fr_BJ', 'fr_BL', 'fr_CA', 'fr_CD', 'fr_CF', 'fr_CG', 'fr_CH', 'fr_CI', 'fr_CM', 'fr_DJ', 'fr_DZ', 'fr_FR', 'fr_GA', 'fr_GF', 'fr_GN', 'fr_GP', 'fr_GQ', 'fr_HT', 'fr_KM', 'fr_LU', 'fr_MA', 'fr_MC', 'fr_MF', 'fr_MG', 'fr_ML', 'fr_MQ', 'fr_MR', 'fr_MU', 'fr_NC', 'fr_NE', 'fr_PF', 'fr_PM', 'fr_RE', 'fr_RW', 'fr_SC', 'fr_SN', 'fr_SY', 'fr_TD', 'fr_TG', 'fr_TN', 'fr_VU', 'fr_WF', 'fr_YT', 'he_IL', 'hr_BA', 'hr_HR', 'hu_HU', 'it_CH', 'it_IT', 'it_SM', 'it_VA', 'ja_JP', 'ko_CN', 'ko_KP', 'ko_KR', 'nl_AW', 'nl_BE', 'nl_BQ', 'nl_CW', 'nl_NL', 'nl_SR', 'nl_SX', 'pl_PL', 'pt_AO', 'pt_BR', 'pt_CH', 'pt_CV', 'pt_GQ', 'pt_GW', 'pt_LU', 'pt_MO', 'pt_MZ', 'pt_PT', 'pt_ST', 'pt_TL', 'ro_MD', 'ro_RO', 'ru_BY', 'ru_KG', 'ru_KZ', 'ru_MD', 'ru_RU', 'ru_UA', 'sk_SK', 'sv_AX', 'sv_FI', 'sv_SE', 'tr_CY', 'tr_TR', 'uk_UA', 'vi_VN'] services: # default configuration for services in *this* file _defaults: - autowire: true # Automatically injects dependencies in your services. - autoconfigure: true # Automatically registers your services as commands, event subscribers, etc. - public: false # Allows optimizing the container by removing unused services; this also means - # fetching services directly from the container via $container->get() won't work. - # The best practice is to be explicit about your dependencies anyway. + autowire: true + autoconfigure: true + public: false bind: $projectDirectory: '%kernel.project_dir%' $kernelEnvironment: '%kernel.environment%' @@ -26,6 +24,7 @@ services: - '../src/Entity/' - '../src/Event/' - '../src/Export/Package/' + - '../src/Export/Base/' - '../src/Form/Model/' - '../src/Model/' - '../src/Repository/Loader/' @@ -87,6 +86,9 @@ services: App\Timesheet\RateService: arguments: ['%kimai.timesheet.rates%'] + App\Timesheet\RateCalculator\RateCalculatorMode: + factory: ['@App\Timesheet\RateCalculator\RateCalculatorFactory', getRateCalculatorMode] + # ================================================================================ # SECURITY & VOTER # ================================================================================ @@ -113,99 +115,104 @@ services: # ================================================================================ App\Repository\TimesheetRepository: - class: App\Repository\TimesheetRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\TimesheetRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Timesheet'] App\Repository\UserRepository: - class: App\Repository\UserRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\UserRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\User'] App\Repository\TeamRepository: - class: App\Repository\TeamRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\TeamRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Team'] App\Repository\ActivityRepository: - class: App\Repository\ActivityRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\ActivityRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Activity'] App\Repository\ProjectRepository: - class: App\Repository\ProjectRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\ProjectRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Project'] App\Repository\TagRepository: - class: App\Repository\TagRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\TagRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Tag'] App\Repository\CustomerRepository: - class: App\Repository\CustomerRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\CustomerRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Customer'] App\Repository\InvoiceTemplateRepository: - class: App\Repository\InvoiceTemplateRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\InvoiceTemplateRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\InvoiceTemplate'] App\Repository\ConfigurationRepository: - class: App\Repository\ConfigurationRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\ConfigurationRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Configuration'] App\Repository\RoleRepository: - class: App\Repository\RoleRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\RoleRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Role'] App\Repository\RolePermissionRepository: - class: App\Repository\RolePermissionRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\RolePermissionRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\RolePermission'] - + App\Repository\InvoiceDocumentRepository: class: App\Repository\InvoiceDocumentRepository arguments: ['%kimai.invoice.documents%'] App\Repository\CustomerRateRepository: - class: App\Repository\CustomerRateRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\CustomerRateRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\CustomerRate'] App\Repository\ActivityRateRepository: - class: App\Repository\ActivityRateRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\ActivityRateRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\ActivityRate'] App\Repository\ProjectRateRepository: - class: App\Repository\ProjectRateRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\ProjectRateRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\ProjectRate'] App\Repository\InvoiceRepository: - class: App\Repository\InvoiceRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\InvoiceRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Invoice'] App\Repository\BookmarkRepository: - class: App\Repository\BookmarkRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\BookmarkRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\Bookmark'] App\Repository\WorkingTimeRepository: - class: App\Repository\WorkingTimeRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\WorkingTimeRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\WorkingTime'] App\Repository\AccessTokenRepository: - class: App\Repository\AccessTokenRepository - factory: ['@doctrine.orm.entity_manager', getRepository] + class: App\Repository\AccessTokenRepository + factory: ['@doctrine.orm.entity_manager', getRepository] arguments: ['App\Entity\AccessToken'] + App\Repository\ExportTemplateRepository: + class: App\Repository\ExportTemplateRepository + factory: ['@doctrine.orm.entity_manager', getRepository] + arguments: ['App\Entity\ExportTemplate'] + monolog.formatter.kimai: class: Monolog\Formatter\LineFormatter arguments: @@ -217,3 +224,6 @@ services: arguments: - "[%%datetime%%] %%message%% %%context%%\n" - "Y-m-d H:i:s" + + App\API\ViewHandler: + arguments: ['@fos_rest.view_handler.default'] diff --git a/kimai.sh b/kimai.sh index bb4e75939..f018edeb4 100755 --- a/kimai.sh +++ b/kimai.sh @@ -22,6 +22,7 @@ function update_kimai() { exit 1 fi + rm -rf var/sessions/ 2>&1 rm -rf var/cache/* 2>&1 git fetch --tags git checkout "$VERSION" diff --git a/migrations/Version20250608143244.php b/migrations/Version20250608143244.php new file mode 100644 index 000000000..4fa3d405c --- /dev/null +++ b/migrations/Version20250608143244.php @@ -0,0 +1,51 @@ +createTable('kimai2_export_templates'); + + $table->addColumn('id', 'integer', ['autoincrement' => true, 'notnull' => true]); + $table->addColumn('title', 'string', ['notnull' => true, 'length' => 100]); + $table->addColumn('renderer', 'string', ['notnull' => true, 'length' => 20]); + $table->addColumn('language', 'string', ['notnull' => false, 'length' => 6]); + $table->addColumn('columns', 'json', ['notnull' => true]); + $table->addColumn('options', 'json', ['notnull' => true]); + + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['title'], 'UNIQ_2F0CA26F2B36786B'); + } + + public function down(Schema $schema): void + { + if ($schema->hasTable('kimai2_export_templates')) { + $schema->dropTable('kimai2_export_templates'); + } + } + + public function isTransactional(): bool + { + return false; + } +} diff --git a/migrations/Version20251031142000.php b/migrations/Version20251031142000.php new file mode 100644 index 000000000..be9bed519 --- /dev/null +++ b/migrations/Version20251031142000.php @@ -0,0 +1,46 @@ +addSql('ALTER TABLE kimai2_customers ADD address_line1 VARCHAR(150) DEFAULT NULL, ADD address_line2 VARCHAR(150) DEFAULT NULL, ADD address_line3 VARCHAR(150) DEFAULT NULL, ADD postcode VARCHAR(20) DEFAULT NULL, ADD city VARCHAR(50) DEFAULT NULL, ADD buyer_reference VARCHAR(50) DEFAULT NULL'); + $this->addSql('ALTER TABLE kimai2_invoice_templates ADD customer_id INT DEFAULT NULL'); + $this->addSql('ALTER TABLE kimai2_invoice_templates MODIFY company VARCHAR(255) NULL'); + $this->addSql('ALTER TABLE kimai2_invoice_templates ADD CONSTRAINT FK_1626CFE99395C3F3 FOREIGN KEY (customer_id) REFERENCES kimai2_customers (id) ON DELETE SET NULL'); + $this->addSql('CREATE INDEX IDX_1626CFE99395C3F3 ON kimai2_invoice_templates (customer_id)'); + } + + public function down(Schema $schema): void + { + $this->addSql('ALTER TABLE kimai2_invoice_templates DROP FOREIGN KEY FK_1626CFE99395C3F3'); + $this->addSql('DROP INDEX IDX_1626CFE99395C3F3 ON kimai2_invoice_templates'); + $this->addSql('ALTER TABLE kimai2_invoice_templates DROP customer_id'); + $this->addSql('ALTER TABLE kimai2_customers DROP address_line1, DROP address_line2, DROP address_line3, DROP postcode, DROP city, DROP buyer_reference'); + } + + public function isTransactional(): bool + { + return false; + } +} diff --git a/migrations/Version20251031143000.php b/migrations/Version20251031143000.php new file mode 100644 index 000000000..3fd0c7dae --- /dev/null +++ b/migrations/Version20251031143000.php @@ -0,0 +1,43 @@ +addSql('CREATE TABLE kimai2_invoice_templates_meta (id INT AUTO_INCREMENT NOT NULL, template_id INT NOT NULL, name VARCHAR(50) NOT NULL, value TEXT DEFAULT NULL, visible TINYINT(1) DEFAULT 0 NOT NULL, INDEX IDX_A165B0555DA0FB8 (template_id), UNIQUE INDEX UNIQ_A165B0555DA0FB85E237E06 (template_id, name), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci` ENGINE = InnoDB'); + $this->addSql('ALTER TABLE kimai2_invoice_templates_meta ADD CONSTRAINT FK_A165B0555DA0FB8 FOREIGN KEY (template_id) REFERENCES kimai2_invoice_templates (id) ON DELETE CASCADE'); + } + + public function down(Schema $schema): void + { + $table = $schema->getTable('kimai2_invoice_templates_meta'); + $table->removeForeignKey('FK_A165B0555DA0FB8'); + + $schema->dropTable('kimai2_invoice_templates_meta'); + } + + public function isTransactional(): bool + { + return false; + } +} diff --git a/migrations/Version20251214160001.php b/migrations/Version20251214160001.php new file mode 100644 index 000000000..087d14b4e --- /dev/null +++ b/migrations/Version20251214160001.php @@ -0,0 +1,50 @@ +getTable('kimai2_tags'); + + if (!$table->hasIndex('IDX_27CAF54C7AB0E859')) { + // used to count the tags for the dropdown (filter and timesheet edit) + $table->addIndex(['visible'], 'IDX_27CAF54C7AB0E859'); + } + // deleted in this release + $this->addSql("DELETE from kimai2_configuration where name = 'defaults.user.language'"); + } + + public function down(Schema $schema): void + { + $table = $schema->getTable('kimai2_tags'); + + if ($table->hasIndex('IDX_27CAF54C7AB0E859')) { + $table->dropIndex('IDX_27CAF54C7AB0E859'); + } + } + + public function isTransactional(): bool + { + return false; + } +} diff --git a/package.json b/package.json index 29680d12e..ea14027df 100644 --- a/package.json +++ b/package.json @@ -38,18 +38,19 @@ "@fullcalendar/timegrid": "^5", "@popperjs/core": "^2", "@symfony/webpack-encore": "^5", - "@tabler/core": "1.0.0-beta21", + "@tabler/core": "1.4", "bootstrap": "^5.3", "chart.js": "^4", "core-js": "^3", "eslint": "^9", "globals": "^15", + "highlight.js": "^11.11.1", "litepicker": "^2", "luxon": "^3", "sass": "^1", "sass-loader": "^16", "sortablejs": "^1.15.6", - "tom-select": "^2", + "tom-select": "^2.4.3", "webpack": "^5", "webpack-cli": "^5" }, diff --git a/phpstan.neon b/phpstan.neon index e67fac708..f1f8a0a1b 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -41,11 +41,8 @@ parameters: symfony: containerXmlPath: %rootDir%/../../../var/cache/dev/App_KernelDevDebugContainer.xml ignoreErrors: + - identifier: offsetAccess.notFound - '#^Method .*\(\) has parameter \$builder with generic interface Symfony\\Component\\Form\\FormBuilderInterface but does not specify its types\: TData$#' - - - message: "#^Parameter \\#1 \\$user of class App\\\\Event\\\\PageActionsEvent constructor expects App\\\\Entity\\\\User, App\\\\Entity\\\\User\\|null given\\.$#" - count: 4 - path: src/API/ActionsController.php - message: "#^Parameter \\#1 \\$name of method App\\\\Entity\\\\Activity\\:\\:getMetaField\\(\\) expects string, mixed given\\.$#" @@ -62,11 +59,6 @@ parameters: count: 1 path: src/API/Authentication/TokenAuthenticator.php - - - message: "#^Parameter \\#1 \\$user of static method App\\\\Timesheet\\\\DateTimeFactory\\:\\:createByUser\\(\\) expects App\\\\Entity\\\\User, App\\\\Entity\\\\User\\|null given\\.$#" - count: 1 - path: src/API/BaseApiController.php - - message: "#^Parameter \\#1 \\$name of method App\\\\Entity\\\\Customer\\:\\:getMetaField\\(\\) expects string, mixed given\\.$#" count: 1 @@ -132,26 +124,6 @@ parameters: count: 1 path: src/API/TagController.php - - - message: "#^Parameter \\#1 \\$datetime of method App\\\\Timesheet\\\\DateTimeFactory\\:\\:createDateTime\\(\\) expects string, mixed given\\.$#" - count: 3 - path: src/API/TimesheetController.php - - - - message: "#^Parameter \\#1 \\$user of class App\\\\Event\\\\RecentActivityEvent constructor expects App\\\\Entity\\\\User, App\\\\Entity\\\\User\\|null given\\.$#" - count: 1 - path: src/API/TimesheetController.php - - - - message: "#^Parameter \\#1 \\$user of method App\\\\Repository\\\\TimesheetRepository\\:\\:getRecentActivities\\(\\) expects App\\\\Entity\\\\User, App\\\\Entity\\\\User\\|null given\\.$#" - count: 1 - path: src/API/TimesheetController.php - - - - message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\User\\|null\\.$#" - count: 1 - path: src/API/UserController.php - - message: "#^Parameter \\#2 \\$statistic of class App\\\\Event\\\\ActivityStatisticEvent constructor expects App\\\\Model\\\\ActivityStatistic, App\\\\Model\\\\ActivityStatistic\\|null given\\.$#" count: 1 @@ -169,7 +141,7 @@ parameters: - message: "#^Cannot call method find\\(\\) on Symfony\\\\Component\\\\Console\\\\Application\\|null\\.$#" - count: 2 + count: 1 path: src/Command/AbstractBundleInstallerCommand.php - @@ -447,16 +419,6 @@ parameters: count: 1 path: src/Command/ReloadCommand.php - - - message: "#^Cannot call method find\\(\\) on Symfony\\\\Component\\\\Console\\\\Application\\|null\\.$#" - count: 1 - path: src/Command/ResetDevelopmentCommand.php - - - - message: "#^Access to an undefined property SimpleXMLElement\\|false\\:\\:\\$file\\.$#" - count: 1 - path: src/Command/TranslationCommand.php - - message: "#^Argument of an invalid type list\\\\|false supplied for foreach, only iterables are supported\\.$#" count: 4 @@ -617,11 +579,6 @@ parameters: count: 1 path: src/Configuration/SystemConfiguration.php - - - message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getCustomerDefaultCurrency\\(\\) should return string but returns bool\\|float\\|int\\|string\\|null\\.$#" - count: 1 - path: src/Configuration/SystemConfiguration.php - - message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getCustomerDefaultTimezone\\(\\) should return string\\|null but returns bool\\|float\\|int\\|string\\|null\\.$#" count: 1 @@ -632,21 +589,6 @@ parameters: count: 1 path: src/Configuration/SystemConfiguration.php - - - message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultCurrency\\(\\) should return string but returns bool\\|float\\|int\\|string\\|null\\.$#" - count: 1 - path: src/Configuration/SystemConfiguration.php - - - - message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultLanguage\\(\\) should return string but returns bool\\|float\\|int\\|string\\|null\\.$#" - count: 1 - path: src/Configuration/SystemConfiguration.php - - - - message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultTheme\\(\\) should return string\\|null but returns bool\\|float\\|int\\|string\\|null\\.$#" - count: 1 - path: src/Configuration/SystemConfiguration.php - - message: "#^Method App\\\\Configuration\\\\SystemConfiguration\\:\\:getUserDefaultTimezone\\(\\) should return string\\|null but returns bool\\|float\\|int\\|string\\|null\\.$#" count: 1 @@ -682,31 +624,6 @@ parameters: count: 1 path: src/Controller/ActivityController.php - - - message: "#^Parameter \\#1 \\$name of class App\\\\Entity\\\\Team constructor expects string, string\\|null given\\.$#" - count: 1 - path: src/Controller/ActivityController.php - - - - message: "#^Parameter \\#2 \\$replace of method App\\\\Repository\\\\ActivityRepository\\:\\:deleteActivity\\(\\) expects App\\\\Entity\\\\Activity\\|null, mixed given\\.$#" - count: 1 - path: src/Controller/ActivityController.php - - - - message: "#^Cannot access offset 'user' on mixed\\.$#" - count: 1 - path: src/Controller/CalendarController.php - - - - message: "#^Parameter \\#1 \\$name of class App\\\\Entity\\\\Team constructor expects string, string\\|null given\\.$#" - count: 1 - path: src/Controller/CustomerController.php - - - - message: "#^Parameter \\#2 \\$replace of method App\\\\Repository\\\\CustomerRepository\\:\\:deleteCustomer\\(\\) expects App\\\\Entity\\\\Customer\\|null, mixed given\\.$#" - count: 1 - path: src/Controller/CustomerController.php - - message: "#^Argument of an invalid type mixed supplied for foreach, only iterables are supported\\.$#" count: 1 @@ -782,11 +699,6 @@ parameters: count: 1 path: src/Controller/InvoiceController.php - - - message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Controller/InvoiceController.php - - message: "#^Cannot call method getName\\(\\) on Symfony\\\\Component\\\\Form\\\\FormInterface\\|null\\.$#" count: 1 @@ -822,21 +734,6 @@ parameters: count: 1 path: src/Controller/ProjectController.php - - - message: "#^Parameter \\#1 \\$name of class App\\\\Entity\\\\Team constructor expects string, string\\|null given\\.$#" - count: 1 - path: src/Controller/ProjectController.php - - - - message: "#^Parameter \\#2 \\$replace of method App\\\\Repository\\\\ProjectRepository\\:\\:deleteProject\\(\\) expects App\\\\Entity\\\\Project\\|null, mixed given\\.$#" - count: 1 - path: src/Controller/ProjectController.php - - - - message: "#^Call to function array_key_exists\\(\\) with 'entry' and array\\{day\\: DateTime, entry\\: App\\\\Entity\\\\Timesheet\\} will always evaluate to true\\.$#" - count: 1 - path: src/Controller/QuickEntryController.php - - message: "#^Cannot call method format\\(\\) on DateTime\\|null\\.$#" count: 1 @@ -1012,36 +909,16 @@ parameters: count: 1 path: src/Customer/CustomerStatisticService.php - - - message: "#^Method App\\\\DataFixtures\\\\InvoiceFixtures\\:\\:getInvoiceConfigs\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/DataFixtures/InvoiceFixtures.php - - message: "#^Method App\\\\DataFixtures\\\\TeamFixtures\\:\\:getGroups\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 path: src/DataFixtures/TeamFixtures.php - - - message: "#^Cannot call method setTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/DataFixtures/TimesheetFixtures.php - - message: "#^Cannot clone DateTime\\|null\\.$#" count: 1 path: src/DataFixtures/TimesheetFixtures.php - - - message: "#^Parameter \\#1 \\$begin of method App\\\\Entity\\\\Timesheet\\:\\:setBegin\\(\\) expects DateTime, DateTime\\|null given\\.$#" - count: 1 - path: src/DataFixtures/TimesheetFixtures.php - - - - message: "#^Parameter \\#1 \\$user of method App\\\\DataFixtures\\\\TimesheetFixtures\\:\\:createTimesheetEntry\\(\\) expects App\\\\Entity\\\\User, App\\\\Entity\\\\User\\|null given\\.$#" - count: 2 - path: src/DataFixtures/TimesheetFixtures.php - - message: "#^Method App\\\\DependencyInjection\\\\AppExtension\\:\\:createPermissionParameter\\(\\) has parameter \\$config with no value type specified in iterable type array\\.$#" count: 1 @@ -1542,121 +1419,11 @@ parameters: count: 1 path: src/Export/Annotation/Order.php - - - message: "#^Cannot call method getBudget\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method getCurrency\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method getCustomer\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 5 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method getName\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method getTimeBudget\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Cannot call method jsonSerialize\\(\\) on App\\\\Model\\\\Statistic\\\\BudgetStatistic\\|null\\.$#" - count: 2 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Method App\\\\Export\\\\Base\\\\HtmlRenderer\\:\\:calculateActivityBudget\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Method App\\\\Export\\\\Base\\\\HtmlRenderer\\:\\:calculateProjectBudget\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - - - message: "#^Method App\\\\Export\\\\Base\\\\HtmlRenderer\\:\\:calculateSummary\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Export/Base/HtmlRenderer.php - - message: "#^Method App\\\\Export\\\\Base\\\\HtmlRenderer\\:\\:getOptions\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 path: src/Export/Base/HtmlRenderer.php - - - message: "#^Cannot call method getBudget\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method getCurrency\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method getCustomer\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 5 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method getId\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method getName\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method getTimeBudget\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Cannot call method jsonSerialize\\(\\) on App\\\\Model\\\\Statistic\\\\BudgetStatistic\\|null\\.$#" - count: 2 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Method App\\\\Export\\\\Base\\\\PDFRenderer\\:\\:calculateActivityBudget\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Method App\\\\Export\\\\Base\\\\PDFRenderer\\:\\:calculateProjectBudget\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - - - message: "#^Method App\\\\Export\\\\Base\\\\PDFRenderer\\:\\:calculateSummary\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - message: "#^Method App\\\\Export\\\\Base\\\\PDFRenderer\\:\\:getOptions\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 @@ -1667,11 +1434,6 @@ parameters: count: 1 path: src/Export/Base/PDFRenderer.php - - - message: "#^Parameter \\#1 \\$filename of static method App\\\\Utils\\\\FileHelper\\:\\:convertToAsciiFilename\\(\\) expects string, array\\|string given\\.$#" - count: 1 - path: src/Export/Base/PDFRenderer.php - - message: "#^Property App\\\\Export\\\\Base\\\\PDFRenderer\\:\\:\\$pdfOptions type has no value type specified in iterable type array\\.$#" count: 1 @@ -1897,46 +1659,16 @@ parameters: count: 1 path: src/Form/Extension/SelectWithApiDataExtension.php - - - message: "#^Parameter \\#1 \\$haystack of function stripos expects string, bool\\|float\\|int\\|string given\\.$#" - count: 2 - path: src/Form/Helper/ActivityHelper.php - - - - message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\\\|string, bool\\|float\\|int\\|string given\\.$#" - count: 1 - path: src/Form/Helper/ActivityHelper.php - - message: "#^Property App\\\\Form\\\\Helper\\\\ActivityHelper\\:\\:\\$pattern \\(string\\|null\\) does not accept bool\\|float\\|int\\|string\\|null\\.$#" count: 1 path: src/Form/Helper/ActivityHelper.php - - - message: "#^Parameter \\#1 \\$haystack of function stripos expects string, bool\\|float\\|int\\|string given\\.$#" - count: 2 - path: src/Form/Helper/CustomerHelper.php - - - - message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\\\|string, bool\\|float\\|int\\|string given\\.$#" - count: 1 - path: src/Form/Helper/CustomerHelper.php - - message: "#^Property App\\\\Form\\\\Helper\\\\CustomerHelper\\:\\:\\$pattern \\(string\\|null\\) does not accept bool\\|float\\|int\\|string\\|null\\.$#" count: 1 path: src/Form/Helper/CustomerHelper.php - - - message: "#^Parameter \\#1 \\$haystack of function stripos expects string, bool\\|float\\|int\\|string given\\.$#" - count: 2 - path: src/Form/Helper/ProjectHelper.php - - - - message: "#^Parameter \\#3 \\$subject of function str_replace expects array\\\\|string, bool\\|float\\|int\\|string given\\.$#" - count: 1 - path: src/Form/Helper/ProjectHelper.php - - message: "#^Property App\\\\Form\\\\Helper\\\\ProjectHelper\\:\\:\\$pattern \\(string\\|null\\) does not accept bool\\|float\\|int\\|string\\|null\\.$#" count: 1 @@ -2059,7 +1791,7 @@ parameters: - message: "#^Cannot clone mixed\\.$#" - count: 2 + count: 1 path: src/Form/QuickEntryForm.php - @@ -2087,11 +1819,6 @@ parameters: count: 1 path: src/Form/TimesheetAdminEditForm.php - - - message: "#^Cannot call method format\\(\\) on mixed\\.$#" - count: 4 - path: src/Form/TimesheetEditForm.php - - message: "#^Cannot call method getEnd\\(\\) on App\\\\Entity\\\\Timesheet\\|null\\.$#" count: 2 @@ -2102,21 +1829,11 @@ parameters: count: 1 path: src/Form/TimesheetEditForm.php - - - message: "#^Cannot call method modify\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/Form/TimesheetEditForm.php - - message: "#^Cannot clone DateTime\\|null\\.$#" count: 1 path: src/Form/TimesheetEditForm.php - - - message: "#^Cannot clone non\\-object variable \\$end of type mixed\\.$#" - count: 1 - path: src/Form/TimesheetEditForm.php - - message: "#^Method App\\\\Form\\\\TimesheetEditForm\\:\\:addActivity\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" count: 1 @@ -2882,11 +2599,6 @@ parameters: count: 1 path: src/Form/Type/MetaFieldsCollectionType.php - - - message: "#^Cannot call method modify\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/Form/Type/QuickEntryTimesheetType.php - - message: "#^Cannot cast mixed to int\\.$#" count: 2 @@ -2897,21 +2609,6 @@ parameters: count: 1 path: src/Form/Type/QuickEntryTimesheetType.php - - - message: "#^Cannot access offset 'activity' on mixed\\.$#" - count: 1 - path: src/Form/Type/QuickEntryWeekType.php - - - - message: "#^Cannot access offset 'project' on mixed\\.$#" - count: 1 - path: src/Form/Type/QuickEntryWeekType.php - - - - message: "#^Cannot clone mixed\\.$#" - count: 1 - path: src/Form/Type/QuickEntryWeekType.php - - message: "#^Method App\\\\Form\\\\Type\\\\SearchTermType\\:\\:buildForm\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" count: 1 @@ -2962,11 +2659,6 @@ parameters: count: 1 path: src/Form/UserTwoFactorType.php - - - message: "#^Cannot call method getVat\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Calculator/AbstractCalculator.php - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" count: 2 @@ -3017,81 +2709,6 @@ parameters: count: 1 path: src/Invoice/Hydrator/InvoiceModelCustomerHydrator.php - - - message: "#^Cannot call method getAddress\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getCompany\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getContact\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getDueDays\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getLanguage\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getName\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getPaymentDetails\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getPaymentTerms\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getSubtotal\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getTax\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getTimeWorked\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#" - count: 2 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getTitle\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getTotal\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getVat\\(\\) on App\\\\Invoice\\\\CalculatorInterface\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - - - message: "#^Cannot call method getVatId\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php - - message: "#^Method App\\\\Invoice\\\\Hydrator\\\\InvoiceModelDefaultHydrator\\:\\:hydrate\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 @@ -3122,16 +2739,6 @@ parameters: count: 1 path: src/Invoice/Hydrator/InvoiceModelUserHydrator.php - - - message: "#^Cannot call method getCompany\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Invoice/InvoiceFilename.php - - - - message: "#^Cannot call method getName\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" - count: 1 - path: src/Invoice/InvoiceFilename.php - - message: "#^Parameter \\#1 \\$filename of method App\\\\Invoice\\\\InvoiceFilename\\:\\:convert\\(\\) expects string, string\\|null given\\.$#" count: 1 @@ -3177,11 +2784,6 @@ parameters: count: 1 path: src/Invoice/Renderer/AbstractSpreadsheetRenderer.php - - - message: "#^Cannot call method getTitle\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Renderer/AbstractSpreadsheetRenderer.php - - message: "#^Parameter \\#1 \\$haystack of function stripos expects string, mixed given\\.$#" count: 5 @@ -3202,11 +2804,6 @@ parameters: count: 1 path: src/Invoice/Renderer/AbstractTwigRenderer.php - - - message: "#^Cannot call method getLanguage\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 1 - path: src/Invoice/Renderer/AbstractTwigRenderer.php - - message: "#^Method App\\\\Invoice\\\\Renderer\\\\AbstractTwigRenderer\\:\\:renderTwigTemplate\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" count: 1 @@ -3227,21 +2824,11 @@ parameters: count: 2 path: src/Invoice/Renderer/DocxRenderer.php - - - message: "#^Parameter \\#1 \\$filename of static method App\\\\Utils\\\\FileHelper\\:\\:convertToAsciiFilename\\(\\) expects string, array\\|string given\\.$#" - count: 1 - path: src/Invoice/Renderer/PdfRenderer.php - - message: "#^Cannot call method getCustomer\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" count: 1 path: src/Invoice/ServiceInvoice.php - - - message: "#^Cannot call method getRenderer\\(\\) on App\\\\Entity\\\\InvoiceTemplate\\|null\\.$#" - count: 6 - path: src/Invoice/ServiceInvoice.php - - message: "#^Cannot call method hasInvoiceTemplate\\(\\) on App\\\\Entity\\\\Customer\\|null\\.$#" count: 1 @@ -3312,11 +2899,6 @@ parameters: count: 1 path: src/Ldap/LdapAuthenticator.php - - - message: "#^Instanceof between Symfony\\\\Component\\\\Security\\\\Http\\\\Authenticator\\\\Passport\\\\Passport and Symfony\\\\Component\\\\Security\\\\Http\\\\Authenticator\\\\Passport\\\\Passport will always evaluate to true\\.$#" - count: 1 - path: src/Ldap/LdapCredentialsSubscriber.php - - message: "#^Method App\\\\Ldap\\\\LdapCredentialsSubscriber\\:\\:onCheckPassport\\(\\) has no return type specified\\.$#" count: 1 @@ -3422,26 +3004,6 @@ parameters: count: 1 path: src/Model/Statistic/Month.php - - - message: "#^Method App\\\\Pdf\\\\HtmlToPdfConverter\\:\\:convertToPdf\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Pdf/HtmlToPdfConverter.php - - - - message: "#^Method App\\\\Pdf\\\\MPdfConverter\\:\\:convertToPdf\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Pdf/MPdfConverter.php - - - - message: "#^Method App\\\\Pdf\\\\MPdfConverter\\:\\:sanitizeOptions\\(\\) has parameter \\$options with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Pdf/MPdfConverter.php - - - - message: "#^Method App\\\\Pdf\\\\MPdfConverter\\:\\:sanitizeOptions\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Pdf/MPdfConverter.php - - message: "#^Method App\\\\Pdf\\\\PdfContext\\:\\:getOption\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 @@ -3472,21 +3034,6 @@ parameters: count: 1 path: src/Plugin/PluginMetadata.php - - - message: "#^Cannot access offset 'duration' on mixed\\.$#" - count: 3 - path: src/Project/ProjectStatisticService.php - - - - message: "#^Cannot access offset 'id' on mixed\\.$#" - count: 4 - path: src/Project/ProjectStatisticService.php - - - - message: "#^Cannot access offset 'lastRecord' on mixed\\.$#" - count: 1 - path: src/Project/ProjectStatisticService.php - - message: "#^Cannot call method getEnd\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" count: 2 @@ -3517,31 +3064,11 @@ parameters: count: 2 path: src/Project/ProjectStatisticService.php - - - message: "#^Parameter \\#1 \\$datetime of method App\\\\Timesheet\\\\DateTimeFactory\\:\\:createDateTime\\(\\) expects string, mixed given\\.$#" - count: 1 - path: src/Project/ProjectStatisticService.php - - message: "#^Parameter \\#1 \\$duration of method App\\\\Model\\\\TimesheetCountedStatistic\\:\\:setDuration\\(\\) expects int, float\\|int given\\.$#" count: 1 path: src/Project/ProjectStatisticService.php - - - message: "#^Parameter \\#1 \\$durationDay of method App\\\\Reporting\\\\ProjectView\\\\ProjectViewModel\\:\\:setDurationDay\\(\\) expects int, mixed given\\.$#" - count: 1 - path: src/Project/ProjectStatisticService.php - - - - message: "#^Parameter \\#1 \\$durationMonth of method App\\\\Reporting\\\\ProjectView\\\\ProjectViewModel\\:\\:setDurationMonth\\(\\) expects int, mixed given\\.$#" - count: 1 - path: src/Project/ProjectStatisticService.php - - - - message: "#^Parameter \\#1 \\$durationWeek of method App\\\\Reporting\\\\ProjectView\\\\ProjectViewModel\\:\\:setDurationWeek\\(\\) expects int, mixed given\\.$#" - count: 1 - path: src/Project/ProjectStatisticService.php - - message: "#^Parameter \\#1 \\$project of class App\\\\Reporting\\\\ProjectDetails\\\\ProjectDetailsModel constructor expects App\\\\Entity\\\\Project, App\\\\Entity\\\\Project\\|null given\\.$#" count: 1 @@ -3692,11 +3219,6 @@ parameters: count: 1 path: src/Repository/TimesheetRepository.php - - - message: "#^Cannot call method add\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/Repository/TimesheetRepository.php - - message: "#^Cannot call method getCustomer\\(\\) on App\\\\Entity\\\\Project\\|null\\.$#" count: 1 @@ -3857,91 +3379,36 @@ parameters: count: 2 path: src/Timesheet/Rounding/CeilRounding.php - - - message: "#^Cannot call method setTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 2 - path: src/Timesheet/Rounding/CeilRounding.php - - message: "#^Cannot clone DateTime\\|null\\.$#" count: 2 path: src/Timesheet/Rounding/CeilRounding.php - - - message: "#^Parameter \\#1 \\$begin of method App\\\\Entity\\\\Timesheet\\:\\:setBegin\\(\\) expects DateTime, DateTime\\|null given\\.$#" - count: 1 - path: src/Timesheet/Rounding/CeilRounding.php - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" count: 2 path: src/Timesheet/Rounding/ClosestRounding.php - - - message: "#^Cannot call method setTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 4 - path: src/Timesheet/Rounding/ClosestRounding.php - - message: "#^Cannot clone DateTime\\|null\\.$#" count: 2 path: src/Timesheet/Rounding/ClosestRounding.php - - - message: "#^Parameter \\#1 \\$begin of method App\\\\Entity\\\\Timesheet\\:\\:setBegin\\(\\) expects DateTime, DateTime\\|null given\\.$#" - count: 1 - path: src/Timesheet/Rounding/ClosestRounding.php - - - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 2 - path: src/Timesheet/Rounding/DefaultRounding.php - - - - message: "#^Cannot call method setTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 2 - path: src/Timesheet/Rounding/DefaultRounding.php - - - - message: "#^Cannot clone DateTime\\|null\\.$#" - count: 2 - path: src/Timesheet/Rounding/DefaultRounding.php - - - - message: "#^Parameter \\#1 \\$begin of method App\\\\Entity\\\\Timesheet\\:\\:setBegin\\(\\) expects DateTime, DateTime\\|null given\\.$#" - count: 1 - path: src/Timesheet/Rounding/DefaultRounding.php - - message: "#^Cannot call method getTimestamp\\(\\) on DateTime\\|null\\.$#" count: 2 path: src/Timesheet/Rounding/FloorRounding.php - - - message: "#^Cannot call method setTimestamp\\(\\) on DateTime\\|null\\.$#" - count: 2 - path: src/Timesheet/Rounding/FloorRounding.php - - message: "#^Cannot clone DateTime\\|null\\.$#" count: 2 path: src/Timesheet/Rounding/FloorRounding.php - - - message: "#^Parameter \\#1 \\$begin of method App\\\\Entity\\\\Timesheet\\:\\:setBegin\\(\\) expects DateTime, DateTime\\|null given\\.$#" - count: 1 - path: src/Timesheet/Rounding/FloorRounding.php - - message: "#^Cannot call method getTimezone\\(\\) on App\\\\Entity\\\\User\\|null\\.$#" count: 2 path: src/Timesheet/TimesheetService.php - - - message: "#^Cannot call method getTimezone\\(\\) on DateTime\\|null\\.$#" - count: 1 - path: src/Timesheet/TimesheetService.php - - message: "#^Cannot clone DateTime\\|null\\.$#" count: 1 @@ -3967,11 +3434,6 @@ parameters: count: 1 path: src/Timesheet/TimesheetService.php - - - message: "#^Parameter \\#1 \\$begin of method App\\\\Entity\\\\Timesheet\\:\\:setBegin\\(\\) expects DateTime, DateTime\\|null given\\.$#" - count: 1 - path: src/Timesheet/TimesheetService.php - - message: "#^Method App\\\\Timesheet\\\\TimesheetStatisticService\\:\\:getDailyStatisticsGrouped\\(\\) return type has no value type specified in iterable type array\\.$#" count: 1 @@ -3982,26 +3444,6 @@ parameters: count: 1 path: src/Timesheet/TimesheetStatisticService.php - - - message: "#^Method App\\\\Timesheet\\\\TrackingMode\\\\AbstractTrackingMode\\:\\:setBeginEndFromRequest\\(\\) has no return type specified\\.$#" - count: 1 - path: src/Timesheet/TrackingMode/AbstractTrackingMode.php - - - - message: "#^Method App\\\\Timesheet\\\\TrackingMode\\\\AbstractTrackingMode\\:\\:setFromToFromRequest\\(\\) has no return type specified\\.$#" - count: 1 - path: src/Timesheet/TrackingMode/AbstractTrackingMode.php - - - - message: "#^Parameter \\#1 \\$datetime of class DateTime constructor expects string, mixed given\\.$#" - count: 2 - path: src/Timesheet/TrackingMode/AbstractTrackingMode.php - - - - message: "#^Parameter \\#2 \\$datetime of static method DateTime\\:\\:createFromFormat\\(\\) expects string, mixed given\\.$#" - count: 2 - path: src/Timesheet/TrackingMode/AbstractTrackingMode.php - - message: "#^Method App\\\\Twig\\\\Configuration\\:\\:__call\\(\\) has no return type specified\\.$#" count: 1 @@ -4328,29 +3770,14 @@ parameters: path: src/Utils/PaginationTemplate.php - - message: "#^Method App\\\\Utils\\\\ParsedownExtension\\:\\:blockHeader\\(\\) has no return type specified\\.$#" + message: "#^Method App\\\\Utils\\\\Parsedown\\:\\:blockHeader\\(\\) has no return type specified\\.$#" count: 1 - path: src/Utils/ParsedownExtension.php + path: src/Utils/Parsedown.php - - message: "#^Method App\\\\Utils\\\\ParsedownExtension\\:\\:blockHeader\\(\\) has parameter \\$Line with no type specified\\.$#" + message: "#^Method App\\\\Utils\\\\Parsedown\\:\\:blockHeader\\(\\) has parameter \\$Line with no type specified\\.$#" count: 1 - path: src/Utils/ParsedownExtension.php - - - - message: "#^Method App\\\\Utils\\\\ParsedownExtension\\:\\:blockTable\\(\\) has no return type specified\\.$#" - count: 1 - path: src/Utils/ParsedownExtension.php - - - - message: "#^Method App\\\\Utils\\\\ParsedownExtension\\:\\:blockTable\\(\\) has parameter \\$Block with no value type specified in iterable type array\\.$#" - count: 1 - path: src/Utils/ParsedownExtension.php - - - - message: "#^Method App\\\\Utils\\\\ParsedownExtension\\:\\:blockTable\\(\\) has parameter \\$Line with no type specified\\.$#" - count: 1 - path: src/Utils/ParsedownExtension.php + path: src/Utils/Parsedown.php - message: "#^Method App\\\\Utils\\\\ParsedownExtension\\:\\:inlineUrl\\(\\) has parameter \\$Excerpt with no type specified\\.$#" @@ -4365,7 +3792,7 @@ parameters: - message: "#^Parameter \\#1 \\$str of function strtr expects string, string\\|null given\\.$#" count: 1 - path: src/Utils/ParsedownExtension.php + path: src/Utils/Parsedown.php - message: "#^Property App\\\\Utils\\\\ParsedownExtension\\:\\:\\$BlockTypes has no type specified\\.$#" @@ -4437,11 +3864,6 @@ parameters: count: 1 path: src/Utils/ReleaseVersion.php - - - message: "#^Method App\\\\Utils\\\\SearchTerm\\:\\:getSearchFields\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Utils/SearchTerm.php - - message: "#^Cannot access offset 'pattern' on mixed\\.$#" count: 1 @@ -4571,3 +3993,8 @@ parameters: message: "#^Method App\\\\Form\\\\MultiUpdate\\\\MultiUpdateTableDTO\\:\\:setEntities\\(\\) has parameter \\$entities with generic interface Doctrine\\\\Common\\\\Collections\\\\Collection but does not specify its types\\: TKey, T$#" count: 1 path: src/Form/MultiUpdate/MultiUpdateTableDTO.php + + - + message: "#^Method App\\\\Entity\\\\InvoiceTemplate\\:\\:getMetaFields\\(\\) return type with generic interface Doctrine\\\\Common\\\\Collections\\\\Collection does not specify its types\\: TKey, T$#" + count: 1 + path: src/Entity/InvoiceTemplate.php diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 49cbd6736..577d748af 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -4,7 +4,12 @@ backupGlobals="false" colors="true" bootstrap="tests/bootstrap.php" - cacheDirectory="var/cache/phpunit/"> + cacheDirectory="var/cache/phpunit/" + displayDetailsOnTestsThatTriggerDeprecations="true" + displayDetailsOnTestsThatTriggerErrors="true" + displayDetailsOnTestsThatTriggerNotices="true" + displayDetailsOnTestsThatTriggerWarnings="true" + displayDetailsOnPhpunitDeprecations="true"> @@ -34,14 +39,15 @@ --> - tests/ - - + + + + src/ templates/ @@ -58,10 +64,5 @@ var/ vendor/ - - - - - - + diff --git a/public/build/app-rtl.15853b82.js b/public/build/app-rtl.15853b82.js new file mode 100644 index 000000000..c9d7b4436 --- /dev/null +++ b/public/build/app-rtl.15853b82.js @@ -0,0 +1 @@ +(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[113],{876:function(i,n,u){"use strict";u.r(n)},2395:function(i,n,u){u(876)}},function(i){var n;n=2395,i(i.s=n)}]); \ No newline at end of file diff --git a/public/build/app-rtl.2003dce5.css b/public/build/app-rtl.2003dce5.css new file mode 100644 index 000000000..b1558fae5 --- /dev/null +++ b/public/build/app-rtl.2003dce5.css @@ -0,0 +1,5 @@ +@charset "UTF-8";:root,[data-bs-theme=light]{--tblr-black:#000;--tblr-white:#fff;--tblr-gray:#4b5563;--tblr-gray-dark:#1f2937;--tblr-gray-100:#f3f4f6;--tblr-gray-200:#e5e7eb;--tblr-gray-300:#d1d5db;--tblr-gray-400:#9ca3af;--tblr-gray-500:#6b7280;--tblr-gray-600:#4b5563;--tblr-gray-700:#374151;--tblr-gray-800:#1f2937;--tblr-gray-900:#111827;--tblr-primary:#066fd1;--tblr-secondary:#6b7280;--tblr-success:#2fb344;--tblr-info:#4299e1;--tblr-warning:#f59f00;--tblr-danger:#d63939;--tblr-light:#f9fafb;--tblr-dark:#1f2937;--tblr-muted:#6b7280;--tblr-blue:#066fd1;--tblr-azure:#4299e1;--tblr-indigo:#4263eb;--tblr-purple:#ae3ec9;--tblr-pink:#d6336c;--tblr-red:#d63939;--tblr-orange:#f76707;--tblr-yellow:#f59f00;--tblr-lime:#74b816;--tblr-green:#2fb344;--tblr-teal:#0ca678;--tblr-cyan:#17a2b8;--tblr-primary-rgb:6,111,209;--tblr-secondary-rgb:107,114,128;--tblr-success-rgb:47,179,68;--tblr-info-rgb:66,153,225;--tblr-warning-rgb:245,159,0;--tblr-danger-rgb:214,57,57;--tblr-light-rgb:249,250,251;--tblr-dark-rgb:31,41,55;--tblr-muted-rgb:107,114,128;--tblr-blue-rgb:6,111,209;--tblr-azure-rgb:66,153,225;--tblr-indigo-rgb:66,99,235;--tblr-purple-rgb:174,62,201;--tblr-pink-rgb:214,51,108;--tblr-red-rgb:214,57,57;--tblr-orange-rgb:247,103,7;--tblr-yellow-rgb:245,159,0;--tblr-lime-rgb:116,184,22;--tblr-green-rgb:47,179,68;--tblr-teal-rgb:12,166,120;--tblr-cyan-rgb:23,162,184;--tblr-primary-text-emphasis:#022c54;--tblr-secondary-text-emphasis:#2b2e33;--tblr-success-text-emphasis:#13481b;--tblr-info-text-emphasis:#1a3d5a;--tblr-warning-text-emphasis:#624000;--tblr-danger-text-emphasis:#561717;--tblr-light-text-emphasis:#374151;--tblr-dark-text-emphasis:#374151;--tblr-primary-bg-subtle:#cde2f6;--tblr-secondary-bg-subtle:#e1e3e6;--tblr-success-bg-subtle:#d5f0da;--tblr-info-bg-subtle:#d9ebf9;--tblr-warning-bg-subtle:#fdeccc;--tblr-danger-bg-subtle:#f7d7d7;--tblr-light-bg-subtle:#f9fafb;--tblr-dark-bg-subtle:#9ca3af;--tblr-primary-border-subtle:#9bc5ed;--tblr-secondary-border-subtle:#c4c7cc;--tblr-success-border-subtle:#ace1b4;--tblr-info-border-subtle:#b3d6f3;--tblr-warning-border-subtle:#fbd999;--tblr-danger-border-subtle:#efb0b0;--tblr-light-border-subtle:#e5e7eb;--tblr-dark-border-subtle:#6b7280;--tblr-white-rgb:255,255,255;--tblr-black-rgb:0,0,0;--tblr-font-sans-serif:"Inter Var",Inter,-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-monospace:Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--tblr-body-font-family:var(--tblr-font-sans-serif);--tblr-body-font-size:0.875rem;--tblr-body-font-weight:400;--tblr-body-line-height:1.4285714286;--tblr-body-color:#1f2937;--tblr-body-color-rgb:31,41,55;--tblr-body-bg:#f9fafb;--tblr-body-bg-rgb:249,250,251;--tblr-emphasis-color:#374151;--tblr-emphasis-color-rgb:55,65,81;--tblr-secondary-color:rgba(31,41,55,.75);--tblr-secondary-color-rgb:31,41,55;--tblr-secondary-bg:#e5e7eb;--tblr-secondary-bg-rgb:229,231,235;--tblr-tertiary-color:rgba(31,41,55,.5);--tblr-tertiary-color-rgb:31,41,55;--tblr-tertiary-bg:#f3f4f6;--tblr-tertiary-bg-rgb:243,244,246;--tblr-heading-color:inherit;--tblr-link-color:#066fd1;--tblr-link-color-rgb:6,111,209;--tblr-link-decoration:none;--tblr-link-hover-color:#0559a7;--tblr-link-hover-color-rgb:5,89,167;--tblr-link-hover-decoration:underline;--tblr-code-color:light-dark(var(--tblr-gray-600),var(--tblr-gray-400));--tblr-highlight-color:#1f2937;--tblr-highlight-bg:#fdeccc;--tblr-border-width:1px;--tblr-border-style:solid;--tblr-border-color:#e5e7eb;--tblr-border-color-translucent:rgba(4,32,69,.1);--tblr-border-radius:6px;--tblr-border-radius-sm:4px;--tblr-border-radius-lg:8px;--tblr-border-radius-xl:1rem;--tblr-border-radius-xxl:2rem;--tblr-border-radius-2xl:var(--tblr-border-radius-xxl);--tblr-border-radius-pill:100rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb),0.04) 0 2px 4px 0;--tblr-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--tblr-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--tblr-box-shadow-inset:0 0 transparent;--tblr-focus-ring-width:0.25rem;--tblr-focus-ring-opacity:0.25;--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb),0.25);--tblr-form-valid-color:#2fb344;--tblr-form-valid-border-color:#2fb344;--tblr-form-invalid-color:#d63939;--tblr-form-invalid-border-color:#d63939}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{--tblr-body-color:#e5e7eb;--tblr-body-color-rgb:229,231,235;--tblr-body-bg:#111827;--tblr-body-bg-rgb:17,24,39;--tblr-secondary-color:rgba(229,231,235,.75);--tblr-secondary-color-rgb:229,231,235;--tblr-secondary-bg:#1f2937;--tblr-secondary-bg-rgb:31,41,55;--tblr-tertiary-color:rgba(229,231,235,.5);--tblr-tertiary-color-rgb:229,231,235;--tblr-tertiary-bg:#18212f;--tblr-tertiary-bg-rgb:24,33,47;--tblr-primary-text-emphasis:#6aa9e3;--tblr-secondary-text-emphasis:#a6aab3;--tblr-success-text-emphasis:#82d18f;--tblr-info-text-emphasis:#8ec2ed;--tblr-warning-text-emphasis:#f9c566;--tblr-danger-text-emphasis:#e68888;--tblr-light-text-emphasis:#f3f4f6;--tblr-dark-text-emphasis:#d1d5db;--tblr-primary-bg-subtle:#01162a;--tblr-secondary-bg-subtle:#15171a;--tblr-success-bg-subtle:#09240e;--tblr-info-bg-subtle:#0d1f2d;--tblr-warning-bg-subtle:#312000;--tblr-danger-bg-subtle:#2b0b0b;--tblr-light-bg-subtle:#1f2937;--tblr-dark-bg-subtle:#10151c;--tblr-primary-border-subtle:#04437d;--tblr-secondary-border-subtle:#40444d;--tblr-success-border-subtle:#1c6b29;--tblr-info-border-subtle:#285c87;--tblr-warning-border-subtle:#935f00;--tblr-danger-border-subtle:#802222;--tblr-light-border-subtle:#374151;--tblr-dark-border-subtle:#1f2937;--tblr-heading-color:inherit;--tblr-link-color:#6aa9e3;--tblr-link-hover-color:#87bae9;--tblr-link-color-rgb:106,169,227;--tblr-link-hover-color-rgb:135,186,233;--tblr-code-color:var(--tblr-gray-300);--tblr-highlight-color:#e5e7eb;--tblr-highlight-bg:#624000;--tblr-border-color:#2e3c51;--tblr-border-color-translucent:rgba(72,110,149,.14);--tblr-form-valid-color:#82d18f;--tblr-form-valid-border-color:#82d18f;--tblr-form-invalid-color:#e68888;--tblr-form-invalid-border-color:#e68888}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--tblr-body-bg);color:var(--tblr-body-color);font-family:var(--tblr-body-font-family);font-size:var(--tblr-body-font-size);font-weight:var(--tblr-body-font-weight);line-height:var(--tblr-body-line-height);margin:0;text-align:var(--tblr-body-text-align);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.hr,hr{border:0;border-top:var(--tblr-border-width) solid;color:inherit;opacity:.16}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--tblr-heading-color);font-weight:var(--tblr-font-weight-bold);line-height:1.2;margin-bottom:var(--tblr-spacer);margin-top:0}.h1,h1{font-size:1.5rem}.h2,h2{font-size:1.25rem}.h3,h3{font-size:1rem}.h4,h4{font-size:.875rem}.h5,h5{font-size:.75rem}.h6,h6{font-size:.625rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-right:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:.875em}.mark,mark{background-color:var(--tblr-highlight-bg);color:var(--tblr-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,1));text-decoration:none}a:hover{--tblr-link-color-rgb:var(--tblr-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--tblr-font-monospace);font-size:1em}pre{display:block;font-size:.85714285em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{color:var(--tblr-code-color);font-size:.85714285em;word-wrap:break-word}a>code{color:inherit}kbd{background-color:var(--tblr-code-bg);border-radius:4px;color:var(--tblr-text-secondary-dark);font-size:var(--tblr-font-size-h5);padding:.25rem .5rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--tblr-secondary-color);padding-bottom:.75rem;padding-top:.75rem;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:right;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}legend+*{clear:right}::-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}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:.875rem;font-weight:var(--tblr-font-weight-normal)}.display-1{font-size:5rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:4.5rem}.display-3{font-size:4rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}.display-5{font-size:3rem}.display-5,.display-6{font-weight:300;line-height:1.2}.display-6{font-size:2rem}.list-inline,.list-unstyled{list-style:none;padding-right:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:.875rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#4b5563;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:var(--tblr-body-bg);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-sm);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:var(--tblr-secondary-color);font-size:.875em}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}@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{--tblr-breakpoint-xs:0;--tblr-breakpoint-sm:576px;--tblr-breakpoint-md:768px;--tblr-breakpoint-lg:992px;--tblr-breakpoint-xl:1200px;--tblr-breakpoint-xxl:1400px}.row{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--tblr-gutter-x)*-.5);margin-right:calc(var(--tblr-gutter-x)*-.5);margin-top:calc(var(--tblr-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--tblr-gutter-y);max-width:100%;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.grid{display:grid;gap:var(--tblr-gap,var(--tblr-page-padding));grid-template-columns:repeat(var(--tblr-columns,12),1fr);grid-template-rows:repeat(var(--tblr-rows,1),1fr)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width:576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width:768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width:992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width:1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width:1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.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-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--tblr-gutter-x:0}.g-0,.gy-0{--tblr-gutter-y:0}.g-1,.gx-1{--tblr-gutter-x:0.25rem}.g-1,.gy-1{--tblr-gutter-y:0.25rem}.g-2,.gx-2{--tblr-gutter-x:0.5rem}.g-2,.gy-2{--tblr-gutter-y:0.5rem}.g-3,.gx-3{--tblr-gutter-x:1rem}.g-3,.gy-3{--tblr-gutter-y:1rem}.g-4,.gx-4{--tblr-gutter-x:1.5rem}.g-4,.gy-4{--tblr-gutter-y:1.5rem}.g-5,.gx-5{--tblr-gutter-x:2rem}.g-5,.gy-5{--tblr-gutter-y:2rem}.g-6,.gx-6{--tblr-gutter-x:2.5rem}.g-6,.gy-6{--tblr-gutter-y:2.5rem}@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-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--tblr-gutter-x:0}.g-sm-0,.gy-sm-0{--tblr-gutter-y:0}.g-sm-1,.gx-sm-1{--tblr-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x:1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y:1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x:2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y:2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x:2.5rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y:2.5rem}}@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-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--tblr-gutter-x:0}.g-md-0,.gy-md-0{--tblr-gutter-y:0}.g-md-1,.gx-md-1{--tblr-gutter-x:0.25rem}.g-md-1,.gy-md-1{--tblr-gutter-y:0.25rem}.g-md-2,.gx-md-2{--tblr-gutter-x:0.5rem}.g-md-2,.gy-md-2{--tblr-gutter-y:0.5rem}.g-md-3,.gx-md-3{--tblr-gutter-x:1rem}.g-md-3,.gy-md-3{--tblr-gutter-y:1rem}.g-md-4,.gx-md-4{--tblr-gutter-x:1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y:1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x:2rem}.g-md-5,.gy-md-5{--tblr-gutter-y:2rem}.g-md-6,.gx-md-6{--tblr-gutter-x:2.5rem}.g-md-6,.gy-md-6{--tblr-gutter-y:2.5rem}}@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-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--tblr-gutter-x:0}.g-lg-0,.gy-lg-0{--tblr-gutter-y:0}.g-lg-1,.gx-lg-1{--tblr-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x:1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y:1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x:2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y:2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x:2.5rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y:2.5rem}}@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-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--tblr-gutter-x:0}.g-xl-0,.gy-xl-0{--tblr-gutter-y:0}.g-xl-1,.gx-xl-1{--tblr-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x:1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y:1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x:2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y:2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x:2.5rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y:2.5rem}}@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-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--tblr-gutter-x:0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y:0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x:2.5rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y:2.5rem}}.markdown>table,.table{--tblr-table-color-type:initial;--tblr-table-bg-type:initial;--tblr-table-color-state:initial;--tblr-table-bg-state:initial;--tblr-table-color:inherit;--tblr-table-bg:transparent;--tblr-table-border-color:var(--tblr-border-color-translucent);--tblr-table-accent-bg:transparent;--tblr-table-striped-color:inherit;--tblr-table-striped-bg:var(--tblr-bg-surface-tertiary);--tblr-table-active-color:inherit;--tblr-table-active-bg:var(--tblr-active-bg);--tblr-table-hover-color:inherit;--tblr-table-hover-bg:rgba(var(--tblr-emphasis-color-rgb),0.075);border-color:var(--tblr-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.markdown>table>:not(caption)>*>*,.table>:not(caption)>*>*{background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var(--tblr-table-bg-state,var(--tblr-table-bg-type,var(--tblr-table-accent-bg)));color:var(--tblr-table-color-state,var(--tblr-table-color-type,var(--tblr-table-color)));padding:.75rem}.markdown>table>tbody,.table>tbody{vertical-align:inherit}.markdown>table>thead,.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--tblr-border-width)*2) solid var(--tblr-border-color-translucent)}.caption-top{caption-side:top}.markdown>table>:not(caption)>*>*,.table-sm>:not(caption)>*>*{padding:.25rem}.markdown>table>:not(caption)>*,.table-bordered>:not(caption)>*{border-width:var(--tblr-border-width) 0}.markdown>table>:not(caption)>*>*,.table-bordered>:not(caption)>*>*{border-width:0 var(--tblr-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(2n)>*{--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-active{--tblr-table-color-state:var(--tblr-table-active-color);--tblr-table-bg-state:var(--tblr-table-active-bg)}.table-hover>tbody>tr:hover>*{--tblr-table-color-state:var(--tblr-table-hover-color);--tblr-table-bg-state:var(--tblr-table-hover-bg)}.table-primary{--tblr-table-color:#1f2937;--tblr-table-bg:#cde2f6;--tblr-table-border-color:#aabdd0;--tblr-table-striped-bg:#c4d9ec;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#bcd0e3;--tblr-table-active-color:#f9fafb;--tblr-table-hover-bg:#c0d4e7;--tblr-table-hover-color:#1f2937;border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-secondary{--tblr-table-color:#1f2937;--tblr-table-bg:#e1e3e6;--tblr-table-border-color:#bbbec3;--tblr-table-striped-bg:#d8dadd;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#ced0d4;--tblr-table-active-color:#1f2937;--tblr-table-hover-bg:#d3d5d9;--tblr-table-hover-color:#1f2937}.table-secondary,.table-success{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-success{--tblr-table-color:#1f2937;--tblr-table-bg:#d5f0da;--tblr-table-border-color:#b1c8b9;--tblr-table-striped-bg:#cce6d1;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#c3dcc9;--tblr-table-active-color:#1f2937;--tblr-table-hover-bg:#c8e1cd;--tblr-table-hover-color:#1f2937}.table-info{--tblr-table-color:#1f2937;--tblr-table-bg:#d9ebf9;--tblr-table-border-color:#b4c4d2;--tblr-table-striped-bg:#d0e1ef;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#c7d7e6;--tblr-table-active-color:#1f2937;--tblr-table-hover-bg:#cbdcea;--tblr-table-hover-color:#1f2937}.table-info,.table-warning{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-warning{--tblr-table-color:#1f2937;--tblr-table-bg:#fdeccc;--tblr-table-border-color:#d1c5ae;--tblr-table-striped-bg:#f2e2c5;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#e7d8bd;--tblr-table-active-color:#1f2937;--tblr-table-hover-bg:#ecddc1;--tblr-table-hover-color:#1f2937}.table-danger{--tblr-table-color:#1f2937;--tblr-table-bg:#f7d7d7;--tblr-table-border-color:#ccb5b7;--tblr-table-striped-bg:#eccfcf;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#e1c6c7;--tblr-table-active-color:#f9fafb;--tblr-table-hover-bg:#e7cacb;--tblr-table-hover-color:#1f2937}.table-danger,.table-light{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-light{--tblr-table-color:#1f2937;--tblr-table-bg:#f9fafb;--tblr-table-border-color:#cdd0d4;--tblr-table-striped-bg:#eef0f1;--tblr-table-striped-color:#1f2937;--tblr-table-active-bg:#e3e5e7;--tblr-table-active-color:#1f2937;--tblr-table-hover-bg:#e9eaec;--tblr-table-hover-color:#1f2937}.table-dark{--tblr-table-color:#f9fafb;--tblr-table-bg:#1f2937;--tblr-table-border-color:#4b535e;--tblr-table-striped-bg:#2a3341;--tblr-table-striped-color:#f9fafb;--tblr-table-active-bg:#353e4b;--tblr-table-active-color:#f9fafb;--tblr-table-hover-bg:#2f3946;--tblr-table-hover-color:#f9fafb;border-color:var(--tblr-table-border-color);color:var(--tblr-table-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{font-size:.875rem;margin-bottom:.5rem}.col-form-label,.form-label{font-weight:var(--tblr-font-weight-medium)}.col-form-label{font-size:inherit;line-height:1.25rem;margin-bottom:0;padding-bottom:calc(.5625rem + var(--tblr-border-width));padding-top:calc(.5625rem + var(--tblr-border-width))}.col-form-label-lg{font-size:1rem;padding-bottom:calc(.6875rem + var(--tblr-border-width));padding-top:calc(.6875rem + var(--tblr-border-width))}.col-form-label-sm{font-size:.75rem;padding-bottom:calc(.3125rem + var(--tblr-border-width));padding-top:calc(.3125rem + var(--tblr-border-width))}.form-text{color:var(--tblr-secondary-color);font-size:.875em;margin-top:.25rem}.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-clip:padding-box;background-color:var(--tblr-bg-forms);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-shadow-input);color:var(--tblr-body-color);display:block;font-family:var(--tblr-body-font-family);font-size:.875rem;font-weight:400;line-height:1.25rem;padding:.5625rem 1rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@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{background-color:var(--tblr-bg-forms);border-color:#83b7e8;box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);color:var(--tblr-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.25rem;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-moz-placeholder{color:var(--tblr-tertiary);opacity:1}.form-control::placeholder{color:var(--tblr-tertiary);opacity:1}.form-control:disabled{background-color:var(--tblr-bg-surface-secondary);opacity:1}.form-control::file-selector-button{background-color:var(--tblr-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--tblr-border-width);border-radius:0;color:var(--tblr-body-color);margin:-.5625rem -1rem;margin-inline-end:1rem;padding:.5625rem 1rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:var(--tblr-border-width) 0;color:var(--tblr-body-color);display:block;line-height:1.25rem;margin-bottom:0;padding:.5625rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;min-height:calc(1.875rem + var(--tblr-border-width)*2);padding:.3125rem .5rem}.form-control-sm::file-selector-button{margin:-.3125rem -.5rem;margin-inline-end:.5rem;padding:.3125rem .5rem}.form-control-lg{border-radius:var(--tblr-border-radius-lg);font-size:1rem;min-height:calc(2.625rem + var(--tblr-border-width)*2);padding:.6875rem 1.5rem}.form-control-lg::file-selector-button{margin:-.6875rem -1.5rem;margin-inline-end:1.5rem;padding:.6875rem 1.5rem}textarea.form-control{min-height:calc(2.375rem + var(--tblr-border-width)*2)}textarea.form-control-sm{min-height:calc(1.875rem + var(--tblr-border-width)*2)}textarea.form-control-lg{min-height:calc(2.625rem + var(--tblr-border-width)*2)}.form-control-color{height:calc(2.375rem + var(--tblr-border-width)*2);padding:.5625rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color.form-control-sm{height:calc(1.875rem + var(--tblr-border-width)*2)}.form-control-color.form-control-lg{height:calc(2.625rem + var(--tblr-border-width)*2)}.form-select{--tblr-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%239ca3af' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-bg-forms);background-image:var(--tblr-form-select-bg-img),var(--tblr-form-select-bg-icon,none);background-position:left 1rem center;background-repeat:no-repeat;background-size:16px 12px;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-shadow-input);color:var(--tblr-body-color);display:block;font-family:var(--tblr-body-font-family);font-size:.875rem;font-weight:400;line-height:1.25rem;padding:.5625rem 1rem .5625rem 3rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#83b7e8;box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-left:1rem}.form-select:disabled{background-color:var(--tblr-bg-surface-secondary)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--tblr-body-color)}.form-select-sm{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;padding-bottom:.3125rem;padding-right:.5rem;padding-top:.3125rem}.form-select-lg{border-radius:var(--tblr-border-radius-lg);font-size:1rem;padding-bottom:.6875rem;padding-right:1.5rem;padding-top:.6875rem}[data-bs-theme=dark] .form-select,body[data-bs-theme=dark] [data-bs-theme=light] .form-select{--tblr-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23e5e7eb' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.75rem;min-height:1.25rem;padding-right:2rem}.form-check .form-check-input{float:right;margin-right:-2rem}.form-check-reverse{padding-left:2rem;padding-right:0;text-align:left}.form-check-reverse .form-check-input{float:left;margin-left:-2rem;margin-right:0}.form-check-input{--tblr-form-check-bg:var(--tblr-bg-forms);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-form-check-bg);background-image:var(--tblr-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);flex-shrink:0;height:1.25rem;margin-top:.0892857143rem;-webkit-print-color-adjust:exact;print-color-adjust:exact;vertical-align:top;width:1.25rem}.form-check-input[type=checkbox]{border-radius:var(--tblr-border-radius)}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#83b7e8;box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.form-check-input:checked{background-color:var(--tblr-primary);border-color:var(--tblr-border-color-translucent)}.form-check-input:checked[type=checkbox]{--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{background-color:var(--tblr-primary);border-color:var(--tblr-primary);--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%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{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.7}.form-switch{padding-right:2.5rem}.form-switch .form-check-input{--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23e5e7eb'/%3E%3C/svg%3E");background-image:var(--tblr-form-switch-bg);background-position:100%;border-radius:2rem;margin-right:-2.5rem;transition:background-position .15s ease-in-out;width:2rem}.form-switch .form-check-input:focus{--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2382B7E8'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{background-position:0;--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%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-left:2.5rem;padding-right:0}.form-switch.form-check-reverse .form-check-input{margin-left:-2.5rem;margin-right:0}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.4;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 0.25)'/%3E%3C/svg%3E")}.form-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;height:1.25rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f9fafb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f9fafb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;margin-top:-.375rem;-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;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b4d4f1}.form-range::-webkit-slider-runnable-track{background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range::-moz-range-thumb{-moz-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height: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;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b4d4f1}.form-range::-moz-range-track{background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--tblr-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--tblr-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + var(--tblr-border-width)*2);line-height:1.25;min-height:calc(3.5rem + var(--tblr-border-width)*2)}.form-floating>label{border:var(--tblr-border-width) solid transparent;color:rgba(var(--tblr-body-color-rgb),.65);height:100%;max-width:100%;overflow:hidden;padding:1rem;pointer-events:none;position:absolute;right:0;text-align:start;text-overflow:ellipsis;top:0;transform-origin:100% 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@media (prefers-reduced-motion:reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem}.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),.form-floating>.form-control:not(:-moz-placeholder){padding-bottom:.625rem;padding-top:1.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-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-right:1rem;padding-top:1.625rem}.form-floating>.form-control:not(:-moz-placeholder)~label{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{transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control:-webkit-autofill~label{transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>textarea:not(:-moz-placeholder)~label:after{background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius);content:"";height:1.5em;inset:1rem .5rem;position:absolute;z-index:-1}.form-floating>textarea:focus~label:after,.form-floating>textarea:not(:placeholder-shown)~label:after{background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius);content:"";height:1.5em;inset:1rem .5rem;position:absolute;z-index:-1}.form-floating>textarea:disabled~label:after{background-color:var(--tblr-bg-surface-secondary)}.form-floating>.form-control-plaintext~label{border-width:var(--tblr-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#4b5563}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.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{align-items:center;background-color:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:var(--tblr-gray-500);display:flex;font-size:.875rem;font-weight:400;line-height:1.25rem;padding:.5625rem 1rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--tblr-border-radius-lg);font-size:1rem;padding:.6875rem 1.5rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;padding:.3125rem .5rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:4rem}.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),.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-bottom-left-radius:0;border-top-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:calc(var(--tblr-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-right-radius:0;border-top-right-radius:0}.valid-feedback{color:var(--tblr-form-valid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.valid-tooltip{background-color:var(--tblr-success);border-radius:var(--tblr-border-radius);color:#fff;display:none;font-size:.765625rem;margin-top:.1rem;max-width:100%;padding:var(--tblr-spacer-1) var(--tblr-spacer-3);position:absolute;top:100%;z-index:5}.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{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:left 1.53125rem center;background-repeat:no-repeat;background-size:1.8125rem 1.8125rem;border-color:var(--tblr-form-valid-border-color);padding-left:2.375rem}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top 1.53125rem left 1.53125rem;padding-left:2.375rem}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--tblr-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"]{--tblr-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:left 1rem center,center left 3rem;background-size:16px 12px,1.8125rem 1.8125rem;padding-left:5.5rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:5.375rem}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--tblr-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--tblr-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--tblr-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--tblr-form-invalid-color);display:none;font-size:.875em;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:var(--tblr-danger);border-radius:var(--tblr-border-radius);color:#fff;display:none;font-size:.765625rem;margin-top:.1rem;max-width:100%;padding:var(--tblr-spacer-1) var(--tblr-spacer-3);position:absolute;top:100%;z-index:5}.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{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:left 1.53125rem center;background-repeat:no-repeat;background-size:1.8125rem 1.8125rem;border-color:var(--tblr-form-invalid-border-color);padding-left:2.375rem}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top 1.53125rem left 1.53125rem;padding-left:2.375rem}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--tblr-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"]{--tblr-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:left 1rem center,center left 3rem;background-size:16px 12px,1.8125rem 1.8125rem;padding-left:5.5rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:5.375rem}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--tblr-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--tblr-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.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{--tblr-btn-padding-x:1rem;--tblr-btn-padding-y:0.5625rem;--tblr-btn-font-family:var(--tblr-body-font-family);--tblr-btn-font-size:0.875rem;--tblr-btn-font-weight:var(--tblr-font-weight-medium);--tblr-btn-line-height:1.25rem;--tblr-btn-bg:transparent;--tblr-btn-border-width:var(--tblr-border-width);--tblr-btn-border-color:transparent;--tblr-btn-border-radius:var(--tblr-border-radius);--tblr-btn-hover-border-color:transparent;--tblr-btn-box-shadow:var(--tblr-shadow-input);--tblr-btn-disabled-opacity:0.4;--tblr-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-btn-focus-shadow-rgb),.5);background-color:var(--tblr-btn-bg);border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);color:var(--tblr-btn-color);cursor:pointer;display:inline-block;font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);color:var(--tblr-btn-hover-color);text-decoration:none}.btn-check+.btn:hover{background-color:var(--tblr-btn-bg);border-color:var(--tblr-btn-border-color);color:var(--tblr-btn-color)}.btn:focus-visible{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow);color:var(--tblr-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--tblr-btn-hover-border-color);box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--tblr-btn-active-bg);border-color:var(--tblr-btn-active-border-color);box-shadow:var(--tblr-btn-active-shadow);color:var(--tblr-btn-active-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(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--tblr-btn-disabled-bg);border-color:var(--tblr-btn-disabled-border-color);box-shadow:none;color:var(--tblr-btn-disabled-color);opacity:var(--tblr-btn-disabled-opacity);pointer-events:none}.btn-link{--tblr-btn-font-weight:400;--tblr-btn-color:var(--tblr-link-color);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-link-hover-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-active-color:var(--tblr-link-hover-color);--tblr-btn-active-border-color:transparent;--tblr-btn-disabled-color:#4b5563;--tblr-btn-disabled-border-color:transparent;--tblr-btn-box-shadow:0 0 0 #000;--tblr-btn-focus-shadow-rgb:42,132,215;text-decoration:none}.btn-link:focus-visible,.btn-link:hover{text-decoration:underline}.btn-link:focus-visible{color:var(--tblr-btn-color)}.btn-link:hover{color:var(--tblr-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--tblr-btn-padding-y:0.6875rem;--tblr-btn-padding-x:1.5rem;--tblr-btn-font-size:1rem;--tblr-btn-border-radius:var(--tblr-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--tblr-btn-padding-y:0.3125rem;--tblr-btn-padding-x:0.5rem;--tblr-btn-font-size:0.75rem;--tblr-btn-border-radius:var(--tblr-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{height:auto;transition:width .35s ease;width:0}@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{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(45deg);vertical-align:.306em;width:.36em}.dropdown-menu{--tblr-dropdown-zindex:1000;--tblr-dropdown-min-width:11rem;--tblr-dropdown-padding-x:0;--tblr-dropdown-padding-y:0.25rem;--tblr-dropdown-spacer:1px;--tblr-dropdown-font-size:0.875rem;--tblr-dropdown-color:var(--tblr-body-color);--tblr-dropdown-bg:var(--tblr-bg-surface);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-border-radius:var(--tblr-border-radius);--tblr-dropdown-border-width:var(--tblr-border-width);--tblr-dropdown-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y:var(--tblr-spacer-2);--tblr-dropdown-box-shadow:var(--tblr-shadow-dropdown);--tblr-dropdown-link-color:inherit;--tblr-dropdown-link-hover-color:inherit;--tblr-dropdown-link-hover-bg:rgba(var(--tblr-secondary-rgb),0.08);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x:0.75rem;--tblr-dropdown-item-padding-y:0.5rem;--tblr-dropdown-header-color:#4b5563;--tblr-dropdown-header-padding-x:0.75rem;--tblr-dropdown-header-padding-y:0.25rem;background-clip:padding-box;background-color:var(--tblr-dropdown-bg);border:var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow);color:var(--tblr-dropdown-color);display:none;font-size:var(--tblr-dropdown-font-size);list-style:none;margin:0;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);position:absolute;text-align:right;z-index:var(--tblr-dropdown-zindex)}.dropdown-menu[data-bs-popper]{margin-top:var(--tblr-dropdown-spacer);right:0;top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--tblr-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(-135deg);vertical-align:.306em;width:.36em}.dropend .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--tblr-dropdown-spacer);margin-top:0;right:100%;top:0}.dropend .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(135deg);vertical-align:.306em;vertical-align:0;width:.36em}.dropstart .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--tblr-dropdown-spacer);margin-top:0;right:auto;top:0}.dropstart .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(-45deg);vertical-align:.306em;width:.36em}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--tblr-dropdown-divider-bg);height:0;margin:var(--tblr-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--tblr-dropdown-item-border-radius,0);clear:both;color:var(--tblr-dropdown-link-color);display:block;font-weight:400;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--tblr-dropdown-link-hover-bg);color:var(--tblr-dropdown-link-hover-color);text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:var(--tblr-dropdown-link-active-bg);color:var(--tblr-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--tblr-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--tblr-dropdown-header-color);display:block;font-size:.765625rem;margin-bottom:0;padding:var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--tblr-dropdown-link-color);display:block;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x)}.dropdown-menu-dark{--tblr-dropdown-color:#d1d5db;--tblr-dropdown-bg:#1f2937;--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-box-shadow: ;--tblr-dropdown-link-color:#d1d5db;--tblr-dropdown-link-hover-color:#fff;--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:#6b7280;--tblr-dropdown-header-color:#6b7280}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--tblr-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-right:calc(var(--tblr-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-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-right-radius:0;border-top-right-radius:0}.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-right:0}.dropstart .dropdown-toggle-split:before{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:1.125rem;padding-right:1.125rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{align-items:flex-start;flex-direction:column;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(--tblr-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:nth-child(n+3),.btn-group-vertical>:not(.btn-check)+.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--tblr-nav-link-padding-x:0.75rem;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-gray-500);--tblr-nav-link-hover-color:var(--tblr-link-hover-color);--tblr-nav-link-disabled-color:var(--tblr-disabled-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-right:0}.nav-link{background:none;border:0;color:var(--tblr-nav-link-color);display:block;font-size:var(--tblr-nav-link-font-size);font-weight:var(--tblr-nav-link-font-weight);padding:var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}.nav-link:focus,.nav-link:hover{color:var(--tblr-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--tblr-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--tblr-nav-tabs-border-width:var(--tblr-border-width);--tblr-nav-tabs-border-color:var(--tblr-border-color);--tblr-nav-tabs-border-radius:var(--tblr-border-radius);--tblr-nav-tabs-link-hover-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);--tblr-nav-tabs-link-active-color:var(--tblr-body-color);--tblr-nav-tabs-link-active-bg:var(--tblr-body-bg);--tblr-nav-tabs-link-active-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);border-bottom:var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--tblr-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--tblr-nav-tabs-border-radius);border-top-right-radius:var(--tblr-nav-tabs-border-radius);margin-bottom:calc(var(--tblr-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--tblr-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--tblr-nav-tabs-link-active-bg);border-color:var(--tblr-nav-tabs-link-active-border-color);color:var(--tblr-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--tblr-nav-tabs-border-width)*-1)}.nav-pills{--tblr-nav-pills-border-radius:var(--tblr-border-radius);--tblr-nav-pills-link-active-color:var(--tblr-primary);--tblr-nav-pills-link-active-bg:var(--tblr-active-bg)}.nav-pills .nav-link{border-radius:var(--tblr-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--tblr-nav-pills-link-active-bg);color:var(--tblr-nav-pills-link-active-color)}.nav-underline{--tblr-nav-underline-gap:1rem;--tblr-nav-underline-border-width:0.125rem;--tblr-nav-underline-link-active-color:var(--tblr-emphasis-color);gap:var(--tblr-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--tblr-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--tblr-nav-underline-link-active-color);font-weight:600}.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{--tblr-navbar-padding-x:0;--tblr-navbar-padding-y:0.25rem;--tblr-navbar-color:var(--tblr-secondary);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:var(--tblr-body-color);--tblr-navbar-brand-padding-y:0.5rem;--tblr-navbar-brand-margin-end:1rem;--tblr-navbar-brand-font-size:1.25rem;--tblr-navbar-brand-color:var(--tblr-body-color);--tblr-navbar-brand-hover-color:var(--tblr-body-color);--tblr-navbar-nav-link-padding-x:0.75rem;--tblr-navbar-toggler-padding-y:0;--tblr-navbar-toggler-padding-x:0;--tblr-navbar-toggler-font-size:1rem;--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(31, 41, 55, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--tblr-navbar-toggler-border-color:rgba(var(--tblr-emphasis-color-rgb),0.15);--tblr-navbar-toggler-border-radius:var(--tblr-border-radius);--tblr-navbar-toggler-focus-width:0;--tblr-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--tblr-navbar-brand-color);font-size:var(--tblr-navbar-brand-font-size);margin-left:var(--tblr-navbar-brand-margin-end);padding-bottom:var(--tblr-navbar-brand-padding-y);padding-top:var(--tblr-navbar-brand-padding-y);white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--tblr-navbar-brand-hover-color);text-decoration:none}.navbar-nav{--tblr-nav-link-padding-x:0;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-navbar-color);--tblr-nav-link-hover-color:var(--tblr-navbar-hover-color);--tblr-nav-link-disabled-color:var(--tblr-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-right:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--tblr-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--tblr-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--tblr-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);border-radius:var(--tblr-navbar-toggler-border-radius);color:var(--tblr-navbar-color);font-size:var(--tblr-navbar-toggler-font-size);line-height:1;padding:var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);transition:var(--tblr-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--tblr-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--tblr-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--tblr-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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light]{--tblr-navbar-color:hsla(0,0%,100%,.7);--tblr-navbar-hover-color:hsla(0,0%,100%,.75);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:#fff;--tblr-navbar-brand-color:#fff;--tblr-navbar-brand-hover-color:#fff;--tblr-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon,body[data-bs-theme=dark] .navbar[data-bs-theme=light],body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon{--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.7)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--tblr-card-spacer-y:1rem;--tblr-card-spacer-x:1.25rem;--tblr-card-title-spacer-y:1.25rem;--tblr-card-title-color: ;--tblr-card-subtitle-color: ;--tblr-card-border-width:var(--tblr-border-width);--tblr-card-border-color:var(--tblr-border-color-translucent);--tblr-card-border-radius:var(--tblr-border-radius-lg);--tblr-card-box-shadow:var(--tblr-shadow-card);--tblr-card-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-card-cap-padding-y:1rem;--tblr-card-cap-padding-x:1.25rem;--tblr-card-cap-bg:var(--tblr-bg-surface-tertiary);--tblr-card-cap-color:inherit;--tblr-card-height: ;--tblr-card-color:inherit;--tblr-card-bg:var(--tblr-bg-surface);--tblr-card-img-overlay-padding:1rem;--tblr-card-group-margin:1.5rem;color:var(--tblr-body-color);display:flex;flex-direction:column;height:var(--tblr-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--tblr-card-bg);border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.card>.hr,.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--tblr-card-inner-border-radius);border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--tblr-card-color);flex:1 1 auto;padding:var(--tblr-card-spacer-y) var(--tblr-card-spacer-x)}.card-title{color:var(--tblr-card-title-color);margin-bottom:var(--tblr-card-title-spacer-y)}.card-subtitle{color:var(--tblr-card-subtitle-color);margin-top:calc(var(--tblr-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-right:var(--tblr-card-spacer-x)}.card-header{background-color:var(--tblr-card-cap-bg);border-bottom:var(--tblr-card-border-width) solid var(--tblr-card-border-color);color:var(--tblr-card-cap-color);margin-bottom:0;padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x)}.card-header:first-child{border-radius:var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0}.card-footer{background-color:var(--tblr-card-cap-bg);border-top:var(--tblr-card-border-width) solid var(--tblr-card-border-color);color:var(--tblr-card-cap-color);padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--tblr-card-cap-padding-y)*-1);margin-left:calc(var(--tblr-card-cap-padding-x)*-.5);margin-right:calc(var(--tblr-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--tblr-card-bg);border-bottom-color:var(--tblr-card-bg)}.card-header-pills{margin-left:calc(var(--tblr-card-cap-padding-x)*-.5);margin-right:calc(var(--tblr-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--tblr-card-inner-border-radius);bottom:0;left:0;padding:var(--tblr-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--tblr-card-inner-border-radius);border-bottom-right-radius:var(--tblr-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--tblr-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{border-right:0;margin-right:0}.card-group>.card:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:last-child)>.card-header,.card-group>.card:not(:last-child)>.card-img-top{border-top-left-radius:0}.card-group>.card:not(:last-child)>.card-footer,.card-group>.card:not(:last-child)>.card-img-bottom{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:first-child)>.card-header,.card-group>.card:not(:first-child)>.card-img-top{border-top-right-radius:0}.card-group>.card:not(:first-child)>.card-footer,.card-group>.card:not(:first-child)>.card-img-bottom{border-bottom-right-radius:0}}.pagination{--tblr-pagination-padding-x:0.25rem;--tblr-pagination-padding-y:calc(0.25rem + 1px);--tblr-pagination-font-size:0.875rem;--tblr-pagination-color:var(--tblr-body-color);--tblr-pagination-bg:transparent;--tblr-pagination-border-width:1px;--tblr-pagination-border-color:transparent;--tblr-pagination-border-radius:var(--tblr-border-radius);--tblr-pagination-hover-color:var(--tblr-link-hover-color);--tblr-pagination-hover-bg:var(--tblr-active-bg);--tblr-pagination-hover-border-color:var(--tblr-pagination-border-color);--tblr-pagination-focus-color:var(--tblr-link-hover-color);--tblr-pagination-focus-bg:var(--tblr-secondary-bg);--tblr-pagination-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-pagination-active-color:#fff;--tblr-pagination-active-bg:var(--tblr-primary);--tblr-pagination-active-border-color:var(--tblr-primary);--tblr-pagination-disabled-color:var(--tblr-disabled-color);--tblr-pagination-disabled-bg:transparent;--tblr-pagination-disabled-border-color:var(--tblr-pagination-border-color);display:flex;list-style:none;padding-right:0}.page-link{background-color:var(--tblr-pagination-bg);border:var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);color:var(--tblr-pagination-color);display:block;font-size:var(--tblr-pagination-font-size);padding:var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);position:relative;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{background-color:var(--tblr-pagination-hover-bg);border-color:var(--tblr-pagination-hover-border-color);color:var(--tblr-pagination-hover-color);text-decoration:none;z-index:2}.page-link:focus{background-color:var(--tblr-pagination-focus-bg);box-shadow:var(--tblr-pagination-focus-box-shadow);color:var(--tblr-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--tblr-pagination-active-bg);border-color:var(--tblr-pagination-active-border-color);color:var(--tblr-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--tblr-pagination-disabled-bg);border-color:var(--tblr-pagination-disabled-border-color);color:var(--tblr-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item:first-child .page-link{border-bottom-right-radius:var(--tblr-pagination-border-radius);border-top-right-radius:var(--tblr-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-left-radius:var(--tblr-pagination-border-radius);border-top-left-radius:var(--tblr-pagination-border-radius)}.pagination-lg{--tblr-pagination-padding-x:1.5rem;--tblr-pagination-padding-y:0.75rem;--tblr-pagination-font-size:1.09375rem;--tblr-pagination-border-radius:var(--tblr-border-radius-lg)}.pagination-sm{--tblr-pagination-padding-x:0.5rem;--tblr-pagination-padding-y:0.25rem;--tblr-pagination-font-size:0.765625rem;--tblr-pagination-border-radius:var(--tblr-border-radius-sm)}@keyframes progress-bar-stripes{0%{background-position-x:var(--tblr-progress-height)}}.progress,.progress-stacked{--tblr-progress-height:0.5rem;--tblr-progress-font-size:0.65625rem;--tblr-progress-bg:var(--tblr-border-color);--tblr-progress-border-radius:var(--tblr-border-radius);--tblr-progress-box-shadow:var(--tblr-box-shadow-inset);--tblr-progress-bar-color:#fff;--tblr-progress-bar-bg:var(--tblr-primary);--tblr-progress-bar-transition:width 0.6s ease;background-color:var(--tblr-progress-bg);border-radius:var(--tblr-progress-border-radius);box-shadow:var(--tblr-progress-box-shadow);display:flex;font-size:var(--tblr-progress-font-size);height:var(--tblr-progress-height);overflow:hidden}.progress-bar{background-color:var(--tblr-progress-bar-bg);color:var(--tblr-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--tblr-progress-bar-transition);white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(-45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--tblr-progress-height) var(--tblr-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--tblr-list-group-color:var(--tblr-body-color);--tblr-list-group-bg:inherit;--tblr-list-group-border-color:var(--tblr-border-color);--tblr-list-group-border-width:var(--tblr-border-width);--tblr-list-group-border-radius:var(--tblr-border-radius);--tblr-list-group-item-padding-x:1.25rem;--tblr-list-group-item-padding-y:1rem;--tblr-list-group-action-color:inherit;--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:rgba(var(--tblr-secondary-rgb),0.08);--tblr-list-group-action-active-color:var(--tblr-body-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-bg);--tblr-list-group-disabled-color:var(--tblr-secondary-color);--tblr-list-group-disabled-bg:inherit;--tblr-list-group-active-color:inherit;--tblr-list-group-active-bg:var(--tblr-active-bg);--tblr-list-group-active-border-color:var(--tblr-border-color);border-radius:var(--tblr-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-right:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item{background-color:var(--tblr-list-group-bg);border:var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color);color:var(--tblr-list-group-color);display:block;padding:var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--tblr-list-group-disabled-bg);color:var(--tblr-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--tblr-list-group-active-bg);border-color:var(--tblr-list-group-active-border-color);color:var(--tblr-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--tblr-list-group-border-width);margin-top:calc(var(--tblr-list-group-border-width)*-1)}.list-group-item-action{color:var(--tblr-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{background-color:var(--tblr-list-group-action-hover-bg);color:var(--tblr-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:not(.active):active{background-color:var(--tblr-list-group-action-active-bg);color:var(--tblr-list-group-action-active-color)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--tblr-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--tblr-list-group-color:var(--tblr-primary-text-emphasis);--tblr-list-group-bg:var(--tblr-primary-bg-subtle);--tblr-list-group-border-color:var(--tblr-primary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-primary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-primary-border-subtle);--tblr-list-group-active-color:var(--tblr-primary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-primary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-primary-text-emphasis)}.list-group-item-secondary{--tblr-list-group-color:var(--tblr-secondary-text-emphasis);--tblr-list-group-bg:var(--tblr-secondary-bg-subtle);--tblr-list-group-border-color:var(--tblr-secondary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-active-color:var(--tblr-secondary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-secondary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-secondary-text-emphasis)}.list-group-item-success{--tblr-list-group-color:var(--tblr-success-text-emphasis);--tblr-list-group-bg:var(--tblr-success-bg-subtle);--tblr-list-group-border-color:var(--tblr-success-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-success-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-success-border-subtle);--tblr-list-group-active-color:var(--tblr-success-bg-subtle);--tblr-list-group-active-bg:var(--tblr-success-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-success-text-emphasis)}.list-group-item-info{--tblr-list-group-color:var(--tblr-info-text-emphasis);--tblr-list-group-bg:var(--tblr-info-bg-subtle);--tblr-list-group-border-color:var(--tblr-info-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-info-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-info-border-subtle);--tblr-list-group-active-color:var(--tblr-info-bg-subtle);--tblr-list-group-active-bg:var(--tblr-info-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-info-text-emphasis)}.list-group-item-warning{--tblr-list-group-color:var(--tblr-warning-text-emphasis);--tblr-list-group-bg:var(--tblr-warning-bg-subtle);--tblr-list-group-border-color:var(--tblr-warning-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-warning-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-warning-border-subtle);--tblr-list-group-active-color:var(--tblr-warning-bg-subtle);--tblr-list-group-active-bg:var(--tblr-warning-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-warning-text-emphasis)}.list-group-item-danger{--tblr-list-group-color:var(--tblr-danger-text-emphasis);--tblr-list-group-bg:var(--tblr-danger-bg-subtle);--tblr-list-group-border-color:var(--tblr-danger-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-danger-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-danger-border-subtle);--tblr-list-group-active-color:var(--tblr-danger-bg-subtle);--tblr-list-group-active-bg:var(--tblr-danger-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-danger-text-emphasis)}.list-group-item-light{--tblr-list-group-color:var(--tblr-light-text-emphasis);--tblr-list-group-bg:var(--tblr-light-bg-subtle);--tblr-list-group-border-color:var(--tblr-light-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-light-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-light-border-subtle);--tblr-list-group-active-color:var(--tblr-light-bg-subtle);--tblr-list-group-active-bg:var(--tblr-light-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-light-text-emphasis)}.list-group-item-dark{--tblr-list-group-color:var(--tblr-dark-text-emphasis);--tblr-list-group-bg:var(--tblr-dark-bg-subtle);--tblr-list-group-border-color:var(--tblr-dark-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dark-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dark-border-subtle);--tblr-list-group-active-color:var(--tblr-dark-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dark-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dark-text-emphasis)}.list-group-item-muted{--tblr-list-group-color:var(--tblr-muted-text-emphasis);--tblr-list-group-bg:var(--tblr-muted-bg-subtle);--tblr-list-group-border-color:var(--tblr-muted-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-muted-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-muted-border-subtle);--tblr-list-group-active-color:var(--tblr-muted-bg-subtle);--tblr-list-group-active-bg:var(--tblr-muted-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-muted-text-emphasis)}.list-group-item-blue{--tblr-list-group-color:var(--tblr-blue-text-emphasis);--tblr-list-group-bg:var(--tblr-blue-bg-subtle);--tblr-list-group-border-color:var(--tblr-blue-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-blue-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-blue-border-subtle);--tblr-list-group-active-color:var(--tblr-blue-bg-subtle);--tblr-list-group-active-bg:var(--tblr-blue-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-blue-text-emphasis)}.list-group-item-azure{--tblr-list-group-color:var(--tblr-azure-text-emphasis);--tblr-list-group-bg:var(--tblr-azure-bg-subtle);--tblr-list-group-border-color:var(--tblr-azure-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-azure-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-azure-border-subtle);--tblr-list-group-active-color:var(--tblr-azure-bg-subtle);--tblr-list-group-active-bg:var(--tblr-azure-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-azure-text-emphasis)}.list-group-item-indigo{--tblr-list-group-color:var(--tblr-indigo-text-emphasis);--tblr-list-group-bg:var(--tblr-indigo-bg-subtle);--tblr-list-group-border-color:var(--tblr-indigo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-active-color:var(--tblr-indigo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-indigo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-indigo-text-emphasis)}.list-group-item-purple{--tblr-list-group-color:var(--tblr-purple-text-emphasis);--tblr-list-group-bg:var(--tblr-purple-bg-subtle);--tblr-list-group-border-color:var(--tblr-purple-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-purple-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-purple-border-subtle);--tblr-list-group-active-color:var(--tblr-purple-bg-subtle);--tblr-list-group-active-bg:var(--tblr-purple-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-purple-text-emphasis)}.list-group-item-pink{--tblr-list-group-color:var(--tblr-pink-text-emphasis);--tblr-list-group-bg:var(--tblr-pink-bg-subtle);--tblr-list-group-border-color:var(--tblr-pink-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pink-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pink-border-subtle);--tblr-list-group-active-color:var(--tblr-pink-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pink-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pink-text-emphasis)}.list-group-item-red{--tblr-list-group-color:var(--tblr-red-text-emphasis);--tblr-list-group-bg:var(--tblr-red-bg-subtle);--tblr-list-group-border-color:var(--tblr-red-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-red-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-red-border-subtle);--tblr-list-group-active-color:var(--tblr-red-bg-subtle);--tblr-list-group-active-bg:var(--tblr-red-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-red-text-emphasis)}.list-group-item-orange{--tblr-list-group-color:var(--tblr-orange-text-emphasis);--tblr-list-group-bg:var(--tblr-orange-bg-subtle);--tblr-list-group-border-color:var(--tblr-orange-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-orange-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-orange-border-subtle);--tblr-list-group-active-color:var(--tblr-orange-bg-subtle);--tblr-list-group-active-bg:var(--tblr-orange-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-orange-text-emphasis)}.list-group-item-yellow{--tblr-list-group-color:var(--tblr-yellow-text-emphasis);--tblr-list-group-bg:var(--tblr-yellow-bg-subtle);--tblr-list-group-border-color:var(--tblr-yellow-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-active-color:var(--tblr-yellow-bg-subtle);--tblr-list-group-active-bg:var(--tblr-yellow-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-yellow-text-emphasis)}.list-group-item-lime{--tblr-list-group-color:var(--tblr-lime-text-emphasis);--tblr-list-group-bg:var(--tblr-lime-bg-subtle);--tblr-list-group-border-color:var(--tblr-lime-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-lime-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-lime-border-subtle);--tblr-list-group-active-color:var(--tblr-lime-bg-subtle);--tblr-list-group-active-bg:var(--tblr-lime-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-lime-text-emphasis)}.list-group-item-green{--tblr-list-group-color:var(--tblr-green-text-emphasis);--tblr-list-group-bg:var(--tblr-green-bg-subtle);--tblr-list-group-border-color:var(--tblr-green-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-green-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-green-border-subtle);--tblr-list-group-active-color:var(--tblr-green-bg-subtle);--tblr-list-group-active-bg:var(--tblr-green-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-green-text-emphasis)}.list-group-item-teal{--tblr-list-group-color:var(--tblr-teal-text-emphasis);--tblr-list-group-bg:var(--tblr-teal-bg-subtle);--tblr-list-group-border-color:var(--tblr-teal-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-teal-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-teal-border-subtle);--tblr-list-group-active-color:var(--tblr-teal-bg-subtle);--tblr-list-group-active-bg:var(--tblr-teal-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-teal-text-emphasis)}.list-group-item-cyan{--tblr-list-group-color:var(--tblr-cyan-text-emphasis);--tblr-list-group-bg:var(--tblr-cyan-bg-subtle);--tblr-list-group-border-color:var(--tblr-cyan-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-active-color:var(--tblr-cyan-bg-subtle);--tblr-list-group-active-bg:var(--tblr-cyan-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-cyan-text-emphasis)}.toast{--tblr-toast-zindex:1090;--tblr-toast-padding-x:0.75rem;--tblr-toast-padding-y:0.5rem;--tblr-toast-spacing:calc(var(--tblr-page-padding)*2);--tblr-toast-max-width:350px;--tblr-toast-font-size:0.875rem;--tblr-toast-color: ;--tblr-toast-bg:var(--tblr-bg-surface);--tblr-toast-border-width:var(--tblr-border-width);--tblr-toast-border-color:var(--tblr-border-color);--tblr-toast-border-radius:var(--tblr-border-radius);--tblr-toast-box-shadow:var(--tblr-box-shadow);--tblr-toast-header-color:var(--tblr-gray-500);--tblr-toast-header-bg:rgba(var(--tblr-body-bg-rgb),0.85);--tblr-toast-header-border-color:var(--tblr-border-color);background-clip:padding-box;background-color:var(--tblr-toast-bg);border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);border-radius:var(--tblr-toast-border-radius);box-shadow:var(--tblr-toast-box-shadow);color:var(--tblr-toast-color);font-size:var(--tblr-toast-font-size);max-width:100%;pointer-events:auto;width:var(--tblr-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--tblr-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:-moz-max-content;width:max-content;z-index:var(--tblr-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--tblr-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--tblr-toast-header-bg);border-bottom:var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);border-top-left-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));border-top-right-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));color:var(--tblr-toast-header-color);display:flex;padding:var(--tblr-toast-padding-y) var(--tblr-toast-padding-x)}.toast-header .btn-close{margin-left:calc(var(--tblr-toast-padding-x)*-.5);margin-right:var(--tblr-toast-padding-x)}.toast-body{padding:var(--tblr-toast-padding-x);word-wrap:break-word}.modal{--tblr-modal-zindex:1055;--tblr-modal-width:540px;--tblr-modal-padding:1.5rem;--tblr-modal-margin:0.5rem;--tblr-modal-color:var(--tblr-body-color);--tblr-modal-bg:var(--tblr-bg-surface);--tblr-modal-border-color:transparent;--tblr-modal-border-width:var(--tblr-border-width);--tblr-modal-border-radius:var(--tblr-border-radius-lg);--tblr-modal-box-shadow:var(--tblr-box-shadow-sm);--tblr-modal-inner-border-radius:calc(var(--tblr-modal-border-radius) - 1px);--tblr-modal-header-padding-x:1.5rem;--tblr-modal-header-padding-y:1.5rem;--tblr-modal-header-padding:1.5rem;--tblr-modal-header-border-color:var(--tblr-border-color);--tblr-modal-header-border-width:var(--tblr-border-width);--tblr-modal-title-line-height:1.4285714286;--tblr-modal-footer-gap:0.75rem;--tblr-modal-footer-bg:var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color:var(--tblr-border-color);--tblr-modal-footer-border-width:var(--tblr-border-width);display:none;height:100%;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;right:0;top:0;width:100%;z-index:var(--tblr-modal-zindex)}.modal-dialog{margin:var(--tblr-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-1rem);transition:transform .3s ease-out}@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(--tblr-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--tblr-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--tblr-modal-bg);border:var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);border-radius:var(--tblr-modal-border-radius);box-shadow:var(--tblr-modal-box-shadow);color:var(--tblr-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--tblr-backdrop-zindex:1050;--tblr-backdrop-bg:var(--tblr-gray-800);--tblr-backdrop-opacity:0.24;background-color:var(--tblr-backdrop-bg);height:100vh;position:fixed;right:0;top:0;width:100vw;z-index:var(--tblr-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--tblr-backdrop-opacity)}.modal-header{border-bottom:var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);border-top-left-radius:var(--tblr-modal-inner-border-radius);border-top-right-radius:var(--tblr-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--tblr-modal-header-padding)}.modal-header .btn-close{margin-bottom:calc(var(--tblr-modal-header-padding-y)*-.5);margin-left:calc(var(--tblr-modal-header-padding-x)*-.5);margin-right:auto;margin-top:calc(var(--tblr-modal-header-padding-y)*-.5);padding:calc(var(--tblr-modal-header-padding-y)*.5) calc(var(--tblr-modal-header-padding-x)*.5)}.modal-title{line-height:var(--tblr-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--tblr-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--tblr-modal-footer-bg);border-bottom-left-radius:var(--tblr-modal-inner-border-radius);border-bottom-right-radius:var(--tblr-modal-inner-border-radius);border-top:var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--tblr-modal-footer-gap)*.5)}@media (min-width:576px){.modal{--tblr-modal-margin:1.75rem;--tblr-modal-box-shadow:var(--tblr-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--tblr-modal-width)}.modal-sm{--tblr-modal-width:380px}}@media (min-width:992px){.modal-lg,.modal-xl{--tblr-modal-width:720px}}@media (min-width:1200px){.modal-xl{--tblr-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--tblr-tooltip-zindex:1080;--tblr-tooltip-max-width:200px;--tblr-tooltip-padding-x:var(--tblr-spacer-3);--tblr-tooltip-padding-y:var(--tblr-spacer-1);--tblr-tooltip-margin: ;--tblr-tooltip-font-size:0.765625rem;--tblr-tooltip-color:var(--tblr-text-inverted);--tblr-tooltip-bg:var(--tblr-bg-surface-inverted);--tblr-tooltip-border-radius:var(--tblr-border-radius);--tblr-tooltip-opacity:0.9;--tblr-tooltip-arrow-width:0.8rem;--tblr-tooltip-arrow-height:0.4rem;display:block;font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4285714286;margin:var(--tblr-tooltip-margin);text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--tblr-tooltip-zindex);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--tblr-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--tblr-tooltip-arrow-height);width:var(--tblr-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--tblr-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--tblr-tooltip-bg);border-width:var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--tblr-tooltip-arrow-width);left:calc(var(--tblr-tooltip-arrow-height)*-1);width:var(--tblr-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--tblr-tooltip-bg);border-width:calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--tblr-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--tblr-tooltip-bg);border-width:0 calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--tblr-tooltip-arrow-width);right:calc(var(--tblr-tooltip-arrow-height)*-1);width:var(--tblr-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--tblr-tooltip-bg);border-width:calc(var(--tblr-tooltip-arrow-width)*.5) 0 calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--tblr-tooltip-bg);border-radius:var(--tblr-tooltip-border-radius);color:var(--tblr-tooltip-color);max-width:var(--tblr-tooltip-max-width);padding:var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);text-align:center}.popover{--tblr-popover-zindex:1070;--tblr-popover-max-width:276px;--tblr-popover-font-size:0.765625rem;--tblr-popover-bg:var(--tblr-bg-surface);--tblr-popover-border-width:var(--tblr-border-width);--tblr-popover-border-color:var(--tblr-border-color);--tblr-popover-border-radius:var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-popover-box-shadow:var(--tblr-shadow-lg);--tblr-popover-header-padding-x:1rem;--tblr-popover-header-padding-y:0.5rem;--tblr-popover-header-font-size:0.875rem;--tblr-popover-header-color:inherit;--tblr-popover-header-bg:transparent;--tblr-popover-body-padding-x:0.5rem;--tblr-popover-body-padding-y:0.5rem;--tblr-popover-body-color:inherit;--tblr-popover-arrow-width:1rem;--tblr-popover-arrow-height:0.5rem;--tblr-popover-arrow-border:var(--tblr-popover-border-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4285714286;max-width:var(--tblr-popover-max-width);text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--tblr-popover-zindex);word-wrap:break-word;background-clip:padding-box;background-color:var(--tblr-popover-bg);border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.popover .popover-arrow{display:block;height:var(--tblr-popover-arrow-height);width:var(--tblr-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-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(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--tblr-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--tblr-popover-bg);bottom:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--tblr-popover-arrow-width);left:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height)}.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(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--tblr-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--tblr-popover-bg);left:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-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(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--tblr-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--tblr-popover-bg);top:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg);content:"";display:block;margin-right:calc(var(--tblr-popover-arrow-width)*-.5);position:absolute;right:50%;top:0;width:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--tblr-popover-arrow-width);right:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height)}.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(--tblr-popover-arrow-width)*.5) 0 calc(var(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--tblr-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--tblr-popover-bg);right:var(--tblr-popover-border-width)}.popover-header{background-color:var(--tblr-popover-header-bg);border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-top-left-radius:var(--tblr-popover-inner-border-radius);border-top-right-radius:var(--tblr-popover-inner-border-radius);color:var(--tblr-popover-header-color);font-size:var(--tblr-popover-header-font-size);margin-bottom:0;padding:var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--tblr-popover-body-color);padding:var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:right;margin-left:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@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;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@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{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;filter:var(--tblr-carousel-control-icon-filter);justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{right:0}.carousel-control-next{left:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:1.5rem;width:1.5rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m15 18-6-6 6-6'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:var(--tblr-carousel-indicator-active-bg);border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:var(--tblr-carousel-caption-color);left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;text-align:center}.carousel-dark{--tblr-carousel-indicator-active-bg:#000;--tblr-carousel-caption-color:#000;--tblr-carousel-control-icon-filter:invert(1) grayscale(100)}:root,[data-bs-theme=light]{--tblr-carousel-indicator-active-bg:#fff;--tblr-carousel-caption-color:#fff;--tblr-carousel-control-icon-filter: }[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{--tblr-carousel-indicator-active-bg:#000;--tblr-carousel-caption-color:#000;--tblr-carousel-control-icon-filter:invert(1) grayscale(100)}.spinner-border,.spinner-grow{animation:var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--tblr-spinner-height);vertical-align:var(--tblr-spinner-vertical-align);width:var(--tblr-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-border-width:2px;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-border;border-left-color:currentcolor;border:var(--tblr-spinner-border-width) solid;border-left:var(--tblr-spinner-border-width) solid transparent}.spinner-border-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem;--tblr-spinner-border-width:1px}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--tblr-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--tblr-offcanvas-zindex:1045;--tblr-offcanvas-width:400px;--tblr-offcanvas-height:30vh;--tblr-offcanvas-padding-x:1.5rem;--tblr-offcanvas-padding-y:1.5rem;--tblr-offcanvas-color:var(--tblr-body-color);--tblr-offcanvas-bg:var(--tblr-bg-surface);--tblr-offcanvas-border-width:var(--tblr-border-width);--tblr-offcanvas-border-color:var(--tblr-border-color);--tblr-offcanvas-box-shadow:var(--tblr-box-shadow-sm);--tblr-offcanvas-transition:transform 0.3s ease-in-out;--tblr-offcanvas-title-line-height:1.4285714286}@media (max-width:575.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:767.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-md.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:991.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1399.98px){.offcanvas-xxl{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-xxl.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-xxl.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom,.offcanvas-xxl.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xxl.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:var(--tblr-gray-800);height:100vh;position:fixed;right:0;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.24}.offcanvas-header{align-items:center;display:flex;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.offcanvas-header .btn-close{margin-bottom:calc(var(--tblr-offcanvas-padding-y)*-.5);margin-left:calc(var(--tblr-offcanvas-padding-x)*-.5);margin-right:auto;margin-top:calc(var(--tblr-offcanvas-padding-y)*-.5);padding:calc(var(--tblr-offcanvas-padding-y)*.5) calc(var(--tblr-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--tblr-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.2;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.1}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.9) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.9) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.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:right!important}.float-end{float:left!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}.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(--tblr-box-shadow)!important}.shadow-sm{box-shadow:var(--tblr-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--tblr-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-secondary{--tblr-focus-ring-color:rgba(var(--tblr-secondary-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-success{--tblr-focus-ring-color:rgba(var(--tblr-success-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-info{--tblr-focus-ring-color:rgba(var(--tblr-info-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-warning{--tblr-focus-ring-color:rgba(var(--tblr-warning-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-danger{--tblr-focus-ring-color:rgba(var(--tblr-danger-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-light{--tblr-focus-ring-color:rgba(var(--tblr-light-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-dark{--tblr-focus-ring-color:rgba(var(--tblr-dark-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-muted{--tblr-focus-ring-color:rgba(var(--tblr-muted-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-blue{--tblr-focus-ring-color:rgba(var(--tblr-blue-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-azure{--tblr-focus-ring-color:rgba(var(--tblr-azure-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-indigo{--tblr-focus-ring-color:rgba(var(--tblr-indigo-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-purple{--tblr-focus-ring-color:rgba(var(--tblr-purple-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-pink{--tblr-focus-ring-color:rgba(var(--tblr-pink-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-red{--tblr-focus-ring-color:rgba(var(--tblr-red-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-orange{--tblr-focus-ring-color:rgba(var(--tblr-orange-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-yellow{--tblr-focus-ring-color:rgba(var(--tblr-yellow-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-lime{--tblr-focus-ring-color:rgba(var(--tblr-lime-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-green{--tblr-focus-ring-color:rgba(var(--tblr-green-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-teal{--tblr-focus-ring-color:rgba(var(--tblr-teal-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-cyan{--tblr-focus-ring-color:rgba(var(--tblr-cyan-rgb),var(--tblr-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left: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(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-wide{border:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-0{border:0!important}.border-top{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-top-wide{border-top:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-top-0{border-top:0!important}.border-end{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-end-wide{border-left:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-bottom-wide{border-bottom:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-start-wide{border-right:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-start-0{border-right:0!important}.border-red{--tblr-border-opacity:1;border-color:rgba(var(--tblr-red-rgb),var(--tblr-border-opacity))!important}.border-green{--tblr-border-opacity:1;border-color:rgba(var(--tblr-green-rgb),var(--tblr-border-opacity))!important}.border-primary-subtle{border-color:var(--tblr-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--tblr-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--tblr-success-border-subtle)!important}.border-info-subtle{border-color:var(--tblr-info-border-subtle)!important}.border-warning-subtle{border-color:var(--tblr-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--tblr-danger-border-subtle)!important}.border-light-subtle{border-color:var(--tblr-light-border-subtle)!important}.border-dark-subtle{border-color:var(--tblr-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{--tblr-border-opacity:0.1}.border-opacity-25{--tblr-border-opacity:0.25}.border-opacity-50{--tblr-border-opacity:0.5}.border-opacity-75{--tblr-border-opacity:0.75}.border-opacity-100{--tblr-border-opacity:1}.w-25{width:25%!important}.w-33{width:33.33333%!important}.w-50{width:50%!important}.w-66{width:66.66666%!important}.w-75{width:75%!important}.w-100{width:100%!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-33{height:33.33333%!important}.h-50{height:50%!important}.h-66{height:66.66666%!important}.h-75{height:75%!important}.h-100{height:100%!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:2rem!important}.m-6{margin:2.5rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:2rem!important;margin-right:2rem!important}.mx-6{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-6{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-6{margin-top:2.5rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:2rem!important}.me-6{margin-left:2.5rem!important}.me-auto{margin-left: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:2rem!important}.mb-6{margin-bottom:2.5rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:2rem!important}.ms-6{margin-right:2.5rem!important}.ms-auto{margin-right:auto!important}.m-n1{margin:-.25rem!important}.m-n2{margin:-.5rem!important}.m-n3{margin:-1rem!important}.m-n4{margin:-1.5rem!important}.m-n5{margin:-2rem!important}.m-n6{margin:-2.5rem!important}.mx-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-n3{margin-left:-1rem!important;margin-right:-1rem!important}.mx-n4{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-n5{margin-left:-2rem!important;margin-right:-2rem!important}.mx-n6{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.my-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-n3{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-n4{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-n5{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-n6{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.mt-n1{margin-top:-.25rem!important}.mt-n2{margin-top:-.5rem!important}.mt-n3{margin-top:-1rem!important}.mt-n4{margin-top:-1.5rem!important}.mt-n5{margin-top:-2rem!important}.mt-n6{margin-top:-2.5rem!important}.me-n1{margin-left:-.25rem!important}.me-n2{margin-left:-.5rem!important}.me-n3{margin-left:-1rem!important}.me-n4{margin-left:-1.5rem!important}.me-n5{margin-left:-2rem!important}.me-n6{margin-left:-2.5rem!important}.mb-n1{margin-bottom:-.25rem!important}.mb-n2{margin-bottom:-.5rem!important}.mb-n3{margin-bottom:-1rem!important}.mb-n4{margin-bottom:-1.5rem!important}.mb-n5{margin-bottom:-2rem!important}.mb-n6{margin-bottom:-2.5rem!important}.ms-n1{margin-right:-.25rem!important}.ms-n2{margin-right:-.5rem!important}.ms-n3{margin-right:-1rem!important}.ms-n4{margin-right:-1.5rem!important}.ms-n5{margin-right:-2rem!important}.ms-n6{margin-right:-2.5rem!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:2rem!important}.p-6{padding:2.5rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:2rem!important;padding-right:2rem!important}.px-6{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-6{padding-bottom:2.5rem!important;padding-top:2.5rem!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:2rem!important}.pt-6{padding-top:2.5rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:2rem!important}.pe-6{padding-left:2.5rem!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:2rem!important}.pb-6{padding-bottom:2.5rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:2rem!important}.ps-6{padding-right:2.5rem!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:2rem!important}.gap-6{gap:2.5rem!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:2rem!important}.row-gap-6{row-gap:2.5rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-6{-moz-column-gap:2.5rem!important;column-gap:2.5rem!important}.font-monospace{font-family:var(--tblr-font-monospace)!important}.fs-1{font-size:1.5rem!important}.fs-2{font-size:1.25rem!important}.fs-3{font-size:1rem!important}.fs-4{font-size:.875rem!important}.fs-5{font-size:.75rem!important}.fs-6{font-size:.625rem!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-bold,.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.1428571429!important}.lh-base{line-height:1.4285714286!important}.lh-lg{line-height:1.7142857143!important}.text-start{text-align:right!important}.text-end{text-align:left!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-primary{color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.text-secondary{color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.text-success{color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.text-info{color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.text-warning{color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.text-danger{color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.text-light{color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.text-dark{color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.text-muted{color:var(--tblr-secondary-color)!important}.text-blue{color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.text-azure{color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.text-indigo{color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.text-purple{color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.text-pink{color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.text-red{color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.text-orange{color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.text-yellow{color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.text-lime{color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.text-green{color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.text-teal{color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.text-cyan{color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.text-black{--tblr-text-opacity:1;color:rgba(var(--tblr-black-rgb),var(--tblr-text-opacity))!important}.text-white{--tblr-text-opacity:1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.text-body{--tblr-text-opacity:1;color:rgba(var(--tblr-body-color-rgb),var(--tblr-text-opacity))!important}.text-black-50{--tblr-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--tblr-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--tblr-text-opacity:1;color:var(--tblr-secondary-color)!important}.text-body-tertiary{--tblr-text-opacity:1;color:var(--tblr-tertiary-color)!important}.text-body-emphasis{--tblr-text-opacity:1;color:var(--tblr-emphasis-color)!important}.text-reset{--tblr-text-opacity:1;color:inherit!important}.text-opacity-25{--tblr-text-opacity:0.25}.text-opacity-50{--tblr-text-opacity:0.5}.text-opacity-75{--tblr-text-opacity:0.75}.text-opacity-100{--tblr-text-opacity:1}.text-primary-emphasis{color:var(--tblr-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--tblr-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--tblr-success-text-emphasis)!important}.text-info-emphasis{color:var(--tblr-info-text-emphasis)!important}.text-warning-emphasis{color:var(--tblr-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--tblr-danger-text-emphasis)!important}.text-light-emphasis{color:var(--tblr-light-text-emphasis)!important}.text-dark-emphasis{color:var(--tblr-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--tblr-link-opacity:0.1}.link-opacity-25,.link-opacity-25-hover:hover{--tblr-link-opacity:0.25}.link-opacity-50,.link-opacity-50-hover:hover{--tblr-link-opacity:0.5}.link-opacity-75,.link-opacity-75-hover:hover{--tblr-link-opacity:0.75}.link-opacity-100,.link-opacity-100-hover:hover{--tblr-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-secondary{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-success{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-info{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-warning{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-danger{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-light{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dark{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-muted{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-blue{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-azure{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-indigo{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-purple{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pink{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-red{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-orange{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-yellow{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-lime{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-green{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-teal{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-cyan{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important}.link-underline{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--tblr-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--tblr-link-underline-opacity:0.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--tblr-link-underline-opacity:0.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--tblr-link-underline-opacity:0.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--tblr-link-underline-opacity:0.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--tblr-link-underline-opacity:1}.bg-primary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-primary-rgb),var(--tblr-bg-opacity))!important}.bg-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-rgb),var(--tblr-bg-opacity))!important}.bg-success{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-success-rgb),var(--tblr-bg-opacity))!important}.bg-info{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-info-rgb),var(--tblr-bg-opacity))!important}.bg-warning{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-warning-rgb),var(--tblr-bg-opacity))!important}.bg-danger{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-danger-rgb),var(--tblr-bg-opacity))!important}.bg-light{background-color:rgba(var(--tblr-light-rgb),var(--tblr-bg-opacity))!important}.bg-dark,.bg-light{--tblr-bg-opacity:1}.bg-dark{background-color:rgba(var(--tblr-dark-rgb),var(--tblr-bg-opacity))!important}.bg-muted{background-color:rgba(var(--tblr-muted-rgb),var(--tblr-bg-opacity))!important}.bg-blue,.bg-muted{--tblr-bg-opacity:1}.bg-blue{background-color:rgba(var(--tblr-blue-rgb),var(--tblr-bg-opacity))!important}.bg-azure{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-azure-rgb),var(--tblr-bg-opacity))!important}.bg-indigo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-indigo-rgb),var(--tblr-bg-opacity))!important}.bg-purple{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-purple-rgb),var(--tblr-bg-opacity))!important}.bg-pink{background-color:rgba(var(--tblr-pink-rgb),var(--tblr-bg-opacity))!important}.bg-pink,.bg-red{--tblr-bg-opacity:1}.bg-red{background-color:rgba(var(--tblr-red-rgb),var(--tblr-bg-opacity))!important}.bg-orange{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-orange-rgb),var(--tblr-bg-opacity))!important}.bg-yellow{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-yellow-rgb),var(--tblr-bg-opacity))!important}.bg-lime{background-color:rgba(var(--tblr-lime-rgb),var(--tblr-bg-opacity))!important}.bg-green,.bg-lime{--tblr-bg-opacity:1}.bg-green{background-color:rgba(var(--tblr-green-rgb),var(--tblr-bg-opacity))!important}.bg-teal{background-color:rgba(var(--tblr-teal-rgb),var(--tblr-bg-opacity))!important}.bg-cyan,.bg-teal{--tblr-bg-opacity:1}.bg-cyan{background-color:rgba(var(--tblr-cyan-rgb),var(--tblr-bg-opacity))!important}.bg-black{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-black-rgb),var(--tblr-bg-opacity))!important}.bg-white{background-color:rgba(var(--tblr-white-rgb),var(--tblr-bg-opacity))!important}.bg-body,.bg-white{--tblr-bg-opacity:1}.bg-body{background-color:rgba(var(--tblr-body-bg-rgb),var(--tblr-bg-opacity))!important}.bg-transparent{--tblr-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-body-tertiary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tertiary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-opacity-10{--tblr-bg-opacity:0.1}.bg-opacity-25{--tblr-bg-opacity:0.25}.bg-opacity-50{--tblr-bg-opacity:0.5}.bg-opacity-75{--tblr-bg-opacity:0.75}.bg-opacity-100{--tblr-bg-opacity:1}.bg-primary-subtle{background-color:var(--tblr-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--tblr-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--tblr-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--tblr-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--tblr-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--tblr-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--tblr-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--tblr-dark-bg-subtle)!important}.bg-gradient{background-image:var(--tblr-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(--tblr-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--tblr-border-radius-sm)!important}.rounded-2{border-radius:var(--tblr-border-radius)!important}.rounded-3{border-radius:var(--tblr-border-radius-lg)!important}.rounded-4{border-radius:var(--tblr-border-radius-xl)!important}.rounded-5{border-radius:var(--tblr-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--tblr-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-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(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-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(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-border-radius-pill)!important}.rounded-end{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-end-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-end-1{border-bottom-left-radius:var(--tblr-border-radius-sm)!important;border-top-left-radius:var(--tblr-border-radius-sm)!important}.rounded-end-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-end-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-top-left-radius:var(--tblr-border-radius-lg)!important}.rounded-end-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-top-left-radius:var(--tblr-border-radius-xl)!important}.rounded-end-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-top-left-radius:var(--tblr-border-radius-xxl)!important}.rounded-end-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-end-pill{border-bottom-left-radius:var(--tblr-border-radius-pill)!important;border-top-left-radius:var(--tblr-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--tblr-border-radius-sm)!important;border-bottom-right-radius:var(--tblr-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-bottom-right-radius:var(--tblr-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-bottom-right-radius:var(--tblr-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-bottom-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--tblr-border-radius-pill)!important;border-bottom-right-radius:var(--tblr-border-radius-pill)!important}.rounded-start{border-bottom-right-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-start-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-start-1{border-bottom-right-radius:var(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-start-2{border-bottom-right-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-start-3{border-bottom-right-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-start-4{border-bottom-right-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-start-5{border-bottom-right-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-start-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-start-pill{border-bottom-right-radius:var(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-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}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-scale-down{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-none{-o-object-fit:none!important;object-fit:none!important}.cursor-auto{cursor:auto!important}.cursor-pointer{cursor:pointer!important}.cursor-move{cursor:move!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-zoom-in{cursor:zoom-in!important}.cursor-zoom-out{cursor:zoom-out!important}.cursor-default{cursor:default!important}.cursor-none{cursor:none!important}.cursor-help{cursor:help!important}.cursor-progress{cursor:progress!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-v-text{cursor:vertical-text!important}.cursor-grab{cursor:grab!important}.cursor-grabbing{cursor:grabbing!important}.cursor-crosshair{cursor:crosshair!important}.border-x{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-x-wide{border-left:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-right:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-x-0{border-left:0!important;border-right:0!important}.border-y{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-y-wide{border-bottom:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important;border-top:2px var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.border-y-0{border-bottom:0!important;border-top:0!important}.columns-2{-moz-columns:2!important;column-count:2!important}.columns-3{-moz-columns:3!important;column-count:3!important}.columns-4{-moz-columns:4!important;column-count:4!important}.bg-pattern-transparent{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='rgba(130, 130, 130, .1)' d='M0 0h8v8H0zM8 8h8v8H8z'/%3E%3C/svg%3E") repeat 50%/16px 16px!important}.bg-gradient{background:linear-gradient(var(--tblr-gradient-direction,to right),var(--tblr-gradient-stops,var(--tblr-gradient-from,transparent),var(--tblr-gradient-to,transparent))) no-repeat!important}.bg-gradient-to-t{--tblr-gradient-direction:to top!important}.bg-gradient-to-te{--tblr-gradient-direction:to top right!important}.bg-gradient-to-e{--tblr-gradient-direction:to right!important}.bg-gradient-to-be{--tblr-gradient-direction:to bottom right!important}.bg-gradient-to-b{--tblr-gradient-direction:to bottom!important}.bg-gradient-to-bs{--tblr-gradient-direction:to bottom left!important}.bg-gradient-to-s{--tblr-gradient-direction:to left!important}.bg-gradient-to-ts{--tblr-gradient-direction:to top left!important}.table-auto{table-layout:auto!important}.table-fixed{table-layout:fixed!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!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:2rem!important}.m-sm-6{margin:2.5rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:2rem!important;margin-right:2rem!important}.mx-sm-6{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-sm-6{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-sm-6{margin-top:2.5rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:2rem!important}.me-sm-6{margin-left:2.5rem!important}.me-sm-auto{margin-left: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:2rem!important}.mb-sm-6{margin-bottom:2.5rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:2rem!important}.ms-sm-6{margin-right:2.5rem!important}.ms-sm-auto{margin-right:auto!important}.m-sm-n1{margin:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.m-sm-n3{margin:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.m-sm-n5{margin:-2rem!important}.m-sm-n6{margin:-2.5rem!important}.mx-sm-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-sm-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-sm-n3{margin-left:-1rem!important;margin-right:-1rem!important}.mx-sm-n4{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-sm-n5{margin-left:-2rem!important;margin-right:-2rem!important}.mx-sm-n6{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.my-sm-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-sm-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-sm-n3{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-sm-n4{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-sm-n5{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-sm-n6{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.mt-sm-n1{margin-top:-.25rem!important}.mt-sm-n2{margin-top:-.5rem!important}.mt-sm-n3{margin-top:-1rem!important}.mt-sm-n4{margin-top:-1.5rem!important}.mt-sm-n5{margin-top:-2rem!important}.mt-sm-n6{margin-top:-2.5rem!important}.me-sm-n1{margin-left:-.25rem!important}.me-sm-n2{margin-left:-.5rem!important}.me-sm-n3{margin-left:-1rem!important}.me-sm-n4{margin-left:-1.5rem!important}.me-sm-n5{margin-left:-2rem!important}.me-sm-n6{margin-left:-2.5rem!important}.mb-sm-n1{margin-bottom:-.25rem!important}.mb-sm-n2{margin-bottom:-.5rem!important}.mb-sm-n3{margin-bottom:-1rem!important}.mb-sm-n4{margin-bottom:-1.5rem!important}.mb-sm-n5{margin-bottom:-2rem!important}.mb-sm-n6{margin-bottom:-2.5rem!important}.ms-sm-n1{margin-right:-.25rem!important}.ms-sm-n2{margin-right:-.5rem!important}.ms-sm-n3{margin-right:-1rem!important}.ms-sm-n4{margin-right:-1.5rem!important}.ms-sm-n5{margin-right:-2rem!important}.ms-sm-n6{margin-right:-2.5rem!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:2rem!important}.p-sm-6{padding:2.5rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:2rem!important;padding-right:2rem!important}.px-sm-6{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-sm-6{padding-bottom:2.5rem!important;padding-top:2.5rem!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:2rem!important}.pt-sm-6{padding-top:2.5rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:2rem!important}.pe-sm-6{padding-left:2.5rem!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:2rem!important}.pb-sm-6{padding-bottom:2.5rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:2rem!important}.ps-sm-6{padding-right:2.5rem!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:2rem!important}.gap-sm-6{gap:2.5rem!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:2rem!important}.row-gap-sm-6{row-gap:2.5rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-sm-6{-moz-column-gap:2.5rem!important;column-gap:2.5rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}.columns-sm-2{-moz-columns:2!important;column-count:2!important}.columns-sm-3{-moz-columns:3!important;column-count:3!important}.columns-sm-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!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:2rem!important}.m-md-6{margin:2.5rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:2rem!important;margin-right:2rem!important}.mx-md-6{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-md-6{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-md-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-md-6{margin-top:2.5rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:2rem!important}.me-md-6{margin-left:2.5rem!important}.me-md-auto{margin-left: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:2rem!important}.mb-md-6{margin-bottom:2.5rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:2rem!important}.ms-md-6{margin-right:2.5rem!important}.ms-md-auto{margin-right:auto!important}.m-md-n1{margin:-.25rem!important}.m-md-n2{margin:-.5rem!important}.m-md-n3{margin:-1rem!important}.m-md-n4{margin:-1.5rem!important}.m-md-n5{margin:-2rem!important}.m-md-n6{margin:-2.5rem!important}.mx-md-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-md-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-md-n3{margin-left:-1rem!important;margin-right:-1rem!important}.mx-md-n4{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-md-n5{margin-left:-2rem!important;margin-right:-2rem!important}.mx-md-n6{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.my-md-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-md-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-md-n3{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-md-n4{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-md-n5{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-md-n6{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.mt-md-n1{margin-top:-.25rem!important}.mt-md-n2{margin-top:-.5rem!important}.mt-md-n3{margin-top:-1rem!important}.mt-md-n4{margin-top:-1.5rem!important}.mt-md-n5{margin-top:-2rem!important}.mt-md-n6{margin-top:-2.5rem!important}.me-md-n1{margin-left:-.25rem!important}.me-md-n2{margin-left:-.5rem!important}.me-md-n3{margin-left:-1rem!important}.me-md-n4{margin-left:-1.5rem!important}.me-md-n5{margin-left:-2rem!important}.me-md-n6{margin-left:-2.5rem!important}.mb-md-n1{margin-bottom:-.25rem!important}.mb-md-n2{margin-bottom:-.5rem!important}.mb-md-n3{margin-bottom:-1rem!important}.mb-md-n4{margin-bottom:-1.5rem!important}.mb-md-n5{margin-bottom:-2rem!important}.mb-md-n6{margin-bottom:-2.5rem!important}.ms-md-n1{margin-right:-.25rem!important}.ms-md-n2{margin-right:-.5rem!important}.ms-md-n3{margin-right:-1rem!important}.ms-md-n4{margin-right:-1.5rem!important}.ms-md-n5{margin-right:-2rem!important}.ms-md-n6{margin-right:-2.5rem!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:2rem!important}.p-md-6{padding:2.5rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:2rem!important;padding-right:2rem!important}.px-md-6{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-md-6{padding-bottom:2.5rem!important;padding-top:2.5rem!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:2rem!important}.pt-md-6{padding-top:2.5rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:2rem!important}.pe-md-6{padding-left:2.5rem!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:2rem!important}.pb-md-6{padding-bottom:2.5rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:2rem!important}.ps-md-6{padding-right:2.5rem!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:2rem!important}.gap-md-6{gap:2.5rem!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:2rem!important}.row-gap-md-6{row-gap:2.5rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-md-6{-moz-column-gap:2.5rem!important;column-gap:2.5rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}.columns-md-2{-moz-columns:2!important;column-count:2!important}.columns-md-3{-moz-columns:3!important;column-count:3!important}.columns-md-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!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:2rem!important}.m-lg-6{margin:2.5rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:2rem!important;margin-right:2rem!important}.mx-lg-6{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-lg-6{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-lg-6{margin-top:2.5rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:2rem!important}.me-lg-6{margin-left:2.5rem!important}.me-lg-auto{margin-left: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:2rem!important}.mb-lg-6{margin-bottom:2.5rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:2rem!important}.ms-lg-6{margin-right:2.5rem!important}.ms-lg-auto{margin-right:auto!important}.m-lg-n1{margin:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.m-lg-n3{margin:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.m-lg-n5{margin:-2rem!important}.m-lg-n6{margin:-2.5rem!important}.mx-lg-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-lg-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-lg-n3{margin-left:-1rem!important;margin-right:-1rem!important}.mx-lg-n4{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-lg-n5{margin-left:-2rem!important;margin-right:-2rem!important}.mx-lg-n6{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.my-lg-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-lg-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-lg-n3{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-lg-n4{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-lg-n5{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-lg-n6{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.mt-lg-n1{margin-top:-.25rem!important}.mt-lg-n2{margin-top:-.5rem!important}.mt-lg-n3{margin-top:-1rem!important}.mt-lg-n4{margin-top:-1.5rem!important}.mt-lg-n5{margin-top:-2rem!important}.mt-lg-n6{margin-top:-2.5rem!important}.me-lg-n1{margin-left:-.25rem!important}.me-lg-n2{margin-left:-.5rem!important}.me-lg-n3{margin-left:-1rem!important}.me-lg-n4{margin-left:-1.5rem!important}.me-lg-n5{margin-left:-2rem!important}.me-lg-n6{margin-left:-2.5rem!important}.mb-lg-n1{margin-bottom:-.25rem!important}.mb-lg-n2{margin-bottom:-.5rem!important}.mb-lg-n3{margin-bottom:-1rem!important}.mb-lg-n4{margin-bottom:-1.5rem!important}.mb-lg-n5{margin-bottom:-2rem!important}.mb-lg-n6{margin-bottom:-2.5rem!important}.ms-lg-n1{margin-right:-.25rem!important}.ms-lg-n2{margin-right:-.5rem!important}.ms-lg-n3{margin-right:-1rem!important}.ms-lg-n4{margin-right:-1.5rem!important}.ms-lg-n5{margin-right:-2rem!important}.ms-lg-n6{margin-right:-2.5rem!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:2rem!important}.p-lg-6{padding:2.5rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:2rem!important;padding-right:2rem!important}.px-lg-6{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-lg-6{padding-bottom:2.5rem!important;padding-top:2.5rem!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:2rem!important}.pt-lg-6{padding-top:2.5rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:2rem!important}.pe-lg-6{padding-left:2.5rem!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:2rem!important}.pb-lg-6{padding-bottom:2.5rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:2rem!important}.ps-lg-6{padding-right:2.5rem!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:2rem!important}.gap-lg-6{gap:2.5rem!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:2rem!important}.row-gap-lg-6{row-gap:2.5rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-lg-6{-moz-column-gap:2.5rem!important;column-gap:2.5rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}.columns-lg-2{-moz-columns:2!important;column-count:2!important}.columns-lg-3{-moz-columns:3!important;column-count:3!important}.columns-lg-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!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:2rem!important}.m-xl-6{margin:2.5rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:2rem!important;margin-right:2rem!important}.mx-xl-6{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-xl-6{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-xl-6{margin-top:2.5rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:2rem!important}.me-xl-6{margin-left:2.5rem!important}.me-xl-auto{margin-left: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:2rem!important}.mb-xl-6{margin-bottom:2.5rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:2rem!important}.ms-xl-6{margin-right:2.5rem!important}.ms-xl-auto{margin-right:auto!important}.m-xl-n1{margin:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.m-xl-n3{margin:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.m-xl-n5{margin:-2rem!important}.m-xl-n6{margin:-2.5rem!important}.mx-xl-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-xl-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-xl-n3{margin-left:-1rem!important;margin-right:-1rem!important}.mx-xl-n4{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-xl-n5{margin-left:-2rem!important;margin-right:-2rem!important}.mx-xl-n6{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.my-xl-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-xl-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-xl-n3{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-xl-n4{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-xl-n5{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-xl-n6{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.mt-xl-n1{margin-top:-.25rem!important}.mt-xl-n2{margin-top:-.5rem!important}.mt-xl-n3{margin-top:-1rem!important}.mt-xl-n4{margin-top:-1.5rem!important}.mt-xl-n5{margin-top:-2rem!important}.mt-xl-n6{margin-top:-2.5rem!important}.me-xl-n1{margin-left:-.25rem!important}.me-xl-n2{margin-left:-.5rem!important}.me-xl-n3{margin-left:-1rem!important}.me-xl-n4{margin-left:-1.5rem!important}.me-xl-n5{margin-left:-2rem!important}.me-xl-n6{margin-left:-2.5rem!important}.mb-xl-n1{margin-bottom:-.25rem!important}.mb-xl-n2{margin-bottom:-.5rem!important}.mb-xl-n3{margin-bottom:-1rem!important}.mb-xl-n4{margin-bottom:-1.5rem!important}.mb-xl-n5{margin-bottom:-2rem!important}.mb-xl-n6{margin-bottom:-2.5rem!important}.ms-xl-n1{margin-right:-.25rem!important}.ms-xl-n2{margin-right:-.5rem!important}.ms-xl-n3{margin-right:-1rem!important}.ms-xl-n4{margin-right:-1.5rem!important}.ms-xl-n5{margin-right:-2rem!important}.ms-xl-n6{margin-right:-2.5rem!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:2rem!important}.p-xl-6{padding:2.5rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:2rem!important;padding-right:2rem!important}.px-xl-6{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-xl-6{padding-bottom:2.5rem!important;padding-top:2.5rem!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:2rem!important}.pt-xl-6{padding-top:2.5rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:2rem!important}.pe-xl-6{padding-left:2.5rem!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:2rem!important}.pb-xl-6{padding-bottom:2.5rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:2rem!important}.ps-xl-6{padding-right:2.5rem!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:2rem!important}.gap-xl-6{gap:2.5rem!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:2rem!important}.row-gap-xl-6{row-gap:2.5rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xl-6{-moz-column-gap:2.5rem!important;column-gap:2.5rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}.columns-xl-2{-moz-columns:2!important;column-count:2!important}.columns-xl-3{-moz-columns:3!important;column-count:3!important}.columns-xl-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!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:2rem!important}.m-xxl-6{margin:2.5rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:2rem!important;margin-right:2rem!important}.mx-xxl-6{margin-left:2.5rem!important;margin-right:2.5rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-bottom:0!important;margin-top:0!important}.my-xxl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xxl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xxl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xxl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xxl-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-xxl-6{margin-bottom:2.5rem!important;margin-top:2.5rem!important}.my-xxl-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-xxl-6{margin-top:2.5rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:2rem!important}.me-xxl-6{margin-left:2.5rem!important}.me-xxl-auto{margin-left: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:2rem!important}.mb-xxl-6{margin-bottom:2.5rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:2rem!important}.ms-xxl-6{margin-right:2.5rem!important}.ms-xxl-auto{margin-right:auto!important}.m-xxl-n1{margin:-.25rem!important}.m-xxl-n2{margin:-.5rem!important}.m-xxl-n3{margin:-1rem!important}.m-xxl-n4{margin:-1.5rem!important}.m-xxl-n5{margin:-2rem!important}.m-xxl-n6{margin:-2.5rem!important}.mx-xxl-n1{margin-left:-.25rem!important;margin-right:-.25rem!important}.mx-xxl-n2{margin-left:-.5rem!important;margin-right:-.5rem!important}.mx-xxl-n3{margin-left:-1rem!important;margin-right:-1rem!important}.mx-xxl-n4{margin-left:-1.5rem!important;margin-right:-1.5rem!important}.mx-xxl-n5{margin-left:-2rem!important;margin-right:-2rem!important}.mx-xxl-n6{margin-left:-2.5rem!important;margin-right:-2.5rem!important}.my-xxl-n1{margin-bottom:-.25rem!important;margin-top:-.25rem!important}.my-xxl-n2{margin-bottom:-.5rem!important;margin-top:-.5rem!important}.my-xxl-n3{margin-bottom:-1rem!important;margin-top:-1rem!important}.my-xxl-n4{margin-bottom:-1.5rem!important;margin-top:-1.5rem!important}.my-xxl-n5{margin-bottom:-2rem!important;margin-top:-2rem!important}.my-xxl-n6{margin-bottom:-2.5rem!important;margin-top:-2.5rem!important}.mt-xxl-n1{margin-top:-.25rem!important}.mt-xxl-n2{margin-top:-.5rem!important}.mt-xxl-n3{margin-top:-1rem!important}.mt-xxl-n4{margin-top:-1.5rem!important}.mt-xxl-n5{margin-top:-2rem!important}.mt-xxl-n6{margin-top:-2.5rem!important}.me-xxl-n1{margin-left:-.25rem!important}.me-xxl-n2{margin-left:-.5rem!important}.me-xxl-n3{margin-left:-1rem!important}.me-xxl-n4{margin-left:-1.5rem!important}.me-xxl-n5{margin-left:-2rem!important}.me-xxl-n6{margin-left:-2.5rem!important}.mb-xxl-n1{margin-bottom:-.25rem!important}.mb-xxl-n2{margin-bottom:-.5rem!important}.mb-xxl-n3{margin-bottom:-1rem!important}.mb-xxl-n4{margin-bottom:-1.5rem!important}.mb-xxl-n5{margin-bottom:-2rem!important}.mb-xxl-n6{margin-bottom:-2.5rem!important}.ms-xxl-n1{margin-right:-.25rem!important}.ms-xxl-n2{margin-right:-.5rem!important}.ms-xxl-n3{margin-right:-1rem!important}.ms-xxl-n4{margin-right:-1.5rem!important}.ms-xxl-n5{margin-right:-2rem!important}.ms-xxl-n6{margin-right:-2.5rem!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:2rem!important}.p-xxl-6{padding:2.5rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:2rem!important;padding-right:2rem!important}.px-xxl-6{padding-left:2.5rem!important;padding-right:2.5rem!important}.py-xxl-0{padding-bottom:0!important;padding-top:0!important}.py-xxl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xxl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xxl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xxl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xxl-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-xxl-6{padding-bottom:2.5rem!important;padding-top:2.5rem!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:2rem!important}.pt-xxl-6{padding-top:2.5rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:2rem!important}.pe-xxl-6{padding-left:2.5rem!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:2rem!important}.pb-xxl-6{padding-bottom:2.5rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:2rem!important}.ps-xxl-6{padding-right:2.5rem!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:2rem!important}.gap-xxl-6{gap:2.5rem!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:2rem!important}.row-gap-xxl-6{row-gap:2.5rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xxl-6{-moz-column-gap:2.5rem!important;column-gap:2.5rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}.columns-xxl-2{-moz-columns:2!important;column-count:2!important}.columns-xxl-3{-moz-columns:3!important;column-count:3!important}.columns-xxl-4{-moz-columns:4!important;column-count:4!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}}:host,:root{--tblr-font-monospace:Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-font-sans-serif:Inter Var,Inter,-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-serif:Georgia,Times New Roman,times,serif;--tblr-font-comic:Comic Sans MS,Comic Sans,Chalkboard SE,Comic Neue,sans-serif,cursive;--tblr-gray-50:#f9fafb;--tblr-gray-100:#f3f4f6;--tblr-gray-200:#e5e7eb;--tblr-gray-300:#d1d5db;--tblr-gray-400:#9ca3af;--tblr-gray-500:#6b7280;--tblr-gray-600:#4b5563;--tblr-gray-700:#374151;--tblr-gray-800:#1f2937;--tblr-gray-900:#111827;--tblr-gray-950:#030712;--tblr-white:#fff;--tblr-black:#000;--tblr-brand:#066fd1;--tblr-primary:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-primary-fg:var(--tblr-light);--tblr-primary-darken:#0564bc;--tblr-primary-darken:color-mix(in oklab,var(--tblr-primary),transparent 20%);--tblr-primary-lt:#e6f1fa;--tblr-primary-lt:color-mix(in oklab,var(--tblr-primary) 10%,transparent);--tblr-primary-200:color-mix(in oklab,var(--tblr-primary) 20%,transparent);--tblr-primary-lt-rgb:230,241,250;--tblr-secondary:#6b7280;--tblr-secondary-rgb:107,114,128;--tblr-secondary-fg:var(--tblr-light);--tblr-secondary-darken:#606773;--tblr-secondary-darken:color-mix(in oklab,var(--tblr-secondary),transparent 20%);--tblr-secondary-lt:#f0f1f2;--tblr-secondary-lt:color-mix(in oklab,var(--tblr-secondary) 10%,transparent);--tblr-secondary-200:color-mix(in oklab,var(--tblr-secondary) 20%,transparent);--tblr-secondary-lt-rgb:240,241,242;--tblr-success:#2fb344;--tblr-success-rgb:47,179,68;--tblr-success-fg:var(--tblr-light);--tblr-success-darken:#2aa13d;--tblr-success-darken:color-mix(in oklab,var(--tblr-success),transparent 20%);--tblr-success-lt:#eaf7ec;--tblr-success-lt:color-mix(in oklab,var(--tblr-success) 10%,transparent);--tblr-success-200:color-mix(in oklab,var(--tblr-success) 20%,transparent);--tblr-success-lt-rgb:234,247,236;--tblr-info:#4299e1;--tblr-info-rgb:66,153,225;--tblr-info-fg:var(--tblr-light);--tblr-info-darken:#3b8acb;--tblr-info-darken:color-mix(in oklab,var(--tblr-info),transparent 20%);--tblr-info-lt:#ecf5fc;--tblr-info-lt:color-mix(in oklab,var(--tblr-info) 10%,transparent);--tblr-info-200:color-mix(in oklab,var(--tblr-info) 20%,transparent);--tblr-info-lt-rgb:236,245,252;--tblr-warning:#f59f00;--tblr-warning-rgb:245,159,0;--tblr-warning-fg:var(--tblr-light);--tblr-warning-darken:#dd8f00;--tblr-warning-darken:color-mix(in oklab,var(--tblr-warning),transparent 20%);--tblr-warning-lt:#fef5e6;--tblr-warning-lt:color-mix(in oklab,var(--tblr-warning) 10%,transparent);--tblr-warning-200:color-mix(in oklab,var(--tblr-warning) 20%,transparent);--tblr-warning-lt-rgb:254,245,230;--tblr-danger:#d63939;--tblr-danger-rgb:214,57,57;--tblr-danger-fg:var(--tblr-light);--tblr-danger-darken:#c13333;--tblr-danger-darken:color-mix(in oklab,var(--tblr-danger),transparent 20%);--tblr-danger-lt:#fbebeb;--tblr-danger-lt:color-mix(in oklab,var(--tblr-danger) 10%,transparent);--tblr-danger-200:color-mix(in oklab,var(--tblr-danger) 20%,transparent);--tblr-danger-lt-rgb:251,235,235;--tblr-light:#f9fafb;--tblr-light-rgb:249,250,251;--tblr-light-fg:var(--tblr-dark);--tblr-light-darken:#e0e1e2;--tblr-light-darken:color-mix(in oklab,var(--tblr-light),transparent 20%);--tblr-light-lt:#feffff;--tblr-light-lt:color-mix(in oklab,var(--tblr-light) 10%,transparent);--tblr-light-200:color-mix(in oklab,var(--tblr-light) 20%,transparent);--tblr-light-lt-rgb:254,255,255;--tblr-dark:#1f2937;--tblr-dark-rgb:31,41,55;--tblr-dark-fg:var(--tblr-light);--tblr-dark-darken:#1c2532;--tblr-dark-darken:color-mix(in oklab,var(--tblr-dark),transparent 20%);--tblr-dark-lt:#e9eaeb;--tblr-dark-lt:color-mix(in oklab,var(--tblr-dark) 10%,transparent);--tblr-dark-200:color-mix(in oklab,var(--tblr-dark) 20%,transparent);--tblr-dark-lt-rgb:233,234,235;--tblr-muted:#6b7280;--tblr-muted-rgb:107,114,128;--tblr-muted-fg:var(--tblr-light);--tblr-muted-darken:#606773;--tblr-muted-darken:color-mix(in oklab,var(--tblr-muted),transparent 20%);--tblr-muted-lt:#f0f1f2;--tblr-muted-lt:color-mix(in oklab,var(--tblr-muted) 10%,transparent);--tblr-muted-200:color-mix(in oklab,var(--tblr-muted) 20%,transparent);--tblr-muted-lt-rgb:240,241,242;--tblr-blue:#066fd1;--tblr-blue-rgb:6,111,209;--tblr-blue-fg:var(--tblr-light);--tblr-blue-darken:#0564bc;--tblr-blue-darken:color-mix(in oklab,var(--tblr-blue),transparent 20%);--tblr-blue-lt:#e6f1fa;--tblr-blue-lt:color-mix(in oklab,var(--tblr-blue) 10%,transparent);--tblr-blue-200:color-mix(in oklab,var(--tblr-blue) 20%,transparent);--tblr-blue-lt-rgb:230,241,250;--tblr-azure:#4299e1;--tblr-azure-rgb:66,153,225;--tblr-azure-fg:var(--tblr-light);--tblr-azure-darken:#3b8acb;--tblr-azure-darken:color-mix(in oklab,var(--tblr-azure),transparent 20%);--tblr-azure-lt:#ecf5fc;--tblr-azure-lt:color-mix(in oklab,var(--tblr-azure) 10%,transparent);--tblr-azure-200:color-mix(in oklab,var(--tblr-azure) 20%,transparent);--tblr-azure-lt-rgb:236,245,252;--tblr-indigo:#4263eb;--tblr-indigo-rgb:66,99,235;--tblr-indigo-fg:var(--tblr-light);--tblr-indigo-darken:#3b59d4;--tblr-indigo-darken:color-mix(in oklab,var(--tblr-indigo),transparent 20%);--tblr-indigo-lt:#eceffd;--tblr-indigo-lt:color-mix(in oklab,var(--tblr-indigo) 10%,transparent);--tblr-indigo-200:color-mix(in oklab,var(--tblr-indigo) 20%,transparent);--tblr-indigo-lt-rgb:236,239,253;--tblr-purple:#ae3ec9;--tblr-purple-rgb:174,62,201;--tblr-purple-fg:var(--tblr-light);--tblr-purple-darken:#9d38b5;--tblr-purple-darken:color-mix(in oklab,var(--tblr-purple),transparent 20%);--tblr-purple-lt:#f7ecfa;--tblr-purple-lt:color-mix(in oklab,var(--tblr-purple) 10%,transparent);--tblr-purple-200:color-mix(in oklab,var(--tblr-purple) 20%,transparent);--tblr-purple-lt-rgb:247,236,250;--tblr-pink:#d6336c;--tblr-pink-rgb:214,51,108;--tblr-pink-fg:var(--tblr-light);--tblr-pink-darken:#c12e61;--tblr-pink-darken:color-mix(in oklab,var(--tblr-pink),transparent 20%);--tblr-pink-lt:#fbebf0;--tblr-pink-lt:color-mix(in oklab,var(--tblr-pink) 10%,transparent);--tblr-pink-200:color-mix(in oklab,var(--tblr-pink) 20%,transparent);--tblr-pink-lt-rgb:251,235,240;--tblr-red:#d63939;--tblr-red-rgb:214,57,57;--tblr-red-fg:var(--tblr-light);--tblr-red-darken:#c13333;--tblr-red-darken:color-mix(in oklab,var(--tblr-red),transparent 20%);--tblr-red-lt:#fbebeb;--tblr-red-lt:color-mix(in oklab,var(--tblr-red) 10%,transparent);--tblr-red-200:color-mix(in oklab,var(--tblr-red) 20%,transparent);--tblr-red-lt-rgb:251,235,235;--tblr-orange:#f76707;--tblr-orange-rgb:247,103,7;--tblr-orange-fg:var(--tblr-light);--tblr-orange-darken:#de5d06;--tblr-orange-darken:color-mix(in oklab,var(--tblr-orange),transparent 20%);--tblr-orange-lt:#fef0e6;--tblr-orange-lt:color-mix(in oklab,var(--tblr-orange) 10%,transparent);--tblr-orange-200:color-mix(in oklab,var(--tblr-orange) 20%,transparent);--tblr-orange-lt-rgb:254,240,230;--tblr-yellow:#f59f00;--tblr-yellow-rgb:245,159,0;--tblr-yellow-fg:var(--tblr-light);--tblr-yellow-darken:#dd8f00;--tblr-yellow-darken:color-mix(in oklab,var(--tblr-yellow),transparent 20%);--tblr-yellow-lt:#fef5e6;--tblr-yellow-lt:color-mix(in oklab,var(--tblr-yellow) 10%,transparent);--tblr-yellow-200:color-mix(in oklab,var(--tblr-yellow) 20%,transparent);--tblr-yellow-lt-rgb:254,245,230;--tblr-lime:#74b816;--tblr-lime-rgb:116,184,22;--tblr-lime-fg:var(--tblr-light);--tblr-lime-darken:#68a614;--tblr-lime-darken:color-mix(in oklab,var(--tblr-lime),transparent 20%);--tblr-lime-lt:#f1f8e8;--tblr-lime-lt:color-mix(in oklab,var(--tblr-lime) 10%,transparent);--tblr-lime-200:color-mix(in oklab,var(--tblr-lime) 20%,transparent);--tblr-lime-lt-rgb:241,248,232;--tblr-green:#2fb344;--tblr-green-rgb:47,179,68;--tblr-green-fg:var(--tblr-light);--tblr-green-darken:#2aa13d;--tblr-green-darken:color-mix(in oklab,var(--tblr-green),transparent 20%);--tblr-green-lt:#eaf7ec;--tblr-green-lt:color-mix(in oklab,var(--tblr-green) 10%,transparent);--tblr-green-200:color-mix(in oklab,var(--tblr-green) 20%,transparent);--tblr-green-lt-rgb:234,247,236;--tblr-teal:#0ca678;--tblr-teal-rgb:12,166,120;--tblr-teal-fg:var(--tblr-light);--tblr-teal-darken:#0b956c;--tblr-teal-darken:color-mix(in oklab,var(--tblr-teal),transparent 20%);--tblr-teal-lt:#e7f6f2;--tblr-teal-lt:color-mix(in oklab,var(--tblr-teal) 10%,transparent);--tblr-teal-200:color-mix(in oklab,var(--tblr-teal) 20%,transparent);--tblr-teal-lt-rgb:231,246,242;--tblr-cyan:#17a2b8;--tblr-cyan-rgb:23,162,184;--tblr-cyan-fg:var(--tblr-light);--tblr-cyan-darken:#1592a6;--tblr-cyan-darken:color-mix(in oklab,var(--tblr-cyan),transparent 20%);--tblr-cyan-lt:#e8f6f8;--tblr-cyan-lt:color-mix(in oklab,var(--tblr-cyan) 10%,transparent);--tblr-cyan-200:color-mix(in oklab,var(--tblr-cyan) 20%,transparent);--tblr-cyan-lt-rgb:232,246,248;--tblr-x:#000;--tblr-x-rgb:0,0,0;--tblr-x-fg:var(--tblr-light);--tblr-x-darken:#000;--tblr-x-darken:color-mix(in oklab,var(--tblr-x),transparent 20%);--tblr-x-lt:#e6e6e6;--tblr-x-lt:color-mix(in oklab,var(--tblr-x) 10%,transparent);--tblr-x-200:color-mix(in oklab,var(--tblr-x) 20%,transparent);--tblr-x-lt-rgb:230,230,230;--tblr-facebook:#1877f2;--tblr-facebook-rgb:24,119,242;--tblr-facebook-fg:var(--tblr-light);--tblr-facebook-darken:#166bda;--tblr-facebook-darken:color-mix(in oklab,var(--tblr-facebook),transparent 20%);--tblr-facebook-lt:#e8f1fe;--tblr-facebook-lt:color-mix(in oklab,var(--tblr-facebook) 10%,transparent);--tblr-facebook-200:color-mix(in oklab,var(--tblr-facebook) 20%,transparent);--tblr-facebook-lt-rgb:232,241,254;--tblr-twitter:#1da1f2;--tblr-twitter-rgb:29,161,242;--tblr-twitter-fg:var(--tblr-light);--tblr-twitter-darken:#1a91da;--tblr-twitter-darken:color-mix(in oklab,var(--tblr-twitter),transparent 20%);--tblr-twitter-lt:#e8f6fe;--tblr-twitter-lt:color-mix(in oklab,var(--tblr-twitter) 10%,transparent);--tblr-twitter-200:color-mix(in oklab,var(--tblr-twitter) 20%,transparent);--tblr-twitter-lt-rgb:232,246,254;--tblr-linkedin:#0a66c2;--tblr-linkedin-rgb:10,102,194;--tblr-linkedin-fg:var(--tblr-light);--tblr-linkedin-darken:#095caf;--tblr-linkedin-darken:color-mix(in oklab,var(--tblr-linkedin),transparent 20%);--tblr-linkedin-lt:#e7f0f9;--tblr-linkedin-lt:color-mix(in oklab,var(--tblr-linkedin) 10%,transparent);--tblr-linkedin-200:color-mix(in oklab,var(--tblr-linkedin) 20%,transparent);--tblr-linkedin-lt-rgb:231,240,249;--tblr-google:#dc4e41;--tblr-google-rgb:220,78,65;--tblr-google-fg:var(--tblr-light);--tblr-google-darken:#c6463b;--tblr-google-darken:color-mix(in oklab,var(--tblr-google),transparent 20%);--tblr-google-lt:#fcedec;--tblr-google-lt:color-mix(in oklab,var(--tblr-google) 10%,transparent);--tblr-google-200:color-mix(in oklab,var(--tblr-google) 20%,transparent);--tblr-google-lt-rgb:252,237,236;--tblr-youtube:red;--tblr-youtube-rgb:255,0,0;--tblr-youtube-fg:var(--tblr-light);--tblr-youtube-darken:#e60000;--tblr-youtube-darken:color-mix(in oklab,var(--tblr-youtube),transparent 20%);--tblr-youtube-lt:#ffe6e6;--tblr-youtube-lt:color-mix(in oklab,var(--tblr-youtube) 10%,transparent);--tblr-youtube-200:color-mix(in oklab,var(--tblr-youtube) 20%,transparent);--tblr-youtube-lt-rgb:255,230,230;--tblr-vimeo:#1ab7ea;--tblr-vimeo-rgb:26,183,234;--tblr-vimeo-fg:var(--tblr-light);--tblr-vimeo-darken:#17a5d3;--tblr-vimeo-darken:color-mix(in oklab,var(--tblr-vimeo),transparent 20%);--tblr-vimeo-lt:#e8f8fd;--tblr-vimeo-lt:color-mix(in oklab,var(--tblr-vimeo) 10%,transparent);--tblr-vimeo-200:color-mix(in oklab,var(--tblr-vimeo) 20%,transparent);--tblr-vimeo-lt-rgb:232,248,253;--tblr-dribbble:#ea4c89;--tblr-dribbble-rgb:234,76,137;--tblr-dribbble-fg:var(--tblr-light);--tblr-dribbble-darken:#d3447b;--tblr-dribbble-darken:color-mix(in oklab,var(--tblr-dribbble),transparent 20%);--tblr-dribbble-lt:#fdedf3;--tblr-dribbble-lt:color-mix(in oklab,var(--tblr-dribbble) 10%,transparent);--tblr-dribbble-200:color-mix(in oklab,var(--tblr-dribbble) 20%,transparent);--tblr-dribbble-lt-rgb:253,237,243;--tblr-github:#181717;--tblr-github-rgb:24,23,23;--tblr-github-fg:var(--tblr-light);--tblr-github-darken:#161515;--tblr-github-darken:color-mix(in oklab,var(--tblr-github),transparent 20%);--tblr-github-lt:#e8e8e8;--tblr-github-lt:color-mix(in oklab,var(--tblr-github) 10%,transparent);--tblr-github-200:color-mix(in oklab,var(--tblr-github) 20%,transparent);--tblr-github-lt-rgb:232,232,232;--tblr-instagram:#e4405f;--tblr-instagram-rgb:228,64,95;--tblr-instagram-fg:var(--tblr-light);--tblr-instagram-darken:#cd3a56;--tblr-instagram-darken:color-mix(in oklab,var(--tblr-instagram),transparent 20%);--tblr-instagram-lt:#fcecef;--tblr-instagram-lt:color-mix(in oklab,var(--tblr-instagram) 10%,transparent);--tblr-instagram-200:color-mix(in oklab,var(--tblr-instagram) 20%,transparent);--tblr-instagram-lt-rgb:252,236,239;--tblr-pinterest:#bd081c;--tblr-pinterest-rgb:189,8,28;--tblr-pinterest-fg:var(--tblr-light);--tblr-pinterest-darken:#aa0719;--tblr-pinterest-darken:color-mix(in oklab,var(--tblr-pinterest),transparent 20%);--tblr-pinterest-lt:#f8e6e8;--tblr-pinterest-lt:color-mix(in oklab,var(--tblr-pinterest) 10%,transparent);--tblr-pinterest-200:color-mix(in oklab,var(--tblr-pinterest) 20%,transparent);--tblr-pinterest-lt-rgb:248,230,232;--tblr-vk:#6383a8;--tblr-vk-rgb:99,131,168;--tblr-vk-fg:var(--tblr-light);--tblr-vk-darken:#597697;--tblr-vk-darken:color-mix(in oklab,var(--tblr-vk),transparent 20%);--tblr-vk-lt:#eff3f6;--tblr-vk-lt:color-mix(in oklab,var(--tblr-vk) 10%,transparent);--tblr-vk-200:color-mix(in oklab,var(--tblr-vk) 20%,transparent);--tblr-vk-lt-rgb:239,243,246;--tblr-rss:orange;--tblr-rss-rgb:255,165,0;--tblr-rss-fg:var(--tblr-light);--tblr-rss-darken:#e69500;--tblr-rss-darken:color-mix(in oklab,var(--tblr-rss),transparent 20%);--tblr-rss-lt:#fff6e6;--tblr-rss-lt:color-mix(in oklab,var(--tblr-rss) 10%,transparent);--tblr-rss-200:color-mix(in oklab,var(--tblr-rss) 20%,transparent);--tblr-rss-lt-rgb:255,246,230;--tblr-flickr:#0063dc;--tblr-flickr-rgb:0,99,220;--tblr-flickr-fg:var(--tblr-light);--tblr-flickr-darken:#0059c6;--tblr-flickr-darken:color-mix(in oklab,var(--tblr-flickr),transparent 20%);--tblr-flickr-lt:#e6effc;--tblr-flickr-lt:color-mix(in oklab,var(--tblr-flickr) 10%,transparent);--tblr-flickr-200:color-mix(in oklab,var(--tblr-flickr) 20%,transparent);--tblr-flickr-lt-rgb:230,239,252;--tblr-bitbucket:#0052cc;--tblr-bitbucket-rgb:0,82,204;--tblr-bitbucket-fg:var(--tblr-light);--tblr-bitbucket-darken:#004ab8;--tblr-bitbucket-darken:color-mix(in oklab,var(--tblr-bitbucket),transparent 20%);--tblr-bitbucket-lt:#e6eefa;--tblr-bitbucket-lt:color-mix(in oklab,var(--tblr-bitbucket) 10%,transparent);--tblr-bitbucket-200:color-mix(in oklab,var(--tblr-bitbucket) 20%,transparent);--tblr-bitbucket-lt-rgb:230,238,250;--tblr-tabler:#066fd1;--tblr-tabler-rgb:6,111,209;--tblr-tabler-fg:var(--tblr-light);--tblr-tabler-darken:#0564bc;--tblr-tabler-darken:color-mix(in oklab,var(--tblr-tabler),transparent 20%);--tblr-tabler-lt:#e6f1fa;--tblr-tabler-lt:color-mix(in oklab,var(--tblr-tabler) 10%,transparent);--tblr-tabler-200:color-mix(in oklab,var(--tblr-tabler) 20%,transparent);--tblr-tabler-lt-rgb:230,241,250;--tblr-gray-50-fg:var(--tblr-body-color);--tblr-gray-100-fg:var(--tblr-body-color);--tblr-gray-200-fg:var(--tblr-body-color);--tblr-gray-300-fg:var(--tblr-body-color);--tblr-gray-400-fg:var(--tblr-white);--tblr-gray-500-fg:var(--tblr-white);--tblr-gray-600-fg:var(--tblr-white);--tblr-gray-700-fg:var(--tblr-white);--tblr-gray-800-fg:var(--tblr-white);--tblr-gray-900-fg:var(--tblr-white);--tblr-gray-950-fg:var(--tblr-white);--tblr-spacer-0:0;--tblr-spacer-1:0.25rem;--tblr-spacer-2:0.5rem;--tblr-spacer-3:1rem;--tblr-spacer-4:1.5rem;--tblr-spacer-5:2rem;--tblr-spacer-6:2.5rem;--tblr-font-weight-light:300;--tblr-font-weight-normal:400;--tblr-font-weight-medium:500;--tblr-font-weight-bold:600;--tblr-font-weight-black:700;--tblr-font-weight-headings:var(--tblr-font-weight-bold);--tblr-font-size-h1:1.5rem;--tblr-font-size-h2:1.25rem;--tblr-font-size-h3:1rem;--tblr-font-size-h4:0.875rem;--tblr-font-size-h5:0.75rem;--tblr-font-size-h6:0.625rem;--tblr-line-height-h1:2rem;--tblr-line-height-h2:1.75rem;--tblr-line-height-h3:1.5rem;--tblr-line-height-h4:1.25rem;--tblr-line-height-h5:1rem;--tblr-line-height-h6:1rem;--tblr-shadow:rgba(var(--tblr-body-color-rgb),0.04) 0 2px 4px 0;--tblr-shadow-border:inset 0 0 0 1px var(--tblr-border-color-translucent);--tblr-shadow-transparent:0 0 0 0 transparent;--tblr-shadow-input:0 1px 1px rgba(var(--tblr-body-color-rgb),0.06);--tblr-shadow-card:0 0 4px rgba(var(--tblr-body-color-rgb),0.04);--tblr-shadow-card-hover:rgba(var(--tblr-body-color-rgb),0.16) 0 2px 16px 0;--tblr-shadow-dropdown:0 16px 24px 2px rgba(0,0,0,.07),0 6px 30px 5px rgba(0,0,0,.06),0 8px 10px -5px rgba(0,0,0,.1);--tblr-border-radius-scale:1;--tblr-border-radius-0:calc(var(--tblr-border-radius-scale, 1)*0);--tblr-border-radius-sm:calc(4px*var(--tblr-border-radius-scale, 1));--tblr-border-radius-md:calc(6px*var(--tblr-border-radius-scale, 1));--tblr-border-radius-lg:calc(8px*var(--tblr-border-radius-scale, 1));--tblr-border-radius-pill:calc(100rem*var(--tblr-border-radius-scale, 1));--tblr-border-radius:var(--tblr-border-radius-md);--tblr-backdrop-opacity:24%;--tblr-backdrop-bg:var(--tblr-bg-surface-dark);--tblr-backdrop-bg-dark:color-mix(in srgb,var(--tblr-color-dark),transparent var(--tblr-backdrop-opacity));--tblr-backdrop-bg-light:color-mix(in srgb,var(--tblr-color-light),transparent var(--tblr-backdrop-opacity));--tblr-backdrop-blur:4px;--tblr-backdrop-filter:blur(var(--tblr-backdrop-blur))}:host,:root{font-size:16px;height:100%}@media (min-width:992px){:host,:root{margin-left:0;margin-right:calc(100vw - 100%)}}:host,:root,[data-bs-theme=light]{color-scheme:light;--tblr-spacer:var(--tblr-spacer-2);--tblr-bg-surface:var(--tblr-bg-surface-primary);--tblr-bg-surface-primary:var(--tblr-white);--tblr-bg-surface-secondary:var(--tblr-gray-50);--tblr-bg-surface-tertiary:var(--tblr-gray-50);--tblr-bg-surface-dark:var(--tblr-gray-900);--tblr-bg-surface-inverted:var(--tblr-gray-900);--tblr-bg-forms:var(--tblr-bg-surface);--tblr-text-inverted:var(--tblr-gray-100);--tblr-body-color:var(--tblr-gray-700);--tblr-body-bg:var(--tblr-bg-surface-secondary);--tblr-link-color:var(--tblr-primary);--tblr-link-hover-color:color-mix(in srgb,var(--tblr-primary),#000 20%);--tblr-secondary:var(--tblr-gray-500);--tblr-tertiary:var(--tblr-gray-400);--tblr-border-color:#e5e7eb;--tblr-border-color-translucent:rgba(4,32,69,.1);--tblr-border-dark-color:#9ca3af;--tblr-border-dark-color-translucent:rgba(4,32,69,.27);--tblr-border-active-color:#a9adb5;--tblr-icon-color:var(--tblr-gray-400);--tblr-active-bg:rgba(var(--tblr-primary-rgb),0.04);--tblr-disabled-bg:var(--tblr-bg-surface-secondary);--tblr-disabled-color:color-mix(in srgb,var(--tblr-body-color) 40%,transparent);--tblr-code-color:light-dark(var(--tblr-gray-600),var(--tblr-gray-400));--tblr-code-bg:light-dark(var(--tblr-gray-100),var(--tblr-gray-900));--tblr-dark-mode-border-color:#2e3c51;--tblr-dark-mode-border-color-translucent:rgba(72,110,149,.14);--tblr-dark-mode-border-active-color:#35465e;--tblr-dark-mode-border-dark-color:#263344;--tblr-page-padding:var(--tblr-spacer-3);--tblr-page-padding-y:var(--tblr-spacer-4)}@media (max-width:991.98px){:host,:root,[data-bs-theme=light]{--tblr-page-padding:var(--tblr-spacer-2)}}@keyframes pulse{0%{transform:scale(1)}14%{transform:scale(1.25)}28%{transform:scale(1)}42%{transform:scale(1.25)}70%{transform:scale(1)}}@keyframes tada{0%{transform:scaleX(1)}10%,5%{transform:scale3d(.9,.9,.9) rotate(5deg)}15%,25%,35%,45%{transform:scale3d(1.1,1.1,1.1) rotate(-5deg)}20%,30%,40%{transform:scale3d(1.1,1.1,1.1) rotate(5deg)}50%{transform:scaleX(1)}}@keyframes rotate-360{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes blink{0%{opacity:0}50%{opacity:1}to{opacity:0}}@keyframes shake{0%{transform:scaleX(1)}20%{transform:scale3d(.9,.9,.9) rotate(5deg)}50%,70%,90%{transform:scale3d(1.25,1.25,1.25) rotate(-5deg)}60%,80%{transform:scale3d(1.25,1.25,1.25) rotate(5deg)}to{transform:scaleX(1)}}body{font-feature-settings:"liga" 0,"cv03","cv04","cv11";height:100%;letter-spacing:0;min-height:100%;padding:0;position:relative;text-rendering:optimizeLegibility;touch-action:manipulation;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media print{body{background:transparent}}*{scrollbar-color:color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent) transparent}::-webkit-scrollbar{height:1rem;-webkit-transition:background .3s;transition:background .3s;width:1rem}@media (prefers-reduced-motion:reduce){::-webkit-scrollbar{-webkit-transition:none;transition:none}}::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent)}::-webkit-scrollbar-track{background:transparent}:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 40%,transparent)}::-webkit-scrollbar-corner{background:transparent}.layout-fluid .container,.layout-fluid [class*=" container-"],.layout-fluid [class^=container-]{max-width:100%}.layout-boxed{--tblr-theme-boxed-border-radius:0;--tblr-theme-boxed-width:1320px}@media (min-width:768px){.layout-boxed{background:#1f2937 linear-gradient(270deg,hsla(0,0%,100%,.1),transparent) fixed;padding:1rem;--tblr-theme-boxed-border-radius:6px}}.layout-boxed .page{border-radius:var(--tblr-theme-boxed-border-radius);color:var(--tblr-body-color);margin:0 auto;max-width:var(--tblr-theme-boxed-width)}@media (min-width:768px){.layout-boxed .page{background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}}.layout-boxed .page>.navbar:first-child{border-top-left-radius:var(--tblr-theme-boxed-border-radius);border-top-right-radius:var(--tblr-theme-boxed-border-radius)}.navbar{--tblr-navbar-bg:var(--tblr-bg-surface);--tblr-navbar-border-width:var(--tblr-border-width);--tblr-navbar-active-border-color:var(--tblr-primary);--tblr-navbar-active-bg:rgba(0,0,0,.2);--tblr-navbar-border-color:var(--tblr-border-color);--tblr-navbar-hover-color:var(--tblr-body-color);align-items:stretch;background:var(--tblr-navbar-bg);box-shadow:inset 0 calc(var(--tblr-navbar-border-width)*-1) 0 0 var(--tblr-navbar-border-color);color:var(--tblr-navbar-color);min-height:3.5rem}.navbar-collapse .navbar{flex-grow:1}.navbar.collapsing{min-height:0}.navbar .dropdown-menu{position:absolute;z-index:1030}.navbar .navbar-nav{min-height:3rem}.navbar .navbar-nav .nav-link{border-radius:var(--tblr-border-radius);justify-content:center;min-height:2.5rem;min-width:2.5rem;position:relative}.navbar .navbar-nav .nav-link .badge{left:.375rem;position:absolute;top:.375rem;transform:translate(-50%,-50%)}@media (max-width:575.98px){.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:576px){.navbar-expand-sm .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-sm .nav-item.active{position:relative}.navbar-expand-sm .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-sm .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-sm.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical.navbar-end,.navbar-expand-sm.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical~.navbar,.navbar-expand-sm.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-sm.navbar-vertical.navbar-end~.navbar,.navbar-expand-sm.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-sm.navbar-vertical.navbar-right~.navbar,.navbar-expand-sm.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:767.98px){.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:768px){.navbar-expand-md .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-md .nav-item.active{position:relative}.navbar-expand-md .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-md .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-md.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical.navbar-end,.navbar-expand-md.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical~.navbar,.navbar-expand-md.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-md.navbar-vertical.navbar-end~.navbar,.navbar-expand-md.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-md.navbar-vertical.navbar-right~.navbar,.navbar-expand-md.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:991.98px){.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:992px){.navbar-expand-lg .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-lg .nav-item.active{position:relative}.navbar-expand-lg .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-lg .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-lg.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical.navbar-end,.navbar-expand-lg.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical~.navbar,.navbar-expand-lg.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-lg.navbar-vertical.navbar-end~.navbar,.navbar-expand-lg.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-lg.navbar-vertical.navbar-right~.navbar,.navbar-expand-lg.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:1199.98px){.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1200px){.navbar-expand-xl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xl .nav-item.active{position:relative}.navbar-expand-xl .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-xl .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-xl.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical.navbar-end,.navbar-expand-xl.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical~.navbar,.navbar-expand-xl.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-xl.navbar-vertical.navbar-end~.navbar,.navbar-expand-xl.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-xl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xl.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:1399.98px){.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1400px){.navbar-expand-xxl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xxl .nav-item.active{position:relative}.navbar-expand-xxl .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand-xxl .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-xxl.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical.navbar-end,.navbar-expand-xxl.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical~.navbar,.navbar-expand-xxl.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-xxl.navbar-vertical.navbar-end~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand-xxl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}.navbar-expand .navbar-collapse{flex-direction:column}.navbar-expand .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}.navbar-expand .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand .nav-item.active{position:relative}.navbar-expand .nav-item.active .nav-link{color:var(--tblr-navbar-active-color)}.navbar-expand .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical.navbar-end,.navbar-expand.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical~.navbar,.navbar-expand.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand.navbar-vertical.navbar-end~.navbar,.navbar-expand.navbar-vertical.navbar-end~.page-wrapper,.navbar-expand.navbar-vertical.navbar-right~.navbar,.navbar-expand.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}.navbar-brand{align-items:center;display:inline-flex;font-weight:var(--tblr-font-weight-bold);gap:.5rem;line-height:1;margin:0}.navbar-brand-image{height:2rem;width:auto}.navbar-toggler{align-items:center;border:0;display:flex;height:2rem;justify-content:center;position:relative;width:2rem}.navbar-toggler-icon{background:currentColor;border-radius:10px;height:2px;position:relative;transition:top .2s .2s,bottom .2s .2s,transform .2s,opacity 0s .2s;width:1.25em}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon{transition:none}}.navbar-toggler-icon:after,.navbar-toggler-icon:before{background:inherit;border-radius:inherit;content:"";display:block;height:inherit;position:absolute;right:0;transition:inherit;width:inherit}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon:after,.navbar-toggler-icon:before{transition:none}}.navbar-toggler-icon:before{top:-.45em}.navbar-toggler-icon:after{bottom:-.45em}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transform:rotate(-45deg);transition:top .3s,bottom .3s,transform .3s .3s,opacity 0s .3s}@media (prefers-reduced-motion:reduce){.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transition:none}}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:before{top:0;transform:rotate(90deg)}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:after{bottom:0;opacity:0}.navbar-transparent{--tblr-navbar-border-color:transparent!important;background:transparent!important}.navbar-nav{--tblr-nav-link-hover-bg:color-mix(in srgb,var(--tblr-nav-link-color) 4%,transparent);align-items:stretch;margin:0;padding:0}.navbar-nav .nav-item{display:flex;flex-direction:column;justify-content:center}.navbar-side{align-items:center;display:flex;flex-direction:row;justify-content:space-around;margin:0}@media (min-width:576px){.navbar-vertical.navbar-expand-sm{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-end,.navbar-vertical.navbar-expand-sm.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-sm .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-sm>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-right:15rem}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-end~.page,.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:768px){.navbar-vertical.navbar-expand-md{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-end,.navbar-vertical.navbar-expand-md.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-md .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-md .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-md>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-right:15rem}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-md.navbar-end~.page,.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-end,.navbar-vertical.navbar-expand-lg.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-lg .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-lg>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-right:15rem}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-end~.page,.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-end,.navbar-vertical.navbar-expand-xl.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-xl .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-xl>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-right:15rem}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-end~.page,.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-end,.navbar-vertical.navbar-expand-xxl.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-xxl .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-xxl>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-right:15rem}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-end~.page,.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}.navbar-vertical.navbar-expand{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand.navbar-end,.navbar-vertical.navbar-expand.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand~.page{padding-right:15rem}.navbar-vertical.navbar-expand~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand.navbar-end~.page,.navbar-vertical.navbar-expand.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-disabled-color);pointer-events:none}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}.navbar-overlap:after{background:inherit;box-shadow:inherit;content:"";height:9rem;left:0;position:absolute;right:0;top:100%;z-index:-1}.page{display:flex;flex-direction:column;min-height:100%;position:relative}.page-wrapper{display:flex;flex:1;flex-direction:column}@media print{.page-wrapper{margin:0!important}}.page-wrapper-full .page-body:first-child{border-top:0;margin:0}.page-body{display:flex;flex:1;flex-direction:column;margin-bottom:var(--tblr-page-padding-y);margin-top:var(--tblr-page-padding-y)}.page-body-card{background:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);flex:1;margin-bottom:0;padding:var(--tblr-page-padding) 0}.page-body~.page-body-card{margin-top:0}.page-cover{background:no-repeat 50%/cover;min-height:9rem}@media (min-width:768px){.page-cover{min-height:12rem}}@media (min-width:992px){.page-cover{min-height:15rem}}.page-cover-overlay{position:relative}.page-cover-overlay:after{background-image:linear-gradient(-180deg,transparent,rgba(0,0,0,.6));bottom:0;content:"";left:0;position:absolute;right:0;top:0}.page-header{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;max-width:100%;min-height:2.25rem}.page-wrapper .page-header{margin:var(--tblr-page-padding-y) 0 0}.page-header-border{background-color:var(--tblr-bg-surface);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin:0!important;padding:var(--tblr-page-padding-y) 0}.page-pretitle{color:var(--tblr-secondary);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.page-title{align-items:center;color:inherit;display:flex;font-size:var(--tblr-font-size-h2);font-weight:var(--tblr-font-weight-headings);line-height:var(--tblr-line-height-h2);margin:0}.page-title svg{height:1.5rem;margin-left:.25rem;width:1.5rem}.page-title-lg{font-size:1.5rem;line-height:2rem}.page-subtitle{color:var(--tblr-secondary);margin-top:.25rem}.page-cover{--tblr-page-cover-blur:20px;--tblr-page-cover-padding:1rem;min-height:6rem;overflow:hidden;padding:var(--tblr-page-cover-padding) 0;position:relative}.page-cover-img{background-position:50%;background-size:cover;bottom:calc(var(--tblr-page-cover-blur, 0)*-2);filter:blur(var(--tblr-page-cover-blur));left:calc(var(--tblr-page-cover-blur, 0)*-2);-o-object-fit:cover;object-fit:cover;pointer-events:none;position:absolute;right:calc(var(--tblr-page-cover-blur, 0)*-2);top:calc(var(--tblr-page-cover-blur, 0)*-2);z-index:-1}.page-tabs{margin-top:.5rem;position:relative}.page-header-tabs .nav-bordered{border:0}.page-header-tabs+.page-body-card{margin-top:0}.footer{background-color:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:var(--tblr-gray-500);margin-top:auto;padding:2rem 0}.footer-transparent{background-color:transparent;border-top:0}:root.theme-dark .hide-theme-dark,:root.theme-dark .img-light,:root:not(.theme-dark):not([data-bs-theme=dark]) .hide-theme-light,:root:not(.theme-dark):not([data-bs-theme=dark]) .img-dark,:root[data-bs-theme=dark] .hide-theme-dark,:root[data-bs-theme=dark] .img-light,body[data-bs-theme=dark] [data-bs-theme=light]:root .hide-theme-dark,body[data-bs-theme=dark] [data-bs-theme=light]:root .img-light{display:none!important}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{color-scheme:dark;--tblr-body-color:var(--tblr-gray-200);--tblr-secondary:var(--tblr-gray-400);--tblr-body-bg:var(--tblr-gray-900);--tblr-emphasis-color:#fff;--tblr-emphasis-color-rgb:255,255,255;--tblr-bg-forms:var(--tblr-gray-900);--tblr-bg-surface:var(--tblr-gray-800);--tblr-bg-surface-inverted:var(--tblr-gray-100);--tblr-bg-surface-secondary:var(--tblr-gray-900);--tblr-bg-surface-tertiary:var(--tblr-gray-800);--tblr-text-inverted:var(--tblr-gray-800);--tblr-link-color:var(--tblr-primary);--tblr-link-hover-color:color-mix(in srgb,var(--tblr-primary),#000 20%);--tblr-active-bg:#232e3e;--tblr-disabled-color:color-mix(in srgb,var(--tblr-body-color) 40%,transparent);--tblr-border-color:var(--tblr-gray-700);--tblr-border-color-translucent:var( + --tblr-dark-mode-border-color-translucent + );--tblr-border-dark-color:var(--tblr-dark-mode-border-dark-color);--tblr-border-active-color:var( + --tblr-dark-mode-border-active-color + );--tblr-btn-color:#1b2430}[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image{filter:brightness(0) invert(1)}.accordion{--tblr-accordion-color:var(--tblr-body-color);--tblr-accordion-border-color:var(--tblr-border-color);--tblr-accordion-border-radius:var(--tblr-border-radius);--tblr-accordion-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-accordion-padding-x:1.25rem;--tblr-accordion-gap:0;--tblr-accordion-active-color:inherit;--tblr-accordion-btn-color:var(--tblr-accordion-color);--tblr-accordion-btn-bg:transparent;--tblr-accordion-btn-toggle-width:1.25rem;--tblr-accordion-btn-padding-x:var(--tblr-accordion-padding-x);--tblr-accordion-btn-padding-y:1rem;--tblr-accordion-btn-font-weight:var(--tblr-font-weight-medium);--tblr-accordion-body-padding-x:var(--tblr-accordion-padding-x);--tblr-accordion-body-padding-y:1rem;display:flex;flex-direction:column;gap:var(--tblr-accordion-gap)}.accordion-button{align-items:center;background-color:transparent;border:0;color:inherit;display:flex;font-size:inherit;font-weight:var(--tblr-accordion-btn-font-weight);gap:.75rem;padding:var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-padding-x);position:relative;text-align:inherit;width:100%}.accordion-button:not(.collapsed){border-bottom-color:transparent;box-shadow:none;color:var(--tblr-accordion-active-color)}.accordion-header{align-items:center;background-color:transparent;border:0;color:var(--tblr-accordion-btn-color);display:flex;gap:1rem;margin:0;overflow-anchor:none;position:relative;text-align:right;transition:transform .3s;width:100%}.accordion-header:hover{z-index:2}.accordion-header:focus{box-shadow:var(--tblr-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header:focus:not(:focus-visible){box-shadow:none;outline:none}.accordion-button-icon,.accordion-button-toggle{color:var(--tblr-secondary)}.accordion-button-toggle{display:flex;height:var(--tblr-accordion-btn-toggle-width);line-height:1;margin-left:0;margin-right:auto;transition:transform .3s;width:var(--tblr-accordion-btn-toggle-width)}.accordion-button:not(.collapsed) .accordion-button-toggle{color:var(--tblr-accordion-active-color);transform:rotate(180deg)}.accordion-button-toggle path{transition:opacity .3s}.accordion-button:not(.collapsed) .accordion-button-toggle-plus path:first-child{opacity:0}.accordion-item{border:var(--tblr-border-width) solid var(--tblr-accordion-border-color);color:var(--tblr-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--tblr-accordion-border-radius);border-top-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header{border-top-left-radius:var(--tblr-accordion-inner-border-radius);border-top-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--tblr-accordion-border-radius);border-bottom-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header.collapsed{border-bottom-left-radius:var(--tblr-accordion-inner-border-radius);border-bottom-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--tblr-accordion-border-radius);border-bottom-right-radius:var(--tblr-accordion-border-radius)}.accordion-body{color:var(--tblr-secondary);padding:0 var(--tblr-accordion-body-padding-x) var(--tblr-accordion-body-padding-y)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}.accordion-tabs{--tblr-accordion-gap:0.75rem}.accordion-tabs>.accordion-item{border:var(--tblr-border-width) solid var(--tblr-accordion-border-color);border-radius:var(--tblr-accordion-border-radius)}.accordion-inverted .accordion-button-toggle{margin-right:0;order:-1}.alert{--tblr-alert-color:var(--tblr-body-color);--tblr-alert-bg:color-mix(in srgb,var(--tblr-alert-color) 10%,transparent);--tblr-alert-padding-x:1rem;--tblr-alert-padding-y:0.75rem;--tblr-alert-margin-bottom:1rem;--tblr-alert-border-color:color-mix(in srgb,var(--tblr-alert-color) 20%,transparent);--tblr-alert-border:var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius:var(--tblr-border-radius);--tblr-alert-link-color:inherit;--tblr-alert-heading-font-weight:var(--tblr-font-weight-medium);background-color:color-mix(in srgb,var(--tblr-alert-bg),var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-alert-border-color);border-radius:var(--tblr-alert-border-radius);display:flex;flex-direction:row;gap:1rem;margin-bottom:var(--tblr-alert-margin-bottom);padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);position:relative}.alert-heading{color:inherit;font-weight:var(--tblr-alert-heading-font-weight);margin-bottom:.25rem}.alert-description{color:var(--tblr-secondary)}.alert-icon{height:1.25rem!important;width:1.25rem!important}.alert-action,.alert-icon{color:var(--tblr-alert-color)}.alert-action{text-decoration:underline}.alert-action:hover{text-decoration:none}.alert-list{margin:0}.alert-link{color:var(--tblr-alert-link-color);font-weight:var(--tblr-font-weight-bold)}.alert-link,.alert-link:hover{color:var(--tblr-alert-color)}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{left:calc(var(--tblr-alert-padding-y)/2 - 1px);padding:calc(var(--tblr-alert-padding-y)*1.25) var(--tblr-alert-padding-x);position:absolute;top:calc(var(--tblr-alert-padding-x)/2 - 1px);z-index:1}.alert-important{background-color:var(--tblr-alert-color);border-color:var(--tblr-alert-color);color:var(--tblr-white)}.alert-important .alert-description,.alert-important .alert-icon{color:inherit}.alert-minor{background:transparent;border-color:var(--tblr-border-color)}.alert-primary{--tblr-alert-color:var(--tblr-primary)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary)}.alert-success{--tblr-alert-color:var(--tblr-success)}.alert-info{--tblr-alert-color:var(--tblr-info)}.alert-warning{--tblr-alert-color:var(--tblr-warning)}.alert-danger{--tblr-alert-color:var(--tblr-danger)}.alert-light{--tblr-alert-color:var(--tblr-light)}.alert-dark{--tblr-alert-color:var(--tblr-dark)}.alert-muted{--tblr-alert-color:var(--tblr-muted)}.alert-blue{--tblr-alert-color:var(--tblr-blue)}.alert-azure{--tblr-alert-color:var(--tblr-azure)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo)}.alert-purple{--tblr-alert-color:var(--tblr-purple)}.alert-pink{--tblr-alert-color:var(--tblr-pink)}.alert-red{--tblr-alert-color:var(--tblr-red)}.alert-orange{--tblr-alert-color:var(--tblr-orange)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow)}.alert-lime{--tblr-alert-color:var(--tblr-lime)}.alert-green{--tblr-alert-color:var(--tblr-green)}.alert-teal{--tblr-alert-color:var(--tblr-teal)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan)}.avatar{--tblr-avatar-size:var(--tblr-avatar-list-size,2.5rem);--tblr-avatar-status-size:0.75rem;--tblr-avatar-bg:var(--tblr-bg-surface-secondary);--tblr-avatar-box-shadow-color:var(--tblr-border-color-translucent);--tblr-avatar-box-shadow:inset 0 0 0 1px var(--tblr-avatar-box-shadow-color);--tblr-avatar-font-size:1rem;--tblr-avatar-icon-size:1.5rem;--tblr-avatar-brand-size:1.25rem;align-items:center;background:var(--tblr-avatar-bg) no-repeat center/cover;border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-avatar-box-shadow);color:var(--tblr-secondary);display:inline-flex;font-size:var(--tblr-avatar-font-size);font-weight:var(--tblr-font-weight-medium);height:var(--tblr-avatar-size);justify-content:center;line-height:1;position:relative;text-align:center;text-transform:uppercase;transition:color .3s,background-color .3s,box-shadow .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:bottom;width:var(--tblr-avatar-size)}.avatar .icon{height:var(--tblr-avatar-icon-size);width:var(--tblr-avatar-icon-size)}.avatar .badge{border-radius:100rem;bottom:0;box-shadow:0 0 0 calc(var(--tblr-avatar-status-size)/4) var(--tblr-bg-surface);left:0;position:absolute}a.avatar{cursor:pointer}a.avatar:hover{color:var(--tblr-primary);--tblr-avatar-box-shadow-color:var(--tblr-primary)}.avatar-rounded{border-radius:100rem}.avatar-xxs{--tblr-avatar-size:1rem;--tblr-avatar-status-size:0.25rem;--tblr-avatar-font-size:0.5rem;--tblr-avatar-icon-size:0.5rem;--tblr-avatar-brand-size:0.5rem}.avatar-xxs .badge:empty{height:.25rem;width:.25rem}.avatar-xs{--tblr-avatar-size:1.25rem;--tblr-avatar-status-size:0.375rem;--tblr-avatar-font-size:0.625rem;--tblr-avatar-icon-size:0.75rem;--tblr-avatar-brand-size:0.75rem}.avatar-xs .badge:empty{height:.375rem;width:.375rem}.avatar-sm{--tblr-avatar-size:2rem;--tblr-avatar-status-size:0.5rem;--tblr-avatar-font-size:0.75rem;--tblr-avatar-icon-size:1.5rem;--tblr-avatar-brand-size:1rem}.avatar-sm .badge:empty{height:.5rem;width:.5rem}.avatar-md{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:0.875rem;--tblr-avatar-icon-size:1.5rem;--tblr-avatar-brand-size:1.25rem}.avatar-md .badge:empty{height:.75rem;width:.75rem}.avatar-lg{--tblr-avatar-size:3rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:1.25rem;--tblr-avatar-icon-size:2rem;--tblr-avatar-brand-size:1.25rem}.avatar-lg .badge:empty{height:.75rem;width:.75rem}.avatar-xl{--tblr-avatar-size:5rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:2rem;--tblr-avatar-icon-size:3rem;--tblr-avatar-brand-size:1.25rem}.avatar-xl .badge:empty{height:1rem;width:1rem}.avatar-2xl{--tblr-avatar-size:7rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:3rem;--tblr-avatar-icon-size:5rem;--tblr-avatar-brand-size:2rem}.avatar-2xl .badge:empty{height:1rem;width:1rem}.avatar-list{--tblr-avatar-list-size:2.5rem;--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.avatar-list a.avatar:hover{z-index:1}.avatar-list-stacked{display:block;--tblr-list-gap:0}.avatar-list-stacked .avatar{box-shadow:var(--tblr-avatar-box-shadow),0 0 0 2px var(--tblr-card-bg,var(--tblr-bg-surface));margin-left:calc(var(--tblr-avatar-size)*-.5)!important}.avatar-list-xxs{--tblr-avatar-list-size:1rem}.avatar-list-xs{--tblr-avatar-list-size:1.25rem}.avatar-list-sm{--tblr-avatar-list-size:2rem}.avatar-list-md{--tblr-avatar-list-size:2.5rem}.avatar-list-lg{--tblr-avatar-list-size:3rem}.avatar-list-xl{--tblr-avatar-list-size:5rem}.avatar-list-2xl{--tblr-avatar-list-size:7rem}.avatar-upload{background:var(--tblr-bg-forms);border:var(--tblr-border-width) dashed var(--tblr-border-color);box-shadow:none;flex-direction:column;transition:color .3s,background-color .3s}@media (prefers-reduced-motion:reduce){.avatar-upload{transition:none}}.avatar-upload svg{height:1.5rem;width:1.5rem;stroke-width:1}.avatar-upload:hover{border-color:var(--tblr-primary);color:var(--tblr-primary);text-decoration:none}.avatar-upload-text{font-size:.625rem;line-height:1;margin-top:.25rem}.avatar-cover{box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-body-bg));margin-top:calc(var(--tblr-avatar-size)*-.5)}.avatar-brand{background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);bottom:-2px;height:var(--tblr-avatar-brand-size);left:-2px;position:absolute;width:var(--tblr-avatar-brand-size);z-index:1000}.badge{--tblr-badge-padding-x:0.5em;--tblr-badge-padding-y:0.25em;--tblr-badge-font-size:0.85714285em;--tblr-badge-font-weight:var(--tblr-font-weight-medium);--tblr-badge-color:var(--tblr-secondary);--tblr-badge-border-radius:var(--tblr-border-radius);--tblr-badge-icon-size:1em;--tblr-badge-line-height:1;align-items:center;border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:var(--tblr-badge-border-radius);color:var(--tblr-badge-color);display:inline-flex;font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);gap:.25rem;justify-content:center;letter-spacing:.04em;line-height:var(--tblr-badge-line-height);min-width:calc(1em + var(--tblr-badge-padding-y)*2 + 2px);overflow:hidden;padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:bottom;white-space:nowrap}.badge,a.badge{background:var(--tblr-bg-surface-secondary)}.badge .icon{font-size:var(--tblr-badge-icon-size);height:1em;width:1em;stroke-width:2}.badge-dot,.badge:empty{border-radius:100rem;display:inline-block;height:10px;min-height:auto;min-width:0;padding:0;vertical-align:baseline;width:10px}.badge-outline{background-color:transparent;border:var(--tblr-border-width) var(--tblr-border-style) currentColor}.badge-pill{border-radius:100rem}.badges-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.badge-notification{left:0!important;position:absolute!important;top:0!important;transform:translate(-50%,-50%);z-index:1}.badge-blink{animation:blink 2s infinite}.badge-sm{--tblr-badge-font-size:0.71428571em;--tblr-badge-icon-size:1em;--tblr-badge-padding-y:2px;--tblr-badge-padding-x:0.25rem}.badge-lg{--tblr-badge-font-size:1em;--tblr-badge-icon-size:1em;--tblr-badge-padding-y:0.25rem;--tblr-badge-padding-x:0.5rem}.badge-icononly{--tblr-badge-padding-x:0}.breadcrumb{--tblr-breadcrumb-padding-x:0;--tblr-breadcrumb-padding-y:0;--tblr-breadcrumb-margin-bottom:1rem;--tblr-breadcrumb-font-size: ;--tblr-breadcrumb-bg: ;--tblr-breadcrumb-border-radius: ;--tblr-breadcrumb-divider-color:var(--tblr-gray-500);--tblr-breadcrumb-item-padding-x:0.5rem;--tblr-breadcrumb-item-active-color:inherit;--tblr-breadcrumb-item-active-font-weight:var(--tblr-font-weight-bold);--tblr-breadcrumb-item-disabled-color:var(--tblr-disabled-color);--tblr-breadcrumb-link-color:var(--tblr-link-color);background-color:var(--tblr-breadcrumb-bg);background:transparent;border-radius:var(--tblr-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--tblr-breadcrumb-font-size);list-style:none;margin:0;padding:0}.breadcrumb a{color:var(--tblr-breadcrumb-link-color)}.breadcrumb a:hover{text-decoration:underline}.breadcrumb-muted{--tblr-breadcrumb-link-color:var(--tblr-secondary)}.breadcrumb-item.active{color:var(--tblr-breadcrumb-item-active-color);font-weight:var(--tblr-breadcrumb-item-active-font-weight)}.breadcrumb-item.active a{color:inherit;pointer-events:none}.breadcrumb-item.disabled{color:var(--tblr-breadcrumb-item-disabled-color)}.breadcrumb-item.disabled:before{color:inherit}.breadcrumb-item.disabled a{color:inherit;pointer-events:none}.breadcrumb-item+.breadcrumb-item{padding-right:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--tblr-breadcrumb-divider-color);content:var(--tblr-breadcrumb-divider,"/");float:right;padding-left:var(--tblr-breadcrumb-item-padding-x);transform:scaleX(-1)}.breadcrumb-dots{--tblr-breadcrumb-divider:"·"}.breadcrumb-arrows{--tblr-breadcrumb-divider:"›"}.breadcrumb-bullets{--tblr-breadcrumb-divider:"•"}.btn{--tblr-btn-icon-size:1.25rem;--tblr-btn-icon-color:inherit;--tblr-btn-bg:var(--tblr-bg-surface);--tblr-btn-color:var(--tblr-body-color);--tblr-btn-border-color:var(--tblr-border-color);--tblr-btn-hover-bg:var(--tblr-btn-bg);--tblr-btn-hover-border-color:var(--tblr-border-active-color);--tblr-btn-active-color:var(--tblr-primary);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb),0.04);--tblr-btn-active-border-color:var(--tblr-primary);align-items:center;box-shadow:var(--tblr-btn-box-shadow);display:inline-flex;justify-content:center;min-height:calc(var(--tblr-btn-line-height)*1 + var(--tblr-btn-padding-y)*2 + var(--tblr-btn-border-width)*2);min-width:calc(var(--tblr-btn-line-height)*1 + var(--tblr-btn-padding-y)*2 + var(--tblr-btn-border-width)*2);position:relative;white-space:nowrap}.btn .icon{color:var(--tblr-btn-icon-color);font-size:var(--tblr-btn-icon-size);min-width:var(--tblr-btn-icon-size);vertical-align:bottom}.btn .avatar,.btn .icon{height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/-4) 0 calc(var(--tblr-btn-padding-x)/2);width:var(--tblr-btn-icon-size)}.btn .icon-end,.btn .icon-right{margin:0 calc(var(--tblr-btn-padding-x)/2) 0 calc(var(--tblr-btn-padding-x)/-4)}.btn .badge{top:auto}.btn-check+.btn:hover{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);color:var(--tblr-btn-hover-color)}.btn-link{background-color:transparent;border-color:transparent;box-shadow:none;color:#077cea}.btn-link .icon{color:inherit}.btn-link:hover{border-color:transparent;color:#0559a7}.btn-primary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-primary-fg,#fff);--tblr-btn-bg:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:var(--tblr-primary-darken);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary-darken);--tblr-btn-disabled-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-primary,.btn-outline.btn-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-active-border-color:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-border-color:var(--tblr-primary)}.btn-ghost-primary,.btn-ghost.btn-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-hover-border-color:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-secondary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-secondary-fg,#fff);--tblr-btn-bg:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:var(--tblr-secondary-darken);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary-darken);--tblr-btn-disabled-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-secondary,.btn-outline.btn-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-active-border-color:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-border-color:var(--tblr-secondary)}.btn-ghost-secondary,.btn-ghost.btn-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-hover-border-color:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-success{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-success-fg,#fff);--tblr-btn-bg:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:var(--tblr-success-darken);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success-darken);--tblr-btn-disabled-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-success,.btn-outline.btn-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-active-border-color:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-border-color:var(--tblr-success)}.btn-ghost-success,.btn-ghost.btn-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-hover-border-color:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-info{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-info-fg,#fff);--tblr-btn-bg:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:var(--tblr-info-darken);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info-darken);--tblr-btn-disabled-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-info,.btn-outline.btn-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-active-border-color:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-border-color:var(--tblr-info)}.btn-ghost-info,.btn-ghost.btn-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-hover-border-color:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-warning{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-warning-fg,#fff);--tblr-btn-bg:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:var(--tblr-warning-darken);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning-darken);--tblr-btn-disabled-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-warning,.btn-outline.btn-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-active-border-color:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-border-color:var(--tblr-warning)}.btn-ghost-warning,.btn-ghost.btn-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-hover-border-color:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-danger{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-danger-fg,#fff);--tblr-btn-bg:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:var(--tblr-danger-darken);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger-darken);--tblr-btn-disabled-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-danger,.btn-outline.btn-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-active-border-color:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-border-color:var(--tblr-danger)}.btn-ghost-danger,.btn-ghost.btn-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-hover-border-color:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-light{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-light-fg,#fff);--tblr-btn-bg:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:var(--tblr-light-darken);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light-darken);--tblr-btn-disabled-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-light,.btn-outline.btn-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-active-border-color:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-border-color:var(--tblr-light)}.btn-ghost-light,.btn-ghost.btn-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-hover-border-color:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-dark{--tblr-btn-border-color:var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-active-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-color:var(--tblr-dark-fg,#fff);--tblr-btn-bg:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:var(--tblr-dark-darken);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark-darken);--tblr-btn-disabled-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-dark,.btn-outline.btn-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-active-border-color:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-border-color:var(--tblr-dark)}.btn-ghost-dark,.btn-ghost.btn-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-hover-border-color:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-muted{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-muted-fg,#fff);--tblr-btn-bg:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:var(--tblr-muted-darken);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted-darken);--tblr-btn-disabled-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-muted,.btn-outline.btn-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-active-border-color:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-border-color:var(--tblr-muted)}.btn-ghost-muted,.btn-ghost.btn-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-hover-border-color:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-blue{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-blue-fg,#fff);--tblr-btn-bg:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:var(--tblr-blue-darken);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue-darken);--tblr-btn-disabled-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-blue,.btn-outline.btn-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-active-border-color:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-border-color:var(--tblr-blue)}.btn-ghost-blue,.btn-ghost.btn-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-hover-border-color:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-azure{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-azure-fg,#fff);--tblr-btn-bg:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:var(--tblr-azure-darken);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure-darken);--tblr-btn-disabled-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-azure,.btn-outline.btn-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-active-border-color:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-border-color:var(--tblr-azure)}.btn-ghost-azure,.btn-ghost.btn-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-hover-border-color:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-indigo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-indigo-fg,#fff);--tblr-btn-bg:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:var(--tblr-indigo-darken);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo-darken);--tblr-btn-disabled-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-indigo,.btn-outline.btn-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-active-border-color:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-border-color:var(--tblr-indigo)}.btn-ghost-indigo,.btn-ghost.btn-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-hover-border-color:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-purple{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-purple-fg,#fff);--tblr-btn-bg:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:var(--tblr-purple-darken);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple-darken);--tblr-btn-disabled-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-purple,.btn-outline.btn-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-active-border-color:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-border-color:var(--tblr-purple)}.btn-ghost-purple,.btn-ghost.btn-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-hover-border-color:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-pink{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pink-fg,#fff);--tblr-btn-bg:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:var(--tblr-pink-darken);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink-darken);--tblr-btn-disabled-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-pink,.btn-outline.btn-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-active-border-color:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-border-color:var(--tblr-pink)}.btn-ghost-pink,.btn-ghost.btn-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-hover-border-color:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-red{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-red-fg,#fff);--tblr-btn-bg:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:var(--tblr-red-darken);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red-darken);--tblr-btn-disabled-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-red,.btn-outline.btn-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-active-border-color:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-border-color:var(--tblr-red)}.btn-ghost-red,.btn-ghost.btn-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-hover-border-color:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-orange{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-orange-fg,#fff);--tblr-btn-bg:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:var(--tblr-orange-darken);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange-darken);--tblr-btn-disabled-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-orange,.btn-outline.btn-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-active-border-color:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-border-color:var(--tblr-orange)}.btn-ghost-orange,.btn-ghost.btn-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-hover-border-color:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-yellow{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-yellow-fg,#fff);--tblr-btn-bg:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:var(--tblr-yellow-darken);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow-darken);--tblr-btn-disabled-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-yellow,.btn-outline.btn-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-active-border-color:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-border-color:var(--tblr-yellow)}.btn-ghost-yellow,.btn-ghost.btn-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-hover-border-color:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-lime{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-lime-fg,#fff);--tblr-btn-bg:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:var(--tblr-lime-darken);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime-darken);--tblr-btn-disabled-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-lime,.btn-outline.btn-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-active-border-color:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-border-color:var(--tblr-lime)}.btn-ghost-lime,.btn-ghost.btn-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-hover-border-color:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-green{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-green-fg,#fff);--tblr-btn-bg:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:var(--tblr-green-darken);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green-darken);--tblr-btn-disabled-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-green,.btn-outline.btn-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-active-border-color:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-border-color:var(--tblr-green)}.btn-ghost-green,.btn-ghost.btn-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-hover-border-color:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-teal{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-teal-fg,#fff);--tblr-btn-bg:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:var(--tblr-teal-darken);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal-darken);--tblr-btn-disabled-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-teal,.btn-outline.btn-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-active-border-color:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-border-color:var(--tblr-teal)}.btn-ghost-teal,.btn-ghost.btn-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-hover-border-color:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-cyan{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-cyan-fg,#fff);--tblr-btn-bg:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:var(--tblr-cyan-darken);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan-darken);--tblr-btn-disabled-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-cyan,.btn-outline.btn-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-active-border-color:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-border-color:var(--tblr-cyan)}.btn-ghost-cyan,.btn-ghost.btn-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-hover-border-color:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-x{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-x-fg,#fff);--tblr-btn-bg:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:var(--tblr-x-darken);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x-darken);--tblr-btn-disabled-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-x,.btn-outline.btn-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-active-border-color:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-border-color:var(--tblr-x)}.btn-ghost-x,.btn-ghost.btn-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-hover-border-color:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-facebook{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-facebook-fg,#fff);--tblr-btn-bg:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:var(--tblr-facebook-darken);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook-darken);--tblr-btn-disabled-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-facebook,.btn-outline.btn-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-active-border-color:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-border-color:var(--tblr-facebook)}.btn-ghost-facebook,.btn-ghost.btn-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-hover-border-color:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-twitter{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-twitter-fg,#fff);--tblr-btn-bg:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:var(--tblr-twitter-darken);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter-darken);--tblr-btn-disabled-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-twitter,.btn-outline.btn-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-active-border-color:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-border-color:var(--tblr-twitter)}.btn-ghost-twitter,.btn-ghost.btn-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-hover-border-color:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-linkedin{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-linkedin-fg,#fff);--tblr-btn-bg:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:var(--tblr-linkedin-darken);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin-darken);--tblr-btn-disabled-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-linkedin,.btn-outline.btn-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-active-border-color:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-border-color:var(--tblr-linkedin)}.btn-ghost-linkedin,.btn-ghost.btn-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-hover-border-color:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-google{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-google-fg,#fff);--tblr-btn-bg:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:var(--tblr-google-darken);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google-darken);--tblr-btn-disabled-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-google,.btn-outline.btn-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-active-border-color:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-border-color:var(--tblr-google)}.btn-ghost-google,.btn-ghost.btn-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-hover-border-color:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-youtube{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-youtube-fg,#fff);--tblr-btn-bg:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:var(--tblr-youtube-darken);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube-darken);--tblr-btn-disabled-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-youtube,.btn-outline.btn-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-active-border-color:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-border-color:var(--tblr-youtube)}.btn-ghost-youtube,.btn-ghost.btn-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-hover-border-color:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-vimeo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vimeo-fg,#fff);--tblr-btn-bg:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:var(--tblr-vimeo-darken);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo-darken);--tblr-btn-disabled-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-vimeo,.btn-outline.btn-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-active-border-color:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-border-color:var(--tblr-vimeo)}.btn-ghost-vimeo,.btn-ghost.btn-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-hover-border-color:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-dribbble{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-dribbble-fg,#fff);--tblr-btn-bg:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:var(--tblr-dribbble-darken);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble-darken);--tblr-btn-disabled-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-dribbble,.btn-outline.btn-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-active-border-color:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-border-color:var(--tblr-dribbble)}.btn-ghost-dribbble,.btn-ghost.btn-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-hover-border-color:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-github{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-github-fg,#fff);--tblr-btn-bg:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:var(--tblr-github-darken);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github-darken);--tblr-btn-disabled-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-github,.btn-outline.btn-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-active-border-color:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-border-color:var(--tblr-github)}.btn-ghost-github,.btn-ghost.btn-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-hover-border-color:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-instagram{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-instagram-fg,#fff);--tblr-btn-bg:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:var(--tblr-instagram-darken);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram-darken);--tblr-btn-disabled-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-instagram,.btn-outline.btn-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-active-border-color:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-border-color:var(--tblr-instagram)}.btn-ghost-instagram,.btn-ghost.btn-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-hover-border-color:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-pinterest{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pinterest-fg,#fff);--tblr-btn-bg:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:var(--tblr-pinterest-darken);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest-darken);--tblr-btn-disabled-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-pinterest,.btn-outline.btn-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-active-border-color:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-border-color:var(--tblr-pinterest)}.btn-ghost-pinterest,.btn-ghost.btn-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-hover-border-color:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-vk{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vk-fg,#fff);--tblr-btn-bg:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:var(--tblr-vk-darken);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk-darken);--tblr-btn-disabled-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-vk,.btn-outline.btn-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-active-border-color:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-border-color:var(--tblr-vk)}.btn-ghost-vk,.btn-ghost.btn-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-hover-border-color:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-rss{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-rss-fg,#fff);--tblr-btn-bg:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:var(--tblr-rss-darken);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss-darken);--tblr-btn-disabled-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-rss,.btn-outline.btn-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-active-border-color:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-border-color:var(--tblr-rss)}.btn-ghost-rss,.btn-ghost.btn-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-hover-border-color:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-flickr{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-flickr-fg,#fff);--tblr-btn-bg:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:var(--tblr-flickr-darken);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr-darken);--tblr-btn-disabled-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-flickr,.btn-outline.btn-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-active-border-color:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-border-color:var(--tblr-flickr)}.btn-ghost-flickr,.btn-ghost.btn-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-hover-border-color:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-bitbucket{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-bitbucket-fg,#fff);--tblr-btn-bg:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:var(--tblr-bitbucket-darken);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket-darken);--tblr-btn-disabled-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-bitbucket,.btn-outline.btn-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-active-border-color:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-border-color:var(--tblr-bitbucket)}.btn-ghost-bitbucket,.btn-ghost.btn-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-hover-border-color:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-tabler{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-tabler-fg,#fff);--tblr-btn-bg:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:var(--tblr-tabler-darken);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler-darken);--tblr-btn-disabled-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler-fg);--tblr-btn-box-shadow:var(--tblr-shadow-input)}.btn-outline-tabler,.btn-outline.btn-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-active-border-color:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-border-color:var(--tblr-tabler)}.btn-ghost-tabler,.btn-ghost.btn-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-hover-border-color:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-group-sm>.btn,.btn-sm{--tblr-btn-line-height:1.3333333333;--tblr-btn-icon-size:1rem}.btn-group-lg>.btn,.btn-lg{--tblr-btn-line-height:1.5rem;--tblr-btn-icon-size:1.5rem}.btn-group-xl>.btn,.btn-xl{--tblr-btn-line-height:2;--tblr-btn-icon-size:2rem;--tblr-btn-padding-y:0.6875rem;--tblr-btn-padding-x:2rem;--tblr-btn-font-size:1.5rem}.btn-pill{border-radius:10rem;padding-left:1.5em;padding-right:1.5em}.btn-pill[class*=btn-icon]{padding:.375rem 15px}.btn-square{border-radius:0}.btn-action,.btn-icon{padding-left:0;padding-right:0}.btn-action .icon,.btn-icon .icon{margin:calc(var(--tblr-btn-padding-x)*-1)}.btn-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.btn-floating{bottom:1rem;box-shadow:var(--tblr-shadow-dropdown);position:fixed;right:1rem;z-index:1030}.btn-loading{color:transparent!important;pointer-events:none;position:relative;text-shadow:none!important}.btn-loading>*{opacity:0}.btn-loading:after{animation:spinner-border .75s linear infinite;border-left-color:currentcolor;border:2px var(--tblr-border-style);border-left:2px var(--tblr-border-style) transparent;border-radius:100rem;color:var(--tblr-btn-color);content:"";display:inline-block;height:var(--tblr-btn-icon-size);position:absolute;right:calc(50% - var(--tblr-btn-icon-size)/2);top:calc(50% - var(--tblr-btn-icon-size)/2);vertical-align:text-bottom;width:var(--tblr-btn-icon-size)}.btn-action{--tblr-border-color:transparent;background:transparent;border-radius:var(--tblr-border-radius);box-shadow:none;color:var(--tblr-secondary)}.btn-action:after{content:none}.btn-action:focus{box-shadow:none;outline:none}.btn-action.show,.btn-action:hover{background:var(--tblr-active-bg);border-color:transparent;color:var(--tblr-body-color)}.btn-action.show{color:var(--tblr-primary)}.btn-actions{display:flex}.btn-animate-icon .icon{transition:transform .3s ease}.btn-animate-icon:focus-visible .icon,.btn-animate-icon:hover .icon{transform:translateX(-4px)}.btn-animate-icon.btn-animate-icon-rotate:focus-visible .icon,.btn-animate-icon.btn-animate-icon-rotate:hover .icon{transform:rotate(-90deg)}.btn-animate-icon.btn-animate-icon-move-start:focus-visible .icon,.btn-animate-icon.btn-animate-icon-move-start:hover .icon{transform:translateX(4px)}.btn-animate-icon.btn-animate-icon-pulse:focus-visible .icon,.btn-animate-icon.btn-animate-icon-pulse:hover .icon{animation:pulse .9s;transform:none}.btn-animate-icon.btn-animate-icon-shake:focus-visible .icon,.btn-animate-icon.btn-animate-icon-shake:hover .icon{animation:shake .9s;transform:none}.btn-animate-icon.btn-animate-icon-tada:focus-visible .icon,.btn-animate-icon.btn-animate-icon-tada:hover .icon{animation:tada .9s;transform:none}.btn-group,.btn-group-vertical{box-shadow:var(--tblr-shadow-input)}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group>.btn-check:checked+.btn,.btn-group>.btn.active,.btn-group>.btn:active{z-index:5}.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.calendar{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);display:block;font-size:.765625rem}.calendar-nav{align-items:center;display:flex}.calendar-title{flex:1;text-align:center}.calendar-body,.calendar-header{display:flex;flex-wrap:wrap;justify-content:flex-start;padding:.5rem 0}.calendar-header{color:var(--tblr-secondary)}.calendar-date{border:0;flex:0 0 14.2857142857%;max-width:14.2857142857%;padding:.2rem;text-align:center}.calendar-date.next-month,.calendar-date.prev-month{opacity:.25}.calendar-date .date-item{background:100% 0;border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:100rem;color:#66758c;cursor:pointer;display:inline-block;height:1.4rem;line-height:1.4rem;outline:0;position:relative;text-align:center;text-decoration:none;transition:background .3s,border .3s,box-shadow .32s,color .3s;vertical-align:middle;white-space:nowrap;width:1.4rem}@media (prefers-reduced-motion:reduce){.calendar-date .date-item{transition:none}}.calendar-date .date-item:hover{background:#fefeff;text-decoration:none}.calendar-date .date-item:hover,.calendar-date .date-today{border-color:var(--tblr-border-color);color:var(--tblr-primary)}.calendar-range{position:relative}.calendar-range:before{background:rgba(var(--tblr-primary-rgb),.1);content:"";height:1.4rem;left:0;position:absolute;right:0;top:50%;transform:translateY(-50%)}.calendar-range.range-end .date-item,.calendar-range.range-start .date-item{background:var(--tblr-primary);border-color:var(--tblr-primary);color:#fff}.calendar-range.range-start:before{right:50%}.calendar-range.range-end:before{left:50%}.carousel-indicators-vertical{flex-direction:column;margin:0 0 0 1rem;right:auto;top:0}.carousel-indicators-vertical [data-bs-target]{border:0;border-left:10px var(--tblr-border-style) transparent;border-right:10px var(--tblr-border-style) transparent;height:30px;margin:3px 0;width:3px}.carousel-indicators-dot [data-bs-target]{border:10px var(--tblr-border-style) transparent;border-radius:100rem;height:.5rem;margin:0;width:.5rem}.carousel-indicators-thumb [data-bs-target]{background:no-repeat 50%/cover;border:0;border-radius:var(--tblr-border-radius);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0;height:auto;margin:0 3px;opacity:.75;width:2rem}@media (min-width:992px){.carousel-indicators-thumb [data-bs-target]{width:4rem}}.carousel-indicators-thumb [data-bs-target]:before{content:"";display:block;padding-top:var(--tblr-aspect-ratio,100%)}.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target]{margin:3px 0}.carousel-caption-background{background:red;background:linear-gradient(0deg,rgba(31,41,55,.9),rgba(31,41,55,0));bottom:0;height:90%;left:0;position:absolute;right:0}.card{transition:transform .3s ease-out,opacity .3s ease-out,box-shadow .3s ease-out}@media (prefers-reduced-motion:reduce){.card{transition:none}}@media print{.card{border:none;box-shadow:none}}a.card{color:inherit}a.card:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.16) 0 2px 16px 0;text-decoration:none}.card .card{box-shadow:none}.card-borderless,.card-borderless .card-footer,.card-borderless .card-header{border-color:transparent}.card-stamp{--tblr-stamp-size:7rem;border-top-left-radius:6px;height:calc(var(--tblr-stamp-size)*1);left:0;max-height:100%;opacity:.2;overflow:hidden;pointer-events:none;position:absolute;top:0;width:calc(var(--tblr-stamp-size)*1)}.card-stamp-lg{--tblr-stamp-size:13rem}.card-stamp-icon{align-items:center;background:var(--tblr-secondary);border-radius:100rem;color:var(--tblr-card-bg,var(--tblr-bg-surface));display:flex;font-size:calc(var(--tblr-stamp-size)*.75);height:calc(var(--tblr-stamp-size)*1);justify-content:center;left:calc(var(--tblr-stamp-size)*-.25);position:relative;top:calc(var(--tblr-stamp-size)*-.25);transform:rotate(-10deg);width:calc(var(--tblr-stamp-size)*1)}.card-stamp-icon .icon{stroke-width:2;height:calc(var(--tblr-stamp-size)*.75);width:calc(var(--tblr-stamp-size)*.75)}.card-img,.card-img-start{border-bottom-right-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));border-top-right-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width))}.card-img,.card-img-end{border-bottom-left-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));border-top-left-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width))}.card-img-overlay{display:flex;flex-direction:column;justify-content:flex-end}.card-img-overlay-dark{background-image:linear-gradient(-180deg,transparent,rgba(0,0,0,.6))}.card-inactive{box-shadow:none;pointer-events:none}.card-inactive .card-body{opacity:.64}.card-active{--tblr-card-border-color:var(--tblr-primary);--tblr-card-bg:var(--tblr-active-bg)}.card-btn{align-items:center;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;display:flex;flex:1;font-weight:var(--tblr-font-weight-medium);justify-content:center;padding:1rem 1.25rem;text-align:center;transition:background .3s}@media (prefers-reduced-motion:reduce){.card-btn{transition:none}}.card-btn:hover{background:rgba(var(--tblr-primary-rgb),.04);text-decoration:none}.card-btn+.card-btn{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-stacked{--tblr-card-stacked-offset:.25rem;position:relative}.card-stacked:after{background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;content:"";height:var(--tblr-card-stacked-offset);left:var(--tblr-card-stacked-offset);position:absolute;right:var(--tblr-card-stacked-offset);top:calc(var(--tblr-card-stacked-offset)*-1)}.card-cover{background:#666 no-repeat 50%/cover;padding:1rem 1.25rem;position:relative}.card-cover:before{background:rgba(31,41,55,.48);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.card-cover:first-child,.card-cover:first-child:before{border-radius:6px 6px 0 0}.card-cover-blurred:before{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.card-actions{margin:-.5rem auto -.5rem -.5rem;padding-right:.5rem}.card-actions a{text-decoration:none}.card-header{align-items:center;background:transparent;color:inherit;display:flex}.card-header:first-child{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-header-light{border-bottom-color:transparent}.card-header-light,.card-header-tabs{background:var(--tblr-bg-surface-tertiary)}.card-header-tabs{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;flex:1;margin:calc(var(--tblr-card-cap-padding-y)*-1) calc(var(--tblr-card-cap-padding-x)*-1) calc(var(--tblr-card-cap-padding-y)*-1);padding:calc(var(--tblr-card-cap-padding-y)*.5) calc(var(--tblr-card-cap-padding-x)*.5) 0}.card-header-pills{flex:1;margin-bottom:-.5rem;margin-top:-.5rem}.card-rotate-left,.card-rotate-start{transform:rotate(1.5deg)}.card-rotate-end,.card-rotate-right{transform:rotate(-1.5deg)}.card-link{color:inherit}.card-link:hover{box-shadow:0 1px 6px 0 rgba(0,0,0,.08);color:inherit;text-decoration:none}.card-link-rotate:hover{opacity:1;transform:rotate(-1.5deg)}.card-link-pop:hover{opacity:1;transform:translateY(-2px)}.card-footer{margin-top:auto}.card-footer:last-child{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius)}.card-footer-transparent{background:transparent;border-color:transparent;padding-top:0}.card-footer-borderless{border-top:none}.card-progress{height:.25rem}.card-progress:last-child{border-radius:0 0 2px 2px}.card-progress:first-child{border-radius:2px 2px 0 0}.card-meta{color:var(--tblr-secondary)}.card-title{display:block;font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem;margin:0 0 1rem}.card-title,a.card-title:hover{color:inherit}.card-header .card-title{margin:0}.card-subtitle{color:var(--tblr-secondary);font-weight:400;margin-bottom:1.25rem}.card-header .card-subtitle{margin:0}.card-title .card-subtitle{font-size:.875rem;margin:0 .25rem 0 0}.card-body{position:relative}.card-body>:last-child{margin-bottom:0}.card-sm>.card-body{padding:1rem}@media (min-width:768px){.card-md>.card-body{padding:2.5rem}.card-lg>.card-body{padding:2rem}}@media (min-width:992px){.card-lg>.card-body{padding:4rem}}@media print{.card-body{padding:0}}.card-body+.card-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-body-scrollable{overflow:auto}.card-options{display:flex;left:.75rem;margin-right:auto;top:1.5rem}.card-options-link{color:var(--tblr-secondary);display:inline-block;margin-right:.25rem;min-width:1rem}.card-status-top{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;height:2px;left:0;position:absolute;right:0;top:0}.card-status-start{border-radius:0 var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0;bottom:0;height:100%;left:auto;position:absolute;width:2px}.card-status-bottom{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);bottom:0;height:2px;position:absolute;top:auto;width:100%}.card-table{margin-bottom:0!important}.card-table tr td:first-child,.card-table tr th:first-child{border-right:0;padding-right:1.25rem}.card-table tr td:last-child,.card-table tr th:last-child{border-left:0;padding-left:1.25rem}.card-table tbody tr:first-child,.card-table tbody tr:first-child td,.card-table tbody tr:first-child th,.card-table tfoot tr:first-child,.card-table tfoot tr:first-child td,.card-table tfoot tr:first-child th,.card-table thead tr:first-child,.card-table thead tr:first-child td,.card-table thead tr:first-child th{border-top:0}.card-body+.card-table{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color)}.card-code{padding:0}.card-code .highlight{border:0;margin:0}.card-code pre{border:0!important;margin:0!important}.card-chart{height:3.5rem;position:relative;z-index:1}.card-avatar{box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-bg-surface));margin-left:auto;margin-right:auto;margin-top:calc(var(--tblr-avatar-size)*-1*.5)}.card-body+.card-list-group{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-list-group .list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:1.25rem;padding-right:1.25rem}.card-list-group .list-group-item:last-child{border-bottom:0}.card-list-group .list-group-item:first-child{border-top:0}.card-tabs .nav-tabs{border-bottom:0;position:relative;z-index:1000}.card-tabs .nav-tabs .nav-link{background:var(--tblr-bg-surface-tertiary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.card-tabs .nav-tabs .nav-link.active,.card-tabs .nav-tabs .nav-link:active,.card-tabs .nav-tabs .nav-link:hover{border-color:var(--tblr-border-color-translucent);color:var(--tblr-body-color)}.card-tabs .nav-tabs .nav-link.active{background:var(--tblr-card-bg,var(--tblr-bg-surface));border-bottom-color:transparent;color:inherit}.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link{border-top-right-radius:0}.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link{border-top-left-radius:0}.card-tabs .nav-tabs .nav-item+.nav-item{margin-right:calc(var(--tblr-border-width)*-1)}.card-tabs .nav-tabs-bottom,.card-tabs .nav-tabs-bottom .nav-link{margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-link.active{border-top-color:transparent}.card-tabs .nav-tabs-bottom .nav-item{margin-bottom:0;margin-top:calc(var(--tblr-border-width)*-1)}.card-tabs .nav-tabs-bottom .nav-item .nav-link{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:0 0 var(--tblr-border-radius-lg) var(--tblr-border-radius-lg)}.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link{border-bottom-right-radius:0}.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link{border-bottom-left-radius:0}.card-tabs .card{border-bottom-right-radius:0}.card-tabs .nav-tabs+.tab-content .card{border-bottom-right-radius:var(--tblr-card-border-radius);border-top-right-radius:0}.card-note{--tblr-card-bg:#fff7dd;--tblr-card-border-color:#fff1c9}.btn-close{--tblr-btn-close-color:currentColor;--tblr-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%231f2937' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3E%3C/svg%3E");--tblr-btn-close-opacity:0.4;--tblr-btn-close-hover-opacity:0.75;--tblr-btn-close-focus-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-btn-close-focus-opacity:1;--tblr-btn-close-disabled-opacity:0.25;--tblr-btn-close-size:1em;background-color:var(--tblr-btn-close-color);border:0;border-radius:var(--tblr-border-radius);cursor:pointer;display:block;height:var(--tblr-btn-close-size);-webkit-mask:var(--tblr-btn-close-bg) no-repeat center/calc(var(--tblr-btn-close-size)*.75);mask:var(--tblr-btn-close-bg) no-repeat center/calc(var(--tblr-btn-close-size)*.75);opacity:var(--tblr-btn-close-opacity);padding:.25em;width:var(--tblr-btn-close-size)}.btn-close,.btn-close:hover{color:var(--tblr-btn-close-color)}.btn-close:hover{opacity:var(--tblr-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--tblr-btn-close-focus-shadow);opacity:var(--tblr-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--tblr-btn-close-disabled-opacity);pointer-events:none}.btn-close.disabled,.btn-close:disabled,.dropdown-menu{-webkit-user-select:none;-moz-user-select:none;user-select:none}.dropdown-menu{background-clip:border-box}.dropdown-menu.card{display:none;min-width:25rem;padding:0}.dropdown-menu.card.show{display:flex}.dropdown-item{align-items:center;display:flex;gap:.5rem;line-height:1.4285714286;margin:0;min-width:11rem}.dropdown-item-icon{color:var(--tblr-secondary);height:1.25rem!important;margin-left:.5rem;opacity:.7;text-align:center;width:1.25rem!important}.dropdown-item-indicator{align-items:center;display:inline-flex;height:1.25rem;line-height:1;margin-left:.5rem;margin-right:-.25rem;vertical-align:bottom}.dropdown-header{color:var(--tblr-secondary);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;padding-bottom:.25rem;pointer-events:none;text-transform:uppercase}.dropdown-menu-scrollable{height:auto;max-height:13rem;overflow-x:hidden}.dropdown-menu-column{min-width:11rem}.dropdown-menu-column .dropdown-item{min-width:0}.dropdown-menu-columns{display:flex;flex:0 0.25rem}.dropdown-menu-arrow:before{background:inherit;border:1px solid;border-color:inherit;content:"";display:block;height:14px;position:absolute;right:.75rem;top:-.25rem;transform:rotate(45deg);transform-origin:center;width:14px;z-index:-1;clip:rect(0,9px,9px,0)}.dropdown-menu-arrow.dropdown-menu-end:before{left:.75rem;right:auto}.dropend>.dropdown-menu{margin-right:-.25rem;margin-top:calc(-.25rem - 1px)}.dropend .dropdown-toggle:after{margin-right:auto}.dropdown-menu-card{min-width:20rem;padding:0}.dropdown-menu-card>.card{border:0;box-shadow:none;margin:0}.datagrid{--tblr-datagrid-padding:1.5rem;--tblr-datagrid-item-width:15rem;display:grid;grid-gap:var(--tblr-datagrid-padding);grid-template-columns:repeat(auto-fit,minmax(var(--tblr-datagrid-item-width),1fr))}.datagrid-title{color:var(--tblr-secondary);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;margin-bottom:.25rem;text-transform:uppercase}.empty{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;padding:1rem;text-align:center}@media (min-width:768px){.empty{padding:3rem}}.empty-icon{color:var(--tblr-secondary);height:3rem;line-height:1;margin:0 0 1rem;width:3rem}.empty-icon svg{height:100%;width:100%}.empty-img{line-height:1;margin:0 0 2rem}.empty-header{color:var(--tblr-secondary);font-size:4rem;font-weight:var(--tblr-font-weight-light);line-height:1;margin:0 0 1rem}.empty-title{font-size:1.25rem;font-weight:var(--tblr-font-weight-bold);line-height:1.75rem}.empty-subtitle,.empty-title{margin:0 0 .5rem}.empty-action{margin-top:1.5rem}.empty-bordered{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.row>*{min-width:0}.col-separator{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.container-slim{max-width:16rem}.container-slim,.container-tight{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.container-tight{max-width:30rem}.container-narrow{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;max-width:61.875rem;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.row-0{margin-left:0;margin-right:0}.row-0>.col,.row-0>[class*=col-]{padding-left:0;padding-right:0}.row-0 .card{margin-bottom:0}.row-sm{margin-left:-.375rem;margin-right:-.375rem}.row-sm>.col,.row-sm>[class*=col-]{padding-left:.375rem;padding-right:.375rem}.row-sm .card{margin-bottom:.75rem}.row-md{margin-left:-1.5rem;margin-right:-1.5rem}.row-md>.col,.row-md>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.row-md .card{margin-bottom:3rem}.row-lg{margin-left:-3rem;margin-right:-3rem}.row-lg>.col,.row-lg>[class*=col-]{padding-left:3rem;padding-right:3rem}.row-lg .card{margin-bottom:6rem}.row-deck>.col,.row-deck>[class*=col-]{align-items:stretch;display:flex}.row-deck>.col .card,.row-deck>[class*=col-] .card{flex:1 1 auto}.row-cards{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:var(--tblr-page-padding);min-width:0}.row-cards .row-cards{flex:1}.space-y{flex-direction:column}.space-x,.space-y{display:flex;gap:1rem}.space-y-0{flex-direction:column}.space-x-0,.space-y-0{display:flex;gap:0}.space-y-1{flex-direction:column}.space-x-1,.space-y-1{display:flex;gap:.25rem}.space-y-2{flex-direction:column}.space-x-2,.space-y-2{display:flex;gap:.5rem}.space-y-3{flex-direction:column}.space-x-3,.space-y-3{display:flex;gap:1rem}.space-y-4{flex-direction:column}.space-x-4,.space-y-4{display:flex;gap:1.5rem}.space-y-5{flex-direction:column}.space-x-5,.space-y-5{display:flex;gap:2rem}.space-y-6{flex-direction:column}.space-x-6,.space-y-6{display:flex;gap:2.5rem}.divide-y>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y>:not(template):not(:first-child){padding-top:1rem!important}.divide-y>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x>:not(template):not(:first-child){padding-right:1rem!important}.divide-x>:not(template):not(:last-child){padding-left:1rem!important}.divide-y-0>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-0>:not(template):not(:first-child){padding-top:0!important}.divide-y-0>:not(template):not(:last-child){padding-bottom:0!important}.divide-x-0>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-0>:not(template):not(:first-child){padding-right:0!important}.divide-x-0>:not(template):not(:last-child){padding-left:0!important}.divide-y-1>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-1>:not(template):not(:first-child){padding-top:.25rem!important}.divide-y-1>:not(template):not(:last-child){padding-bottom:.25rem!important}.divide-x-1>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-1>:not(template):not(:first-child){padding-right:.25rem!important}.divide-x-1>:not(template):not(:last-child){padding-left:.25rem!important}.divide-y-2>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-2>:not(template):not(:first-child){padding-top:.5rem!important}.divide-y-2>:not(template):not(:last-child){padding-bottom:.5rem!important}.divide-x-2>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-2>:not(template):not(:first-child){padding-right:.5rem!important}.divide-x-2>:not(template):not(:last-child){padding-left:.5rem!important}.divide-y-3>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-3>:not(template):not(:first-child){padding-top:1rem!important}.divide-y-3>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x-3>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-3>:not(template):not(:first-child){padding-right:1rem!important}.divide-x-3>:not(template):not(:last-child){padding-left:1rem!important}.divide-y-4>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-4>:not(template):not(:first-child){padding-top:1.5rem!important}.divide-y-4>:not(template):not(:last-child){padding-bottom:1.5rem!important}.divide-x-4>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-4>:not(template):not(:first-child){padding-right:1.5rem!important}.divide-x-4>:not(template):not(:last-child){padding-left:1.5rem!important}.divide-y-5>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-5>:not(template):not(:first-child){padding-top:2rem!important}.divide-y-5>:not(template):not(:last-child){padding-bottom:2rem!important}.divide-x-5>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-5>:not(template):not(:first-child){padding-right:2rem!important}.divide-x-5>:not(template):not(:last-child){padding-left:2rem!important}.divide-y-6>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-6>:not(template):not(:first-child){padding-top:2.5rem!important}.divide-y-6>:not(template):not(:last-child){padding-bottom:2.5rem!important}.divide-x-6>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-6>:not(template):not(:first-child){padding-right:2.5rem!important}.divide-x-6>:not(template):not(:last-child){padding-left:2.5rem!important}.divide-y-fill{display:flex;flex-direction:column;height:100%}.divide-y-fill>:not(template){display:flex;flex:1;flex-direction:column;justify-content:center}.icon{--tblr-icon-size:1.25rem;font-size:var(--tblr-icon-size);height:var(--tblr-icon-size);vertical-align:bottom;width:var(--tblr-icon-size);stroke-width:1.5}.icon:hover{text-decoration:none}.icon-inline{--tblr-icon-size:1rem;vertical-align:-.2rem}.icon-filled{fill:currentColor}.icon-sm{--tblr-icon-size:1rem;stroke-width:1}.icon-md{--tblr-icon-size:2.5rem;stroke-width:1}.icon-lg{--tblr-icon-size:3.5rem;stroke-width:1}.icon-pulse{animation:pulse 2s ease infinite;animation-fill-mode:both}.icon-pulse,.icon-tada{transition:all .15s ease 0s}.icon-tada{animation:tada 3s ease infinite;animation-fill-mode:both}.icon-rotate{animation:rotate-360 3s linear infinite;animation-fill-mode:both;transition:all .15s ease 0s}.img-responsive{--tblr-img-responsive-ratio:75%;background:no-repeat 50%/cover;padding-top:var(--tblr-img-responsive-ratio)}.img-responsive-grid{padding-top:calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y)/2)}.img-responsive-1x1{--tblr-img-responsive-ratio:100%}.img-responsive-2x1{--tblr-img-responsive-ratio:50%}.img-responsive-1x2{--tblr-img-responsive-ratio:200%}.img-responsive-3x1{--tblr-img-responsive-ratio:33.3333333333%}.img-responsive-1x3{--tblr-img-responsive-ratio:300%}.img-responsive-4x1{--tblr-img-responsive-ratio:25%}.img-responsive-1x4{--tblr-img-responsive-ratio:400%}.img-responsive-4x3{--tblr-img-responsive-ratio:75%}.img-responsive-3x4{--tblr-img-responsive-ratio:133.3333333333%}.img-responsive-16x9{--tblr-img-responsive-ratio:56.25%}.img-responsive-9x16{--tblr-img-responsive-ratio:177.7777777778%}.img-responsive-21x9{--tblr-img-responsive-ratio:42.8571428571%}.img-responsive-9x21{--tblr-img-responsive-ratio:233.3333333333%}.img-bg{background:no-repeat 50%/cover}textarea[cols]{height:auto}.col-form-label,.form-label{display:block;font-weight:var(--tblr-font-weight-medium)}.col-form-label.required:after,.form-label.required:after{color:#d63939;content:"*";margin-right:.25rem}.form-label-description{color:var(--tblr-secondary);float:left;font-weight:var(--tblr-font-weight-normal)}.form-hint{color:var(--tblr-secondary);display:block}.form-hint:last-child{margin-bottom:0}.form-hint+.form-control{margin-top:.25rem}.form-label+.form-hint{margin-top:-.25rem}.form-control+.form-hint,.form-select+.form-hint,.input-group+.form-hint{color:var(--tblr-secondary);margin-top:.5rem}.form-select:-moz-focusring{color:var(--tblr-body-color)}.form-control:-webkit-autofill{box-shadow:0 0 0 1000px var(--tblr-bg-surface-secondary) inset;color:var(--tblr-body-color);-webkit-text-fill-color:var(--tblr-body-color)}.form-control.disabled,.form-control:disabled{color:var(--tblr-secondary);-webkit-user-select:none;-moz-user-select:none;user-select:none}.form-control[size]{width:auto}.form-control-light{background-color:var(--tblr-gray-100);border-color:transparent}.form-control-dark{background-color:rgba(0,0,0,.1);border-color:transparent;color:#fff}.form-control-dark:focus{background-color:rgba(0,0,0,.1);border-color:hsla(0,0%,100%,.24);box-shadow:none}.form-control-dark::-moz-placeholder{color:hsla(0,0%,100%,.6)}.form-control-dark::placeholder{color:hsla(0,0%,100%,.6)}.form-control-rounded{border-radius:10rem}.form-control-flush{background:none!important;border-color:transparent!important;box-shadow:none!important;line-height:inherit;padding:0;resize:none}.form-footer{margin-top:2rem}.form-fieldset{background:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);margin-bottom:1rem;padding:1rem}fieldset:empty{display:none}.form-help{align-items:center;background:var(--tblr-gray-100);border-radius:100rem;color:var(--tblr-secondary);cursor:pointer;display:inline-flex;font-size:.75rem;font-weight:var(--tblr-font-weight-bold);height:1.125rem;justify-content:center;text-align:center;text-decoration:none;transition:background-color .3s,color .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1.125rem}@media (prefers-reduced-motion:reduce){.form-help{transition:none}}.form-help:hover,.form-help[aria-describedby]{background:var(--tblr-primary);color:#fff}.input-group{border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-shadow-input)}.input-group .btn,.input-group .form-control{box-shadow:none}.input-group-link{font-size:.75rem}.input-group-flat:focus-within{border-radius:var(--tblr-border-radius);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:#83b7e8!important}.input-group-flat .form-control:focus{border-color:var(--tblr-border-color);box-shadow:none}.input-group-flat .form-control:not(:last-child){border-left:0}.input-group-flat .form-control:not(:first-child){border-right:0}.input-group-flat .input-group-text{background:var(--tblr-bg-forms);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.input-group-flat .input-group-text{transition:none}}.input-group-flat .input-group-text:first-child{padding-left:0}.input-group-flat .input-group-text:last-child{padding-right:0}.form-file-button{border-right:0;margin-right:0}label[for=floating-input]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (max-width:575.98px){.form-control,.form-select{font-size:1rem}}.input-icon{position:relative}.input-icon .form-control:not(:last-child),.input-icon .form-select:not(:last-child){padding-left:2.5rem}.input-icon .form-control:not(:first-child),.input-icon .form-select:not(:last-child){padding-right:2.5rem}.input-icon-addon{align-items:center;bottom:0;color:var(--tblr-icon-color);display:flex;font-size:1.2em;justify-content:center;min-width:2.5rem;pointer-events:none;position:absolute;right:0;top:0}.input-icon-addon:last-child{left:0;right:auto}.form-colorinput{cursor:pointer;display:inline-block;line-height:1;margin:0;position:relative}.form-colorinput-input{opacity:0;position:absolute;z-index:-1}.form-colorinput-color{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:var(--tblr-border-radius);box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:#fff;display:block;height:1.5rem;width:1.5rem}.form-colorinput-color:before{background:no-repeat 50%/1.25rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E");content:"";height:100%;opacity:0;position:absolute;right:0;top:0;transition:opacity .3s;width:100%}@media (prefers-reduced-motion:reduce){.form-colorinput-color:before{transition:none}}.form-colorinput-input:checked~.form-colorinput-color:before{opacity:1}.form-colorinput-input:focus~.form-colorinput-color{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-colorinput-light .form-colorinput-color:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%231f2937' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-imagecheck{--tblr-form-imagecheck-radius:var(--tblr-border-radius);cursor:pointer;margin:0;position:relative}.form-imagecheck-input{opacity:0;position:absolute;z-index:-1}.form-imagecheck-figure{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-form-imagecheck-radius);display:block;margin:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none}.form-imagecheck-input:focus~.form-imagecheck-figure{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-imagecheck-input:checked~.form-imagecheck-figure{border-color:var(--tblr-primary)}.form-imagecheck-figure:before{background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:#fff;content:"";display:block;height:1.25rem;pointer-events:none;position:absolute;right:.25rem;top:.25rem;transition:opacity .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:1.25rem;z-index:1}@media (prefers-reduced-motion:reduce){.form-imagecheck-figure:before{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure:before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E");background-position:50%;background-repeat:repeat;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]~.form-imagecheck-figure:before{border-radius:50%}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-imagecheck-image{display:block;max-width:100%;opacity:.64;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-image{transition:none}}.form-imagecheck-image:first-child{border-top-left-radius:calc(var(--tblr-form-imagecheck-radius) - 1px);border-top-right-radius:calc(var(--tblr-form-imagecheck-radius) - 1px)}.form-imagecheck-image:last-child{border-bottom-left-radius:calc(var(--tblr-form-imagecheck-radius) - 1px);border-bottom-right-radius:calc(var(--tblr-form-imagecheck-radius) - 1px)}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck:hover .form-imagecheck-image{opacity:1}.form-imagecheck-caption{color:var(--tblr-secondary);font-size:.765625rem;padding:.25rem;text-align:center;transition:color .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-caption{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck:hover .form-imagecheck-caption{color:var(--tblr-body-color)}.form-selectgroup{display:inline-flex;flex-wrap:wrap;margin:0 0 -.5rem -.5rem}.form-selectgroup .form-selectgroup-item{margin:0 0 .5rem .5rem}.form-selectgroup-vertical{flex-direction:column}.form-selectgroup-item{display:block;position:relative}.form-selectgroup-input{opacity:0;position:absolute;right:0;top:0;z-index:-1}.form-selectgroup-label{background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-shadow-input);color:var(--tblr-secondary);cursor:pointer;display:block;font-size:.875rem;line-height:1.25rem;margin:0;min-width:calc(2.375rem + var(--tblr-border-width)*2);padding:.5625rem 1rem;position:relative;text-align:center;transition:border-color .3s,background .3s,color .3s;-webkit-user-select:none;-moz-user-select:none;user-select:none}@media (prefers-reduced-motion:reduce){.form-selectgroup-label{transition:none}}.form-selectgroup-label .icon:only-child{margin:0 -.25rem}.form-selectgroup-label:hover{color:var(--tblr-body-color)}.form-selectgroup-check{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:var(--tblr-shadow-input);display:inline-block;height:1.25rem;vertical-align:middle;width:1.25rem}.form-selectgroup-input[type=checkbox]+.form-selectgroup-label .form-selectgroup-check{border-radius:var(--tblr-border-radius)}.form-selectgroup-input[type=radio]+.form-selectgroup-label .form-selectgroup-check{border-radius:50%}.form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-check{background-color:var(--tblr-primary);background-position:50%;background-repeat:repeat;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-selectgroup-check-floated{left:.5625rem;position:absolute;top:.5625rem}.form-selectgroup-input:checked+.form-selectgroup-label{background:rgba(var(--tblr-primary-rgb),.04);border-color:var(--tblr-primary);color:var(--tblr-primary);z-index:1}.form-selectgroup-input:focus+.form-selectgroup-label{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);color:var(--tblr-primary);z-index:2}.form-selectgroup-boxes .form-selectgroup-label{color:inherit;padding:1.25rem 1rem;text-align:right}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label{color:inherit}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-title{color:var(--tblr-primary)}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-label-content{opacity:1}.form-selectgroup-pills{align-items:flex-start;flex-wrap:wrap}.form-selectgroup-pills .form-selectgroup-item{flex-grow:0}.form-selectgroup-pills .form-selectgroup-label{border-radius:50px}.form-control-color::-webkit-color-swatch{border:none}[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.form-control::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-tertiary-bg))}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-secondary-bg))}.form-check{-webkit-user-select:none;-moz-user-select:none;user-select:none}.form-check .form-check-label-off,.form-check.form-check-highlight .form-check-input:not(:checked)~.form-check-label{color:var(--tblr-secondary)}.form-check .form-check-input:checked~.form-check-label-off,.form-check .form-check-input:not(:checked)~.form-check-label-on{display:none}.form-check-input{background-size:1.25rem;box-shadow:var(--tblr-shadow-input);margin-top:0}.form-switch .form-check-input{transition:background-color .3s,background-position .3s}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-check-label{display:block}.form-check-label.required:after{color:#d63939;content:"*";margin-right:.25rem}.form-check-description{color:var(--tblr-secondary);display:block;font-size:.75rem;margin-top:.25rem}.form-check-single,.form-check-single .form-check-input{margin:0}.form-switch .form-check-input{height:1.25rem;margin-top:0}.form-switch-lg{min-height:1.5rem;padding-right:3.5rem}.form-switch-lg .form-check-input{background-size:1.5rem;height:1.5rem;margin-right:-3.5rem;width:2.75rem}.form-switch-lg .form-check-label{padding-top:.125rem}.form-check-input:checked{border:none}.form-control.is-invalid-lite,.form-control.is-valid-lite,.form-select.is-invalid-lite,.form-select.is-valid-lite{border-color:var(--tblr-border-color)!important}.legend{--tblr-legend-size:0.75em;background:var(--tblr-border-color);border:1px solid var(--tblr-border-color-translucent);border-radius:var(--tblr-border-radius-sm);display:inline-block;height:var(--tblr-legend-size);width:var(--tblr-legend-size)}.list-group{margin-left:0;margin-right:0}.list-group-header{background:var(--tblr-bg-surface-tertiary);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:var(--tblr-gray-500);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;padding:.5rem 1.25rem;text-transform:uppercase}.list-group-flush>.list-group-header:last-child{border-bottom-width:0}.list-group-item{background-color:inherit}.list-group-item.active{background-color:rgba(var(--tblr-secondary-rgb),.08);border-right-color:#066fd1;border-right-width:2px}.list-group-item.disabled,.list-group-item:disabled{background-color:rgba(var(--tblr-secondary-rgb),.08);color:#6b7280}.list-bordered .list-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-top:-1px}.list-bordered .list-item:first-child{border-top:none}.list-group-hoverable .list-group-item:active,.list-group-hoverable .list-group-item:focus,.list-group-hoverable .list-group-item:hover{background-color:rgba(var(--tblr-secondary-rgb),.08)}.list-group-hoverable .list-group-item-actions{opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.list-group-hoverable .list-group-item-actions{transition:none}}.list-group-hoverable .list-group-item-actions.show,.list-group-hoverable .list-group-item:hover .list-group-item-actions{opacity:1}.list-group-transparent{--tblr-list-group-border-radius:0;margin:0 -1.25rem}.list-group-transparent .list-group-item{background:none;border:0}.list-group-transparent .list-group-item .icon{color:var(--tblr-secondary)}.list-group-transparent .list-group-item.active{background:var(--tblr-active-bg);color:inherit;font-weight:var(--tblr-font-weight-bold)}.list-group-transparent .list-group-item.active .icon{color:inherit}.list-separated{display:flex;flex-direction:column;gap:1rem}.list-inline{margin:0}.list-inline-item:not(:last-child){margin-left:auto;margin-inline-end:.5rem}.list-inline-dots .list-inline-item+.list-inline-item:before{content:" · ";margin-inline-end:.5rem}.loader{color:#066fd1;display:block;height:2.5rem;position:relative;vertical-align:middle;width:2.5rem}.loader:after{animation:rotate-360 .6s linear;animation-iteration-count:infinite;border:1px var(--tblr-border-style);border-color:currentColor currentColor transparent transparent;border-radius:100rem;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.dimmer{position:relative}.dimmer .loader{display:none;left:0;margin:0 auto;position:absolute;right:0;top:50%;transform:translateY(-50%)}.dimmer.active .loader{display:block}.dimmer.active .dimmer-content{opacity:.1;pointer-events:none}@keyframes animated-dots{0%{transform:translateX(100%)}}.animated-dots{display:inline-block;overflow:hidden;vertical-align:bottom}.animated-dots:after{animation:animated-dots 1.2s steps(4,jump-none) infinite;content:"...";display:inline-block}.modal-content>.btn-close,.modal-header>.btn-close{height:3.5rem;left:0;margin:0;padding:0;position:absolute;top:0;width:3.5rem;z-index:10}.modal-body{scrollbar-color:color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent) transparent}.modal-body::-webkit-scrollbar{height:1rem;-webkit-transition:background .3s;transition:background .3s;width:1rem}@media (prefers-reduced-motion:reduce){.modal-body::-webkit-scrollbar{-webkit-transition:none;transition:none}}.modal-body::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent)}.modal-body::-webkit-scrollbar-track{background:transparent}.modal-body:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 40%,transparent)}.modal-body::-webkit-scrollbar-corner{background:transparent}.modal-body .modal-title{margin-bottom:1rem}.modal-body+.modal-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.modal-status{background:var(--tblr-secondary);border-radius:var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0;height:2px;left:0;position:absolute;right:0;top:0}.modal-header{align-items:center;background:transparent;min-height:3.5rem;padding:0 1.5rem 0 3.5rem}.modal-title{color:inherit;font-size:1rem;font-weight:var(--tblr-font-weight-bold);line-height:1.4285714286}.modal-footer{padding-bottom:.75rem;padding-top:.75rem}.modal-blur{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-full-width{margin:0 .5rem;max-width:none}.nav{--tblr-nav-link-hover-bg:color-mix(in srgb,var(--tblr-nav-link-color) 4%,transparent)}.nav-vertical,.nav-vertical .nav{flex-direction:column;flex-wrap:nowrap}.nav-vertical .nav{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-right:1.25rem;padding-right:.5rem}.nav-vertical .nav-item.show .nav-link,.nav-vertical .nav-link.active{color:var(--tblr-nav-link-active-color);font-weight:var(--tblr-font-weight-bold)}.nav-vertical.nav-pills{margin:0 -.75rem}.nav-bordered{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.nav-bordered .nav-item+.nav-item{margin-right:1.25rem}.nav-bordered .nav-link{border:0;border-bottom:2px var(--tblr-border-style) transparent;margin:0 0 calc(var(--tblr-border-width)*-1);padding-left:0;padding-right:0}.nav-bordered .nav-link:hover{background-color:transparent}.nav-bordered .nav-item.show .nav-link,.nav-bordered .nav-link.active{border-color:var(--tblr-primary);color:var(--tblr-primary)}.nav-underline .nav-link{border-radius:0}.nav-link{align-items:center;display:flex;transition:color .3s,background-color .3s}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link:focus,.nav-link:hover{background-color:var(--tblr-nav-link-hover-bg)}.nav-link-toggle{margin-right:auto;padding:0 .25rem;transition:transform .3s}@media (prefers-reduced-motion:reduce){.nav-link-toggle{transition:none}}.nav-link-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;margin:0;transform:rotate(45deg);vertical-align:.306em;width:.36em}.nav-link[aria-expanded=true] .nav-link-toggle{transform:rotate(-180deg)}.nav-link-icon{color:inherit;height:1.25rem;margin-left:.5rem;width:1.25rem}.nav-link-icon svg{display:block;height:100%}.nav-fill .nav-item .nav-link{justify-content:center}.stars{color:#9ca3af;display:inline-flex;font-size:.75rem}.stars .star:not(:first-child){margin-right:.25rem}.pagination{margin:0;--tblr-pagination-gap:.25rem;gap:var(--tblr-pagination-gap);line-height:var(--tblr-body-line-height);-webkit-user-select:none;-moz-user-select:none;user-select:none}.page-link{border-radius:var(--tblr-pagination-border-radius);min-width:2rem}.page-item:not(.active) .page-link:hover{background:var(--tblr-pagination-hover-bg)}.page-text{padding-left:.5rem;padding-right:.5rem}.page-item{text-align:center}.page-item.page-next,.page-item.page-prev{flex:0 0 50%;text-align:right}.page-item.page-next{margin-right:auto;text-align:left}.page-item-subtitle{color:var(--tblr-secondary);font-size:12px;margin-bottom:2px;text-transform:uppercase}.page-item.disabled .page-item-subtitle{color:var(--tblr-disabled-color)}.page-item-title{color:var(--tblr-body-color);font-size:1rem;font-weight:var(--tblr-font-weight-normal)}.page-link:hover .page-item-title{color:#066fd1}.page-item.disabled .page-item-title{color:var(--tblr-disabled-color)}.pagination-outline{--tblr-pagination-border-color:var(--tblr-border-color);--tblr-pagination-disabled-border-color:var(--tblr-border-color);--tblr-pagination-border-width:1px}.pagination-circle{--tblr-pagination-border-radius:var(--tblr-border-radius-pill)}@keyframes progress-indeterminate{0%{left:100%;right:-35%}60%,to{left:-90%;right:100%}}.progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:.5rem;position:relative;width:100%}.progress::-webkit-progress-bar{background:var(--tblr-progress-bg)}.progress::-webkit-progress-value{background-color:var(--tblr-primary)}.progress::-moz-progress-bar{background-color:var(--tblr-primary)}.progress::-ms-fill{background-color:var(--tblr-primary);border:none}.progress-sm{height:.25rem}.progress-bar{height:100%}.progress-bar-indeterminate:after,.progress-bar-indeterminate:before{background-color:inherit;bottom:0;content:"";position:absolute;right:0;top:0;will-change:left,right}.progress-bar-indeterminate:before{animation:progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite}.progress-separated .progress-bar{box-shadow:0 0 0 2px var(--tblr-card-bg,var(--tblr-bg-surface))}.progressbg{display:flex;padding:.25rem .5rem;position:relative}.progressbg-text{overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;z-index:1}.progressbg-progress{background:transparent;bottom:0;height:100%;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.progressbg-value{font-weight:var(--tblr-font-weight-medium);margin-right:auto;padding-right:2rem}.ribbon{--tblr-ribbon-margin:0.25rem;--tblr-ribbon-border-radius:var(--tblr-border-radius);align-items:center;background:var(--tblr-primary);border-color:var(--tblr-primary);border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);color:#fff;display:inline-flex;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);justify-content:center;left:calc(var(--tblr-ribbon-margin)*-1);line-height:1;min-height:2rem;min-width:2rem;padding:.25rem .75rem;position:absolute;text-align:center;text-transform:uppercase;top:.75rem;z-index:1}.ribbon:before{border:calc(var(--tblr-ribbon-margin)*.5) var(--tblr-border-style);border-color:inherit;border-left-color:transparent;border-top-color:transparent;bottom:100%;content:"";filter:brightness(70%);height:0;left:0;position:absolute;width:0}.ribbon.bg-blue{border-color:var(--tblr-blue)}.ribbon.bg-blue-lt{border-color:rgba(var(--tblr-blue-rgb),.1)!important}.ribbon.bg-azure{border-color:var(--tblr-azure)}.ribbon.bg-azure-lt{border-color:rgba(var(--tblr-azure-rgb),.1)!important}.ribbon.bg-indigo{border-color:var(--tblr-indigo)}.ribbon.bg-indigo-lt{border-color:rgba(var(--tblr-indigo-rgb),.1)!important}.ribbon.bg-purple{border-color:var(--tblr-purple)}.ribbon.bg-purple-lt{border-color:rgba(var(--tblr-purple-rgb),.1)!important}.ribbon.bg-pink{border-color:var(--tblr-pink)}.ribbon.bg-pink-lt{border-color:rgba(var(--tblr-pink-rgb),.1)!important}.ribbon.bg-red{border-color:var(--tblr-red)}.ribbon.bg-red-lt{border-color:rgba(var(--tblr-red-rgb),.1)!important}.ribbon.bg-orange{border-color:var(--tblr-orange)}.ribbon.bg-orange-lt{border-color:rgba(var(--tblr-orange-rgb),.1)!important}.ribbon.bg-yellow{border-color:var(--tblr-yellow)}.ribbon.bg-yellow-lt{border-color:rgba(var(--tblr-yellow-rgb),.1)!important}.ribbon.bg-lime{border-color:var(--tblr-lime)}.ribbon.bg-lime-lt{border-color:rgba(var(--tblr-lime-rgb),.1)!important}.ribbon.bg-green{border-color:var(--tblr-green)}.ribbon.bg-green-lt{border-color:rgba(var(--tblr-green-rgb),.1)!important}.ribbon.bg-teal{border-color:var(--tblr-teal)}.ribbon.bg-teal-lt{border-color:rgba(var(--tblr-teal-rgb),.1)!important}.ribbon.bg-cyan{border-color:var(--tblr-cyan)}.ribbon.bg-cyan-lt{border-color:rgba(var(--tblr-cyan-rgb),.1)!important}.ribbon .icon{font-size:1.25rem;height:1.25rem;width:1.25rem}.ribbon-top{border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);left:.75rem;padding:.5rem 0;top:calc(var(--tblr-ribbon-margin)*-1);width:2rem}.ribbon-top:before{border-color:inherit;border-right-color:transparent;border-top-color:transparent;bottom:auto;left:100%;top:0}.ribbon-top.ribbon-start{left:auto;right:.75rem}.ribbon-top.ribbon-start:before{left:100%;right:auto;top:0}.ribbon-start{border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);left:auto;right:calc(var(--tblr-ribbon-margin)*-1)}.ribbon-start:before{border-color:inherit;border-right-color:transparent;border-top-color:transparent;bottom:100%;right:0;top:auto}.ribbon-bottom{bottom:.75rem;top:auto}.ribbon-bookmark{border-radius:0 0 0 var(--tblr-ribbon-border-radius);padding-right:.25rem}.ribbon-bookmark:after{border:1rem var(--tblr-border-style);border-color:inherit;border-left-width:0;border-right-color:transparent;border-right-width:.5rem;content:"";display:block;height:0;left:100%;position:absolute;top:0;width:0}.ribbon-bookmark.ribbon-left{padding-left:.5rem}.ribbon-bookmark.ribbon-left:after{border-left-color:transparent;border-left-width:.5rem;border-right-width:0;left:auto;right:100%}.ribbon-bookmark.ribbon-top{border-radius:var(--tblr-ribbon-border-radius) 0 0 0;padding-bottom:.25rem;padding-left:0;padding-right:0}.ribbon-bookmark.ribbon-top:after{border-color:inherit;border-bottom-color:transparent;border-width:0 1rem .5rem;left:0;right:0;top:100%}.markdown{line-height:2}.markdown>:first-child{margin-top:0}.markdown>:last-child,.markdown>:last-child .highlight{margin-bottom:0}@media (min-width:768px){.markdown>.hr,.markdown>hr{margin-bottom:3em;margin-top:3em}}.markdown>.h1,.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{font-weight:var(--tblr-font-weight-bold)}.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-top:2.5rem}.markdown>table{font-size:var(--tblr-body-font-size)}.markdown>blockquote{font-size:1rem;margin:1.5rem 0;padding:.5rem 1.5rem}.markdown>img,.markdown>p>img{border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.markdown pre{max-height:20rem}.placeholder:not(.btn):not([class*=bg-]){background-color:currentColor!important}.placeholder:not(.avatar):not([class*=card-img-]){border-radius:var(--tblr-border-radius)}.nav-segmented{--tblr-nav-bg:var(--tblr-bg-surface-tertiary);--tblr-nav-padding:2px;--tblr-nav-height:2.5rem;--tblr-nav-gap:.25rem;--tblr-nav-active-bg:var(--tblr-bg-surface);--tblr-nav-font-size:inherit;--tblr-nav-radius:6px;--tblr-nav-link-disabled-color:var(--tblr-disabled-color);--tblr-nav-link-gap:.25rem;--tblr-nav-link-padding-x:.75rem;--tblr-nav-link-icon-size:1.25rem;background:var(--tblr-nav-bg);border-radius:calc(var(--tblr-nav-radius) + var(--tblr-nav-padding));box-shadow:inset 0 0 0 1px rgba(0,0,0,.04);display:inline-flex;flex-wrap:wrap;gap:var(--tblr-nav-gap);list-style:none;padding:var(--tblr-nav-padding)}.nav-segmented .nav-link{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--tblr-nav-radius);color:var(--tblr-secondary);cursor:pointer;display:inline-flex;flex-grow:1;font-size:var(--tblr-nav-font-size);gap:calc(.25rem + var(--tblr-nav-link-gap));height:calc(var(--tblr-nav-height) - var(--tblr-nav-padding)*2);justify-content:center;margin:0;min-width:calc(var(--tblr-nav-height) - var(--tblr-nav-padding)*2);padding:0 calc(var(--tblr-nav-link-padding-x) - 2px);text-align:center;text-decoration:none;transition:background-color .3s,color .3s;white-space:nowrap}.nav-segmented .nav-link.hover,.nav-segmented .nav-link:hover{background:rgba(0,0,0,.04);color:var(--tblr-body-color)}.nav-segmented .nav-link.disabled,.nav-segmented .nav-link:disabled{color:var(--tblr-nav-link-disabled-color);cursor:not-allowed}.nav-segmented .nav-link-input:checked+.nav-link,.nav-segmented .nav-link.active{background:var(--tblr-nav-active-bg);border-color:var(--tblr-border-color);color:var(--tblr-body-color)}.nav-segmented .nav-link-input{display:none}.nav-segmented .nav-link-icon{color:inherit;height:var(--tblr-nav-link-icon-size);margin:0 -.25rem;width:var(--tblr-nav-link-icon-size)}.nav-segmented-vertical{flex-direction:column}.nav-segmented-vertical .nav-link{justify-content:flex-start}.nav-sm{--tblr-nav-height:2rem;--tblr-nav-font-size:var(--tblr-font-size-h5);--tblr-nav-radius:4px;--tblr-nav-link-padding-x:.5rem;--tblr-nav-link-gap:.25rem;--tblr-nav-link-icon-size:1rem}.nav-lg{--tblr-nav-height:3rem;--tblr-nav-font-size:var(--tblr-font-size-h3);--tblr-nav-radius:8px;--tblr-nav-link-padding-x:1rem;--tblr-nav-link-gap:.5rem;--tblr-nav-link-icon-size:1.5rem}.steps{--tblr-steps-color:var(--tblr-primary);--tblr-steps-inactive-color:var(--tblr-border-color);--tblr-steps-dot-size:.5rem;--tblr-steps-border-width:2px;display:flex;flex-wrap:nowrap;list-style:none;margin:0;padding:0;width:100%}.steps-blue{--tblr-steps-color:var(--tblr-blue)}.steps-blue-lt{--tblr-steps-color:var(--tblr-blue-lt)}.steps-azure{--tblr-steps-color:var(--tblr-azure)}.steps-azure-lt{--tblr-steps-color:var(--tblr-azure-lt)}.steps-indigo{--tblr-steps-color:var(--tblr-indigo)}.steps-indigo-lt{--tblr-steps-color:var(--tblr-indigo-lt)}.steps-purple{--tblr-steps-color:var(--tblr-purple)}.steps-purple-lt{--tblr-steps-color:var(--tblr-purple-lt)}.steps-pink{--tblr-steps-color:var(--tblr-pink)}.steps-pink-lt{--tblr-steps-color:var(--tblr-pink-lt)}.steps-red{--tblr-steps-color:var(--tblr-red)}.steps-red-lt{--tblr-steps-color:var(--tblr-red-lt)}.steps-orange{--tblr-steps-color:var(--tblr-orange)}.steps-orange-lt{--tblr-steps-color:var(--tblr-orange-lt)}.steps-yellow{--tblr-steps-color:var(--tblr-yellow)}.steps-yellow-lt{--tblr-steps-color:var(--tblr-yellow-lt)}.steps-lime{--tblr-steps-color:var(--tblr-lime)}.steps-lime-lt{--tblr-steps-color:var(--tblr-lime-lt)}.steps-green{--tblr-steps-color:var(--tblr-green)}.steps-green-lt{--tblr-steps-color:var(--tblr-green-lt)}.steps-teal{--tblr-steps-color:var(--tblr-teal)}.steps-teal-lt{--tblr-steps-color:var(--tblr-teal-lt)}.steps-cyan{--tblr-steps-color:var(--tblr-cyan)}.steps-cyan-lt{--tblr-steps-color:var(--tblr-cyan-lt)}.step-item{color:inherit;cursor:default;flex:1 1 0;margin-top:0;min-height:1rem;padding-top:calc(var(--tblr-steps-dot-size));position:relative;text-align:center}a.step-item{cursor:pointer}a.step-item:hover{color:inherit}.step-item:after,.step-item:before{background:var(--tblr-steps-color)}.step-item:not(:last-child):after{content:"";position:absolute;right:50%;transform:translateY(-50%);width:100%}.step-item:after{height:var(--tblr-steps-border-width);top:calc(var(--tblr-steps-dot-size)*.5)}.step-item:before{align-items:center;border-radius:100rem;box-sizing:content-box;color:var(--tblr-white);content:"";display:flex;height:var(--tblr-steps-dot-size);justify-content:center;position:absolute;right:50%;top:0;transform:translateX(50%);width:var(--tblr-steps-dot-size);z-index:1}.step-item.active{font-weight:var(--tblr-font-weight-bold)}.step-item.active:after{background:var(--tblr-steps-inactive-color)}.step-item.active~.step-item{color:var(--tblr-disabled-color)}.step-item.active~.step-item:after,.step-item.active~.step-item:before{background:var(--tblr-steps-inactive-color)}.steps-counter{--tblr-steps-dot-size:1.5rem;counter-reset:steps}.steps-counter .step-item{counter-increment:steps}.steps-counter .step-item:before{content:counter(steps)}.steps-vertical{--tblr-steps-dot-offset:6px;flex-direction:column}.steps-vertical.steps-counter{--tblr-steps-dot-offset:-2px}.steps-vertical .step-item{min-height:auto;padding-right:calc(var(--tblr-steps-dot-size) + 1rem);padding-top:0;text-align:right}.steps-vertical .step-item:not(:first-child){margin-top:1rem}.steps-vertical .step-item:before{right:0;top:var(--tblr-steps-dot-offset);transform:translate(0)}.steps-vertical .step-item:not(:last-child):after{content:"";height:calc(100% + 1rem);position:absolute;right:calc(var(--tblr-steps-dot-size)*.5);top:var(--tblr-steps-dot-offset);transform:translateX(50%);width:var(--tblr-steps-border-width)}@keyframes status-pulsate-main{40%{transform:scale(1.25)}60%{transform:scale(1.25)}}@keyframes status-pulsate-secondary{10%{transform:scale(1)}30%{transform:scale(3)}80%{transform:scale(3)}to{transform:scale(1)}}@keyframes status-pulsate-tertiary{25%{transform:scale(1)}80%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(3)}}.status{--tblr-status-height:1.5rem;--tblr-status-color:#6b7280;--tblr-status-color-rgb:107,114,128;align-items:center;background:rgba(var(--tblr-status-color-rgb),.1);border-radius:100rem;color:var(--tblr-status-color);display:inline-flex;font-size:.875rem;font-weight:var(--tblr-font-weight-medium);gap:.5rem;height:var(--tblr-status-height);letter-spacing:normal;line-height:1;margin:0;padding:.25rem .75rem;text-transform:none}.status .status-dot{background:var(--tblr-status-color)}.status .icon{font-size:1.25rem}.status-lite{background:transparent!important;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;color:var(--tblr-body-color)!important}.status-primary{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-secondary{--tblr-status-color:#6b7280;--tblr-status-color-rgb:107,114,128}.status-success{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-info{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-warning{--tblr-status-color:#f59f00;--tblr-status-color-rgb:245,159,0}.status-danger{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-light{--tblr-status-color:#f9fafb;--tblr-status-color-rgb:249,250,251}.status-dark{--tblr-status-color:#1f2937;--tblr-status-color-rgb:31,41,55}.status-muted{--tblr-status-color:#6b7280;--tblr-status-color-rgb:107,114,128}.status-blue{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-azure{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-indigo{--tblr-status-color:#4263eb;--tblr-status-color-rgb:66,99,235}.status-purple{--tblr-status-color:#ae3ec9;--tblr-status-color-rgb:174,62,201}.status-pink{--tblr-status-color:#d6336c;--tblr-status-color-rgb:214,51,108}.status-red{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-orange{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-yellow{--tblr-status-color:#f59f00;--tblr-status-color-rgb:245,159,0}.status-lime{--tblr-status-color:#74b816;--tblr-status-color-rgb:116,184,22}.status-green{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-teal{--tblr-status-color:#0ca678;--tblr-status-color-rgb:12,166,120}.status-cyan{--tblr-status-color:#17a2b8;--tblr-status-color-rgb:23,162,184}.status-dot{--tblr-status-dot-color:var(--tblr-status-color,#6b7280);--tblr-status-size:0.5rem;background:var(--tblr-status-dot-color);border-radius:100rem;display:inline-block;height:var(--tblr-status-size);position:relative;width:var(--tblr-status-size)}.status-dot-animated:before{animation:status-pulsate-tertiary 1s linear 2s infinite backwards;background:inherit;border-radius:inherit;content:"";inset:0;opacity:.6;position:absolute;z-index:0}.status-indicator{--tblr-status-indicator-size:2.5rem;--tblr-status-indicator-color:var(--tblr-status-color,#6b7280);display:block;height:var(--tblr-status-indicator-size);position:relative;width:var(--tblr-status-indicator-size)}.status-indicator-circle{--tblr-status-circle-size:.75rem;background:var(--tblr-status-color);border-radius:100rem;height:var(--tblr-status-circle-size);margin:calc(var(--tblr-status-circle-size)/-2) calc(var(--tblr-status-circle-size)/-2) 0 0;position:absolute;right:50%;top:50%;width:var(--tblr-status-circle-size)}.status-indicator-circle:first-child{z-index:3}.status-indicator-circle:nth-child(2){opacity:.1;z-index:2}.status-indicator-circle:nth-child(3){opacity:.3;z-index:1}.status-indicator-animated .status-indicator-circle:first-child{animation:status-pulsate-main 2s linear 1s infinite backwards}.status-indicator-animated .status-indicator-circle:nth-child(2){animation:status-pulsate-secondary 2s linear 1s infinite backwards}.status-indicator-animated .status-indicator-circle:nth-child(3){animation:status-pulsate-tertiary 2s linear 1s infinite backwards}.switch-icon{background:transparent;border:0;cursor:pointer;display:inline-block;height:1.25rem;line-height:1;padding:0;position:relative;vertical-align:bottom;width:1.25rem}.switch-icon.disabled{opacity:.4;pointer-events:none}.switch-icon:focus{outline:none}.switch-icon .switch-icon-a,.switch-icon .switch-icon-b,.switch-icon svg{display:block;height:100%;width:100%}.switch-icon .switch-icon-a{opacity:1}.switch-icon .switch-icon-b{opacity:0;position:absolute;right:0;top:0}.switch-icon.active .switch-icon-a{opacity:0}.switch-icon.active .switch-icon-b{opacity:1}.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:opacity .5s}@media (prefers-reduced-motion:reduce){.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:opacity .5s,transform 0s .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-b{transform:scale(1.5)}.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:opacity 0s,transform .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:none}}.switch-icon-scale.active .switch-icon-b{transform:scale(1)}.switch-icon-flip{perspective:10em}.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{backface-visibility:hidden;transform-style:preserve-3d;transition:opacity 0s .2s,transform .4s ease-in-out}@media (prefers-reduced-motion:reduce){.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{transition:none}}.switch-icon-flip .switch-icon-a{opacity:1;transform:rotateY(0deg)}.switch-icon-flip .switch-icon-b{opacity:1;transform:rotateY(180deg)}.switch-icon-flip.active .switch-icon-a{opacity:1;transform:rotateY(-180deg)}.switch-icon-flip.active .switch-icon-b{opacity:1;transform:rotateY(0deg)}.switch-icon-slide-down,.switch-icon-slide-end,.switch-icon-slide-left,.switch-icon-slide-right,.switch-icon-slide-start,.switch-icon-slide-up{overflow:hidden}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-start .switch-icon-a,.switch-icon-slide-start .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:opacity .3s,transform .3s}@media (prefers-reduced-motion:reduce){.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-start .switch-icon-a,.switch-icon-slide-start .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:none}}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-start .switch-icon-a,.switch-icon-slide-up .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-start .switch-icon-b,.switch-icon-slide-up .switch-icon-b{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-a,.switch-icon-slide-end.active .switch-icon-a,.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a,.switch-icon-slide-start.active .switch-icon-a,.switch-icon-slide-up.active .switch-icon-a{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-b,.switch-icon-slide-end.active .switch-icon-b,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b,.switch-icon-slide-start.active .switch-icon-b,.switch-icon-slide-up.active .switch-icon-b{transform:translateY(0)}.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-start .switch-icon-a{transform:translateX(0)}.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-start .switch-icon-b{transform:translateX(-100%)}.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-start.active .switch-icon-a{transform:translateX(100%)}.switch-icon-slide-end .switch-icon-a,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-start.active .switch-icon-b{transform:translateX(0)}.switch-icon-slide-end .switch-icon-b,.switch-icon-slide-right .switch-icon-b{transform:translateX(100%)}.switch-icon-slide-end.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a{transform:translateX(-100%)}.switch-icon-slide-end.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b{transform:translateX(0)}.switch-icon-slide-down .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-a{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-b{transform:translateY(0)}.markdown>table thead th,.table thead th{background:var(--tblr-bg-surface-tertiary);color:var(--tblr-secondary);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;padding-bottom:.5rem;padding-top:.5rem;text-transform:uppercase;white-space:nowrap}@media print{.markdown>table thead th,.table thead th{background:transparent}}.table-responsive .markdown>table,.table-responsive .table{margin-bottom:0}.table-responsive+.card-footer{border-top:0}.table-transparent thead th{background:transparent}.table-nowrap>:not(caption)>*>*{white-space:nowrap}.table-vcenter>:not(caption)>*>*{vertical-align:middle}.table-center>:not(caption)>*>*{text-align:center}.td-truncate{max-width:1px;width:100%}.table-mobile{display:block}.table-mobile thead{display:none}.table-mobile tbody,.table-mobile tr{display:flex;flex-direction:column}.table-mobile td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile .btn{display:block}@media (max-width:575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-sm td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media (max-width:767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-md td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media (max-width:991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-lg td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media (max-width:1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-xl td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media (max-width:1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-xxl td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}.table-sort{background:inherit;border:0;color:inherit;display:block;font:inherit;letter-spacing:inherit;margin:-.5rem -.75rem;padding:.5rem .75rem;text-align:inherit;text-transform:inherit;transition:color .3s;width:100%}@media (prefers-reduced-motion:reduce){.table-sort{transition:none}}.table-sort.asc,.table-sort.desc,.table-sort:hover{color:var(--tblr-body-color)}.table-sort:after{background:currentColor;content:"";display:inline-flex;height:1rem;margin-right:.25rem;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m5 7 3-3 3 3M5 10l3 3 3-3'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m5 7 3-3 3 3M5 10l3 3 3-3'/%3E%3C/svg%3E");vertical-align:bottom;width:1rem}.table-sort.asc:after{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 10 3-3 3 3'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 10 3-3 3 3'/%3E%3C/svg%3E")}.table-sort.desc:after{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 7 3 3 3-3'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 7 3 3 3-3'/%3E%3C/svg%3E")}.table-borderless thead th{background:transparent}.table-selectable tbody tr .on-checked{display:none}.table-selectable tbody tr .on-unchecked{display:initial}.table-selectable tbody tr:has(.table-selectable-check:checked){background-color:var(--tblr-active-bg)}.table-selectable tbody tr:has(.table-selectable-check:checked) .on-checked{display:initial}.table-selectable tbody tr:has(.table-selectable-check:checked) .on-unchecked{display:none}.tag{--tblr-tag-height:1.5rem;align-items:center;background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-shadow-input);display:inline-flex;gap:.5rem;height:var(--tblr-tag-height);padding:0 .5rem}.tag .btn-close{font-size:.5rem;height:1rem;margin-left:-.25rem;margin-right:-.125rem;padding:0;width:1rem}.tag-badge{--tblr-badge-font-size:0.625rem;--tblr-badge-padding-x:.25rem;--tblr-badge-padding-y:.125rem;margin-left:-.25rem}.tag-avatar,.tag-check,.tag-flag,.tag-icon,.tag-payment{margin-right:-.25rem}.tag-icon{color:var(--tblr-secondary);margin-left:-.125rem}.tag-check,.tag-icon{height:1rem;width:1rem}.tag-check{background-size:1rem}.tags-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.toast{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:0 2px 4px 0 rgba(31,41,55,.04)}.toast .toast-header{-webkit-user-select:none;-moz-user-select:none;user-select:none}.toast button[data-bs-dismiss=toast]{outline:none}.toast-primary{--tblr-toast-color:#066fd1}.toast-secondary{--tblr-toast-color:#6b7280}.toast-success{--tblr-toast-color:#2fb344}.toast-info{--tblr-toast-color:#4299e1}.toast-warning{--tblr-toast-color:#f59f00}.toast-danger{--tblr-toast-color:#d63939}.toast-light{--tblr-toast-color:#f9fafb}.toast-dark{--tblr-toast-color:#1f2937}.toast-muted{--tblr-toast-color:#6b7280}.toast-blue{--tblr-toast-color:#066fd1}.toast-azure{--tblr-toast-color:#4299e1}.toast-indigo{--tblr-toast-color:#4263eb}.toast-purple{--tblr-toast-color:#ae3ec9}.toast-pink{--tblr-toast-color:#d6336c}.toast-red{--tblr-toast-color:#d63939}.toast-orange{--tblr-toast-color:#f76707}.toast-yellow{--tblr-toast-color:#f59f00}.toast-lime{--tblr-toast-color:#74b816}.toast-green{--tblr-toast-color:#2fb344}.toast-teal{--tblr-toast-color:#0ca678}.toast-cyan{--tblr-toast-color:#17a2b8}.toolbar{display:flex;flex-shrink:0;flex-wrap:nowrap;margin:0 -.5rem}.toolbar>*{margin:0 .5rem}.tracking{--tblr-tracking-height:1.5rem;--tblr-tracking-gap-width:0.125rem;--tblr-tracking-block-border-radius:var(--tblr-border-radius);display:flex;gap:var(--tblr-tracking-gap-width)}.tracking-squares{--tblr-tracking-block-border-radius:var(--tblr-border-radius-sm)}.tracking-squares .tracking-block{height:auto}.tracking-squares .tracking-block:before{content:"";display:block;padding-top:100%}.tracking-block{background:var(--tblr-border-color);border-radius:var(--tblr-tracking-block-border-radius);flex:1;height:var(--tblr-tracking-height);min-width:.25rem}.timeline{--tblr-timeline-icon-size:2.5rem;list-style:none;padding:0}.timeline,.timeline-event{position:relative}.timeline-event:not(:last-child){margin-bottom:var(--tblr-page-padding)}.timeline-event:not(:last-child):before{background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius);bottom:calc(var(--tblr-page-padding)*-1);content:"";position:absolute;right:calc(var(--tblr-timeline-icon-size)/2);top:var(--tblr-timeline-icon-size);width:var(--tblr-border-width)}.timeline-event-icon{align-items:center;background:var(--tblr-bg-surface-secondary);border-radius:var(--tblr-border-radius);color:var(--tblr-secondary);display:flex;height:var(--tblr-timeline-icon-size,2.5rem);justify-content:center;position:absolute;width:var(--tblr-timeline-icon-size,2.5rem);z-index:5}.timeline-event-card{margin-right:calc(var(--tblr-timeline-icon-size, 2.5rem) + var(--tblr-page-padding))}.timeline-simple .timeline-event-icon{display:none}.timeline-simple .timeline-event-card{margin-right:0}.hr-text{align-items:center;color:var(--tblr-secondary);display:flex;font-size:.75rem;font-weight:var(--tblr-font-weight-medium);height:1px;letter-spacing:.04em;line-height:1rem;margin:2rem 0;text-transform:uppercase}.hr-text:after,.hr-text:before{background-color:var(--tblr-border-color);flex:1 1 auto;height:1px}.hr-text:before{content:"";margin-left:.5rem}.hr-text:after{content:"";margin-right:.5rem}.hr-text>:first-child{color:var(--tblr-secondary);padding-left:.5rem;padding-right:0}.hr-text.hr-text-left:before,.hr-text.hr-text-start:before{content:none}.hr-text.hr-text-left>:first-child,.hr-text.hr-text-start>:first-child{padding-left:.5rem;padding-right:.5rem}.hr-text.hr-text-end:before,.hr-text.hr-text-right:before{content:""}.hr-text.hr-text-end:after,.hr-text.hr-text-right:after{content:none}.hr-text.hr-text-end>:first-child,.hr-text.hr-text-right>:first-child{padding-left:0;padding-right:.5rem}.card>.hr-text{margin:0}.hr-text-spaceless{margin:-.5rem 0}.lead{color:var(--tblr-secondary);font-size:inherit}a{-webkit-text-decoration-skip:ink;color:color-mix(in srgb,transparent,var(--tblr-link-color) var(--tblr-link-opacity,100%));text-decoration-skip-ink:auto}a:hover{color:color-mix(in srgb,transparent,var(--tblr-link-hover-color) var(--tblr-link-opacity,100%))}.h1 a,.h1 a:hover,.h2 a,.h2 a:hover,.h3 a,.h3 a:hover,.h4 a,.h4 a:hover,.h5 a,.h5 a:hover,.h6 a,.h6 a:hover,h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{color:inherit}.h1,h1{font-size:var(--tblr-font-size-h1);line-height:var(--tblr-line-height-h1)}.h2,h2{font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2)}.h3,h3{font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-h3)}.h4,h4{font-size:var(--tblr-font-size-h4);line-height:var(--tblr-line-height-h4)}.h5,h5{font-size:var(--tblr-font-size-h5);line-height:var(--tblr-line-height-h5)}.h6,h6{font-size:var(--tblr-font-size-h6);line-height:var(--tblr-line-height-h6)}.fs-base{font-size:var(--tblr-body-font-size)}.strong,b,strong{font-weight:var(--tblr-font-weight-bold)}blockquote{border-right:2px var(--tblr-border-style) var(--tblr-border-color);padding:1rem}blockquote p{margin-bottom:1rem}blockquote cite{display:block;text-align:left}blockquote cite:before{content:"— "}ol,ul{padding-right:1.5rem}.hr,hr{margin:2rem 0}dl dd:last-child{margin-bottom:0}pre{--tblr-scrollbar-color:var(--tblr-light);background:var(--tblr-bg-surface-dark);border-radius:var(--tblr-border-radius);color:var(--tblr-light);line-height:1.4285714286;padding:1rem;scrollbar-color:color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent) transparent}pre::-webkit-scrollbar{height:1rem;-webkit-transition:background .3s;transition:background .3s;width:1rem}@media (prefers-reduced-motion:reduce){pre::-webkit-scrollbar{-webkit-transition:none;transition:none}}pre::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 20%,transparent)}pre::-webkit-scrollbar-track{background:transparent}pre:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem color-mix(in srgb,var(--tblr-scrollbar-color,var(--tblr-body-color)) 40%,transparent)}pre::-webkit-scrollbar-corner{background:transparent}pre code{background:transparent;padding:0}code{background:var(--tblr-code-bg);border-radius:var(--tblr-border-radius);padding:2px 4px}abbr{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}.kbd,kbd{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-sizing:border-box;display:inline-block;font-size:var(--tblr-font-size-h5);font-weight:var(--tblr-font-weight-medium);line-height:1;vertical-align:baseline}.kbd,img,kbd{max-width:100%}img{height:auto}.list-unstyled{margin-right:0}::-moz-selection{background-color:color-mix(in srgb,var(--tblr-primary) 10%,transparent)}.text-selected,::selection{background-color:color-mix(in srgb,var(--tblr-primary) 10%,transparent)}.text-selected{display:inline-block}[class*=" link-"].disabled,[class^=link-].disabled{color:var(--tblr-disabled-color)!important;pointer-events:none}a:hover:has(.icon){text-decoration:none}.link-hoverable{border-radius:var(--tblr-border-radius);transition:background-color .15s ease-in-out}.link-hoverable:hover{background:color-mix(in srgb,var(--tblr-secondary) 4%,transparent);color:var(--tblr-primary);text-decoration:none}.subheader{color:var(--tblr-secondary);font-size:.75rem;letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.mention,.subheader{font-weight:var(--tblr-font-weight-medium)}.mention{background:var(--tblr-bg-surface-tertiary);border-radius:var(--tblr-border-radius-pill);box-shadow:var(--tblr-shadow-border);color:var(--tblr-body-color);display:inline-block;font-size:.8571428571em;line-height:1.3333333333em;padding:.1666666667em .6666666667em}a.mention{cursor:pointer}a.mention.hover,a.mention:hover{background:var(--tblr-bg-surface-secondary);text-decoration:underline}.mention-app,.mention-avatar,.mention-color{background:no-repeat 50%/cover;border-radius:var(--tblr-border-radius-pill);box-shadow:var(--tblr-shadow-border);display:inline-flex;height:1.1666666667em;margin:-.1666666667em -.3333333333em 0 .3333333333em;text-align:center;vertical-align:middle;width:1.1666666667em}.mention-app{background:none;border-radius:0;box-shadow:none}.mention-count{color:var(--tblr-secondary);margin-right:.6666666667em}.text-incorrect{background:color-mix(in srgb,var(--tblr-red) 4%,transparent);text-decoration:underline;text-decoration-color:var(--tblr-red);text-decoration-thickness:1px}.text-correct{background:color-mix(in srgb,var(--tblr-green) 4%,transparent);text-decoration:underline;text-decoration-color:var(--tblr-green);text-decoration-thickness:1px}.steps{--tblr-steps-padding:2rem;--tblr-steps-item-size:1.5rem;border-right:1px solid var(--tblr-border-color);counter-reset:step;margin-bottom:2rem;margin-right:1rem;padding-right:var(--tblr-steps-padding)}.steps .h3,.steps h3{counter-increment:step}.steps .h3:not(:first-child),.steps h3:not(:first-child){margin-top:2.5rem!important}.steps .h3:before,.steps h3:before{background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:var(--tblr-body-color);content:counter(step);display:inline-block;font-size:var(--tblr-font-size-h4);font-weight:var(--tblr-font-weight-bold);height:var(--tblr-steps-item-size);line-height:calc(var(--tblr-steps-item-size) - 2px);margin-right:calc(var(--tblr-steps-padding)*-1 - var(--tblr-steps-item-size)/2);margin-top:1px;position:absolute;text-align:center;width:var(--tblr-steps-item-size)}.steps>:last-child{margin-bottom:0}.callout{background:var(--tblr-primary-lt);border:1px solid var(--tblr-primary-200);border-radius:var(--tblr-border-radius);margin-bottom:1.5rem;padding:.5rem 1rem}.callout>:last-child{margin-bottom:0}.chart{display:block;min-height:10rem}.chart text{font-family:inherit}.chart-sm{height:2.5rem}.chart-lg{height:15rem}.chart-square{height:5.75rem}.chart-sparkline{height:2.5rem;line-height:1;min-height:0!important;position:relative;width:4rem}.chart-sparkline-sm{height:1.5rem}.chart-sparkline-square{width:2.5rem}.chart-sparkline-wide{width:6rem}.chart-sparkline-label{align-items:center;bottom:0;display:flex;font-size:.625rem;justify-content:center;left:0;position:absolute;right:0;top:0}.chart-sparkline-label .icon{font-size:1rem;height:1rem;width:1rem}.offcanvas-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.offcanvas-footer{padding:1.5rem}.offcanvas-title{font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem}.offcanvas-narrow{width:20rem}.chat-bubbles{display:flex;flex-direction:column;gap:1rem}.chat-bubble{background:var(--tblr-bg-surface-secondary);border-radius:var(--tblr-border-radius-lg);padding:1rem;position:relative}.chat-bubble-me{background-color:var(--tblr-primary-lt);box-shadow:none}.chat-bubble-title{margin-bottom:.25rem}.chat-bubble-author{font-weight:600}.chat-bubble-date{color:var(--tblr-secondary)}.chat-bubble-body>:last-child{margin-bottom:0}.signature{--tblr-signature-padding:var(--tblr-spacer-1);--tblr-signature-border-radius:var(--tblr-border-radius);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);padding:var(--tblr-signature-padding)}.signature-canvas{border:var(--tblr-border-width) dashed var(--tblr-border-color);border-radius:calc(var(--tblr-signature-border-radius) - var(--tblr-signature-padding));cursor:crosshair;display:block;width:100%}.clearfix:after{clear:both;content:"";display:block}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.16;width:var(--tblr-border-width)}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;width:1px!important;clip:rect(0,0,0,0)!important;border:0!important;white-space:nowrap!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.visually-hidden *,.visually-hidden-focusable:not(:focus):not(:focus-within) *{overflow:hidden!important}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media (min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{bottom:0;position:sticky;z-index:1020}}@media (min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{bottom:0;position:sticky;z-index:1020}}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--tblr-aspect-ratio)}.ratio>*{height:100%;position:absolute;right:0;top:0;width:100%}.ratio-1x1{--tblr-aspect-ratio:100%}.ratio-2x1{--tblr-aspect-ratio:50%}.ratio-1x2{--tblr-aspect-ratio:200%}.ratio-3x1{--tblr-aspect-ratio:33.3333333333%}.ratio-1x3{--tblr-aspect-ratio:300%}.ratio-4x1{--tblr-aspect-ratio:25%}.ratio-1x4{--tblr-aspect-ratio:400%}.ratio-4x3{--tblr-aspect-ratio:75%}.ratio-3x4{--tblr-aspect-ratio:133.3333333333%}.ratio-16x9{--tblr-aspect-ratio:56.25%}.ratio-9x16{--tblr-aspect-ratio:177.7777777778%}.ratio-21x9{--tblr-aspect-ratio:42.8571428571%}.ratio-9x21{--tblr-aspect-ratio:233.3333333333%}.focus-ring:focus{box-shadow:var(--tblr-focus-ring-x,0) var(--tblr-focus-ring-y,0) var(--tblr-focus-ring-blur,0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color);outline:0}.bg-white-overlay{background-color:rgba(249,250,251,.24);color:#fff}.bg-dark-overlay{background-color:rgba(31,41,55,.24);color:#fff}.bg-cover{background-position:50%;background-repeat:no-repeat;background-size:cover}.bg-primary{background-color:color-mix(in srgb,var(--tblr-primary) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-primary-lt{background-color:color-mix(in srgb,var(--tblr-primary-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-primary) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-primary{border-color:color-mix(in srgb,var(--tblr-primary) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-primary{--tblr-gradient-from:var(--tblr-primary)}.bg-gradient-to-primary{--tblr-gradient-to:var(--tblr-primary)}.bg-gradient-via-primary{--tblr-gradient-via:var(--tblr-primary);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-primary{background-color:RGBA(var(--tblr-primary-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-primary{color:color-mix(in srgb,var(--tblr-primary) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-primary) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-primary:focus,.link-primary:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.bg-secondary{background-color:color-mix(in srgb,var(--tblr-secondary) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-secondary-lt{background-color:color-mix(in srgb,var(--tblr-secondary-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-secondary) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-secondary{border-color:color-mix(in srgb,var(--tblr-secondary) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-secondary{--tblr-gradient-from:var(--tblr-secondary)}.bg-gradient-to-secondary{--tblr-gradient-to:var(--tblr-secondary)}.bg-gradient-via-secondary{--tblr-gradient-via:var(--tblr-secondary);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-secondary{background-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-secondary{color:color-mix(in srgb,var(--tblr-secondary) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-secondary) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,91,102,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(86,91,102,var(--tblr-link-underline-opacity,1))!important}.bg-success{background-color:color-mix(in srgb,var(--tblr-success) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-success-lt{background-color:color-mix(in srgb,var(--tblr-success-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-success) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-success{border-color:color-mix(in srgb,var(--tblr-success) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-success{--tblr-gradient-from:var(--tblr-success)}.bg-gradient-to-success{--tblr-gradient-to:var(--tblr-success)}.bg-gradient-via-success{--tblr-gradient-via:var(--tblr-success);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-success{background-color:RGBA(var(--tblr-success-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-success{color:color-mix(in srgb,var(--tblr-success) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-success) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-success:focus,.link-success:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.bg-info{background-color:color-mix(in srgb,var(--tblr-info) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-info-lt{background-color:color-mix(in srgb,var(--tblr-info-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-info) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-info{border-color:color-mix(in srgb,var(--tblr-info) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-info{--tblr-gradient-from:var(--tblr-info)}.bg-gradient-to-info{--tblr-gradient-to:var(--tblr-info)}.bg-gradient-via-info{--tblr-gradient-via:var(--tblr-info);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-info{background-color:RGBA(var(--tblr-info-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-info{color:color-mix(in srgb,var(--tblr-info) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-info) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-info:focus,.link-info:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.bg-warning{background-color:color-mix(in srgb,var(--tblr-warning) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-warning-lt{background-color:color-mix(in srgb,var(--tblr-warning-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-warning) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-warning{border-color:color-mix(in srgb,var(--tblr-warning) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-warning{--tblr-gradient-from:var(--tblr-warning)}.bg-gradient-to-warning{--tblr-gradient-to:var(--tblr-warning)}.bg-gradient-via-warning{--tblr-gradient-via:var(--tblr-warning);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-warning{background-color:RGBA(var(--tblr-warning-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-warning{color:color-mix(in srgb,var(--tblr-warning) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-warning) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-warning:focus,.link-warning:hover{color:RGBA(196,127,0,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important}.bg-danger{background-color:color-mix(in srgb,var(--tblr-danger) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-danger-lt{background-color:color-mix(in srgb,var(--tblr-danger-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-danger) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-danger{border-color:color-mix(in srgb,var(--tblr-danger) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-danger{--tblr-gradient-from:var(--tblr-danger)}.bg-gradient-to-danger{--tblr-gradient-to:var(--tblr-danger)}.bg-gradient-via-danger{--tblr-gradient-via:var(--tblr-danger);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-danger{background-color:RGBA(var(--tblr-danger-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-danger{color:color-mix(in srgb,var(--tblr-danger) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-danger) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-danger:focus,.link-danger:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.bg-light{background-color:color-mix(in srgb,var(--tblr-light) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-light-lt{background-color:color-mix(in srgb,var(--tblr-light-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-light) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-light{border-color:color-mix(in srgb,var(--tblr-light) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-light{--tblr-gradient-from:var(--tblr-light)}.bg-gradient-to-light{--tblr-gradient-to:var(--tblr-light)}.bg-gradient-via-light{--tblr-gradient-via:var(--tblr-light);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-light{background-color:RGBA(var(--tblr-light-rgb),var(--tblr-bg-opacity,1))!important;color:#1f2937!important}.link-light{color:color-mix(in srgb,var(--tblr-light) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-light) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-light:focus,.link-light:hover{color:RGBA(250,251,252,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(250,251,252,var(--tblr-link-underline-opacity,1))!important}.bg-dark{background-color:color-mix(in srgb,var(--tblr-dark) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-dark-lt{background-color:color-mix(in srgb,var(--tblr-dark-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-dark) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-dark{border-color:color-mix(in srgb,var(--tblr-dark) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-dark{--tblr-gradient-from:var(--tblr-dark)}.bg-gradient-to-dark{--tblr-gradient-to:var(--tblr-dark)}.bg-gradient-via-dark{--tblr-gradient-via:var(--tblr-dark);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-dark{background-color:RGBA(var(--tblr-dark-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-dark{color:color-mix(in srgb,var(--tblr-dark) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-dark) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-dark:focus,.link-dark:hover{color:RGBA(25,33,44,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(25,33,44,var(--tblr-link-underline-opacity,1))!important}.bg-muted{background-color:color-mix(in srgb,var(--tblr-muted) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-muted-lt{background-color:color-mix(in srgb,var(--tblr-muted-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-muted) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-muted{border-color:color-mix(in srgb,var(--tblr-muted) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-muted{--tblr-gradient-from:var(--tblr-muted)}.bg-gradient-to-muted{--tblr-gradient-to:var(--tblr-muted)}.bg-gradient-via-muted{--tblr-gradient-via:var(--tblr-muted);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-muted{background-color:RGBA(var(--tblr-muted-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-muted{color:color-mix(in srgb,var(--tblr-muted) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-muted) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-muted:focus,.link-muted:hover{color:RGBA(86,91,102,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(86,91,102,var(--tblr-link-underline-opacity,1))!important}.bg-blue{background-color:color-mix(in srgb,var(--tblr-blue) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-blue-lt{background-color:color-mix(in srgb,var(--tblr-blue-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-blue) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-blue{border-color:color-mix(in srgb,var(--tblr-blue) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-blue{--tblr-gradient-from:var(--tblr-blue)}.bg-gradient-to-blue{--tblr-gradient-to:var(--tblr-blue)}.bg-gradient-via-blue{--tblr-gradient-via:var(--tblr-blue);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-blue{background-color:RGBA(var(--tblr-blue-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-blue{color:color-mix(in srgb,var(--tblr-blue) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-blue) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-blue:focus,.link-blue:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.bg-azure{background-color:color-mix(in srgb,var(--tblr-azure) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-azure-lt{background-color:color-mix(in srgb,var(--tblr-azure-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-azure) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-azure{border-color:color-mix(in srgb,var(--tblr-azure) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-azure{--tblr-gradient-from:var(--tblr-azure)}.bg-gradient-to-azure{--tblr-gradient-to:var(--tblr-azure)}.bg-gradient-via-azure{--tblr-gradient-via:var(--tblr-azure);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-azure{background-color:RGBA(var(--tblr-azure-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-azure{color:color-mix(in srgb,var(--tblr-azure) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-azure) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-azure:focus,.link-azure:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.bg-indigo{background-color:color-mix(in srgb,var(--tblr-indigo) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-indigo-lt{background-color:color-mix(in srgb,var(--tblr-indigo-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-indigo) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-indigo{border-color:color-mix(in srgb,var(--tblr-indigo) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-indigo{--tblr-gradient-from:var(--tblr-indigo)}.bg-gradient-to-indigo{--tblr-gradient-to:var(--tblr-indigo)}.bg-gradient-via-indigo{--tblr-gradient-via:var(--tblr-indigo);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-indigo{background-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-indigo{color:color-mix(in srgb,var(--tblr-indigo) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-indigo) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-indigo:focus,.link-indigo:hover{color:RGBA(53,79,188,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))!important}.bg-purple{background-color:color-mix(in srgb,var(--tblr-purple) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-purple-lt{background-color:color-mix(in srgb,var(--tblr-purple-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-purple) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-purple{border-color:color-mix(in srgb,var(--tblr-purple) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-purple{--tblr-gradient-from:var(--tblr-purple)}.bg-gradient-to-purple{--tblr-gradient-to:var(--tblr-purple)}.bg-gradient-via-purple{--tblr-gradient-via:var(--tblr-purple);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-purple{background-color:RGBA(var(--tblr-purple-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-purple{color:color-mix(in srgb,var(--tblr-purple) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-purple) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-purple:focus,.link-purple:hover{color:RGBA(139,50,161,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))!important}.bg-pink{background-color:color-mix(in srgb,var(--tblr-pink) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-pink-lt{background-color:color-mix(in srgb,var(--tblr-pink-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-pink) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-pink{border-color:color-mix(in srgb,var(--tblr-pink) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-pink{--tblr-gradient-from:var(--tblr-pink)}.bg-gradient-to-pink{--tblr-gradient-to:var(--tblr-pink)}.bg-gradient-via-pink{--tblr-gradient-via:var(--tblr-pink);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-pink{background-color:RGBA(var(--tblr-pink-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-pink{color:color-mix(in srgb,var(--tblr-pink) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-pink) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-pink:focus,.link-pink:hover{color:RGBA(171,41,86,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))!important}.bg-red{background-color:color-mix(in srgb,var(--tblr-red) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-red-lt{background-color:color-mix(in srgb,var(--tblr-red-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-red) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-red{border-color:color-mix(in srgb,var(--tblr-red) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-red{--tblr-gradient-from:var(--tblr-red)}.bg-gradient-to-red{--tblr-gradient-to:var(--tblr-red)}.bg-gradient-via-red{--tblr-gradient-via:var(--tblr-red);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-red{background-color:RGBA(var(--tblr-red-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-red{color:color-mix(in srgb,var(--tblr-red) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-red) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-red:focus,.link-red:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.bg-orange{background-color:color-mix(in srgb,var(--tblr-orange) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-orange-lt{background-color:color-mix(in srgb,var(--tblr-orange-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-orange) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-orange{border-color:color-mix(in srgb,var(--tblr-orange) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-orange{--tblr-gradient-from:var(--tblr-orange)}.bg-gradient-to-orange{--tblr-gradient-to:var(--tblr-orange)}.bg-gradient-via-orange{--tblr-gradient-via:var(--tblr-orange);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-orange{background-color:RGBA(var(--tblr-orange-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-orange{color:color-mix(in srgb,var(--tblr-orange) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-orange) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-orange:focus,.link-orange:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.bg-yellow{background-color:color-mix(in srgb,var(--tblr-yellow) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-yellow-lt{background-color:color-mix(in srgb,var(--tblr-yellow-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-yellow) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-yellow{border-color:color-mix(in srgb,var(--tblr-yellow) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-yellow{--tblr-gradient-from:var(--tblr-yellow)}.bg-gradient-to-yellow{--tblr-gradient-to:var(--tblr-yellow)}.bg-gradient-via-yellow{--tblr-gradient-via:var(--tblr-yellow);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-yellow{background-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-yellow{color:color-mix(in srgb,var(--tblr-yellow) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-yellow) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-yellow:focus,.link-yellow:hover{color:RGBA(196,127,0,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important}.bg-lime{background-color:color-mix(in srgb,var(--tblr-lime) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-lime-lt{background-color:color-mix(in srgb,var(--tblr-lime-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-lime) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-lime{border-color:color-mix(in srgb,var(--tblr-lime) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-lime{--tblr-gradient-from:var(--tblr-lime)}.bg-gradient-to-lime{--tblr-gradient-to:var(--tblr-lime)}.bg-gradient-via-lime{--tblr-gradient-via:var(--tblr-lime);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-lime{background-color:RGBA(var(--tblr-lime-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-lime{color:color-mix(in srgb,var(--tblr-lime) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-lime) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-lime:focus,.link-lime:hover{color:RGBA(93,147,18,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))!important}.bg-green{background-color:color-mix(in srgb,var(--tblr-green) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-green-lt{background-color:color-mix(in srgb,var(--tblr-green-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-green) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-green{border-color:color-mix(in srgb,var(--tblr-green) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-green{--tblr-gradient-from:var(--tblr-green)}.bg-gradient-to-green{--tblr-gradient-to:var(--tblr-green)}.bg-gradient-via-green{--tblr-gradient-via:var(--tblr-green);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-green{background-color:RGBA(var(--tblr-green-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-green{color:color-mix(in srgb,var(--tblr-green) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-green) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-green:focus,.link-green:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.bg-teal{background-color:color-mix(in srgb,var(--tblr-teal) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-teal-lt{background-color:color-mix(in srgb,var(--tblr-teal-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-teal) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-teal{border-color:color-mix(in srgb,var(--tblr-teal) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-teal{--tblr-gradient-from:var(--tblr-teal)}.bg-gradient-to-teal{--tblr-gradient-to:var(--tblr-teal)}.bg-gradient-via-teal{--tblr-gradient-via:var(--tblr-teal);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-teal{background-color:RGBA(var(--tblr-teal-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-teal{color:color-mix(in srgb,var(--tblr-teal) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-teal) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-teal:focus,.link-teal:hover{color:RGBA(10,133,96,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))!important}.bg-cyan{background-color:color-mix(in srgb,var(--tblr-cyan) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-cyan-lt{background-color:color-mix(in srgb,var(--tblr-cyan-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-cyan) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-cyan{border-color:color-mix(in srgb,var(--tblr-cyan) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-cyan{--tblr-gradient-from:var(--tblr-cyan)}.bg-gradient-to-cyan{--tblr-gradient-to:var(--tblr-cyan)}.bg-gradient-via-cyan{--tblr-gradient-via:var(--tblr-cyan);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-cyan{background-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-bg-opacity,1))!important;color:#f9fafb!important}.link-cyan{color:color-mix(in srgb,var(--tblr-cyan) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-cyan) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-cyan:focus,.link-cyan:hover{color:RGBA(18,130,147,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))!important}.bg-white{background-color:color-mix(in srgb,var(--tblr-white) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important}.bg-white-lt{background-color:color-mix(in srgb,var(--tblr-white-lt) calc(var(--tblr-bg-opacity, 1)*100%),transparent)!important;color:color-mix(in srgb,var(--tblr-white) calc(var(--tblr-text-opacity, 1)*100%),transparent)!important}.border-white{border-color:color-mix(in srgb,var(--tblr-white) calc(var(--tblr-border-opacity, 1)*100%),transparent)!important}.bg-gradient-from-white{--tblr-gradient-from:var(--tblr-white)}.bg-gradient-to-white{--tblr-gradient-to:var(--tblr-white)}.bg-gradient-via-white{--tblr-gradient-via:var(--tblr-white);--tblr-gradient-stops:var(--tblr-gradient-from,transparent),var(--tblr-gradient-via,transparent),var(--tblr-gradient-to,transparent)}.text-bg-white{background-color:RGBA(var(--tblr-white-rgb),var(--tblr-bg-opacity,1))!important;color:#1f2937!important}.link-white{color:color-mix(in srgb,var(--tblr-white) calc(var(--tblr-link-opacity, 1)*100%),transparent)!important;text-decoration-color:color-mix(in srgb,var(--tblr-white) calc(var(--tblr-link-underline-opacity, 1)*100%),transparent)!important}.link-white:focus,.link-white:hover{color:RGBA(255,255,255,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(255,255,255,var(--tblr-link-underline-opacity,1))!important}.text-primary{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-primary) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-primary-fg{color:var(--tblr-primary-fg)!important}.text-secondary{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-secondary) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-secondary-fg{color:var(--tblr-secondary-fg)!important}.text-success{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-success) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-success-fg{color:var(--tblr-success-fg)!important}.text-info{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-info) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-info-fg{color:var(--tblr-info-fg)!important}.text-warning{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-warning) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-warning-fg{color:var(--tblr-warning-fg)!important}.text-danger{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-danger) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-danger-fg{color:var(--tblr-danger-fg)!important}.text-light{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-light) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-light-fg{color:var(--tblr-light-fg)!important}.text-dark{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-dark) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-dark-fg{color:var(--tblr-dark-fg)!important}.text-muted{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-muted) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-muted-fg{color:var(--tblr-muted-fg)!important}.text-blue{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-blue) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-blue-fg{color:var(--tblr-blue-fg)!important}.text-azure{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-azure) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-azure-fg{color:var(--tblr-azure-fg)!important}.text-indigo{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-indigo) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-indigo-fg{color:var(--tblr-indigo-fg)!important}.text-purple{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-purple) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-purple-fg{color:var(--tblr-purple-fg)!important}.text-pink{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-pink) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-pink-fg{color:var(--tblr-pink-fg)!important}.text-red{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-red) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-red-fg{color:var(--tblr-red-fg)!important}.text-orange{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-orange) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-orange-fg{color:var(--tblr-orange-fg)!important}.text-yellow{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-yellow) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-yellow-fg{color:var(--tblr-yellow-fg)!important}.text-lime{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-lime) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-lime-fg{color:var(--tblr-lime-fg)!important}.text-green{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-green) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-green-fg{color:var(--tblr-green-fg)!important}.text-teal{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-teal) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-teal-fg{color:var(--tblr-teal-fg)!important}.text-cyan{--tblr-text-opacity:1;color:color-mix(in srgb,var(--tblr-cyan) calc(var(--tblr-text-opacity)*100%),transparent)!important}.text-cyan-fg{color:var(--tblr-cyan-fg)!important}.bg-gray-50{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-50) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-50-fg{color:var(--tblr-gray-50-fg)!important}.bg-gray-100{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-100) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-100-fg{color:var(--tblr-gray-100-fg)!important}.bg-gray-200{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-200) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-200-fg{color:var(--tblr-gray-200-fg)!important}.bg-gray-300{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-300) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-300-fg{color:var(--tblr-gray-300-fg)!important}.bg-gray-400{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-400) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-400-fg{color:var(--tblr-gray-400-fg)!important}.bg-gray-500{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-500) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-500-fg{color:var(--tblr-gray-500-fg)!important}.bg-gray-600{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-600) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-600-fg{color:var(--tblr-gray-600-fg)!important}.bg-gray-700{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-700) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-700-fg{color:var(--tblr-gray-700-fg)!important}.bg-gray-800{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-800) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-800-fg{color:var(--tblr-gray-800-fg)!important}.bg-gray-900{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-900) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-900-fg{color:var(--tblr-gray-900-fg)!important}.bg-gray-950{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-gray-950) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-gray-950-fg{color:var(--tblr-gray-950-fg)!important}.bg-x{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-x) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-x-fg{color:var(--tblr-x-fg)!important}.bg-facebook{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-facebook) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-facebook-fg{color:var(--tblr-facebook-fg)!important}.bg-twitter{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-twitter) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-twitter-fg{color:var(--tblr-twitter-fg)!important}.bg-linkedin{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-linkedin) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-linkedin-fg{color:var(--tblr-linkedin-fg)!important}.bg-google{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-google) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-google-fg{color:var(--tblr-google-fg)!important}.bg-youtube{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-youtube) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-youtube-fg{color:var(--tblr-youtube-fg)!important}.bg-vimeo{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-vimeo) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-vimeo-fg{color:var(--tblr-vimeo-fg)!important}.bg-dribbble{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-dribbble) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-dribbble-fg{color:var(--tblr-dribbble-fg)!important}.bg-github{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-github) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-github-fg{color:var(--tblr-github-fg)!important}.bg-instagram{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-instagram) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-instagram-fg{color:var(--tblr-instagram-fg)!important}.bg-pinterest{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-pinterest) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-pinterest-fg{color:var(--tblr-pinterest-fg)!important}.bg-vk{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-vk) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-vk-fg{color:var(--tblr-vk-fg)!important}.bg-rss{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-rss) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-rss-fg{color:var(--tblr-rss-fg)!important}.bg-flickr{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-flickr) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-flickr-fg{color:var(--tblr-flickr-fg)!important}.bg-bitbucket{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-bitbucket) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-bitbucket-fg{color:var(--tblr-bitbucket-fg)!important}.bg-tabler{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-tabler) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.text-tabler-fg{color:var(--tblr-tabler-fg)!important}.bg-inverted{--tblr-bg-opacity:1;background-color:color-mix(in srgb,var(--tblr-bg-surface-inverted) calc(var(--tblr-bg-opacity)*100%),transparent)!important}.bg-surface{background-color:var(--tblr-bg-surface)!important}.bg-surface-secondary{background-color:var(--tblr-bg-surface-secondary)!important}.bg-surface-tertiary{background-color:var(--tblr-bg-surface-tertiary)!important}.bg-surface-backdrop{background-color:color-mix(in srgb,var(--tblr-gray-800) 24%,transparent)!important}.scrollable{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.scrollable.hover{overflow-y:hidden}.scrollable.hover>*{margin-top:-1px}.scrollable.hover:active,.scrollable.hover:focus,.scrollable.hover:hover{overflow:visible;overflow-y:auto}.touch .scrollable{overflow-y:auto!important}.scroll-x,.scroll-y{overflow:hidden;-webkit-overflow-scrolling:touch}.scroll-y{overflow-y:auto}.scroll-x{overflow-x:auto}.no-scroll{overflow:hidden}.w-0{width:0!important}.h-0{height:0!important}.w-1{width:.25rem!important}.h-1{height:.25rem!important}.w-2{width:.5rem!important}.h-2{height:.5rem!important}.w-3{width:1rem!important}.h-3{height:1rem!important}.w-4{width:1.5rem!important}.h-4{height:1.5rem!important}.w-5{width:2rem!important}.h-5{height:2rem!important}.w-6{width:2.5rem!important}.h-6{height:2.5rem!important}.w-auto{width:auto!important}.h-auto{height:auto!important}.w-px{width:1px!important}.h-px{height:1px!important}.w-full{width:100%!important}.h-full{height:100%!important}.opacity-0{opacity:0!important}.opacity-5{opacity:.05!important}.opacity-10{opacity:.1!important}.opacity-15{opacity:.15!important}.opacity-20{opacity:.2!important}.opacity-25{opacity:.25!important}.opacity-30{opacity:.3!important}.opacity-35{opacity:.35!important}.opacity-40{opacity:.4!important}.opacity-45{opacity:.45!important}.opacity-50{opacity:.5!important}.opacity-55{opacity:.55!important}.opacity-60{opacity:.6!important}.opacity-65{opacity:.65!important}.opacity-70{opacity:.7!important}.opacity-75{opacity:.75!important}.opacity-80{opacity:.8!important}.opacity-85{opacity:.85!important}.opacity-90{opacity:.9!important}.opacity-95{opacity:.95!important}.opacity-100{opacity:1!important}.hover-shadow-sm:hover{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.hover-shadow:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0!important}.hover-shadow-lg:hover{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.hover-shadow-none:hover{box-shadow:none!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.hover-elevate-down,.hover-elevate-up,.hover-rotate-end,.hover-rotate-start,.hover-scale{transition:transform .3s ease}.hover-elevate-down:hover,.hover-elevate-up:hover,.hover-rotate-end:hover,.hover-rotate-start:hover,.hover-scale:hover{will-change:transform}.hover-elevate-up:hover{transform:translateY(-4px)}.hover-elevate-down:hover{transform:translateY(4px)}.hover-scale:hover{transform:scale(1.1)}.hover-rotate-end:hover{transform:rotate(-4deg)}.hover-rotate-start:hover{transform:rotate(4deg)}[data-bs-theme-base=slate]{--tblr-gray-50:#f8fafc;--tblr-gray-100:#f1f5f9;--tblr-gray-200:#e2e8f0;--tblr-gray-300:#cbd5e1;--tblr-gray-400:#94a3b8;--tblr-gray-500:#64748b;--tblr-gray-600:#475569;--tblr-gray-700:#334155;--tblr-gray-800:#1e293b;--tblr-gray-900:#0f172a;--tblr-gray-950:#020617}[data-bs-theme-base=gray]{--tblr-gray-50:#f9fafb;--tblr-gray-100:#f3f4f6;--tblr-gray-200:#e5e7eb;--tblr-gray-300:#d1d5db;--tblr-gray-400:#9ca3af;--tblr-gray-500:#6b7280;--tblr-gray-600:#4b5563;--tblr-gray-700:#374151;--tblr-gray-800:#1f2937;--tblr-gray-900:#111827;--tblr-gray-950:#030712}[data-bs-theme-base=zinc]{--tblr-gray-50:#fafafa;--tblr-gray-100:#f4f4f5;--tblr-gray-200:#e4e4e7;--tblr-gray-300:#d4d4d8;--tblr-gray-400:#a1a1aa;--tblr-gray-500:#71717a;--tblr-gray-600:#52525b;--tblr-gray-700:#3f3f46;--tblr-gray-800:#27272a;--tblr-gray-900:#18181b;--tblr-gray-950:#09090b}[data-bs-theme-base=neutral]{--tblr-gray-50:#fafafa;--tblr-gray-100:#f5f5f5;--tblr-gray-200:#e5e5e5;--tblr-gray-300:#d4d4d4;--tblr-gray-400:#a3a3a3;--tblr-gray-500:#737373;--tblr-gray-600:#525252;--tblr-gray-700:#404040;--tblr-gray-800:#262626;--tblr-gray-900:#171717;--tblr-gray-950:#0a0a0a}[data-bs-theme-base=stone]{--tblr-gray-50:#fafaf9;--tblr-gray-100:#f5f5f4;--tblr-gray-200:#e7e5e4;--tblr-gray-300:#d6d3d1;--tblr-gray-400:#a8a29e;--tblr-gray-500:#78716c;--tblr-gray-600:#57534e;--tblr-gray-700:#44403c;--tblr-gray-800:#292524;--tblr-gray-900:#1c1917;--tblr-gray-950:#0c0a09}[data-bs-theme-base=pink]{--tblr-gray-50:#fdf2f8;--tblr-gray-100:#fce7f3;--tblr-gray-200:#fbcfe8;--tblr-gray-300:#f9a8d4;--tblr-gray-400:#f472b6;--tblr-gray-500:#ec4899;--tblr-gray-600:#db2777;--tblr-gray-700:#be185d;--tblr-gray-800:#9d174d;--tblr-gray-900:#831843;--tblr-gray-950:#500724}[data-bs-theme-primary=blue]{--tblr-primary:#066fd1;--tblr-primary-rgb:6,111,209}[data-bs-theme-primary=azure]{--tblr-primary:#4299e1;--tblr-primary-rgb:66,153,225}[data-bs-theme-primary=indigo]{--tblr-primary:#4263eb;--tblr-primary-rgb:66,99,235}[data-bs-theme-primary=purple]{--tblr-primary:#ae3ec9;--tblr-primary-rgb:174,62,201}[data-bs-theme-primary=pink]{--tblr-primary:#d6336c;--tblr-primary-rgb:214,51,108}[data-bs-theme-primary=red]{--tblr-primary:#d63939;--tblr-primary-rgb:214,57,57}[data-bs-theme-primary=orange]{--tblr-primary:#f76707;--tblr-primary-rgb:247,103,7}[data-bs-theme-primary=yellow]{--tblr-primary:#f59f00;--tblr-primary-rgb:245,159,0}[data-bs-theme-primary=lime]{--tblr-primary:#74b816;--tblr-primary-rgb:116,184,22}[data-bs-theme-primary=green]{--tblr-primary:#2fb344;--tblr-primary-rgb:47,179,68}[data-bs-theme-primary=teal]{--tblr-primary:#0ca678;--tblr-primary-rgb:12,166,120}[data-bs-theme-primary=cyan]{--tblr-primary:#17a2b8;--tblr-primary-rgb:23,162,184}[data-bs-theme-radius="0"]{--tblr-border-radius-scale:0}[data-bs-theme-radius="0.5"]{--tblr-border-radius-scale:0.5}[data-bs-theme-radius="1"]{--tblr-border-radius-scale:1}[data-bs-theme-radius="1.5"]{--tblr-border-radius-scale:1.5}[data-bs-theme-radius="2"]{--tblr-border-radius-scale:2}[data-bs-theme-primary=inverted]{--tblr-primary:var(--tblr-gray-800);--tblr-primary-fg:var(--tblr-light);--tblr-primary-rgb:31,41,55}[data-bs-theme-primary=inverted] [data-bs-theme=dark],[data-bs-theme-primary=inverted][data-bs-theme=dark]{--tblr-primary:#f9fafb;--tblr-primary-fg:var(--tblr-dark);--tblr-primary-rgb:249,250,251}[data-bs-theme-font=monospace]{--tblr-body-font-family:var(--tblr-font-monospace);--tblr-body-font-size:80%}[data-bs-theme-font=sans-serif]{--tblr-body-font-family:var(--tblr-font-sans-serif)}[data-bs-theme-font=serif]{--tblr-body-font-family:var(--tblr-font-serif)}[data-bs-theme-font=comic]{--tblr-body-font-family:var(--tblr-font-comic)}.noUi-target{background:none;border:0;border-radius:0;box-shadow:none;color:var(--tblr-primary)}.noUi-horizontal{height:1.25rem;padding:.5rem 0}.noUi-base{background:var(--tblr-border-color);border-radius:1rem}.noUi-handle{background:currentColor;border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;outline:0;width:1rem}.noUi-handle:after,.noUi-handle:before{content:none}.noUi-horizontal .noUi-handle{height:1rem;left:-.5rem;margin:1px 0 0 1px;top:-.5rem;width:1rem}.noUi-handle.noUi-active,.noUi-handle:focus{box-shadow:0 0 0 1px #f9fafb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.noUi-connect{background:currentColor}.litepicker{--litepicker-month-weekday-color:var(--tblr-secondary);--litepicker-button-prev-month-color:var(--tblr-secondary);--litepicker-button-next-month-color:var(--tblr-secondary);--litepicker-button-prev-month-color-hover:var(--tblr-primary);--litepicker-button-next-month-color-hover:var(--tblr-primary);--litepicker-day-color:var(--tblr-body-color);--litepicker-day-color-hover:var(--tblr-primary);--litepicker-is-start-color-bg:var(--tblr-primary);--litepicker-is-end-color-bg:var(--tblr-primary);--litepicker-is-in-range-color:var(--tblr-info);--litepicker-is-today-color:var(--tblr-primary);--litepicker-month-header-color:var(--tblr-body-color);--litepicker-container-months-color-bg:var(--tblr-bg-surface);font:inherit;-webkit-user-select:none;-moz-user-select:none;user-select:none}.litepicker .day-item.is-in-range{--litepicker-day-color:var(--tblr-light)}.litepicker svg{fill:none!important}.litepicker .container__main{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:none}.litepicker .container__months .month-item-name,.litepicker .container__months .month-item-year{font-weight:var(--tblr-font-weight-medium)!important}.litepicker .container__months .button-next-month,.litepicker .container__months .button-previous-month{cursor:pointer!important}.litepicker .container__months .month-item-weekdays-row>div{font-size:.75rem;padding:.5rem 0!important}.litepicker .container__days .day-item{cursor:pointer!important;padding:.5rem 0!important;transition:color .3s,background-color .3s,border-color .3s}@media (prefers-reduced-motion:reduce){.litepicker .container__days .day-item{transition:none}}.datepicker-inline .litepicker{box-shadow:var(--tblr-shadow-input)}.datepicker-inline .litepicker .container__months{background-color:var(--tblr-bg-forms);border-radius:calc(var(--tblr-border-radius) - 1px);box-shadow:none}:root{--ts-pr-clear-button:0rem;--ts-pr-caret:0rem}.ts-input{color:inherit}.focus .ts-control{border-radius:var(--tblr-border-radius)}.ts-control{color:inherit}.ts-control .dropdown-menu{height:auto;width:100%}.ts-wrapper .form-control,.ts-wrapper .form-select,.ts-wrapper.form-control,.ts-wrapper.form-select{box-shadow:var(--tblr-shadow-input)}.ts-wrapper.is-invalid .ts-control,.ts-wrapper.is-valid .ts-control{--ts-pr-clear-button:1.5rem}.ts-dropdown{background:var(--tblr-bg-surface);box-shadow:var(--tblr-shadow-dropdown);color:var(--tblr-body-color);z-index:1000}.ts-dropdown .option{padding:.5rem .75rem}.ts-control,.ts-control input{color:var(--tblr-body-color)}.ts-control input::-moz-placeholder{color:var(--tblr-tertiary)}.ts-control input::placeholder{color:var(--tblr-tertiary)}.ts-wrapper.multi .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div{background:var(--tblr-bg-surface-secondary);border:1px solid var(--tblr-border-color);color:var(--tblr-body-color)}.ts-wrapper.disabled .ts-control{opacity:1}.ts-wrapper.disabled .ts-control>div.item{color:var(--tblr-gray-500)}.apexcharts-tooltip{background:var(--tblr-bg-surface-inverted)!important;box-shadow:none!important;color:var(--tblr-text-inverted)!important;font-size:.765625rem!important;padding:.25rem!important}.apexcharts-tooltip-title{background:transparent!important;border:0!important;font-weight:var(--tblr-font-weight-bold);margin:0!important;padding:.25rem .5rem!important}.apexcharts-tooltip-y-group{padding:2px 0!important}.apexcharts-tooltip-series-group{padding:0 .5rem!important}.apexcharts-tooltip-marker:before{font-size:16px!important}.apexcharts-text{fill:var(--tblr-body-color)!important}.apexcharts-gridline{stroke:var(--tblr-border-color)!important}.apexcharts-legend-text{color:inherit!important}.apexcharts-radialbar-track .apexcharts-radialbar-area{stroke:var(--tblr-border-color)!important}.apexcharts-canvas,.apexcharts-svg{border-radius:inherit}.apexcharts-pie-area{stroke:var(--tblr-bg-surface)!important}.jvm-tooltip{background:var(--tblr-bg-surface-inverted);box-shadow:var(--tblr-shadow-card);color:var(--tblr-text-inverted);font-family:inherit;font-size:.75rem}.jvm-series-container .jvm-legend .jvm-legend-title{border-bottom:0;font-weight:var(--tblr-font-weight-medium)}.jvm-series-container .jvm-legend{background-color:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);min-width:8rem}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick{align-items:center;display:flex}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick .jvm-legend-tick-sample{height:.75rem;width:.75rem}.jvm-zoom-btn{align-items:center;background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:var(--tblr-shadow-card);color:var(--tblr-body-color);display:flex;font-size:1rem;height:1.5rem;justify-content:center;line-height:1;padding:0;width:1.5rem}.jvm-zoom-btn.jvm-zoomout{top:2.5rem}.dropzone{border:var(--tblr-border-width) dashed var(--tblr-border-color)!important;color:var(--tblr-secondary)!important;padding:1rem!important}.dropzone.dz-drag-hover{background:rgba(var(--tblr-primary-rgb),.01);border:var(--tblr-border-width) dashed var(--tblr-primary);color:var(--tblr-primary)}.dropzone.dz-drag-hover .dz-message{opacity:1}.dropzone .dz-preview{margin:.5rem}.dropzone .dz-preview .dz-image{border-radius:var(--tblr-border-radius)}.dropzone .dz-preview .dz-success-mark{height:54px}.fslightbox-container{-webkit-backdrop-filter:blur(4px)!important;backdrop-filter:blur(4px)!important;background:var(--tblr-backdrop-bg)!important;font-family:inherit!important}.fslightbox-slide-number-container{color:inherit!important}.fslightbox-slash{background:currentColor!important}body{--plyr-color-main:var(--tblr-primary)}.tox-hugerte{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;border-radius:6px!important;font-family:var(--tblr-font-sans-serif)!important}.tox-toolbar__group{padding:0 .5rem}.tox .tox-toolbar__primary{background:transparent!important}.tox:not(.tox-hugerte-inline) .tox-editor-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;box-shadow:none!important;padding:0!important}.tox-tbtn{background:var(--tblr-bg-surface)!important;margin:0!important}.tox-tbtn.tox-tbtn--enabled,.tox-tbtn:hover{background:var(--tblr-bg-surface-secondary)!important}.tox-edit-area:before{border:none!important}.tox-statusbar{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important}.tox .tox-toolbar-overlord,.tox:not(.tox-hugerte-inline) .tox-editor-header{background:transparent!important}:root{--gl-star-size:auto;--gl-star-color:var(--tblr-yellow);--gl-star-color-inactive:var(--tblr-border-color)}[data-star-rating] svg{height:var(--tblr-icon-size,--gl-star-size);width:var(--tblr-icon-size,--gl-star-size)}[data-star-rating] :not(.gl-active)>.gl-star-full{color:var(--gl-star-color-inactive)!important}[data-star-rating] .gl-active>.gl-star-full{color:var(--gl-star-color);fill:currentColor;stroke:currentColor}.clr-picker{background-color:var(--tblr-bg-surface);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-shadow-dropdown)}.clr-gradient{border-radius:var(--tblr-border-radius) var(--tblr-border-radius) 0 0}input.clr-color{background:transparent;border-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:var(--tblr-body-color)}input.clr-color:focus{border-color:rgba(var(--tblr-primary-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-swatches button{border-radius:var(--tblr-border-radius);padding:0 2px 4px}.clr-swatches button:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-preview{overflow:visible}.clr-preview,.clr-preview button,.clr-preview:after,.clr-preview:before{border-radius:var(--tblr-border-radius)}.clr-preview button:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-field{display:block}.clr-field button{border-radius:var(--tblr-border-radius);height:1.5rem;left:auto;right:6px;width:1.5rem}.clr-field button:after{box-shadow:inset 0 0 0 1px var(--tblr-border-color-translucent)}.clr-field button:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-field input{padding-right:2.5rem}.typed-cursor{color:#6b7280;font-weight:500}.turbo-progress-bar{background:var(--tblr-primary)}:root{--fc-border-color:var(--tblr-border-color);--fc-daygrid-event-dot-width:5px;--fc-event-bg-color:var(--tblr-primary-lt);--fc-event-border-color:var(--tblr-primary-200);--fc-event-text-color:var(--tblr-body-color)}.fc-toolbar-title{font-size:var(--tblr-font-size-h3)!important;font-weight:var(--tblr-font-weight-medium)}.fc-daygrid-dot-event{background-color:var(--fc-event-bg-color);border:1px solid var(--fc-event-border-color);color:var(--fc-event-text-color);padding-bottom:1px;padding-top:1px}.fc-daygrid-dot-event .fc-event-title{font-weight:inherit}.fc-col-header-cell{background-color:var(--tblr-bg-surface-secondary);color:var(--tblr-secondary);font-size:var(--tblr-font-size-h5);font-weight:var(--tblr-font-weight-medium);line-height:1;padding-bottom:.5rem!important;padding-top:.5rem!important;text-transform:uppercase}.fc-event-time{font-weight:var(--tblr-font-weight-bold)!important}.fc-col-header-cell-cushion{color:inherit}.fc-daygrid-day-number{color:var(--tblr-secondary)}.fc-button{background-color:transparent!important;border-color:var(--tblr-border-color)!important;color:var(--tblr-body-color)!important;font-weight:var(--tblr-font-weight-medium)!important}.ts-control{border:1px solid #d0d0d0;border-radius:3px;box-shadow:none;box-sizing:border-box;flex-wrap:wrap;overflow:hidden;padding:8px;position:relative;width:100%;z-index:1}.ts-wrapper.multi.has-items .ts-control{padding:6px 8px 3px}.full .ts-control{background-color:#fff}.disabled .ts-control,.disabled .ts-control *{cursor:default!important}.focus .ts-control{box-shadow:none}.ts-control>*{display:inline-block;vertical-align:baseline}.ts-wrapper.multi .ts-control>div{background:#f2f2f2;border:0 solid #d0d0d0;color:#303030;cursor:pointer;margin:0 3px 3px 0;padding:2px 6px}.ts-wrapper.multi .ts-control>div.active{background:#e8e8e8;border:0 solid #cacaca;color:#303030}.ts-wrapper.multi.disabled .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div.active{background:#fff;border:0 solid #fff;color:#7d7d7d}.ts-control>input{background:none!important;border:0!important;box-shadow:none!important;display:inline-block!important;flex:1 1 auto;line-height:inherit!important;margin:0!important;max-height:none!important;max-width:100%!important;min-height:0!important;min-width:7rem;padding:0!important;text-indent:0!important;user-select:auto!important}.ts-control>input::-ms-clear{display:none}.ts-control>input:focus{outline:none!important}.has-items .ts-control>input{margin:0 4px!important}.ts-control.rtl{text-align:right}.ts-control.rtl.single .ts-control:after{left:15px;right:auto}.ts-control.rtl .ts-control>input{margin:0 4px 0 -2px!important}.disabled .ts-control{background-color:#fafafa;opacity:.5}.input-hidden .ts-control>input{left:-10000px;opacity:0;position:absolute}.ts-dropdown{background:#fff;border:1px solid #d0d0d0;border-radius:0 0 3px 3px;border-top:0;box-shadow:0 1px 3px rgba(0,0,0,.1);box-sizing:border-box;left:0;margin:.25rem 0 0;position:absolute;top:100%;width:100%;z-index:10}.ts-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.ts-dropdown [data-selectable] .highlight{background:rgba(125,168,208,.2);border-radius:1px}.ts-dropdown .create,.ts-dropdown .no-results,.ts-dropdown .optgroup-header,.ts-dropdown .option{padding:5px 8px}.ts-dropdown .option,.ts-dropdown [data-disabled],.ts-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.ts-dropdown [data-selectable].option{cursor:pointer;opacity:1}.ts-dropdown .optgroup:first-child .optgroup-header{border-top:0}.ts-dropdown .optgroup-header{background:#fff;color:#303030;cursor:default}.ts-dropdown .active{background-color:#f5fafd;color:#495c68}.ts-dropdown .active.create{color:#495c68}.ts-dropdown .create{color:rgba(48,48,48,.5)}.ts-dropdown .spinner{display:inline-block;height:30px;margin:5px 8px;width:30px}.ts-dropdown .spinner:after{animation:lds-dual-ring 1.2s linear infinite;border-color:#d0d0d0 transparent;border-radius:50%;border-style:solid;border-width:5px;content:" ";display:block;height:24px;margin:3px;width:24px}@keyframes lds-dual-ring{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ts-dropdown-content{max-height:200px;overflow:hidden auto;scroll-behavior:smooth}.ts-wrapper.plugin-drag_drop .ts-dragging{color:transparent!important}.ts-wrapper.plugin-drag_drop .ts-dragging>*{visibility:hidden!important}.plugin-checkbox_options:not(.rtl) .option input{margin-right:.5rem}.plugin-checkbox_options.rtl .option input{margin-left:.5rem}.plugin-clear_button{--ts-pr-clear-button:1em}.plugin-clear_button .clear-button{background:transparent!important;cursor:pointer;margin-right:0!important;opacity:0;position:absolute;right:2px;top:50%;transform:translateY(-50%);transition:opacity .5s}.plugin-clear_button.form-select .clear-button,.plugin-clear_button.single .clear-button{right:max(var(--ts-pr-caret),8px)}.plugin-clear_button.focus.has-items .clear-button,.plugin-clear_button:not(.disabled):hover.has-items .clear-button{opacity:1}.ts-wrapper .dropdown-header{background:color-mix(#fff,#d0d0d0,85%);border-bottom:1px solid #d0d0d0;border-radius:3px 3px 0 0;padding:10px 8px;position:relative}.ts-wrapper .dropdown-header-close{color:#303030;font-size:20px!important;line-height:20px;margin-top:-12px;opacity:.4;position:absolute;right:8px;top:50%}.ts-wrapper .dropdown-header-close:hover{color:#000}.plugin-dropdown_input.focus.dropdown-active .ts-control{border:1px solid #d0d0d0;box-shadow:none;box-shadow:var(--tblr-shadow-input)}.plugin-dropdown_input .dropdown-input{background:transparent;border:solid #d0d0d0;border-width:0 0 1px;box-shadow:none;display:block;padding:8px;width:100%}.plugin-dropdown_input.focus .ts-dropdown .dropdown-input{border-color:#83b7e8;box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.plugin-dropdown_input .items-placeholder{border:0!important;box-shadow:none!important;width:100%}.plugin-dropdown_input.dropdown-active .items-placeholder,.plugin-dropdown_input.has-items .items-placeholder{display:none!important}.ts-wrapper.plugin-input_autogrow.has-items .ts-control>input{min-width:0}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input{flex:none;min-width:4px}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::placeholder{color:transparent}.ts-dropdown.plugin-optgroup_columns .ts-dropdown-content{display:flex}.ts-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0;flex-basis:0;flex-grow:1;min-width:0}.ts-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0}.ts-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.ts-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0}.ts-wrapper.plugin-remove_button .item{align-items:center;display:inline-flex}.ts-wrapper.plugin-remove_button .item .remove{border-radius:0 2px 2px 0;box-sizing:border-box;color:inherit;display:inline-block;padding:0 6px;text-decoration:none;vertical-align:middle}.ts-wrapper.plugin-remove_button .item .remove:hover{background:rgba(0,0,0,.05)}.ts-wrapper.plugin-remove_button.disabled .item .remove:hover{background:none}.ts-wrapper.plugin-remove_button .remove-single{font-size:23px;position:absolute;right:0;top:0}.ts-wrapper.plugin-remove_button:not(.rtl) .item{padding-right:0!important}.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove{border-left:1px solid #d0d0d0;margin-left:6px}.ts-wrapper.plugin-remove_button:not(.rtl) .item.active .remove{border-left-color:#cacaca}.ts-wrapper.plugin-remove_button:not(.rtl).disabled .item .remove{border-left-color:#fff}.ts-wrapper.plugin-remove_button.rtl .item{padding-left:0!important}.ts-wrapper.plugin-remove_button.rtl .item .remove{border-right:1px solid #d0d0d0;margin-right:6px}.ts-wrapper.plugin-remove_button.rtl .item.active .remove{border-right-color:#cacaca}.ts-wrapper.plugin-remove_button.rtl.disabled .item .remove{border-right-color:#fff}:root{--ts-pr-clear-button:0px;--ts-pr-caret:0px;--ts-pr-min:.75rem}.ts-wrapper.single .ts-control,.ts-wrapper.single .ts-control input{cursor:pointer}.ts-control:not(.rtl){padding-right:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-control.rtl{padding-left:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-wrapper{position:relative}.ts-control,.ts-control input,.ts-dropdown{color:#303030;font-family:inherit;font-size:13px;line-height:18px}.ts-control,.ts-wrapper.single.input-active .ts-control{background:#fff;cursor:text}.ts-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.ts-dropdown,.ts-dropdown.form-control,.ts-dropdown.form-select{background:#fff;border:1px solid var(--tblr-border-color-translucent);border-radius:6px;box-shadow:0 6px 12px rgba(0,0,0,.175);height:auto;padding:0;z-index:1000}.ts-dropdown .optgroup-header{font-size:.765625rem;line-height:1.4285714286}.ts-dropdown .optgroup:first-child:before{display:none}.ts-dropdown .optgroup:before{border-top:1px solid var(--tblr-border-color-translucent);content:" ";display:block;height:0;margin:var(--tblr-spacer-2) 0;margin-left:-8px;margin-right:-8px;overflow:hidden}.ts-dropdown .create{padding-left:8px}.ts-dropdown-content{padding:5px 0}.ts-control{box-shadow:var(--tblr-shadow-input);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.ts-control{transition:none}}.ts-control{align-items:center;display:flex}.focus .ts-control{border-color:#83b7e8;box-shadow:var(--tblr-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.ts-control .item{align-items:center;display:flex}.ts-wrapper.is-invalid,.was-validated .invalid,.was-validated :invalid+.ts-wrapper{border-color:var(--tblr-form-invalid-color)}.ts-wrapper.is-invalid:not(.single),.was-validated .invalid:not(.single),.was-validated :invalid+.ts-wrapper:not(.single){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:right 1.53125rem center;background-repeat:no-repeat;background-size:1.8125rem 1.8125rem}.ts-wrapper.is-invalid.single,.was-validated .invalid.single,.was-validated :invalid+.ts-wrapper.single{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%239ca3af' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:right 1rem center,center right 3rem;background-repeat:no-repeat;background-size:16px 12px,1.8125rem 1.8125rem}.ts-wrapper.is-invalid.focus .ts-control,.was-validated .invalid.focus .ts-control,.was-validated :invalid+.ts-wrapper.focus .ts-control{border-color:var(--tblr-form-invalid-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-form-invalid-color),.25)}.ts-wrapper.is-valid,.was-validated .valid,.was-validated :valid+.ts-wrapper{border-color:var(--tblr-form-valid-color)}.ts-wrapper.is-valid:not(.single),.was-validated .valid:not(.single),.was-validated :valid+.ts-wrapper:not(.single){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:right 1.53125rem center;background-repeat:no-repeat;background-size:1.8125rem 1.8125rem}.ts-wrapper.is-valid.single,.was-validated .valid.single,.was-validated :valid+.ts-wrapper.single{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%239ca3af' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:right 1rem center,center right 3rem;background-repeat:no-repeat;background-size:16px 12px,1.8125rem 1.8125rem}.ts-wrapper.is-valid.focus .ts-control,.was-validated .valid.focus .ts-control,.was-validated :valid+.ts-wrapper.focus .ts-control{border-color:var(--tblr-form-valid-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-form-valid-color),.25)}.ts-wrapper{display:flex;min-height:calc(2.375rem + var(--tblr-border-width)*2)}.input-group-sm>.ts-wrapper,.ts-wrapper.form-control-sm,.ts-wrapper.form-select-sm{min-height:calc(1.875rem + var(--tblr-border-width)*2)}.input-group-sm>.ts-wrapper .ts-control,.ts-wrapper.form-control-sm .ts-control,.ts-wrapper.form-select-sm .ts-control{border-radius:var(--tblr-border-radius-sm);font-size:.75rem}.input-group-sm>.ts-wrapper.has-items .ts-control,.ts-wrapper.form-control-sm.has-items .ts-control,.ts-wrapper.form-select-sm.has-items .ts-control{font-size:.75rem;padding-bottom:0}.input-group-sm>.ts-wrapper.multi.has-items .ts-control,.ts-wrapper.form-control-sm.multi.has-items .ts-control,.ts-wrapper.form-select-sm.multi.has-items .ts-control{padding-top:calc(.9375rem + var(--tblr-border-width)*2/2 - 18px*.75rem/2 - (var(--tblr-border-width) + 2px)*2/2)!important}.ts-wrapper.multi.has-items .ts-control{padding-left:2px;--ts-pr-min:2px}.ts-wrapper.multi .ts-control>div{border-radius:2px}.input-group-lg>.ts-wrapper,.ts-wrapper.form-control-lg,.ts-wrapper.form-select-lg{min-height:calc(2.625rem + var(--tblr-border-width)*2)}.input-group-lg>.ts-wrapper .ts-control,.ts-wrapper.form-control-lg .ts-control,.ts-wrapper.form-select-lg .ts-control{border-radius:var(--tblr-border-radius-lg);font-size:1rem}.ts-wrapper:not(.form-control,.form-select){background:none;border:none;box-shadow:none;height:auto;padding:0}.ts-wrapper:not(.form-control,.form-select).single .ts-control{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%239ca3af' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");background-position:right 1rem center;background-repeat:no-repeat;background-size:16px 12px}.ts-wrapper.form-select,.ts-wrapper.single{--ts-pr-caret:3rem}.ts-wrapper.form-control,.ts-wrapper.form-select{box-shadow:none;display:flex;height:auto;padding:0!important}.ts-wrapper.form-control .ts-control,.ts-wrapper.form-control.single.input-active .ts-control,.ts-wrapper.form-select .ts-control,.ts-wrapper.form-select.single.input-active .ts-control{border:none!important}.ts-wrapper.form-control:not(.disabled) .ts-control,.ts-wrapper.form-control:not(.disabled).single.input-active .ts-control,.ts-wrapper.form-select:not(.disabled) .ts-control,.ts-wrapper.form-select:not(.disabled).single.input-active .ts-control{background:transparent!important}.input-group>.ts-wrapper{flex-grow:1;width:1%}.input-group>.ts-wrapper:not(:nth-child(2))>.ts-control{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.ts-wrapper:not(:last-child)>.ts-control{border-bottom-right-radius:0;border-top-right-radius:0}.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:Font Awesome\ 6 Free}.fa-brands,.fab{font-family:Font Awesome\ 6 Brands}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);line-height:inherit;position:absolute;text-align:center;width:var(--fa-li-width,2em)}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-bounce;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-flip;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-shake;animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,steps(8))}@media(prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}24%,8%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:"\30 "}.fa-1{--fa:"\31 "}.fa-2{--fa:"\32 "}.fa-3{--fa:"\33 "}.fa-4{--fa:"\34 "}.fa-5{--fa:"\35 "}.fa-6{--fa:"\36 "}.fa-7{--fa:"\37 "}.fa-8{--fa:"\38 "}.fa-9{--fa:"\39 "}.fa-fill-drip{--fa:""}.fa-arrows-to-circle{--fa:""}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:""}.fa-at{--fa:"\@"}.fa-trash-alt,.fa-trash-can{--fa:""}.fa-text-height{--fa:""}.fa-user-times,.fa-user-xmark{--fa:""}.fa-stethoscope{--fa:""}.fa-comment-alt,.fa-message{--fa:""}.fa-info{--fa:""}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:""}.fa-explosion{--fa:""}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:""}.fa-wave-square{--fa:""}.fa-ring{--fa:""}.fa-building-un{--fa:""}.fa-dice-three{--fa:""}.fa-calendar-alt,.fa-calendar-days{--fa:""}.fa-anchor-circle-check{--fa:""}.fa-building-circle-arrow-right{--fa:""}.fa-volleyball,.fa-volleyball-ball{--fa:""}.fa-arrows-up-to-line{--fa:""}.fa-sort-desc,.fa-sort-down{--fa:""}.fa-circle-minus,.fa-minus-circle{--fa:""}.fa-door-open{--fa:""}.fa-right-from-bracket,.fa-sign-out-alt{--fa:""}.fa-atom{--fa:""}.fa-soap{--fa:""}.fa-heart-music-camera-bolt,.fa-icons{--fa:""}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:""}.fa-bridge-circle-check{--fa:""}.fa-pump-medical{--fa:""}.fa-fingerprint{--fa:""}.fa-hand-point-right{--fa:""}.fa-magnifying-glass-location,.fa-search-location{--fa:""}.fa-forward-step,.fa-step-forward{--fa:""}.fa-face-smile-beam,.fa-smile-beam{--fa:""}.fa-flag-checkered{--fa:""}.fa-football,.fa-football-ball{--fa:""}.fa-school-circle-exclamation{--fa:""}.fa-crop{--fa:""}.fa-angle-double-down,.fa-angles-down{--fa:""}.fa-users-rectangle{--fa:""}.fa-people-roof{--fa:""}.fa-people-line{--fa:""}.fa-beer,.fa-beer-mug-empty{--fa:""}.fa-diagram-predecessor{--fa:""}.fa-arrow-up-long,.fa-long-arrow-up{--fa:""}.fa-burn,.fa-fire-flame-simple{--fa:""}.fa-male,.fa-person{--fa:""}.fa-laptop{--fa:""}.fa-file-csv{--fa:""}.fa-menorah{--fa:""}.fa-truck-plane{--fa:""}.fa-record-vinyl{--fa:""}.fa-face-grin-stars,.fa-grin-stars{--fa:""}.fa-bong{--fa:""}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:""}.fa-arrow-down-up-across-line{--fa:""}.fa-spoon,.fa-utensil-spoon{--fa:""}.fa-jar-wheat{--fa:""}.fa-envelopes-bulk,.fa-mail-bulk{--fa:""}.fa-file-circle-exclamation{--fa:""}.fa-circle-h,.fa-hospital-symbol{--fa:""}.fa-pager{--fa:""}.fa-address-book,.fa-contact-book{--fa:""}.fa-strikethrough{--fa:""}.fa-k{--fa:"K"}.fa-landmark-flag{--fa:""}.fa-pencil,.fa-pencil-alt{--fa:""}.fa-backward{--fa:""}.fa-caret-right{--fa:""}.fa-comments{--fa:""}.fa-file-clipboard,.fa-paste{--fa:""}.fa-code-pull-request{--fa:""}.fa-clipboard-list{--fa:""}.fa-truck-loading,.fa-truck-ramp-box{--fa:""}.fa-user-check{--fa:""}.fa-vial-virus{--fa:""}.fa-sheet-plastic{--fa:""}.fa-blog{--fa:""}.fa-user-ninja{--fa:""}.fa-person-arrow-up-from-line{--fa:""}.fa-scroll-torah,.fa-torah{--fa:""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:""}.fa-toggle-off{--fa:""}.fa-archive,.fa-box-archive{--fa:""}.fa-person-drowning{--fa:""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:""}.fa-spray-can{--fa:""}.fa-truck-monster{--fa:""}.fa-w{--fa:"W"}.fa-earth-africa,.fa-globe-africa{--fa:""}.fa-rainbow{--fa:""}.fa-circle-notch{--fa:""}.fa-tablet-alt,.fa-tablet-screen-button{--fa:""}.fa-paw{--fa:""}.fa-cloud{--fa:""}.fa-trowel-bricks{--fa:""}.fa-face-flushed,.fa-flushed{--fa:""}.fa-hospital-user{--fa:""}.fa-tent-arrow-left-right{--fa:""}.fa-gavel,.fa-legal{--fa:""}.fa-binoculars{--fa:""}.fa-microphone-slash{--fa:""}.fa-box-tissue{--fa:""}.fa-motorcycle{--fa:""}.fa-bell-concierge,.fa-concierge-bell{--fa:""}.fa-pen-ruler,.fa-pencil-ruler{--fa:""}.fa-people-arrows,.fa-people-arrows-left-right{--fa:""}.fa-mars-and-venus-burst{--fa:""}.fa-caret-square-right,.fa-square-caret-right{--fa:""}.fa-cut,.fa-scissors{--fa:""}.fa-sun-plant-wilt{--fa:""}.fa-toilets-portable{--fa:""}.fa-hockey-puck{--fa:""}.fa-table{--fa:""}.fa-magnifying-glass-arrow-right{--fa:""}.fa-digital-tachograph,.fa-tachograph-digital{--fa:""}.fa-users-slash{--fa:""}.fa-clover{--fa:""}.fa-mail-reply,.fa-reply{--fa:""}.fa-star-and-crescent{--fa:""}.fa-house-fire{--fa:""}.fa-minus-square,.fa-square-minus{--fa:""}.fa-helicopter{--fa:""}.fa-compass{--fa:""}.fa-caret-square-down,.fa-square-caret-down{--fa:""}.fa-file-circle-question{--fa:""}.fa-laptop-code{--fa:""}.fa-swatchbook{--fa:""}.fa-prescription-bottle{--fa:""}.fa-bars,.fa-navicon{--fa:""}.fa-people-group{--fa:""}.fa-hourglass-3,.fa-hourglass-end{--fa:""}.fa-heart-broken,.fa-heart-crack{--fa:""}.fa-external-link-square-alt,.fa-square-up-right{--fa:""}.fa-face-kiss-beam,.fa-kiss-beam{--fa:""}.fa-film{--fa:""}.fa-ruler-horizontal{--fa:""}.fa-people-robbery{--fa:""}.fa-lightbulb{--fa:""}.fa-caret-left{--fa:""}.fa-circle-exclamation,.fa-exclamation-circle{--fa:""}.fa-school-circle-xmark{--fa:""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:""}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:""}.fa-unlock-alt,.fa-unlock-keyhole{--fa:""}.fa-cloud-showers-heavy{--fa:""}.fa-headphones-alt,.fa-headphones-simple{--fa:""}.fa-sitemap{--fa:""}.fa-circle-dollar-to-slot,.fa-donate{--fa:""}.fa-memory{--fa:""}.fa-road-spikes{--fa:""}.fa-fire-burner{--fa:""}.fa-flag{--fa:""}.fa-hanukiah{--fa:""}.fa-feather{--fa:""}.fa-volume-down,.fa-volume-low{--fa:""}.fa-comment-slash{--fa:""}.fa-cloud-sun-rain{--fa:""}.fa-compress{--fa:""}.fa-wheat-alt,.fa-wheat-awn{--fa:""}.fa-ankh{--fa:""}.fa-hands-holding-child{--fa:""}.fa-asterisk{--fa:"\*"}.fa-check-square,.fa-square-check{--fa:""}.fa-peseta-sign{--fa:""}.fa-header,.fa-heading{--fa:""}.fa-ghost{--fa:""}.fa-list,.fa-list-squares{--fa:""}.fa-phone-square-alt,.fa-square-phone-flip{--fa:""}.fa-cart-plus{--fa:""}.fa-gamepad{--fa:""}.fa-circle-dot,.fa-dot-circle{--fa:""}.fa-dizzy,.fa-face-dizzy{--fa:""}.fa-egg{--fa:""}.fa-house-medical-circle-xmark{--fa:""}.fa-campground{--fa:""}.fa-folder-plus{--fa:""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:""}.fa-paint-brush,.fa-paintbrush{--fa:""}.fa-lock{--fa:""}.fa-gas-pump{--fa:""}.fa-hot-tub,.fa-hot-tub-person{--fa:""}.fa-map-location,.fa-map-marked{--fa:""}.fa-house-flood-water{--fa:""}.fa-tree{--fa:""}.fa-bridge-lock{--fa:""}.fa-sack-dollar{--fa:""}.fa-edit,.fa-pen-to-square{--fa:""}.fa-car-side{--fa:""}.fa-share-alt,.fa-share-nodes{--fa:""}.fa-heart-circle-minus{--fa:""}.fa-hourglass-2,.fa-hourglass-half{--fa:""}.fa-microscope{--fa:""}.fa-sink{--fa:""}.fa-bag-shopping,.fa-shopping-bag{--fa:""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:""}.fa-mitten{--fa:""}.fa-person-rays{--fa:""}.fa-users{--fa:""}.fa-eye-slash{--fa:""}.fa-flask-vial{--fa:""}.fa-hand,.fa-hand-paper{--fa:""}.fa-om{--fa:""}.fa-worm{--fa:""}.fa-house-circle-xmark{--fa:""}.fa-plug{--fa:""}.fa-chevron-up{--fa:""}.fa-hand-spock{--fa:""}.fa-stopwatch{--fa:""}.fa-face-kiss,.fa-kiss{--fa:""}.fa-bridge-circle-xmark{--fa:""}.fa-face-grin-tongue,.fa-grin-tongue{--fa:""}.fa-chess-bishop{--fa:""}.fa-face-grin-wink,.fa-grin-wink{--fa:""}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:""}.fa-road-circle-check{--fa:""}.fa-dice-five{--fa:""}.fa-rss-square,.fa-square-rss{--fa:""}.fa-land-mine-on{--fa:""}.fa-i-cursor{--fa:""}.fa-stamp{--fa:""}.fa-stairs{--fa:""}.fa-i{--fa:"I"}.fa-hryvnia,.fa-hryvnia-sign{--fa:""}.fa-pills{--fa:""}.fa-face-grin-wide,.fa-grin-alt{--fa:""}.fa-tooth{--fa:""}.fa-v{--fa:"V"}.fa-bangladeshi-taka-sign{--fa:""}.fa-bicycle{--fa:""}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:""}.fa-head-side-cough-slash{--fa:""}.fa-ambulance,.fa-truck-medical{--fa:""}.fa-wheat-awn-circle-exclamation{--fa:""}.fa-snowman{--fa:""}.fa-mortar-pestle{--fa:""}.fa-road-barrier{--fa:""}.fa-school{--fa:""}.fa-igloo{--fa:""}.fa-joint{--fa:""}.fa-angle-right{--fa:""}.fa-horse{--fa:""}.fa-q{--fa:"Q"}.fa-g{--fa:"G"}.fa-notes-medical{--fa:""}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:""}.fa-dong-sign{--fa:""}.fa-capsules{--fa:""}.fa-poo-bolt,.fa-poo-storm{--fa:""}.fa-face-frown-open,.fa-frown-open{--fa:""}.fa-hand-point-up{--fa:""}.fa-money-bill{--fa:""}.fa-bookmark{--fa:""}.fa-align-justify{--fa:""}.fa-umbrella-beach{--fa:""}.fa-helmet-un{--fa:""}.fa-bullseye{--fa:""}.fa-bacon{--fa:""}.fa-hand-point-down{--fa:""}.fa-arrow-up-from-bracket{--fa:""}.fa-folder,.fa-folder-blank{--fa:""}.fa-file-medical-alt,.fa-file-waveform{--fa:""}.fa-radiation{--fa:""}.fa-chart-simple{--fa:""}.fa-mars-stroke{--fa:""}.fa-vial{--fa:""}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:""}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:""}.fa-e{--fa:"E"}.fa-pen-alt,.fa-pen-clip{--fa:""}.fa-bridge-circle-exclamation{--fa:""}.fa-user{--fa:""}.fa-school-circle-check{--fa:""}.fa-dumpster{--fa:""}.fa-shuttle-van,.fa-van-shuttle{--fa:""}.fa-building-user{--fa:""}.fa-caret-square-left,.fa-square-caret-left{--fa:""}.fa-highlighter{--fa:""}.fa-key{--fa:""}.fa-bullhorn{--fa:""}.fa-globe{--fa:""}.fa-synagogue{--fa:""}.fa-person-half-dress{--fa:""}.fa-road-bridge{--fa:""}.fa-location-arrow{--fa:""}.fa-c{--fa:"C"}.fa-tablet-button{--fa:""}.fa-building-lock{--fa:""}.fa-pizza-slice{--fa:""}.fa-money-bill-wave{--fa:""}.fa-area-chart,.fa-chart-area{--fa:""}.fa-house-flag{--fa:""}.fa-person-circle-minus{--fa:""}.fa-ban,.fa-cancel{--fa:""}.fa-camera-rotate{--fa:""}.fa-air-freshener,.fa-spray-can-sparkles{--fa:""}.fa-star{--fa:""}.fa-repeat{--fa:""}.fa-cross{--fa:""}.fa-box{--fa:""}.fa-venus-mars{--fa:""}.fa-arrow-pointer,.fa-mouse-pointer{--fa:""}.fa-expand-arrows-alt,.fa-maximize{--fa:""}.fa-charging-station{--fa:""}.fa-shapes,.fa-triangle-circle-square{--fa:""}.fa-random,.fa-shuffle{--fa:""}.fa-person-running,.fa-running{--fa:""}.fa-mobile-retro{--fa:""}.fa-grip-lines-vertical{--fa:""}.fa-spider{--fa:""}.fa-hands-bound{--fa:""}.fa-file-invoice-dollar{--fa:""}.fa-plane-circle-exclamation{--fa:""}.fa-x-ray{--fa:""}.fa-spell-check{--fa:""}.fa-slash{--fa:""}.fa-computer-mouse,.fa-mouse{--fa:""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:""}.fa-shop-slash,.fa-store-alt-slash{--fa:""}.fa-server{--fa:""}.fa-virus-covid-slash{--fa:""}.fa-shop-lock{--fa:""}.fa-hourglass-1,.fa-hourglass-start{--fa:""}.fa-blender-phone{--fa:""}.fa-building-wheat{--fa:""}.fa-person-breastfeeding{--fa:""}.fa-right-to-bracket,.fa-sign-in-alt{--fa:""}.fa-venus{--fa:""}.fa-passport{--fa:""}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:""}.fa-heart-pulse,.fa-heartbeat{--fa:""}.fa-people-carry,.fa-people-carry-box{--fa:""}.fa-temperature-high{--fa:""}.fa-microchip{--fa:""}.fa-crown{--fa:""}.fa-weight-hanging{--fa:""}.fa-xmarks-lines{--fa:""}.fa-file-prescription{--fa:""}.fa-weight,.fa-weight-scale{--fa:""}.fa-user-friends,.fa-user-group{--fa:""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:""}.fa-chess-knight{--fa:""}.fa-face-laugh-squint,.fa-laugh-squint{--fa:""}.fa-wheelchair{--fa:""}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:""}.fa-toggle-on{--fa:""}.fa-person-walking,.fa-walking{--fa:""}.fa-l{--fa:"L"}.fa-fire{--fa:""}.fa-bed-pulse,.fa-procedures{--fa:""}.fa-shuttle-space,.fa-space-shuttle{--fa:""}.fa-face-laugh,.fa-laugh{--fa:""}.fa-folder-open{--fa:""}.fa-heart-circle-plus{--fa:""}.fa-code-fork{--fa:""}.fa-city{--fa:""}.fa-microphone-alt,.fa-microphone-lines{--fa:""}.fa-pepper-hot{--fa:""}.fa-unlock{--fa:""}.fa-colon-sign{--fa:""}.fa-headset{--fa:""}.fa-store-slash{--fa:""}.fa-road-circle-xmark{--fa:""}.fa-user-minus{--fa:""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:""}.fa-champagne-glasses,.fa-glass-cheers{--fa:""}.fa-clipboard{--fa:""}.fa-house-circle-exclamation{--fa:""}.fa-file-arrow-up,.fa-file-upload{--fa:""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:""}.fa-bath,.fa-bathtub{--fa:""}.fa-underline{--fa:""}.fa-user-edit,.fa-user-pen{--fa:""}.fa-signature{--fa:""}.fa-stroopwafel{--fa:""}.fa-bold{--fa:""}.fa-anchor-lock{--fa:""}.fa-building-ngo{--fa:""}.fa-manat-sign{--fa:""}.fa-not-equal{--fa:""}.fa-border-style,.fa-border-top-left{--fa:""}.fa-map-location-dot,.fa-map-marked-alt{--fa:""}.fa-jedi{--fa:""}.fa-poll,.fa-square-poll-vertical{--fa:""}.fa-mug-hot{--fa:""}.fa-battery-car,.fa-car-battery{--fa:""}.fa-gift{--fa:""}.fa-dice-two{--fa:""}.fa-chess-queen{--fa:""}.fa-glasses{--fa:""}.fa-chess-board{--fa:""}.fa-building-circle-check{--fa:""}.fa-person-chalkboard{--fa:""}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:""}.fa-hand-back-fist,.fa-hand-rock{--fa:""}.fa-caret-square-up,.fa-square-caret-up{--fa:""}.fa-cloud-showers-water{--fa:""}.fa-bar-chart,.fa-chart-bar{--fa:""}.fa-hands-bubbles,.fa-hands-wash{--fa:""}.fa-less-than-equal{--fa:""}.fa-train{--fa:""}.fa-eye-low-vision,.fa-low-vision{--fa:""}.fa-crow{--fa:""}.fa-sailboat{--fa:""}.fa-window-restore{--fa:""}.fa-plus-square,.fa-square-plus{--fa:""}.fa-torii-gate{--fa:""}.fa-frog{--fa:""}.fa-bucket{--fa:""}.fa-image{--fa:""}.fa-microphone{--fa:""}.fa-cow{--fa:""}.fa-caret-up{--fa:""}.fa-screwdriver{--fa:""}.fa-folder-closed{--fa:""}.fa-house-tsunami{--fa:""}.fa-square-nfi{--fa:""}.fa-arrow-up-from-ground-water{--fa:""}.fa-glass-martini-alt,.fa-martini-glass{--fa:""}.fa-square-binary{--fa:""}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:""}.fa-columns,.fa-table-columns{--fa:""}.fa-lemon{--fa:""}.fa-head-side-mask{--fa:""}.fa-handshake{--fa:""}.fa-gem{--fa:""}.fa-dolly,.fa-dolly-box{--fa:""}.fa-smoking{--fa:""}.fa-compress-arrows-alt,.fa-minimize{--fa:""}.fa-monument{--fa:""}.fa-snowplow{--fa:""}.fa-angle-double-right,.fa-angles-right{--fa:""}.fa-cannabis{--fa:""}.fa-circle-play,.fa-play-circle{--fa:""}.fa-tablets{--fa:""}.fa-ethernet{--fa:""}.fa-eur,.fa-euro,.fa-euro-sign{--fa:""}.fa-chair{--fa:""}.fa-check-circle,.fa-circle-check{--fa:""}.fa-circle-stop,.fa-stop-circle{--fa:""}.fa-compass-drafting,.fa-drafting-compass{--fa:""}.fa-plate-wheat{--fa:""}.fa-icicles{--fa:""}.fa-person-shelter{--fa:""}.fa-neuter{--fa:""}.fa-id-badge{--fa:""}.fa-marker{--fa:""}.fa-face-laugh-beam,.fa-laugh-beam{--fa:""}.fa-helicopter-symbol{--fa:""}.fa-universal-access{--fa:""}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:""}.fa-lari-sign{--fa:""}.fa-volcano{--fa:""}.fa-person-walking-dashed-line-arrow-right{--fa:""}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:""}.fa-viruses{--fa:""}.fa-square-person-confined{--fa:""}.fa-user-tie{--fa:""}.fa-arrow-down-long,.fa-long-arrow-down{--fa:""}.fa-tent-arrow-down-to-line{--fa:""}.fa-certificate{--fa:""}.fa-mail-reply-all,.fa-reply-all{--fa:""}.fa-suitcase{--fa:""}.fa-person-skating,.fa-skating{--fa:""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:""}.fa-camera-retro{--fa:""}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:""}.fa-arrow-right-to-file,.fa-file-import{--fa:""}.fa-external-link-square,.fa-square-arrow-up-right{--fa:""}.fa-box-open{--fa:""}.fa-scroll{--fa:""}.fa-spa{--fa:""}.fa-location-pin-lock{--fa:""}.fa-pause{--fa:""}.fa-hill-avalanche{--fa:""}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:""}.fa-bomb{--fa:""}.fa-registered{--fa:""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:""}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:""}.fa-subscript{--fa:""}.fa-diamond-turn-right,.fa-directions{--fa:""}.fa-burst{--fa:""}.fa-house-laptop,.fa-laptop-house{--fa:""}.fa-face-tired,.fa-tired{--fa:""}.fa-money-bills{--fa:""}.fa-smog{--fa:""}.fa-crutch{--fa:""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:""}.fa-palette{--fa:""}.fa-arrows-turn-right{--fa:""}.fa-vest{--fa:""}.fa-ferry{--fa:""}.fa-arrows-down-to-people{--fa:""}.fa-seedling,.fa-sprout{--fa:""}.fa-arrows-alt-h,.fa-left-right{--fa:""}.fa-boxes-packing{--fa:""}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:""}.fa-group-arrows-rotate{--fa:""}.fa-bowl-food{--fa:""}.fa-candy-cane{--fa:""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:""}.fa-cloud-bolt,.fa-thunderstorm{--fa:""}.fa-remove-format,.fa-text-slash{--fa:""}.fa-face-smile-wink,.fa-smile-wink{--fa:""}.fa-file-word{--fa:""}.fa-file-powerpoint{--fa:""}.fa-arrows-h,.fa-arrows-left-right{--fa:""}.fa-house-lock{--fa:""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:""}.fa-children{--fa:""}.fa-blackboard,.fa-chalkboard{--fa:""}.fa-user-alt-slash,.fa-user-large-slash{--fa:""}.fa-envelope-open{--fa:""}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:""}.fa-mattress-pillow{--fa:""}.fa-guarani-sign{--fa:""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:""}.fa-fire-extinguisher{--fa:""}.fa-cruzeiro-sign{--fa:""}.fa-greater-than-equal{--fa:""}.fa-shield-alt,.fa-shield-halved{--fa:""}.fa-atlas,.fa-book-atlas{--fa:""}.fa-virus{--fa:""}.fa-envelope-circle-check{--fa:""}.fa-layer-group{--fa:""}.fa-arrows-to-dot{--fa:""}.fa-archway{--fa:""}.fa-heart-circle-check{--fa:""}.fa-house-chimney-crack,.fa-house-damage{--fa:""}.fa-file-archive,.fa-file-zipper{--fa:""}.fa-square{--fa:""}.fa-glass-martini,.fa-martini-glass-empty{--fa:""}.fa-couch{--fa:""}.fa-cedi-sign{--fa:""}.fa-italic{--fa:""}.fa-table-cells-column-lock{--fa:""}.fa-church{--fa:""}.fa-comments-dollar{--fa:""}.fa-democrat{--fa:""}.fa-z{--fa:"Z"}.fa-person-skiing,.fa-skiing{--fa:""}.fa-road-lock{--fa:""}.fa-a{--fa:"A"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:""}.fa-feather-alt,.fa-feather-pointed{--fa:""}.fa-p{--fa:"P"}.fa-snowflake{--fa:""}.fa-newspaper{--fa:""}.fa-ad,.fa-rectangle-ad{--fa:""}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:""}.fa-filter-circle-xmark{--fa:""}.fa-locust{--fa:""}.fa-sort,.fa-unsorted{--fa:""}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:""}.fa-person-dress-burst{--fa:""}.fa-money-check-alt,.fa-money-check-dollar{--fa:""}.fa-vector-square{--fa:""}.fa-bread-slice{--fa:""}.fa-language{--fa:""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:""}.fa-filter{--fa:""}.fa-question{--fa:"\?"}.fa-file-signature{--fa:""}.fa-arrows-alt,.fa-up-down-left-right{--fa:""}.fa-house-chimney-user{--fa:""}.fa-hand-holding-heart{--fa:""}.fa-puzzle-piece{--fa:""}.fa-money-check{--fa:""}.fa-star-half-alt,.fa-star-half-stroke{--fa:""}.fa-code{--fa:""}.fa-glass-whiskey,.fa-whiskey-glass{--fa:""}.fa-building-circle-exclamation{--fa:""}.fa-magnifying-glass-chart{--fa:""}.fa-arrow-up-right-from-square,.fa-external-link{--fa:""}.fa-cubes-stacked{--fa:""}.fa-krw,.fa-won,.fa-won-sign{--fa:""}.fa-virus-covid{--fa:""}.fa-austral-sign{--fa:""}.fa-f{--fa:"F"}.fa-leaf{--fa:""}.fa-road{--fa:""}.fa-cab,.fa-taxi{--fa:""}.fa-person-circle-plus{--fa:""}.fa-chart-pie,.fa-pie-chart{--fa:""}.fa-bolt-lightning{--fa:""}.fa-sack-xmark{--fa:""}.fa-file-excel{--fa:""}.fa-file-contract{--fa:""}.fa-fish-fins{--fa:""}.fa-building-flag{--fa:""}.fa-face-grin-beam,.fa-grin-beam{--fa:""}.fa-object-ungroup{--fa:""}.fa-poop{--fa:""}.fa-location-pin,.fa-map-marker{--fa:""}.fa-kaaba{--fa:""}.fa-toilet-paper{--fa:""}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:""}.fa-eject{--fa:""}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:""}.fa-plane-circle-check{--fa:""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:""}.fa-object-group{--fa:""}.fa-chart-line,.fa-line-chart{--fa:""}.fa-mask-ventilator{--fa:""}.fa-arrow-right{--fa:""}.fa-map-signs,.fa-signs-post{--fa:""}.fa-cash-register{--fa:""}.fa-person-circle-question{--fa:""}.fa-h{--fa:"H"}.fa-tarp{--fa:""}.fa-screwdriver-wrench,.fa-tools{--fa:""}.fa-arrows-to-eye{--fa:""}.fa-plug-circle-bolt{--fa:""}.fa-heart{--fa:""}.fa-mars-and-venus{--fa:""}.fa-home-user,.fa-house-user{--fa:""}.fa-dumpster-fire{--fa:""}.fa-house-crack{--fa:""}.fa-cocktail,.fa-martini-glass-citrus{--fa:""}.fa-face-surprise,.fa-surprise{--fa:""}.fa-bottle-water{--fa:""}.fa-circle-pause,.fa-pause-circle{--fa:""}.fa-toilet-paper-slash{--fa:""}.fa-apple-alt,.fa-apple-whole{--fa:""}.fa-kitchen-set{--fa:""}.fa-r{--fa:"R"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:""}.fa-cube{--fa:""}.fa-bitcoin-sign{--fa:""}.fa-shield-dog{--fa:""}.fa-solar-panel{--fa:""}.fa-lock-open{--fa:""}.fa-elevator{--fa:""}.fa-money-bill-transfer{--fa:""}.fa-money-bill-trend-up{--fa:""}.fa-house-flood-water-circle-arrow-right{--fa:""}.fa-poll-h,.fa-square-poll-horizontal{--fa:""}.fa-circle{--fa:""}.fa-backward-fast,.fa-fast-backward{--fa:""}.fa-recycle{--fa:""}.fa-user-astronaut{--fa:""}.fa-plane-slash{--fa:""}.fa-trademark{--fa:""}.fa-basketball,.fa-basketball-ball{--fa:""}.fa-satellite-dish{--fa:""}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:""}.fa-mobile-alt,.fa-mobile-screen-button{--fa:""}.fa-volume-high,.fa-volume-up{--fa:""}.fa-users-rays{--fa:""}.fa-wallet{--fa:""}.fa-clipboard-check{--fa:""}.fa-file-audio{--fa:""}.fa-burger,.fa-hamburger{--fa:""}.fa-wrench{--fa:""}.fa-bugs{--fa:""}.fa-rupee,.fa-rupee-sign{--fa:""}.fa-file-image{--fa:""}.fa-circle-question,.fa-question-circle{--fa:""}.fa-plane-departure{--fa:""}.fa-handshake-slash{--fa:""}.fa-book-bookmark{--fa:""}.fa-code-branch{--fa:""}.fa-hat-cowboy{--fa:""}.fa-bridge{--fa:""}.fa-phone-alt,.fa-phone-flip{--fa:""}.fa-truck-front{--fa:""}.fa-cat{--fa:""}.fa-anchor-circle-exclamation{--fa:""}.fa-truck-field{--fa:""}.fa-route{--fa:""}.fa-clipboard-question{--fa:""}.fa-panorama{--fa:""}.fa-comment-medical{--fa:""}.fa-teeth-open{--fa:""}.fa-file-circle-minus{--fa:""}.fa-tags{--fa:""}.fa-wine-glass{--fa:""}.fa-fast-forward,.fa-forward-fast{--fa:""}.fa-face-meh-blank,.fa-meh-blank{--fa:""}.fa-parking,.fa-square-parking{--fa:""}.fa-house-signal{--fa:""}.fa-bars-progress,.fa-tasks-alt{--fa:""}.fa-faucet-drip{--fa:""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:""}.fa-ban-smoking,.fa-smoking-ban{--fa:""}.fa-terminal{--fa:""}.fa-mobile-button{--fa:""}.fa-house-medical-flag{--fa:""}.fa-basket-shopping,.fa-shopping-basket{--fa:""}.fa-tape{--fa:""}.fa-bus-alt,.fa-bus-simple{--fa:""}.fa-eye{--fa:""}.fa-face-sad-cry,.fa-sad-cry{--fa:""}.fa-audio-description{--fa:""}.fa-person-military-to-person{--fa:""}.fa-file-shield{--fa:""}.fa-user-slash{--fa:""}.fa-pen{--fa:""}.fa-tower-observation{--fa:""}.fa-file-code{--fa:""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:""}.fa-bus{--fa:""}.fa-heart-circle-xmark{--fa:""}.fa-home-lg,.fa-house-chimney{--fa:""}.fa-window-maximize{--fa:""}.fa-face-frown,.fa-frown{--fa:""}.fa-prescription{--fa:""}.fa-shop,.fa-store-alt{--fa:""}.fa-floppy-disk,.fa-save{--fa:""}.fa-vihara{--fa:""}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:""}.fa-sort-asc,.fa-sort-up{--fa:""}.fa-comment-dots,.fa-commenting{--fa:""}.fa-plant-wilt{--fa:""}.fa-diamond{--fa:""}.fa-face-grin-squint,.fa-grin-squint{--fa:""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:""}.fa-chart-diagram{--fa:""}.fa-bacterium{--fa:""}.fa-hand-pointer{--fa:""}.fa-drum-steelpan{--fa:""}.fa-hand-scissors{--fa:""}.fa-hands-praying,.fa-praying-hands{--fa:""}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:""}.fa-biohazard{--fa:""}.fa-location,.fa-location-crosshairs{--fa:""}.fa-mars-double{--fa:""}.fa-child-dress{--fa:""}.fa-users-between-lines{--fa:""}.fa-lungs-virus{--fa:""}.fa-face-grin-tears,.fa-grin-tears{--fa:""}.fa-phone{--fa:""}.fa-calendar-times,.fa-calendar-xmark{--fa:""}.fa-child-reaching{--fa:""}.fa-head-side-virus{--fa:""}.fa-user-cog,.fa-user-gear{--fa:""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:""}.fa-door-closed{--fa:""}.fa-shield-virus{--fa:""}.fa-dice-six{--fa:""}.fa-mosquito-net{--fa:""}.fa-file-fragment{--fa:""}.fa-bridge-water{--fa:""}.fa-person-booth{--fa:""}.fa-text-width{--fa:""}.fa-hat-wizard{--fa:""}.fa-pen-fancy{--fa:""}.fa-digging,.fa-person-digging{--fa:""}.fa-trash{--fa:""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:""}.fa-book-medical{--fa:""}.fa-poo{--fa:""}.fa-quote-right,.fa-quote-right-alt{--fa:""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:""}.fa-cubes{--fa:""}.fa-divide{--fa:""}.fa-tenge,.fa-tenge-sign{--fa:""}.fa-headphones{--fa:""}.fa-hands-holding{--fa:""}.fa-hands-clapping{--fa:""}.fa-republican{--fa:""}.fa-arrow-left{--fa:""}.fa-person-circle-xmark{--fa:""}.fa-ruler{--fa:""}.fa-align-left{--fa:""}.fa-dice-d6{--fa:""}.fa-restroom{--fa:""}.fa-j{--fa:"J"}.fa-users-viewfinder{--fa:""}.fa-file-video{--fa:""}.fa-external-link-alt,.fa-up-right-from-square{--fa:""}.fa-table-cells,.fa-th{--fa:""}.fa-file-pdf{--fa:""}.fa-bible,.fa-book-bible{--fa:""}.fa-o{--fa:"O"}.fa-medkit,.fa-suitcase-medical{--fa:""}.fa-user-secret{--fa:""}.fa-otter{--fa:""}.fa-female,.fa-person-dress{--fa:""}.fa-comment-dollar{--fa:""}.fa-briefcase-clock,.fa-business-time{--fa:""}.fa-table-cells-large,.fa-th-large{--fa:""}.fa-book-tanakh,.fa-tanakh{--fa:""}.fa-phone-volume,.fa-volume-control-phone{--fa:""}.fa-hat-cowboy-side{--fa:""}.fa-clipboard-user{--fa:""}.fa-child{--fa:""}.fa-lira-sign{--fa:""}.fa-satellite{--fa:""}.fa-plane-lock{--fa:""}.fa-tag{--fa:""}.fa-comment{--fa:""}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:""}.fa-envelope{--fa:""}.fa-angle-double-up,.fa-angles-up{--fa:""}.fa-paperclip{--fa:""}.fa-arrow-right-to-city{--fa:""}.fa-ribbon{--fa:""}.fa-lungs{--fa:""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:""}.fa-litecoin-sign{--fa:""}.fa-border-none{--fa:""}.fa-circle-nodes{--fa:""}.fa-parachute-box{--fa:""}.fa-indent{--fa:""}.fa-truck-field-un{--fa:""}.fa-hourglass,.fa-hourglass-empty{--fa:""}.fa-mountain{--fa:""}.fa-user-doctor,.fa-user-md{--fa:""}.fa-circle-info,.fa-info-circle{--fa:""}.fa-cloud-meatball{--fa:""}.fa-camera,.fa-camera-alt{--fa:""}.fa-square-virus{--fa:""}.fa-meteor{--fa:""}.fa-car-on{--fa:""}.fa-sleigh{--fa:""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:""}.fa-water{--fa:""}.fa-calendar-check{--fa:""}.fa-braille{--fa:""}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:""}.fa-landmark{--fa:""}.fa-truck{--fa:""}.fa-crosshairs{--fa:""}.fa-person-cane{--fa:""}.fa-tent{--fa:""}.fa-vest-patches{--fa:""}.fa-check-double{--fa:""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:""}.fa-money-bill-wheat{--fa:""}.fa-cookie{--fa:""}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:""}.fa-hard-drive,.fa-hdd{--fa:""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:""}.fa-dumbbell{--fa:""}.fa-list-alt,.fa-rectangle-list{--fa:""}.fa-tarp-droplet{--fa:""}.fa-house-medical-circle-check{--fa:""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:""}.fa-calendar-plus{--fa:""}.fa-plane-arrival{--fa:""}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:""}.fa-subway,.fa-train-subway{--fa:""}.fa-chart-gantt{--fa:""}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:""}.fa-crop-alt,.fa-crop-simple{--fa:""}.fa-money-bill-1,.fa-money-bill-alt{--fa:""}.fa-left-long,.fa-long-arrow-alt-left{--fa:""}.fa-dna{--fa:""}.fa-virus-slash{--fa:""}.fa-minus,.fa-subtract{--fa:""}.fa-chess{--fa:""}.fa-arrow-left-long,.fa-long-arrow-left{--fa:""}.fa-plug-circle-check{--fa:""}.fa-street-view{--fa:""}.fa-franc-sign{--fa:""}.fa-volume-off{--fa:""}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:""}.fa-cog,.fa-gear{--fa:""}.fa-droplet-slash,.fa-tint-slash{--fa:""}.fa-mosque{--fa:""}.fa-mosquito{--fa:""}.fa-star-of-david{--fa:""}.fa-person-military-rifle{--fa:""}.fa-cart-shopping,.fa-shopping-cart{--fa:""}.fa-vials{--fa:""}.fa-plug-circle-plus{--fa:""}.fa-place-of-worship{--fa:""}.fa-grip-vertical{--fa:""}.fa-hexagon-nodes{--fa:""}.fa-arrow-turn-up,.fa-level-up{--fa:""}.fa-u{--fa:"U"}.fa-square-root-alt,.fa-square-root-variable{--fa:""}.fa-clock,.fa-clock-four{--fa:""}.fa-backward-step,.fa-step-backward{--fa:""}.fa-pallet{--fa:""}.fa-faucet{--fa:""}.fa-baseball-bat-ball{--fa:""}.fa-s{--fa:"S"}.fa-timeline{--fa:""}.fa-keyboard{--fa:""}.fa-caret-down{--fa:""}.fa-clinic-medical,.fa-house-chimney-medical{--fa:""}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:""}.fa-mobile-android-alt,.fa-mobile-screen{--fa:""}.fa-plane-up{--fa:""}.fa-piggy-bank{--fa:""}.fa-battery-3,.fa-battery-half{--fa:""}.fa-mountain-city{--fa:""}.fa-coins{--fa:""}.fa-khanda{--fa:""}.fa-sliders,.fa-sliders-h{--fa:""}.fa-folder-tree{--fa:""}.fa-network-wired{--fa:""}.fa-map-pin{--fa:""}.fa-hamsa{--fa:""}.fa-cent-sign{--fa:""}.fa-flask{--fa:""}.fa-person-pregnant{--fa:""}.fa-wand-sparkles{--fa:""}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:""}.fa-ticket{--fa:""}.fa-power-off{--fa:""}.fa-long-arrow-alt-right,.fa-right-long{--fa:""}.fa-flag-usa{--fa:""}.fa-laptop-file{--fa:""}.fa-teletype,.fa-tty{--fa:""}.fa-diagram-next{--fa:""}.fa-person-rifle{--fa:""}.fa-house-medical-circle-exclamation{--fa:""}.fa-closed-captioning{--fa:""}.fa-hiking,.fa-person-hiking{--fa:""}.fa-venus-double{--fa:""}.fa-images{--fa:""}.fa-calculator{--fa:""}.fa-people-pulling{--fa:""}.fa-n{--fa:"N"}.fa-cable-car,.fa-tram{--fa:""}.fa-cloud-rain{--fa:""}.fa-building-circle-xmark{--fa:""}.fa-ship{--fa:""}.fa-arrows-down-to-line{--fa:""}.fa-download{--fa:""}.fa-face-grin,.fa-grin{--fa:""}.fa-backspace,.fa-delete-left{--fa:""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:""}.fa-file-circle-check{--fa:""}.fa-forward{--fa:""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:""}.fa-face-meh,.fa-meh{--fa:""}.fa-align-center{--fa:""}.fa-book-dead,.fa-book-skull{--fa:""}.fa-drivers-license,.fa-id-card{--fa:""}.fa-dedent,.fa-outdent{--fa:""}.fa-heart-circle-exclamation{--fa:""}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:""}.fa-calendar-week{--fa:""}.fa-laptop-medical{--fa:""}.fa-b{--fa:"B"}.fa-file-medical{--fa:""}.fa-dice-one{--fa:""}.fa-kiwi-bird{--fa:""}.fa-arrow-right-arrow-left,.fa-exchange{--fa:""}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:""}.fa-cutlery,.fa-utensils{--fa:""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:""}.fa-mill-sign{--fa:""}.fa-bowl-rice{--fa:""}.fa-skull{--fa:""}.fa-broadcast-tower,.fa-tower-broadcast{--fa:""}.fa-truck-pickup{--fa:""}.fa-long-arrow-alt-up,.fa-up-long{--fa:""}.fa-stop{--fa:""}.fa-code-merge{--fa:""}.fa-upload{--fa:""}.fa-hurricane{--fa:""}.fa-mound{--fa:""}.fa-toilet-portable{--fa:""}.fa-compact-disc{--fa:""}.fa-file-arrow-down,.fa-file-download{--fa:""}.fa-caravan{--fa:""}.fa-shield-cat{--fa:""}.fa-bolt,.fa-zap{--fa:""}.fa-glass-water{--fa:""}.fa-oil-well{--fa:""}.fa-vault{--fa:""}.fa-mars{--fa:""}.fa-toilet{--fa:""}.fa-plane-circle-xmark{--fa:""}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:""}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:""}.fa-sun{--fa:""}.fa-guitar{--fa:""}.fa-face-laugh-wink,.fa-laugh-wink{--fa:""}.fa-horse-head{--fa:""}.fa-bore-hole{--fa:""}.fa-industry{--fa:""}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:""}.fa-arrows-turn-to-dots{--fa:""}.fa-florin-sign{--fa:""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:""}.fa-less-than{--fa:"\<"}.fa-angle-down{--fa:""}.fa-car-tunnel{--fa:""}.fa-head-side-cough{--fa:""}.fa-grip-lines{--fa:""}.fa-thumbs-down{--fa:""}.fa-user-lock{--fa:""}.fa-arrow-right-long,.fa-long-arrow-right{--fa:""}.fa-anchor-circle-xmark{--fa:""}.fa-ellipsis,.fa-ellipsis-h{--fa:""}.fa-chess-pawn{--fa:""}.fa-first-aid,.fa-kit-medical{--fa:""}.fa-person-through-window{--fa:""}.fa-toolbox{--fa:""}.fa-hands-holding-circle{--fa:""}.fa-bug{--fa:""}.fa-credit-card,.fa-credit-card-alt{--fa:""}.fa-automobile,.fa-car{--fa:""}.fa-hand-holding-hand{--fa:""}.fa-book-open-reader,.fa-book-reader{--fa:""}.fa-mountain-sun{--fa:""}.fa-arrows-left-right-to-line{--fa:""}.fa-dice-d20{--fa:""}.fa-truck-droplet{--fa:""}.fa-file-circle-xmark{--fa:""}.fa-temperature-arrow-up,.fa-temperature-up{--fa:""}.fa-medal{--fa:""}.fa-bed{--fa:""}.fa-h-square,.fa-square-h{--fa:""}.fa-podcast{--fa:""}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:""}.fa-bell{--fa:""}.fa-superscript{--fa:""}.fa-plug-circle-xmark{--fa:""}.fa-star-of-life{--fa:""}.fa-phone-slash{--fa:""}.fa-paint-roller{--fa:""}.fa-hands-helping,.fa-handshake-angle{--fa:""}.fa-location-dot,.fa-map-marker-alt{--fa:""}.fa-file{--fa:""}.fa-greater-than{--fa:"\>"}.fa-person-swimming,.fa-swimmer{--fa:""}.fa-arrow-down{--fa:""}.fa-droplet,.fa-tint{--fa:""}.fa-eraser{--fa:""}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:""}.fa-person-burst{--fa:""}.fa-dove{--fa:""}.fa-battery-0,.fa-battery-empty{--fa:""}.fa-socks{--fa:""}.fa-inbox{--fa:""}.fa-section{--fa:""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:""}.fa-envelope-open-text{--fa:""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:""}.fa-wine-bottle{--fa:""}.fa-chess-rook{--fa:""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:""}.fa-dharmachakra{--fa:""}.fa-hotdog{--fa:""}.fa-blind,.fa-person-walking-with-cane{--fa:""}.fa-drum{--fa:""}.fa-ice-cream{--fa:""}.fa-heart-circle-bolt{--fa:""}.fa-fax{--fa:""}.fa-paragraph{--fa:""}.fa-check-to-slot,.fa-vote-yea{--fa:""}.fa-star-half{--fa:""}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:""}.fa-chain,.fa-link{--fa:""}.fa-assistive-listening-systems,.fa-ear-listen{--fa:""}.fa-tree-city{--fa:""}.fa-play{--fa:""}.fa-font{--fa:""}.fa-table-cells-row-lock{--fa:""}.fa-rupiah-sign{--fa:""}.fa-magnifying-glass,.fa-search{--fa:""}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:""}.fa-diagnoses,.fa-person-dots-from-line{--fa:""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:""}.fa-naira-sign{--fa:""}.fa-cart-arrow-down{--fa:""}.fa-walkie-talkie{--fa:""}.fa-file-edit,.fa-file-pen{--fa:""}.fa-receipt{--fa:""}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:""}.fa-suitcase-rolling{--fa:""}.fa-person-circle-exclamation{--fa:""}.fa-chevron-down{--fa:""}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:""}.fa-skull-crossbones{--fa:""}.fa-code-compare{--fa:""}.fa-list-dots,.fa-list-ul{--fa:""}.fa-school-lock{--fa:""}.fa-tower-cell{--fa:""}.fa-down-long,.fa-long-arrow-alt-down{--fa:""}.fa-ranking-star{--fa:""}.fa-chess-king{--fa:""}.fa-person-harassing{--fa:""}.fa-brazilian-real-sign{--fa:""}.fa-landmark-alt,.fa-landmark-dome{--fa:""}.fa-arrow-up{--fa:""}.fa-television,.fa-tv,.fa-tv-alt{--fa:""}.fa-shrimp{--fa:""}.fa-list-check,.fa-tasks{--fa:""}.fa-jug-detergent{--fa:""}.fa-circle-user,.fa-user-circle{--fa:""}.fa-user-shield{--fa:""}.fa-wind{--fa:""}.fa-car-burst,.fa-car-crash{--fa:""}.fa-y{--fa:"Y"}.fa-person-snowboarding,.fa-snowboarding{--fa:""}.fa-shipping-fast,.fa-truck-fast{--fa:""}.fa-fish{--fa:""}.fa-user-graduate{--fa:""}.fa-adjust,.fa-circle-half-stroke{--fa:""}.fa-clapperboard{--fa:""}.fa-circle-radiation,.fa-radiation-alt{--fa:""}.fa-baseball,.fa-baseball-ball{--fa:""}.fa-jet-fighter-up{--fa:""}.fa-diagram-project,.fa-project-diagram{--fa:""}.fa-copy{--fa:""}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:""}.fa-hand-sparkles{--fa:""}.fa-grip,.fa-grip-horizontal{--fa:""}.fa-share-from-square,.fa-share-square{--fa:""}.fa-child-combatant,.fa-child-rifle{--fa:""}.fa-gun{--fa:""}.fa-phone-square,.fa-square-phone{--fa:""}.fa-add,.fa-plus{--fa:"\+"}.fa-expand{--fa:""}.fa-computer{--fa:""}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:""}.fa-arrows,.fa-arrows-up-down-left-right{--fa:""}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:""}.fa-peso-sign{--fa:""}.fa-building-shield{--fa:""}.fa-baby{--fa:""}.fa-users-line{--fa:""}.fa-quote-left,.fa-quote-left-alt{--fa:""}.fa-tractor{--fa:""}.fa-trash-arrow-up,.fa-trash-restore{--fa:""}.fa-arrow-down-up-lock{--fa:""}.fa-lines-leaning{--fa:""}.fa-ruler-combined{--fa:""}.fa-copyright{--fa:""}.fa-equals{--fa:"\="}.fa-blender{--fa:""}.fa-teeth{--fa:""}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:""}.fa-map{--fa:""}.fa-rocket{--fa:""}.fa-photo-film,.fa-photo-video{--fa:""}.fa-folder-minus{--fa:""}.fa-hexagon-nodes-bolt{--fa:""}.fa-store{--fa:""}.fa-arrow-trend-up{--fa:""}.fa-plug-circle-minus{--fa:""}.fa-sign,.fa-sign-hanging{--fa:""}.fa-bezier-curve{--fa:""}.fa-bell-slash{--fa:""}.fa-tablet,.fa-tablet-android{--fa:""}.fa-school-flag{--fa:""}.fa-fill{--fa:""}.fa-angle-up{--fa:""}.fa-drumstick-bite{--fa:""}.fa-holly-berry{--fa:""}.fa-chevron-left{--fa:""}.fa-bacteria{--fa:""}.fa-hand-lizard{--fa:""}.fa-notdef{--fa:""}.fa-disease{--fa:""}.fa-briefcase-medical{--fa:""}.fa-genderless{--fa:""}.fa-chevron-right{--fa:""}.fa-retweet{--fa:""}.fa-car-alt,.fa-car-rear{--fa:""}.fa-pump-soap{--fa:""}.fa-video-slash{--fa:""}.fa-battery-2,.fa-battery-quarter{--fa:""}.fa-radio{--fa:""}.fa-baby-carriage,.fa-carriage-baby{--fa:""}.fa-traffic-light{--fa:""}.fa-thermometer{--fa:""}.fa-vr-cardboard{--fa:""}.fa-hand-middle-finger{--fa:""}.fa-percent,.fa-percentage{--fa:"\%"}.fa-truck-moving{--fa:""}.fa-glass-water-droplet{--fa:""}.fa-display{--fa:""}.fa-face-smile,.fa-smile{--fa:""}.fa-thumb-tack,.fa-thumbtack{--fa:""}.fa-trophy{--fa:""}.fa-person-praying,.fa-pray{--fa:""}.fa-hammer{--fa:""}.fa-hand-peace{--fa:""}.fa-rotate,.fa-sync-alt{--fa:""}.fa-spinner{--fa:""}.fa-robot{--fa:""}.fa-peace{--fa:""}.fa-cogs,.fa-gears{--fa:""}.fa-warehouse{--fa:""}.fa-arrow-up-right-dots{--fa:""}.fa-splotch{--fa:""}.fa-face-grin-hearts,.fa-grin-hearts{--fa:""}.fa-dice-four{--fa:""}.fa-sim-card{--fa:""}.fa-transgender,.fa-transgender-alt{--fa:""}.fa-mercury{--fa:""}.fa-arrow-turn-down,.fa-level-down{--fa:""}.fa-person-falling-burst{--fa:""}.fa-award{--fa:""}.fa-ticket-alt,.fa-ticket-simple{--fa:""}.fa-building{--fa:""}.fa-angle-double-left,.fa-angles-left{--fa:""}.fa-qrcode{--fa:""}.fa-clock-rotate-left,.fa-history{--fa:""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:""}.fa-arrow-right-from-file,.fa-file-export{--fa:""}.fa-shield,.fa-shield-blank{--fa:""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:""}.fa-comment-nodes{--fa:""}.fa-house-medical{--fa:""}.fa-golf-ball,.fa-golf-ball-tee{--fa:""}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:""}.fa-house-chimney-window{--fa:""}.fa-pen-nib{--fa:""}.fa-tent-arrow-turn-left{--fa:""}.fa-tents{--fa:""}.fa-magic,.fa-wand-magic{--fa:""}.fa-dog{--fa:""}.fa-carrot{--fa:""}.fa-moon{--fa:""}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:""}.fa-cheese{--fa:""}.fa-yin-yang{--fa:""}.fa-music{--fa:""}.fa-code-commit{--fa:""}.fa-temperature-low{--fa:""}.fa-biking,.fa-person-biking{--fa:""}.fa-broom{--fa:""}.fa-shield-heart{--fa:""}.fa-gopuram{--fa:""}.fa-earth-oceania,.fa-globe-oceania{--fa:""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:""}.fa-hashtag{--fa:"\#"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:""}.fa-oil-can{--fa:""}.fa-t{--fa:"T"}.fa-hippo{--fa:""}.fa-chart-column{--fa:""}.fa-infinity{--fa:""}.fa-vial-circle-check{--fa:""}.fa-person-arrow-down-to-line{--fa:""}.fa-voicemail{--fa:""}.fa-fan{--fa:""}.fa-person-walking-luggage{--fa:""}.fa-arrows-alt-v,.fa-up-down{--fa:""}.fa-cloud-moon-rain{--fa:""}.fa-calendar{--fa:""}.fa-trailer{--fa:""}.fa-bahai,.fa-haykal{--fa:""}.fa-sd-card{--fa:""}.fa-dragon{--fa:""}.fa-shoe-prints{--fa:""}.fa-circle-plus,.fa-plus-circle{--fa:""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:""}.fa-hand-holding{--fa:""}.fa-plug-circle-exclamation{--fa:""}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:""}.fa-clone{--fa:""}.fa-person-walking-arrow-loop-left{--fa:""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:""}.fa-fire-alt,.fa-fire-flame-curved{--fa:""}.fa-tornado{--fa:""}.fa-file-circle-plus{--fa:""}.fa-book-quran,.fa-quran{--fa:""}.fa-anchor{--fa:""}.fa-border-all{--fa:""}.fa-angry,.fa-face-angry{--fa:""}.fa-cookie-bite{--fa:""}.fa-arrow-trend-down{--fa:""}.fa-feed,.fa-rss{--fa:""}.fa-draw-polygon{--fa:""}.fa-balance-scale,.fa-scale-balanced{--fa:""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:""}.fa-shower{--fa:""}.fa-desktop,.fa-desktop-alt{--fa:""}.fa-m{--fa:"M"}.fa-table-list,.fa-th-list{--fa:""}.fa-comment-sms,.fa-sms{--fa:""}.fa-book{--fa:""}.fa-user-plus{--fa:""}.fa-check{--fa:""}.fa-battery-4,.fa-battery-three-quarters{--fa:""}.fa-house-circle-check{--fa:""}.fa-angle-left{--fa:""}.fa-diagram-successor{--fa:""}.fa-truck-arrow-right{--fa:""}.fa-arrows-split-up-and-left{--fa:""}.fa-fist-raised,.fa-hand-fist{--fa:""}.fa-cloud-moon{--fa:""}.fa-briefcase{--fa:""}.fa-person-falling{--fa:""}.fa-image-portrait,.fa-portrait{--fa:""}.fa-user-tag{--fa:""}.fa-rug{--fa:""}.fa-earth-europe,.fa-globe-europe{--fa:""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:""}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:""}.fa-baht-sign{--fa:""}.fa-book-open{--fa:""}.fa-book-journal-whills,.fa-journal-whills{--fa:""}.fa-handcuffs{--fa:""}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:""}.fa-database{--fa:""}.fa-mail-forward,.fa-share{--fa:""}.fa-bottle-droplet{--fa:""}.fa-mask-face{--fa:""}.fa-hill-rockslide{--fa:""}.fa-exchange-alt,.fa-right-left{--fa:""}.fa-paper-plane{--fa:""}.fa-road-circle-exclamation{--fa:""}.fa-dungeon{--fa:""}.fa-align-right{--fa:""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:""}.fa-life-ring{--fa:""}.fa-hands,.fa-sign-language,.fa-signing{--fa:""}.fa-calendar-day{--fa:""}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:""}.fa-arrows-up-down,.fa-arrows-v{--fa:""}.fa-face-grimace,.fa-grimace{--fa:""}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:""}.fa-level-down-alt,.fa-turn-down{--fa:""}.fa-person-walking-arrow-right{--fa:""}.fa-envelope-square,.fa-square-envelope{--fa:""}.fa-dice{--fa:""}.fa-bowling-ball{--fa:""}.fa-brain{--fa:""}.fa-band-aid,.fa-bandage{--fa:""}.fa-calendar-minus{--fa:""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:""}.fa-gifts{--fa:""}.fa-hotel{--fa:""}.fa-earth-asia,.fa-globe-asia{--fa:""}.fa-id-card-alt,.fa-id-card-clip{--fa:""}.fa-magnifying-glass-plus,.fa-search-plus{--fa:""}.fa-thumbs-up{--fa:""}.fa-user-clock{--fa:""}.fa-allergies,.fa-hand-dots{--fa:""}.fa-file-invoice{--fa:""}.fa-window-minimize{--fa:""}.fa-coffee,.fa-mug-saucer{--fa:""}.fa-brush{--fa:""}.fa-file-half-dashed{--fa:""}.fa-mask{--fa:""}.fa-magnifying-glass-minus,.fa-search-minus{--fa:""}.fa-ruler-vertical{--fa:""}.fa-user-alt,.fa-user-large{--fa:""}.fa-train-tram{--fa:""}.fa-user-nurse{--fa:""}.fa-syringe{--fa:""}.fa-cloud-sun{--fa:""}.fa-stopwatch-20{--fa:""}.fa-square-full{--fa:""}.fa-magnet{--fa:""}.fa-jar{--fa:""}.fa-note-sticky,.fa-sticky-note{--fa:""}.fa-bug-slash{--fa:""}.fa-arrow-up-from-water-pump{--fa:""}.fa-bone{--fa:""}.fa-table-cells-row-unlock{--fa:""}.fa-user-injured{--fa:""}.fa-face-sad-tear,.fa-sad-tear{--fa:""}.fa-plane{--fa:""}.fa-tent-arrows-down{--fa:""}.fa-exclamation{--fa:"\!"}.fa-arrows-spin{--fa:""}.fa-print{--fa:""}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:""}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:"\$"}.fa-x{--fa:"X"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:""}.fa-users-cog,.fa-users-gear{--fa:""}.fa-person-military-pointing{--fa:""}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:""}.fa-umbrella{--fa:""}.fa-trowel{--fa:""}.fa-d{--fa:"D"}.fa-stapler{--fa:""}.fa-masks-theater,.fa-theater-masks{--fa:""}.fa-kip-sign{--fa:""}.fa-hand-point-left{--fa:""}.fa-handshake-alt,.fa-handshake-simple{--fa:""}.fa-fighter-jet,.fa-jet-fighter{--fa:""}.fa-share-alt-square,.fa-square-share-nodes{--fa:""}.fa-barcode{--fa:""}.fa-plus-minus{--fa:""}.fa-video,.fa-video-camera{--fa:""}.fa-graduation-cap,.fa-mortar-board{--fa:""}.fa-hand-holding-medical{--fa:""}.fa-person-circle-check{--fa:""}.fa-level-up-alt,.fa-turn-up{--fa:""}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:400;src:url(/build/fonts/fa-regular-400.89999bdf.woff2) format("woff2"),url(/build/fonts/fa-regular-400.914997e1.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:900;src:url(/build/fonts/fa-solid-900.2463b90d.woff2) format("woff2"),url(/build/fonts/fa-solid-900.2582b0e4.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(/build/fonts/fa-brands-400.c210719e.woff2) format("woff2"),url(/build/fonts/fa-brands-400.1815e004.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:""}.fa-hooli{--fa:""}.fa-yelp{--fa:""}.fa-cc-visa{--fa:""}.fa-lastfm{--fa:""}.fa-shopware{--fa:""}.fa-creative-commons-nc{--fa:""}.fa-aws{--fa:""}.fa-redhat{--fa:""}.fa-yoast{--fa:""}.fa-cloudflare{--fa:""}.fa-ups{--fa:""}.fa-pixiv{--fa:""}.fa-wpexplorer{--fa:""}.fa-dyalog{--fa:""}.fa-bity{--fa:""}.fa-stackpath{--fa:""}.fa-buysellads{--fa:""}.fa-first-order{--fa:""}.fa-modx{--fa:""}.fa-guilded{--fa:""}.fa-vnv{--fa:""}.fa-js-square,.fa-square-js{--fa:""}.fa-microsoft{--fa:""}.fa-qq{--fa:""}.fa-orcid{--fa:""}.fa-java{--fa:""}.fa-invision{--fa:""}.fa-creative-commons-pd-alt{--fa:""}.fa-centercode{--fa:""}.fa-glide-g{--fa:""}.fa-drupal{--fa:""}.fa-jxl{--fa:""}.fa-dart-lang{--fa:""}.fa-hire-a-helper{--fa:""}.fa-creative-commons-by{--fa:""}.fa-unity{--fa:""}.fa-whmcs{--fa:""}.fa-rocketchat{--fa:""}.fa-vk{--fa:""}.fa-untappd{--fa:""}.fa-mailchimp{--fa:""}.fa-css3-alt{--fa:""}.fa-reddit-square,.fa-square-reddit{--fa:""}.fa-vimeo-v{--fa:""}.fa-contao{--fa:""}.fa-square-font-awesome{--fa:""}.fa-deskpro{--fa:""}.fa-brave{--fa:""}.fa-sistrix{--fa:""}.fa-instagram-square,.fa-square-instagram{--fa:""}.fa-battle-net{--fa:""}.fa-the-red-yeti{--fa:""}.fa-hacker-news-square,.fa-square-hacker-news{--fa:""}.fa-edge{--fa:""}.fa-threads{--fa:""}.fa-napster{--fa:""}.fa-snapchat-square,.fa-square-snapchat{--fa:""}.fa-google-plus-g{--fa:""}.fa-artstation{--fa:""}.fa-markdown{--fa:""}.fa-sourcetree{--fa:""}.fa-google-plus{--fa:""}.fa-diaspora{--fa:""}.fa-foursquare{--fa:""}.fa-stack-overflow{--fa:""}.fa-github-alt{--fa:""}.fa-phoenix-squadron{--fa:""}.fa-pagelines{--fa:""}.fa-algolia{--fa:""}.fa-red-river{--fa:""}.fa-creative-commons-sa{--fa:""}.fa-safari{--fa:""}.fa-google{--fa:""}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:""}.fa-atlassian{--fa:""}.fa-linkedin-in{--fa:""}.fa-digital-ocean{--fa:""}.fa-nimblr{--fa:""}.fa-chromecast{--fa:""}.fa-evernote{--fa:""}.fa-hacker-news{--fa:""}.fa-creative-commons-sampling{--fa:""}.fa-adversal{--fa:""}.fa-creative-commons{--fa:""}.fa-watchman-monitoring{--fa:""}.fa-fonticons{--fa:""}.fa-weixin{--fa:""}.fa-shirtsinbulk{--fa:""}.fa-codepen{--fa:""}.fa-git-alt{--fa:""}.fa-lyft{--fa:""}.fa-rev{--fa:""}.fa-windows{--fa:""}.fa-wizards-of-the-coast{--fa:""}.fa-square-viadeo,.fa-viadeo-square{--fa:""}.fa-meetup{--fa:""}.fa-centos{--fa:""}.fa-adn{--fa:""}.fa-cloudsmith{--fa:""}.fa-opensuse{--fa:""}.fa-pied-piper-alt{--fa:""}.fa-dribbble-square,.fa-square-dribbble{--fa:""}.fa-codiepie{--fa:""}.fa-node{--fa:""}.fa-mix{--fa:""}.fa-steam{--fa:""}.fa-cc-apple-pay{--fa:""}.fa-scribd{--fa:""}.fa-debian{--fa:""}.fa-openid{--fa:""}.fa-instalod{--fa:""}.fa-files-pinwheel{--fa:""}.fa-expeditedssl{--fa:""}.fa-sellcast{--fa:""}.fa-square-twitter,.fa-twitter-square{--fa:""}.fa-r-project{--fa:""}.fa-delicious{--fa:""}.fa-freebsd{--fa:""}.fa-vuejs{--fa:""}.fa-accusoft{--fa:""}.fa-ioxhost{--fa:""}.fa-fonticons-fi{--fa:""}.fa-app-store{--fa:""}.fa-cc-mastercard{--fa:""}.fa-itunes-note{--fa:""}.fa-golang{--fa:""}.fa-kickstarter,.fa-square-kickstarter{--fa:""}.fa-grav{--fa:""}.fa-weibo{--fa:""}.fa-uncharted{--fa:""}.fa-firstdraft{--fa:""}.fa-square-youtube,.fa-youtube-square{--fa:""}.fa-wikipedia-w{--fa:""}.fa-rendact,.fa-wpressr{--fa:""}.fa-angellist{--fa:""}.fa-galactic-republic{--fa:""}.fa-nfc-directional{--fa:""}.fa-skype{--fa:""}.fa-joget{--fa:""}.fa-fedora{--fa:""}.fa-stripe-s{--fa:""}.fa-meta{--fa:""}.fa-laravel{--fa:""}.fa-hotjar{--fa:""}.fa-bluetooth-b{--fa:""}.fa-square-letterboxd{--fa:""}.fa-sticker-mule{--fa:""}.fa-creative-commons-zero{--fa:""}.fa-hips{--fa:""}.fa-css{--fa:""}.fa-behance{--fa:""}.fa-reddit{--fa:""}.fa-discord{--fa:""}.fa-chrome{--fa:""}.fa-app-store-ios{--fa:""}.fa-cc-discover{--fa:""}.fa-wpbeginner{--fa:""}.fa-confluence{--fa:""}.fa-shoelace{--fa:""}.fa-mdb{--fa:""}.fa-dochub{--fa:""}.fa-accessible-icon{--fa:""}.fa-ebay{--fa:""}.fa-amazon{--fa:""}.fa-unsplash{--fa:""}.fa-yarn{--fa:""}.fa-square-steam,.fa-steam-square{--fa:""}.fa-500px{--fa:""}.fa-square-vimeo,.fa-vimeo-square{--fa:""}.fa-asymmetrik{--fa:""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:""}.fa-gratipay{--fa:""}.fa-apple{--fa:""}.fa-hive{--fa:""}.fa-gitkraken{--fa:""}.fa-keybase{--fa:""}.fa-apple-pay{--fa:""}.fa-padlet{--fa:""}.fa-amazon-pay{--fa:""}.fa-github-square,.fa-square-github{--fa:""}.fa-stumbleupon{--fa:""}.fa-fedex{--fa:""}.fa-phoenix-framework{--fa:""}.fa-shopify{--fa:""}.fa-neos{--fa:""}.fa-square-threads{--fa:""}.fa-hackerrank{--fa:""}.fa-researchgate{--fa:""}.fa-swift{--fa:""}.fa-angular{--fa:""}.fa-speakap{--fa:""}.fa-angrycreative{--fa:""}.fa-y-combinator{--fa:""}.fa-empire{--fa:""}.fa-envira{--fa:""}.fa-google-scholar{--fa:""}.fa-gitlab-square,.fa-square-gitlab{--fa:""}.fa-studiovinari{--fa:""}.fa-pied-piper{--fa:""}.fa-wordpress{--fa:""}.fa-product-hunt{--fa:""}.fa-firefox{--fa:""}.fa-linode{--fa:""}.fa-goodreads{--fa:""}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:""}.fa-jsfiddle{--fa:""}.fa-sith{--fa:""}.fa-themeisle{--fa:""}.fa-page4{--fa:""}.fa-hashnode{--fa:""}.fa-react{--fa:""}.fa-cc-paypal{--fa:""}.fa-squarespace{--fa:""}.fa-cc-stripe{--fa:""}.fa-creative-commons-share{--fa:""}.fa-bitcoin{--fa:""}.fa-keycdn{--fa:""}.fa-opera{--fa:""}.fa-itch-io{--fa:""}.fa-umbraco{--fa:""}.fa-galactic-senate{--fa:""}.fa-ubuntu{--fa:""}.fa-draft2digital{--fa:""}.fa-stripe{--fa:""}.fa-houzz{--fa:""}.fa-gg{--fa:""}.fa-dhl{--fa:""}.fa-pinterest-square,.fa-square-pinterest{--fa:""}.fa-xing{--fa:""}.fa-blackberry{--fa:""}.fa-creative-commons-pd{--fa:""}.fa-playstation{--fa:""}.fa-quinscape{--fa:""}.fa-less{--fa:""}.fa-blogger-b{--fa:""}.fa-opencart{--fa:""}.fa-vine{--fa:""}.fa-signal-messenger{--fa:""}.fa-paypal{--fa:""}.fa-gitlab{--fa:""}.fa-typo3{--fa:""}.fa-reddit-alien{--fa:""}.fa-yahoo{--fa:""}.fa-dailymotion{--fa:""}.fa-affiliatetheme{--fa:""}.fa-pied-piper-pp{--fa:""}.fa-bootstrap{--fa:""}.fa-odnoklassniki{--fa:""}.fa-nfc-symbol{--fa:""}.fa-mintbit{--fa:""}.fa-ethereum{--fa:""}.fa-speaker-deck{--fa:""}.fa-creative-commons-nc-eu{--fa:""}.fa-patreon{--fa:""}.fa-avianex{--fa:""}.fa-ello{--fa:""}.fa-gofore{--fa:""}.fa-bimobject{--fa:""}.fa-brave-reverse{--fa:""}.fa-facebook-f{--fa:""}.fa-google-plus-square,.fa-square-google-plus{--fa:""}.fa-web-awesome{--fa:""}.fa-mandalorian{--fa:""}.fa-first-order-alt{--fa:""}.fa-osi{--fa:""}.fa-google-wallet{--fa:""}.fa-d-and-d-beyond{--fa:""}.fa-periscope{--fa:""}.fa-fulcrum{--fa:""}.fa-cloudscale{--fa:""}.fa-forumbee{--fa:""}.fa-mizuni{--fa:""}.fa-schlix{--fa:""}.fa-square-xing,.fa-xing-square{--fa:""}.fa-bandcamp{--fa:""}.fa-wpforms{--fa:""}.fa-cloudversify{--fa:""}.fa-usps{--fa:""}.fa-megaport{--fa:""}.fa-magento{--fa:""}.fa-spotify{--fa:""}.fa-optin-monster{--fa:""}.fa-fly{--fa:""}.fa-square-bluesky{--fa:""}.fa-aviato{--fa:""}.fa-itunes{--fa:""}.fa-cuttlefish{--fa:""}.fa-blogger{--fa:""}.fa-flickr{--fa:""}.fa-viber{--fa:""}.fa-soundcloud{--fa:""}.fa-digg{--fa:""}.fa-tencent-weibo{--fa:""}.fa-letterboxd{--fa:""}.fa-symfony{--fa:""}.fa-maxcdn{--fa:""}.fa-etsy{--fa:""}.fa-facebook-messenger{--fa:""}.fa-audible{--fa:""}.fa-think-peaks{--fa:""}.fa-bilibili{--fa:""}.fa-erlang{--fa:""}.fa-x-twitter{--fa:""}.fa-cotton-bureau{--fa:""}.fa-dashcube{--fa:""}.fa-42-group,.fa-innosoft{--fa:""}.fa-stack-exchange{--fa:""}.fa-elementor{--fa:""}.fa-pied-piper-square,.fa-square-pied-piper{--fa:""}.fa-creative-commons-nd{--fa:""}.fa-palfed{--fa:""}.fa-superpowers{--fa:""}.fa-resolving{--fa:""}.fa-xbox{--fa:""}.fa-square-web-awesome-stroke{--fa:""}.fa-searchengin{--fa:""}.fa-tiktok{--fa:""}.fa-facebook-square,.fa-square-facebook{--fa:""}.fa-renren{--fa:""}.fa-linux{--fa:""}.fa-glide{--fa:""}.fa-linkedin{--fa:""}.fa-hubspot{--fa:""}.fa-deploydog{--fa:""}.fa-twitch{--fa:""}.fa-flutter{--fa:""}.fa-ravelry{--fa:""}.fa-mixer{--fa:""}.fa-lastfm-square,.fa-square-lastfm{--fa:""}.fa-vimeo{--fa:""}.fa-mendeley{--fa:""}.fa-uniregistry{--fa:""}.fa-figma{--fa:""}.fa-creative-commons-remix{--fa:""}.fa-cc-amazon-pay{--fa:""}.fa-dropbox{--fa:""}.fa-instagram{--fa:""}.fa-cmplid{--fa:""}.fa-upwork{--fa:""}.fa-facebook{--fa:""}.fa-gripfire{--fa:""}.fa-jedi-order{--fa:""}.fa-uikit{--fa:""}.fa-fort-awesome-alt{--fa:""}.fa-phabricator{--fa:""}.fa-ussunnah{--fa:""}.fa-earlybirds{--fa:""}.fa-trade-federation{--fa:""}.fa-autoprefixer{--fa:""}.fa-whatsapp{--fa:""}.fa-square-upwork{--fa:""}.fa-slideshare{--fa:""}.fa-google-play{--fa:""}.fa-viadeo{--fa:""}.fa-line{--fa:""}.fa-google-drive{--fa:""}.fa-servicestack{--fa:""}.fa-simplybuilt{--fa:""}.fa-bitbucket{--fa:""}.fa-imdb{--fa:""}.fa-deezer{--fa:""}.fa-raspberry-pi{--fa:""}.fa-jira{--fa:""}.fa-docker{--fa:""}.fa-screenpal{--fa:""}.fa-bluetooth{--fa:""}.fa-gitter{--fa:""}.fa-d-and-d{--fa:""}.fa-microblog{--fa:""}.fa-cc-diners-club{--fa:""}.fa-gg-circle{--fa:""}.fa-pied-piper-hat{--fa:""}.fa-kickstarter-k{--fa:""}.fa-yandex{--fa:""}.fa-readme{--fa:""}.fa-html5{--fa:""}.fa-sellsy{--fa:""}.fa-square-web-awesome{--fa:""}.fa-sass{--fa:""}.fa-wirsindhandwerk,.fa-wsh{--fa:""}.fa-buromobelexperte{--fa:""}.fa-salesforce{--fa:""}.fa-octopus-deploy{--fa:""}.fa-medapps{--fa:""}.fa-ns8{--fa:""}.fa-pinterest-p{--fa:""}.fa-apper{--fa:""}.fa-fort-awesome{--fa:""}.fa-waze{--fa:""}.fa-bluesky{--fa:""}.fa-cc-jcb{--fa:""}.fa-snapchat,.fa-snapchat-ghost{--fa:""}.fa-fantasy-flight-games{--fa:""}.fa-rust{--fa:""}.fa-wix{--fa:""}.fa-behance-square,.fa-square-behance{--fa:""}.fa-supple{--fa:""}.fa-webflow{--fa:""}.fa-rebel{--fa:""}.fa-css3{--fa:""}.fa-staylinked{--fa:""}.fa-kaggle{--fa:""}.fa-space-awesome{--fa:""}.fa-deviantart{--fa:""}.fa-cpanel{--fa:""}.fa-goodreads-g{--fa:""}.fa-git-square,.fa-square-git{--fa:""}.fa-square-tumblr,.fa-tumblr-square{--fa:""}.fa-trello{--fa:""}.fa-creative-commons-nc-jp{--fa:""}.fa-get-pocket{--fa:""}.fa-perbyte{--fa:""}.fa-grunt{--fa:""}.fa-weebly{--fa:""}.fa-connectdevelop{--fa:""}.fa-leanpub{--fa:""}.fa-black-tie{--fa:""}.fa-themeco{--fa:""}.fa-python{--fa:""}.fa-android{--fa:""}.fa-bots{--fa:""}.fa-free-code-camp{--fa:""}.fa-hornbill{--fa:""}.fa-js{--fa:""}.fa-ideal{--fa:""}.fa-git{--fa:""}.fa-dev{--fa:""}.fa-sketch{--fa:""}.fa-yandex-international{--fa:""}.fa-cc-amex{--fa:""}.fa-uber{--fa:""}.fa-github{--fa:""}.fa-php{--fa:""}.fa-alipay{--fa:""}.fa-youtube{--fa:""}.fa-skyatlas{--fa:""}.fa-firefox-browser{--fa:""}.fa-replyd{--fa:""}.fa-suse{--fa:""}.fa-jenkins{--fa:""}.fa-twitter{--fa:""}.fa-rockrms{--fa:""}.fa-pinterest{--fa:""}.fa-buffer{--fa:""}.fa-npm{--fa:""}.fa-yammer{--fa:""}.fa-btc{--fa:""}.fa-dribbble{--fa:""}.fa-stumbleupon-circle{--fa:""}.fa-internet-explorer{--fa:""}.fa-stubber{--fa:""}.fa-telegram,.fa-telegram-plane{--fa:""}.fa-old-republic{--fa:""}.fa-odysee{--fa:""}.fa-square-whatsapp,.fa-whatsapp-square{--fa:""}.fa-node-js{--fa:""}.fa-edge-legacy{--fa:""}.fa-slack,.fa-slack-hash{--fa:""}.fa-medrt{--fa:""}.fa-usb{--fa:""}.fa-tumblr{--fa:""}.fa-vaadin{--fa:""}.fa-quora{--fa:""}.fa-square-x-twitter{--fa:""}.fa-reacteurope{--fa:""}.fa-medium,.fa-medium-m{--fa:""}.fa-amilia{--fa:""}.fa-mixcloud{--fa:""}.fa-flipboard{--fa:""}.fa-viacoin{--fa:""}.fa-critical-role{--fa:""}.fa-sitrox{--fa:""}.fa-discourse{--fa:""}.fa-joomla{--fa:""}.fa-mastodon{--fa:""}.fa-airbnb{--fa:""}.fa-wolf-pack-battalion{--fa:""}.fa-buy-n-large{--fa:""}.fa-gulp{--fa:""}.fa-creative-commons-sampling-plus{--fa:""}.fa-strava{--fa:""}.fa-ember{--fa:""}.fa-canadian-maple-leaf{--fa:""}.fa-teamspeak{--fa:""}.fa-pushed{--fa:""}.fa-wordpress-simple{--fa:""}.fa-nutritionix{--fa:""}.fa-wodu{--fa:""}.fa-google-pay{--fa:""}.fa-intercom{--fa:""}.fa-zhihu{--fa:""}.fa-korvue{--fa:""}.fa-pix{--fa:""}.fa-steam-symbol{--fa:""}.inline-search{max-width:200px}@media(min-width:360px){.inline-search{max-width:235px}}@media(min-width:768px){.inline-search{max-width:325px}.search-dropdown{width:500px}}h1.navbar-brand a span{display:inline-block;padding-top:.5rem}h1.navbar-brand a:hover{text-decoration:none}#export-buttons .dropdown-menu,.inline-search .dropdown-menu,.page-actions .dropdown-menu{z-index:1021}.navbar{--tblr-navbar-brand-font-size:1rem}.user-shortcuts .dropdown-menu-card{min-width:260px}.user-shortcuts .user-shortcuts-icon{align-items:center;background-color:var(--tblr-bg-surface-secondary);color:var(--tblr-gray-500);display:flex;height:3.125rem;justify-content:center;margin-left:auto;margin-right:auto;width:3.125rem}.error-page{margin-bottom:50px}@media print{.control-sidebar,.sf-toolbar{display:none!important}.col-print-12{width:100%}.content-wrapper{margin:0!important}span i.dot{margin-right:0!important}.float-help,span i.dot{display:none}}.page-center{justify-content:center}.hidden-no-space{margin:0;padding:0}.pre-scrollable{max-height:340px;overflow-y:scroll}td.timesheet-description ul{padding-left:15px}td.timesheet-description p{margin:0}td.badges{line-height:22px}.open-edit{cursor:pointer}td.w-min,th.w-min{white-space:nowrap;width:1%}table.dataTable thead>tr>th.hw-min{white-space:normal;width:1%}@media(min-width:576px){td.w-sm-min,th.w-sm-min{white-space:nowrap;width:1%}}.w-avatar{width:40px}.w-avatar img.avatar{max-width:40px}.list-group-item.danger{border-left:.2rem solid #d63939!important;padding-left:1.05rem}.list-group-item.success{border-left:.2rem solid #2fb344!important;padding-left:1.05rem}.box-body-scrollable{max-height:340px;overflow:auto}#activity_details_box th,#customer_details_box th,#project_details_box th{width:30%}.markdown blockquote p{margin:0}.markdown blockquote{background-color:var(--tblr-bg-surface-secondary);border-left:15px var(--tblr-border-style) var(--tblr-border-color)}.markdown pre code.hljs{background-color:var(--tblr-bg-surface-dark);padding:0}.overlay{background-color:var(--tblr-backdrop-bg);height:100%;left:0;opacity:.7;position:fixed;top:0;width:100%;z-index:1021}table.dataTable{clear:both;margin-bottom:0!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;position:relative}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:Font Awesome\ 6 Free;font-size:12px;font-weight:700;opacity:.5;padding-left:5px}table.dataTable thead .sorting:after{content:"";opacity:.2}table.dataTable thead .sorting_asc:after{content:""}table.dataTable thead .sorting_desc:after{content:""}table.dataTable thead>tr>th{vertical-align:middle;white-space:nowrap}table.dataTable th:active{outline:none}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-bottom-width:0;border-left-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}@media(min-width:1200px){table.dataTable.table>tbody>tr>td{vertical-align:middle}}table.dataTable .actions{width:40px}table.dataTable tr.summary td{background-color:var(--tblr-secondary-lt);border:0;font-weight:700}table.dataTable tr th.multiCheckbox{width:15px}table.dataTable tr.overlapping{border-top:2px solid rgba(214,57,57,.2)}table.dataTable tr.exported{opacity:.7}table.dataTable td .btn-group{display:flex}table.dataTable td .label{font-size:85%;line-height:24px;padding:.3em .6em}table.dataTable td span.label-invisible{opacity:.6}table.dataTable td.weekend,table.dataTable th.weekend{background-color:var(--tblr-bg-surface-tertiary)}table.dataTable th.today{background-color:var(--tblr-highlight-bg)}table.dataTable td.total,table.dataTable th.total{font-weight:700}table.table-hover tr.exported:hover{opacity:1}.action-dropdown,.actions .dropdown .dropdown-menu{z-index:1021}.calendar-entry ul{list-style-type:none;padding:0}.calendar-entry div{white-space:pre-line}.draggable{cursor:grab}#timesheet_calendar{--bs-gray-400:var(--tblr-border-color);--bs-gray-200:var(--tblr-gray-200)}.fc-day-sat,.fc-day-sun{background-color:var(--tblr-bg-surface-secondary)}@keyframes ticktac-blink{0%{opacity:1}5%{opacity:.95}10%{opacity:.9}15%{opacity:.85}20%{opacity:.8}25%{opacity:.75}30%{opacity:.7}35%{opacity:.65}40%{opacity:.6}45%{opacity:.65}50%{opacity:.7}55%{opacity:.75}60%{opacity:.8}65%{opacity:.85}70%{opacity:.9}75%{opacity:.95}to{opacity:1}}.ticktac-start i,.ticktac-stop i{animation:ticktac-blink 2s step-end infinite;font-size:140%}@media(max-width:991.98px){aside.navbar .btn-outline-white,header.navbar .btn-outline-white{border-color:hsla(0,0%,100%,.2)}}.ts-dropdown{z-index:1056}.ts-control>input{min-width:unset}.ts-dropdown .optgroup [data-selectable].option{padding-left:20px}.checkbox-menu.show{z-index:1021}.duration-widget .input-group{min-width:110px}.duration-widget input.duration-input{min-width:55px}#report-form div.btn-list{width:100%}#report-form div.btn-list div.selectpicker{max-width:400px;min-width:200px}#report-form div.btn-list li.dropdown-item .form-check{margin-bottom:0}#report-form div.btn-list .input-group{width:unset}.color-choice-item{border-radius:var(--tblr-border-radius);display:inline-block;height:20px;width:20px}fieldset>.mb-3.row:last-child{margin-bottom:0!important}.form-fieldset-light{background-color:unset;border-left:none;border-radius:0;border-right:none;border-top:none;margin-bottom:0}.form-fieldset-light:last-child{border:none}.dropdown-item .dropdown-action{opacity:.5;visibility:hidden}.dropdown-item:hover .dropdown-action{visibility:visible}.dropdown-item:hover .dropdown-action:hover{opacity:1}.modal-content{box-shadow:0 10px 80px rgba(0,0,0,.6)}.progress-group .progress-title{white-space:nowrap;width:100%}.progress-group .progress-title .progress-text{display:inline-block;width:1%}.progress-group .progress-title .progress-number{display:inline-block;float:none;width:98%}.initials{font-size:13px;font-weight:700}.avatar-xs{height:23px;width:23px}.avatar-xs .initials{font-size:10px}.avatar-sm{height:38px;width:38px}.avatar-sm .initials{font-size:17px}.avatar-md{height:45px;width:45px}.avatar-md .initials{font-size:21px}.avatar-lg{height:60px;width:60px}.avatar-lg .initials{font-size:28px}.widget-user-image{border:3px solid #fff;border-radius:50%}.widget-user-image .avatar{height:83px;width:83px}.widget-user-image .avatar .initials{font-size:40px}table.dataTable.table>tbody>tr>td.avatars .avatar{margin:1px}.avatar-list-stacked .avatar{margin-right:calc(var(--tblr-avatar-size)*-.2)!important}.quick-entry-page .form-dataTable table.dataTable .form-group{margin-bottom:0}.quick-entry-page #quick_entry_form{display:none}.quick-entry-page .ts-wrapper{max-height:36px;max-width:150px;min-height:36px}.quick-entry-page .ts-wrapper .ts-control{white-space:nowrap}.quick-entry-page .ts-wrapper .ts-control .item{overflow:hidden}.quick-entry-page .table tbody td:not(.total){padding:3px}.quick-entry-page .duration-widget input.duration-input{min-width:40px}.quick-entry-page #quick_entry_box .duration-widget .input-group{max-width:50px;min-width:50px}.quick-entry-page #quick_entry_box .duration-widget .btn-duration-preset{display:none;min-width:30px}.quick-entry-page #quick_entry_box .duration-widget input.duration-input{border-bottom-right-radius:var(--tblr-border-radius);border-top-right-radius:var(--tblr-border-radius);max-width:50px;padding:7px 5px}.quick-entry-page .dropdown-menu{z-index:1056}@media(min-width:900px){.quick-entry-page .ts-wrapper{max-width:170px}}@media(min-width:992px){.quick-entry-page .ts-wrapper{max-width:100px}}@media(min-width:1100px){.quick-entry-page .ts-wrapper{max-width:160px}}@media(min-width:1200px){.quick-entry-page .ts-wrapper{max-width:165px}.quick-entry-page .duration-widget{max-width:100%}}@media(min-width:1250px){.quick-entry-page #quick_entry_box .duration-widget .input-group{max-width:85px;min-width:75px}.quick-entry-page #quick_entry_box .duration-widget .btn-duration-preset{display:flex}.quick-entry-page #quick_entry_box .duration-widget input.duration-input{border-bottom-right-radius:0;border-top-right-radius:0}}@media(min-width:1300px){.quick-entry-page #quick_entry_box .duration-widget input.duration-input{max-width:100%}.quick-entry-page .ts-wrapper{max-width:190px}}@media(min-width:1400px){.quick-entry-page .ts-wrapper{max-width:235px}}@media(min-width:1500px){.quick-entry-page .ts-wrapper{max-width:290px}}@media(min-width:1600px){.quick-entry-page .ts-wrapper{max-width:340px}}@media(min-width:1800px){.quick-entry-page .ts-wrapper{max-width:450px}.quick-entry-page #quick_entry_box .duration-widget .input-group{max-width:100%}}fieldset legend.col-form-label{padding-top:0}fieldset.form-fieldset>legend{font-size:1rem;font-weight:700}.ts-dropdown .optgroup:before{--tblr-spacer:.5rem}.dropdown-divider{--tblr-dropdown-divider-margin-y:.5rem}:host,:root,[data-bs-theme=light]{--tblr-box-shadow-input:none}.navbar[data-bs-theme=dark]{--tblr-navbar-color:hsla(0,0%,100%,.8)}.nav-pills .nav-link.active{border-style:solid;border-width:1px}.multiupdater[type=checkbox]{--tblr-border-color-translucent:rgba(4,32,69,.2)}.tag{--tblr-tag-height:unset}.navbar .page-title{color:var(--tblr-body-color)}.float-help{background-color:var(--tblr-body-color);border-radius:50px;bottom:20px;height:50px;position:fixed;right:20px;text-align:center;width:50px;z-index:1021}.float-help i{color:var(--tblr-body-bg);font-size:30px;margin-top:11px}@media(max-width:767.98px){.float-help{border-radius:36px;height:36px;width:36px}.float-help i{font-size:20px;margin-top:8px}}html[dir=rtl] .fa-chevron-left:before{content:""}html[dir=rtl] .fa-chevron-right:before{content:""} \ No newline at end of file diff --git a/public/build/app-rtl.7a875ca7.js b/public/build/app-rtl.7a875ca7.js deleted file mode 100644 index 93d3c3657..000000000 --- a/public/build/app-rtl.7a875ca7.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[113],{2395:function(i,n,u){u(876)},876:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=2395,i(i.s=n)}]); \ No newline at end of file diff --git a/public/build/app-rtl.f2a83683.css b/public/build/app-rtl.f2a83683.css deleted file mode 100644 index 9c1139f64..000000000 --- a/public/build/app-rtl.f2a83683.css +++ /dev/null @@ -1,5 +0,0 @@ -@charset "UTF-8";:root,[data-bs-theme=light]{--tblr-black:#000;--tblr-white:#fff;--tblr-gray:#49566c;--tblr-gray-dark:#182433;--tblr-gray-100:#eef3f6;--tblr-gray-200:#dce1e7;--tblr-gray-300:#b8c4d4;--tblr-gray-400:#8a97ab;--tblr-gray-500:#6c7a91;--tblr-gray-600:#49566c;--tblr-gray-700:#3a4859;--tblr-gray-800:#182433;--tblr-gray-900:#040a11;--tblr-primary:#066fd1;--tblr-secondary:#6c7a91;--tblr-success:#2fb344;--tblr-info:#4299e1;--tblr-warning:#f76707;--tblr-danger:#d63939;--tblr-light:#f6f8fb;--tblr-dark:#182433;--tblr-muted:#6c7a91;--tblr-blue:#066fd1;--tblr-azure:#4299e1;--tblr-indigo:#4263eb;--tblr-purple:#ae3ec9;--tblr-pink:#d6336c;--tblr-red:#d63939;--tblr-orange:#f76707;--tblr-yellow:#f59f00;--tblr-lime:#74b816;--tblr-green:#2fb344;--tblr-teal:#0ca678;--tblr-cyan:#17a2b8;--tblr-x:#000;--tblr-facebook:#1877f2;--tblr-twitter:#1da1f2;--tblr-linkedin:#0a66c2;--tblr-google:#dc4e41;--tblr-youtube:red;--tblr-vimeo:#1ab7ea;--tblr-dribbble:#ea4c89;--tblr-github:#181717;--tblr-instagram:#e4405f;--tblr-pinterest:#bd081c;--tblr-vk:#6383a8;--tblr-rss:orange;--tblr-flickr:#0063dc;--tblr-bitbucket:#0052cc;--tblr-tabler:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-secondary-rgb:108,122,145;--tblr-success-rgb:47,179,68;--tblr-info-rgb:66,153,225;--tblr-warning-rgb:247,103,7;--tblr-danger-rgb:214,57,57;--tblr-light-rgb:246,248,251;--tblr-dark-rgb:24,36,51;--tblr-muted-rgb:108,122,145;--tblr-blue-rgb:6,111,209;--tblr-azure-rgb:66,153,225;--tblr-indigo-rgb:66,99,235;--tblr-purple-rgb:174,62,201;--tblr-pink-rgb:214,51,108;--tblr-red-rgb:214,57,57;--tblr-orange-rgb:247,103,7;--tblr-yellow-rgb:245,159,0;--tblr-lime-rgb:116,184,22;--tblr-green-rgb:47,179,68;--tblr-teal-rgb:12,166,120;--tblr-cyan-rgb:23,162,184;--tblr-x-rgb:0,0,0;--tblr-facebook-rgb:24,119,242;--tblr-twitter-rgb:29,161,242;--tblr-linkedin-rgb:10,102,194;--tblr-google-rgb:220,78,65;--tblr-youtube-rgb:255,0,0;--tblr-vimeo-rgb:26,183,234;--tblr-dribbble-rgb:234,76,137;--tblr-github-rgb:24,23,23;--tblr-instagram-rgb:228,64,95;--tblr-pinterest-rgb:189,8,28;--tblr-vk-rgb:99,131,168;--tblr-rss-rgb:255,165,0;--tblr-flickr-rgb:0,99,220;--tblr-bitbucket-rgb:0,82,204;--tblr-tabler-rgb:6,111,209;--tblr-primary-text-emphasis:#022c54;--tblr-secondary-text-emphasis:#2b313a;--tblr-success-text-emphasis:#13481b;--tblr-info-text-emphasis:#1a3d5a;--tblr-warning-text-emphasis:#632903;--tblr-danger-text-emphasis:#561717;--tblr-light-text-emphasis:#3a4859;--tblr-dark-text-emphasis:#3a4859;--tblr-primary-bg-subtle:#cde2f6;--tblr-secondary-bg-subtle:#e2e4e9;--tblr-success-bg-subtle:#d5f0da;--tblr-info-bg-subtle:#d9ebf9;--tblr-warning-bg-subtle:#fde1cd;--tblr-danger-bg-subtle:#f7d7d7;--tblr-light-bg-subtle:#f7f9fb;--tblr-dark-bg-subtle:#8a97ab;--tblr-primary-border-subtle:#9bc5ed;--tblr-secondary-border-subtle:#c4cad3;--tblr-success-border-subtle:#ace1b4;--tblr-info-border-subtle:#b3d6f3;--tblr-warning-border-subtle:#fcc29c;--tblr-danger-border-subtle:#efb0b0;--tblr-light-border-subtle:#dce1e7;--tblr-dark-border-subtle:#6c7a91;--tblr-white-rgb:255,255,255;--tblr-black-rgb:0,0,0;--tblr-font-sans-serif:-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-monospace:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--tblr-body-font-family:var(--tblr-font-sans-serif);--tblr-body-font-size:0.875rem;--tblr-body-font-weight:400;--tblr-body-line-height:1.4285714286;--tblr-body-color:#182433;--tblr-body-color-rgb:24,36,51;--tblr-body-bg:#f6f8fb;--tblr-body-bg-rgb:246,248,251;--tblr-emphasis-color:#3a4859;--tblr-emphasis-color-rgb:58,72,89;--tblr-secondary-color:rgba(24,36,51,.75);--tblr-secondary-color-rgb:24,36,51;--tblr-secondary-bg:#dce1e7;--tblr-secondary-bg-rgb:220,225,231;--tblr-tertiary-color:rgba(24,36,51,.5);--tblr-tertiary-color-rgb:24,36,51;--tblr-tertiary-bg:#eef3f6;--tblr-tertiary-bg-rgb:238,243,246;--tblr-heading-color:inherit;--tblr-link-color:#066fd1;--tblr-link-color-rgb:6,111,209;--tblr-link-decoration:none;--tblr-link-hover-color:#0559a7;--tblr-link-hover-color-rgb:5,89,167;--tblr-link-hover-decoration:underline;--tblr-code-color:var(--tblr-gray-600);--tblr-highlight-color:#182433;--tblr-highlight-bg:#fdeccc;--tblr-border-width:1px;--tblr-border-style:solid;--tblr-border-color:#dce1e7;--tblr-border-color-translucent:rgba(4,32,69,.1);--tblr-border-radius:4px;--tblr-border-radius-sm:2px;--tblr-border-radius-lg:8px;--tblr-border-radius-xl:1rem;--tblr-border-radius-xxl:2rem;--tblr-border-radius-2xl:var(--tblr-border-radius-xxl);--tblr-border-radius-pill:100rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb),0.04) 0 2px 4px 0;--tblr-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--tblr-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--tblr-box-shadow-inset:0 0 transparent;--tblr-focus-ring-width:0.25rem;--tblr-focus-ring-opacity:0.25;--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb),0.25);--tblr-form-valid-color:#2fb344;--tblr-form-valid-border-color:#2fb344;--tblr-form-invalid-color:#d63939;--tblr-form-invalid-border-color:#d63939}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{color-scheme:dark;--tblr-body-bg:#040a11;--tblr-body-bg-rgb:4,10,17;--tblr-secondary-color:rgba(220,225,231,.75);--tblr-secondary-color-rgb:220,225,231;--tblr-secondary-bg:#182433;--tblr-secondary-bg-rgb:24,36,51;--tblr-tertiary-color:rgba(220,225,231,.5);--tblr-tertiary-color-rgb:220,225,231;--tblr-tertiary-bg:#0e1722;--tblr-tertiary-bg-rgb:14,23,34;--tblr-primary-text-emphasis:#6aa9e3;--tblr-secondary-text-emphasis:#a7afbd;--tblr-success-text-emphasis:#82d18f;--tblr-info-text-emphasis:#8ec2ed;--tblr-warning-text-emphasis:#faa46a;--tblr-danger-text-emphasis:#e68888;--tblr-light-text-emphasis:#eef3f6;--tblr-dark-text-emphasis:#b8c4d4;--tblr-primary-bg-subtle:#01162a;--tblr-secondary-bg-subtle:#16181d;--tblr-success-bg-subtle:#09240e;--tblr-info-bg-subtle:#0d1f2d;--tblr-warning-bg-subtle:#311501;--tblr-danger-bg-subtle:#2b0b0b;--tblr-light-bg-subtle:#182433;--tblr-dark-bg-subtle:#0c121a;--tblr-primary-border-subtle:#04437d;--tblr-secondary-border-subtle:#414957;--tblr-success-border-subtle:#1c6b29;--tblr-info-border-subtle:#285c87;--tblr-warning-border-subtle:#943e04;--tblr-danger-border-subtle:#802222;--tblr-light-border-subtle:#3a4859;--tblr-dark-border-subtle:#182433;--tblr-heading-color:inherit;--tblr-link-color:#6aa9e3;--tblr-link-hover-color:#88bae9;--tblr-link-color-rgb:106,169,227;--tblr-link-hover-color-rgb:136,186,233;--tblr-code-color:var(--tblr-gray-300);--tblr-highlight-color:#dce1e7;--tblr-highlight-bg:#624000;--tblr-border-color:#25384f;--tblr-border-color-translucent:rgba(72,110,149,.14);--tblr-form-valid-color:#82d18f;--tblr-form-valid-border-color:#82d18f;--tblr-form-invalid-color:#e68888;--tblr-form-invalid-border-color:#e68888}*,:after,:before{box-sizing:border-box}@media (prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--tblr-body-bg);color:var(--tblr-body-color);font-family:var(--tblr-body-font-family);font-size:var(--tblr-body-font-size);font-weight:var(--tblr-body-font-weight);line-height:var(--tblr-body-line-height);margin:0;text-align:var(--tblr-body-text-align);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.hr,hr{border:0;border-top:var(--tblr-border-width) solid;color:inherit;opacity:.16}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--tblr-heading-color);font-weight:var(--tblr-font-weight-bold);line-height:1.2;margin-bottom:var(--tblr-spacer);margin-top:0}.h1,h1{font-size:1.5rem}.h2,h2{font-size:1.25rem}.h3,h3{font-size:1rem}.h4,h4{font-size:.875rem}.h5,h5{font-size:.75rem}.h6,h6{font-size:.625rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-right:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:85.714285%}.mark,mark{background-color:var(--tblr-highlight-bg);color:var(--tblr-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,1));text-decoration:none}a:hover{--tblr-link-color-rgb:var(--tblr-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--tblr-font-monospace);font-size:1em}pre{display:block;font-size:85.714285%;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{color:var(--tblr-code-color);font-size:85.714285%;word-wrap:break-word}a>code{color:inherit}kbd{background-color:var(--tblr-code-bg);border-radius:2px;color:var(--tblr-text-secondary-dark);font-size:var(--tblr-font-size-h5);padding:.25rem .5rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--tblr-secondary-color);padding-bottom:.75rem;padding-top:.75rem;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:right;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}legend+*{clear:right}::-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}[type=email],[type=number],[type=tel],[type=url]{direction:ltr}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:.875rem;font-weight:var(--tblr-font-weight-normal)}.display-1{font-size:5rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:4.5rem}.display-3{font-size:4rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}.display-5{font-size:3rem}.display-5,.display-6{font-weight:300;line-height:1.2}.display-6{font-size:2rem}.list-inline,.list-unstyled{list-style:none;padding-right:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:85.714285%;text-transform:uppercase}.blockquote{font-size:.875rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#49566c;font-size:85.714285%;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:var(--tblr-body-bg);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-sm);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:var(--tblr-secondary-color);font-size:85.714285%}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}@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{--tblr-breakpoint-xs:0;--tblr-breakpoint-sm:576px;--tblr-breakpoint-md:768px;--tblr-breakpoint-lg:992px;--tblr-breakpoint-xl:1200px;--tblr-breakpoint-xxl:1400px}.row{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--tblr-gutter-x)*-.5);margin-right:calc(var(--tblr-gutter-x)*-.5);margin-top:calc(var(--tblr-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--tblr-gutter-y);max-width:100%;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.grid{display:grid;gap:var(--tblr-gap,var(--tblr-page-padding));grid-template-columns:repeat(var(--tblr-columns,12),1fr);grid-template-rows:repeat(var(--tblr-rows,1),1fr)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media (min-width:576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media (min-width:768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media (min-width:992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media (min-width:1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media (min-width:1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.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-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--tblr-gutter-x:0}.g-0,.gy-0{--tblr-gutter-y:0}.g-1,.gx-1{--tblr-gutter-x:0.25rem}.g-1,.gy-1{--tblr-gutter-y:0.25rem}.g-2,.gx-2{--tblr-gutter-x:0.5rem}.g-2,.gy-2{--tblr-gutter-y:0.5rem}.g-3,.gx-3{--tblr-gutter-x:1rem}.g-3,.gy-3{--tblr-gutter-y:1rem}.g-4,.gx-4{--tblr-gutter-x:1.5rem}.g-4,.gy-4{--tblr-gutter-y:1.5rem}.g-5,.gx-5{--tblr-gutter-x:2rem}.g-5,.gy-5{--tblr-gutter-y:2rem}.g-6,.gx-6{--tblr-gutter-x:3rem}.g-6,.gy-6{--tblr-gutter-y:3rem}.g-7,.gx-7{--tblr-gutter-x:5rem}.g-7,.gy-7{--tblr-gutter-y:5rem}.g-8,.gx-8{--tblr-gutter-x:8rem}.g-8,.gy-8{--tblr-gutter-y:8rem}@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-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--tblr-gutter-x:0}.g-sm-0,.gy-sm-0{--tblr-gutter-y:0}.g-sm-1,.gx-sm-1{--tblr-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x:1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y:1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x:2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y:2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x:3rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y:3rem}.g-sm-7,.gx-sm-7{--tblr-gutter-x:5rem}.g-sm-7,.gy-sm-7{--tblr-gutter-y:5rem}.g-sm-8,.gx-sm-8{--tblr-gutter-x:8rem}.g-sm-8,.gy-sm-8{--tblr-gutter-y:8rem}}@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-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--tblr-gutter-x:0}.g-md-0,.gy-md-0{--tblr-gutter-y:0}.g-md-1,.gx-md-1{--tblr-gutter-x:0.25rem}.g-md-1,.gy-md-1{--tblr-gutter-y:0.25rem}.g-md-2,.gx-md-2{--tblr-gutter-x:0.5rem}.g-md-2,.gy-md-2{--tblr-gutter-y:0.5rem}.g-md-3,.gx-md-3{--tblr-gutter-x:1rem}.g-md-3,.gy-md-3{--tblr-gutter-y:1rem}.g-md-4,.gx-md-4{--tblr-gutter-x:1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y:1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x:2rem}.g-md-5,.gy-md-5{--tblr-gutter-y:2rem}.g-md-6,.gx-md-6{--tblr-gutter-x:3rem}.g-md-6,.gy-md-6{--tblr-gutter-y:3rem}.g-md-7,.gx-md-7{--tblr-gutter-x:5rem}.g-md-7,.gy-md-7{--tblr-gutter-y:5rem}.g-md-8,.gx-md-8{--tblr-gutter-x:8rem}.g-md-8,.gy-md-8{--tblr-gutter-y:8rem}}@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-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--tblr-gutter-x:0}.g-lg-0,.gy-lg-0{--tblr-gutter-y:0}.g-lg-1,.gx-lg-1{--tblr-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x:1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y:1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x:2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y:2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x:3rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y:3rem}.g-lg-7,.gx-lg-7{--tblr-gutter-x:5rem}.g-lg-7,.gy-lg-7{--tblr-gutter-y:5rem}.g-lg-8,.gx-lg-8{--tblr-gutter-x:8rem}.g-lg-8,.gy-lg-8{--tblr-gutter-y:8rem}}@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-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--tblr-gutter-x:0}.g-xl-0,.gy-xl-0{--tblr-gutter-y:0}.g-xl-1,.gx-xl-1{--tblr-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x:1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y:1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x:2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y:2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x:3rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y:3rem}.g-xl-7,.gx-xl-7{--tblr-gutter-x:5rem}.g-xl-7,.gy-xl-7{--tblr-gutter-y:5rem}.g-xl-8,.gx-xl-8{--tblr-gutter-x:8rem}.g-xl-8,.gy-xl-8{--tblr-gutter-y:8rem}}@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-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--tblr-gutter-x:0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y:0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x:3rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y:3rem}.g-xxl-7,.gx-xxl-7{--tblr-gutter-x:5rem}.g-xxl-7,.gy-xxl-7{--tblr-gutter-y:5rem}.g-xxl-8,.gx-xxl-8{--tblr-gutter-x:8rem}.g-xxl-8,.gy-xxl-8{--tblr-gutter-y:8rem}}.markdown>table,.table{--tblr-table-color-type:initial;--tblr-table-bg-type:initial;--tblr-table-color-state:initial;--tblr-table-bg-state:initial;--tblr-table-color:inherit;--tblr-table-bg:transparent;--tblr-table-border-color:var(--tblr-border-color-translucent);--tblr-table-accent-bg:transparent;--tblr-table-striped-color:inherit;--tblr-table-striped-bg:var(--tblr-bg-surface-tertiary);--tblr-table-active-color:inherit;--tblr-table-active-bg:rgba(var(--tblr-emphasis-color-rgb),0.1);--tblr-table-hover-color:inherit;--tblr-table-hover-bg:rgba(var(--tblr-emphasis-color-rgb),0.075);border-color:var(--tblr-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.markdown>table>:not(caption)>*>*,.table>:not(caption)>*>*{background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var(--tblr-table-bg-state,var(--tblr-table-bg-type,var(--tblr-table-accent-bg)));color:var(--tblr-table-color-state,var(--tblr-table-color-type,var(--tblr-table-color)));padding:.75rem}.markdown>table>tbody,.table>tbody{vertical-align:inherit}.markdown>table>thead,.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--tblr-border-width)*2) solid var(--tblr-border-color-translucent)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.markdown>table>:not(caption)>*,.table-bordered>:not(caption)>*{border-width:var(--tblr-border-width) 0}.markdown>table>:not(caption)>*>*,.table-bordered>:not(caption)>*>*{border-width:0 var(--tblr-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(2n)>*{--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-active{--tblr-table-color-state:var(--tblr-table-active-color);--tblr-table-bg-state:var(--tblr-table-active-bg)}.table-hover>tbody>tr:hover>*{--tblr-table-color-state:var(--tblr-table-hover-color);--tblr-table-bg-state:var(--tblr-table-hover-bg)}.table-primary{--tblr-table-color:#182433;--tblr-table-bg:#cde2f6;--tblr-table-border-color:#a9bccf;--tblr-table-striped-bg:#c4d9ec;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#bbcfe3;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#bfd4e7;--tblr-table-hover-color:#182433;border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-secondary{--tblr-table-color:#182433;--tblr-table-bg:#e2e4e9;--tblr-table-border-color:#babec5;--tblr-table-striped-bg:#d8dae0;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#ced1d7;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#d3d6db;--tblr-table-hover-color:#182433}.table-secondary,.table-success{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-success{--tblr-table-color:#182433;--tblr-table-bg:#d5f0da;--tblr-table-border-color:#afc7b9;--tblr-table-striped-bg:#cce6d2;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c2dcc9;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#c7e1cd;--tblr-table-hover-color:#182433}.table-info{--tblr-table-color:#182433;--tblr-table-bg:#d9ebf9;--tblr-table-border-color:#b2c3d1;--tblr-table-striped-bg:#cfe1ef;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c6d7e5;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#cbdcea;--tblr-table-hover-color:#182433}.table-info,.table-warning{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-warning{--tblr-table-color:#182433;--tblr-table-bg:#fde1cd;--tblr-table-border-color:#cfbbae;--tblr-table-striped-bg:#f2d8c5;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e6cebe;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#ecd3c1;--tblr-table-hover-color:#182433}.table-danger{--tblr-table-color:#182433;--tblr-table-bg:#f7d7d7;--tblr-table-border-color:#cab3b6;--tblr-table-striped-bg:#eccecf;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e1c5c7;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#e6cacb;--tblr-table-hover-color:#182433}.table-danger,.table-light{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-light{--tblr-table-color:#182433;--tblr-table-bg:#f6f8fb;--tblr-table-border-color:#caced3;--tblr-table-striped-bg:#ebedf1;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e0e3e7;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#e5e8ec;--tblr-table-hover-color:#182433}.table-dark{--tblr-table-color:#f6f8fb;--tblr-table-bg:#182433;--tblr-table-border-color:#444e5b;--tblr-table-striped-bg:#232f3d;--tblr-table-striped-color:#f6f8fb;--tblr-table-active-bg:#2e3947;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#293442;--tblr-table-hover-color:#f6f8fb;border-color:var(--tblr-table-border-color);color:var(--tblr-table-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{font-size:.875rem;margin-bottom:.5rem}.col-form-label,.form-label{font-weight:var(--tblr-font-weight-medium)}.col-form-label{font-size:inherit;line-height:1.4285714286;margin-bottom:0;padding-bottom:calc(.5625rem + var(--tblr-border-width));padding-top:calc(.5625rem + var(--tblr-border-width))}.col-form-label-lg{font-size:1.25rem;padding-bottom:calc(.5rem + var(--tblr-border-width));padding-top:calc(.5rem + var(--tblr-border-width))}.col-form-label-sm{font-size:.75rem;padding-bottom:calc(.125rem + var(--tblr-border-width));padding-top:calc(.125rem + var(--tblr-border-width))}.form-text{color:var(--tblr-secondary-color);font-size:85.714285%;margin-top:.25rem}.form-control{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-clip:padding-box;background-color:var(--tblr-bg-forms);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);color:var(--tblr-body-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:.5625rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@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{background-color:var(--tblr-bg-forms);border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);color:var(--tblr-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.4285714286em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::-webkit-input-placeholder{color:#8a97ab;opacity:1}.form-control:-ms-input-placeholder{color:#8a97ab;opacity:1}.form-control::-ms-input-placeholder{color:#8a97ab;opacity:1}.form-control::placeholder{color:#8a97ab;opacity:1}.form-control:disabled{background-color:var(--tblr-bg-surface-secondary);opacity:1}.form-control::-webkit-file-upload-button{margin:-.5625rem -.75rem;padding:.5625rem .75rem;-webkit-margin-end:.75rem;background-color:var(--tblr-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--tblr-border-width);border-radius:0;color:var(--tblr-body-color);margin-inline-end:.75rem;pointer-events:none;-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{margin:-.5625rem -.75rem;padding:.5625rem .75rem;-webkit-margin-end:.75rem;background-color:var(--tblr-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--tblr-border-width);border-radius:0;color:var(--tblr-body-color);margin-inline-end:.75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@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(--tblr-secondary-bg)}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:var(--tblr-border-width) 0;color:var(--tblr-body-color);display:block;line-height:1.4285714286;margin-bottom:0;padding:.5625rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;min-height:calc(1.42857em + .25rem + var(--tblr-border-width)*2);padding:.125rem .25rem}.form-control-sm::-webkit-file-upload-button{margin:-.125rem -.25rem;padding:.125rem .25rem;-webkit-margin-end:.25rem;margin-inline-end:.25rem}.form-control-sm::file-selector-button{margin:-.125rem -.25rem;padding:.125rem .25rem;-webkit-margin-end:.25rem;margin-inline-end:.25rem}.form-control-lg{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem;min-height:calc(1.42857em + 1rem + var(--tblr-border-width)*2);padding:.5rem .75rem}.form-control-lg::-webkit-file-upload-button{margin:-.5rem -.75rem;padding:.5rem .75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem}.form-control-lg::file-selector-button{margin:-.5rem -.75rem;padding:.5rem .75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem}textarea.form-control{min-height:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2)}textarea.form-control-sm{min-height:calc(1.42857em + .25rem + var(--tblr-border-width)*2)}textarea.form-control-lg{min-height:calc(1.42857em + 1rem + var(--tblr-border-width)*2)}.form-control-color{height:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2);padding:.5625rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color.form-control-sm{height:calc(1.42857em + .25rem + var(--tblr-border-width)*2)}.form-control-color.form-control-lg{height:calc(1.42857em + 1rem + var(--tblr-border-width)*2)}.form-select{--tblr-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-bg-forms);background-image:var(--tblr-form-select-bg-img),var(--tblr-form-select-bg-icon,none);background-position:left .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);color:var(--tblr-body-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:.5625rem .75rem .5625rem 2.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media (prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-left:.75rem}.form-select:disabled{background-color:var(--tblr-bg-surface-secondary)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--tblr-body-color)}.form-select-sm{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;padding-bottom:.125rem;padding-right:.25rem;padding-top:.125rem}.form-select-lg{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem;padding-bottom:.5rem;padding-right:.75rem;padding-top:.5rem}[data-bs-theme=dark] .form-select,body[data-bs-theme=dark] [data-bs-theme=light] .form-select{--tblr-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23dce1e7' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.75rem;min-height:1.25rem;padding-right:2rem}.form-check .form-check-input{float:right;margin-right:-2rem}.form-check-reverse{padding-left:2rem;padding-right:0;text-align:left}.form-check-reverse .form-check-input{float:left;margin-left:-2rem;margin-right:0}.form-check-input{--tblr-form-check-bg:var(--tblr-bg-forms);-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:var(--tblr-form-check-bg);background-image:var(--tblr-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);flex-shrink:0;height:1.25rem;margin-top:.0892857143rem;-webkit-print-color-adjust:exact;vertical-align:top;width:1.25rem;color-adjust:exact;print-color-adjust:exact}.form-check-input[type=checkbox]{border-radius:var(--tblr-border-radius)}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#83b7e8;box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.form-check-input:checked{background-color:var(--tblr-primary);border-color:var(--tblr-border-color-translucent)}.form-check-input:checked[type=checkbox]{--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{background-color:var(--tblr-primary);border-color:var(--tblr-primary);--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%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{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.7}.form-switch{padding-right:2.5rem}.form-switch .form-check-input{--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23dce1e7'/%3E%3C/svg%3E");background-image:var(--tblr-form-switch-bg);background-position:100%;border-radius:2rem;margin-right:-2.5rem;transition:background-position .15s ease-in-out;width:2rem}.form-switch .form-check-input:focus{--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2383b7e8'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{background-position:0;--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%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-left:2.5rem;padding-right:0}.form-switch.form-check-reverse .form-check-input{margin-left:-2.5rem;margin-right:0}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.btn-check:disabled+.btn,.btn-check[disabled]+.btn{filter:none;opacity:.4;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 0.25)'/%3E%3C/svg%3E")}.form-range{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;height:1.25rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;margin-top:-.375rem;-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;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b4d4f1}.form-range::-webkit-slider-runnable-track{background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range::-moz-range-thumb{-moz-appearance:none;appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height: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;width:1rem}@media (prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b4d4f1}.form-range::-moz-range-track{background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--tblr-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--tblr-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + var(--tblr-border-width)*2);line-height:1.25;min-height:calc(3.5rem + var(--tblr-border-width)*2)}.form-floating>label{border:var(--tblr-border-width) solid transparent;height:100%;overflow:hidden;padding:1rem .75rem;pointer-events:none;position:absolute;right:0;text-align:start;text-overflow:ellipsis;top:0;transform-origin:100% 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@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::-webkit-input-placeholder,.form-floating>.form-control::-webkit-input-placeholder{color:transparent}.form-floating>.form-control-plaintext:-ms-input-placeholder,.form-floating>.form-control:-ms-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::-ms-input-placeholder,.form-floating>.form-control::-ms-input-placeholder{color:transparent}.form-floating>.form-control-plaintext::placeholder,.form-floating>.form-control::placeholder{color:transparent}.form-floating>.form-control-plaintext:not(:-ms-input-placeholder),.form-floating>.form-control:not(:-ms-input-placeholder){padding-bottom:.625rem;padding-top:1.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-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control:not(:-ms-input-placeholder)~label{color:rgba(var(--tblr-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(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control:not(:-ms-input-placeholder)~label:after{background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.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{background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(-.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--tblr-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#49566c}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--tblr-bg-surface-secondary)}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.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{align-items:center;background-color:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:var(--tblr-gray-500);display:flex;font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:.5625rem .75rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem;padding:.5rem .75rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;padding:.125rem .25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.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),.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-bottom-left-radius:0;border-top-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-right-radius:0;border-top-right-radius:0;margin-right:calc(var(--tblr-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-right-radius:0;border-top-right-radius:0}.valid-feedback{color:var(--tblr-form-valid-color);display:none;font-size:85.714285%;margin-top:.25rem;width:100%}.valid-tooltip{background-color:var(--tblr-success);border-radius:var(--tblr-border-radius);color:#fff;display:none;font-size:.765625rem;margin-top:.1rem;max-width:100%;padding:var(--tblr-spacer-2) var(--tblr-spacer-2);position:absolute;top:100%;z-index:5}.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{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:left calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem);border-color:var(--tblr-form-valid-border-color);padding-left:calc(1.42857em + 1.125rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.35714em + .28125rem) left calc(.35714em + .28125rem);padding-left:calc(1.42857em + 1.125rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--tblr-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"]{--tblr-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem);padding-left:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(4.125rem + 1.42857em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--tblr-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--tblr-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--tblr-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--tblr-form-invalid-color);display:none;font-size:85.714285%;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:var(--tblr-danger);border-radius:var(--tblr-border-radius);color:#fff;display:none;font-size:.765625rem;margin-top:.1rem;max-width:100%;padding:var(--tblr-spacer-2) var(--tblr-spacer-2);position:absolute;top:100%;z-index:5}.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{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:left calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem);border-color:var(--tblr-form-invalid-border-color);padding-left:calc(1.42857em + 1.125rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.35714em + .28125rem) left calc(.35714em + .28125rem);padding-left:calc(1.42857em + 1.125rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--tblr-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"]{--tblr-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem);padding-left:4.125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(4.125rem + 1.42857em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--tblr-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--tblr-form-invalid-color)}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.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{--tblr-btn-padding-x:1rem;--tblr-btn-padding-y:0.5625rem;--tblr-btn-font-family:var(--tblr-font-sans-serif);--tblr-btn-font-size:0.875rem;--tblr-btn-font-weight:var(--tblr-font-weight-medium);--tblr-btn-line-height:1.4285714286;--tblr-btn-bg:transparent;--tblr-btn-border-width:var(--tblr-border-width);--tblr-btn-border-color:transparent;--tblr-btn-border-radius:var(--tblr-border-radius);--tblr-btn-hover-border-color:transparent;--tblr-btn-disabled-opacity:0.4;--tblr-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-btn-focus-shadow-rgb),.5);background-color:var(--tblr-btn-bg);border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);color:var(--tblr-btn-color);cursor:pointer;display:inline-block;font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);color:var(--tblr-btn-hover-color);text-decoration:none}.btn-check+.btn:hover{background-color:var(--tblr-btn-bg);border-color:var(--tblr-btn-border-color);color:var(--tblr-btn-color)}.btn:focus-visible{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow);color:var(--tblr-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--tblr-btn-hover-border-color);box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--tblr-btn-active-bg);border-color:var(--tblr-btn-active-border-color);box-shadow:var(--tblr-btn-active-shadow);color:var(--tblr-btn-active-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(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--tblr-btn-disabled-bg);border-color:var(--tblr-btn-disabled-border-color);box-shadow:none;color:var(--tblr-btn-disabled-color);opacity:var(--tblr-btn-disabled-opacity);pointer-events:none}.btn-link{--tblr-btn-font-weight:400;--tblr-btn-color:var(--tblr-link-color);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-link-hover-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-active-color:var(--tblr-link-hover-color);--tblr-btn-active-border-color:transparent;--tblr-btn-disabled-color:#49566c;--tblr-btn-disabled-border-color:transparent;--tblr-btn-box-shadow:0 0 0 #000;--tblr-btn-focus-shadow-rgb:42,132,215;text-decoration:none}.btn-link:focus-visible,.btn-link:hover{text-decoration:underline}.btn-link:focus-visible{color:var(--tblr-btn-color)}.btn-link:hover{color:var(--tblr-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--tblr-btn-padding-y:0.5rem;--tblr-btn-padding-x:0.75rem;--tblr-btn-font-size:1.25rem;--tblr-btn-border-radius:var(--tblr-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--tblr-btn-padding-y:0.125rem;--tblr-btn-padding-x:0.25rem;--tblr-btn-font-size:0.75rem;--tblr-btn-border-radius:var(--tblr-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{height:auto;transition:width .35s ease;width:0}@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{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(45deg);vertical-align:.306em;width:.36em}.dropdown-menu{--tblr-dropdown-zindex:1000;--tblr-dropdown-min-width:11rem;--tblr-dropdown-padding-x:0;--tblr-dropdown-padding-y:0.25rem;--tblr-dropdown-spacer:1px;--tblr-dropdown-font-size:0.875rem;--tblr-dropdown-color:var(--tblr-body-color);--tblr-dropdown-bg:var(--tblr-bg-surface);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-border-radius:var(--tblr-border-radius);--tblr-dropdown-border-width:var(--tblr-border-width);--tblr-dropdown-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y:var(--tblr-spacer-2);--tblr-dropdown-box-shadow:var(--tblr-box-shadow-dropdown);--tblr-dropdown-link-color:inherit;--tblr-dropdown-link-hover-color:inherit;--tblr-dropdown-link-hover-bg:rgba(var(--tblr-secondary-rgb),0.08);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x:0.75rem;--tblr-dropdown-item-padding-y:0.5rem;--tblr-dropdown-header-color:#49566c;--tblr-dropdown-header-padding-x:0.75rem;--tblr-dropdown-header-padding-y:0.25rem;background-clip:padding-box;background-color:var(--tblr-dropdown-bg);border:var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow);color:var(--tblr-dropdown-color);display:none;font-size:var(--tblr-dropdown-font-size);list-style:none;margin:0;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);position:absolute;text-align:right;z-index:var(--tblr-dropdown-zindex)}.dropdown-menu[data-bs-popper]{margin-top:var(--tblr-dropdown-spacer);right:0;top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media (min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media (min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media (min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media (min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--tblr-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(-135deg);vertical-align:.306em;width:.36em}.dropend .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--tblr-dropdown-spacer);margin-top:0;right:100%;top:0}.dropend .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(135deg);vertical-align:.306em;vertical-align:0;width:.36em}.dropstart .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--tblr-dropdown-spacer);margin-top:0;right:auto;top:0}.dropstart .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;transform:rotate(-45deg);vertical-align:.306em;width:.36em}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--tblr-dropdown-divider-bg);height:0;margin:var(--tblr-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--tblr-dropdown-item-border-radius,0);clear:both;color:var(--tblr-dropdown-link-color);display:block;font-weight:400;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--tblr-dropdown-link-hover-bg);color:var(--tblr-dropdown-link-hover-color);text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:var(--tblr-dropdown-link-active-bg);color:var(--tblr-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--tblr-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--tblr-dropdown-header-color);display:block;font-size:.765625rem;margin-bottom:0;padding:var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--tblr-dropdown-link-color);display:block;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x)}.dropdown-menu-dark{--tblr-dropdown-color:#b8c4d4;--tblr-dropdown-bg:#182433;--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-box-shadow: ;--tblr-dropdown-link-color:#b8c4d4;--tblr-dropdown-link-hover-color:#fff;--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:#6c7a91;--tblr-dropdown-header-color:#6c7a91}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--tblr-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-right:calc(var(--tblr-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-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn{border-bottom-right-radius:0;border-top-right-radius:0}.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-right:0}.dropstart .dropdown-toggle-split:before{margin-left:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.1875rem;padding-right:.1875rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{align-items:flex-start;flex-direction:column;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(--tblr-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-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{--tblr-nav-link-padding-x:0.75rem;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-gray-500);--tblr-nav-link-hover-color:var(--tblr-link-hover-color);--tblr-nav-link-disabled-color:var(--tblr-disabled-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-right:0}.nav-link{background:none;border:0;color:var(--tblr-nav-link-color);display:block;font-size:var(--tblr-nav-link-font-size);font-weight:var(--tblr-nav-link-font-weight);padding:var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}.nav-link:focus,.nav-link:hover{color:var(--tblr-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--tblr-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--tblr-nav-tabs-border-width:var(--tblr-border-width);--tblr-nav-tabs-border-color:var(--tblr-border-color);--tblr-nav-tabs-border-radius:var(--tblr-border-radius);--tblr-nav-tabs-link-hover-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);--tblr-nav-tabs-link-active-color:var(--tblr-body-color);--tblr-nav-tabs-link-active-bg:var(--tblr-body-bg);--tblr-nav-tabs-link-active-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);border-bottom:var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--tblr-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--tblr-nav-tabs-border-radius);border-top-right-radius:var(--tblr-nav-tabs-border-radius);margin-bottom:calc(var(--tblr-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--tblr-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--tblr-nav-tabs-link-active-bg);border-color:var(--tblr-nav-tabs-link-active-border-color);color:var(--tblr-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--tblr-nav-tabs-border-width)*-1)}.nav-pills{--tblr-nav-pills-border-radius:var(--tblr-border-radius);--tblr-nav-pills-link-active-color:var(--tblr-primary);--tblr-nav-pills-link-active-bg:var(--tblr-active-bg)}.nav-pills .nav-link{border-radius:var(--tblr-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--tblr-nav-pills-link-active-bg);color:var(--tblr-nav-pills-link-active-color)}.nav-underline{--tblr-nav-underline-gap:1rem;--tblr-nav-underline-border-width:0.125rem;--tblr-nav-underline-link-active-color:var(--tblr-emphasis-color);gap:var(--tblr-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--tblr-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--tblr-nav-underline-link-active-color);font-weight:600}.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{--tblr-navbar-padding-x:0;--tblr-navbar-padding-y:0.25rem;--tblr-navbar-hover-color:rgba(var(--tblr-emphasis-color-rgb),0.8);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:var(--tblr-body-color) color;--tblr-navbar-brand-padding-y:0.5rem;--tblr-navbar-brand-margin-end:1rem;--tblr-navbar-brand-font-size:1.25rem;--tblr-navbar-brand-color:var(--tblr-body-color);--tblr-navbar-brand-hover-color:var(--tblr-body-color) color;--tblr-navbar-nav-link-padding-x:0.75rem;--tblr-navbar-toggler-padding-y:0;--tblr-navbar-toggler-padding-x:0;--tblr-navbar-toggler-font-size:1rem;--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(24, 36, 51, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--tblr-navbar-toggler-border-color:rgba(var(--tblr-emphasis-color-rgb),0.15);--tblr-navbar-toggler-border-radius:var(--tblr-border-radius);--tblr-navbar-toggler-focus-width:0;--tblr-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--tblr-navbar-brand-color);font-size:var(--tblr-navbar-brand-font-size);margin-left:var(--tblr-navbar-brand-margin-end);padding-bottom:var(--tblr-navbar-brand-padding-y);padding-top:var(--tblr-navbar-brand-padding-y);white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--tblr-navbar-brand-hover-color);text-decoration:none}.navbar-nav{--tblr-nav-link-padding-x:0;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-navbar-color);--tblr-nav-link-hover-color:var(--tblr-navbar-hover-color);--tblr-nav-link-disabled-color:var(--tblr-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-right:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--tblr-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--tblr-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--tblr-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);border-radius:var(--tblr-navbar-toggler-border-radius);color:var(--tblr-navbar-color);font-size:var(--tblr-navbar-toggler-font-size);line-height:1;padding:var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);transition:var(--tblr-navbar-toggler-transition)}@media (prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--tblr-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--tblr-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--tblr-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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light]{--tblr-navbar-color:hsla(0,0%,100%,.7);--tblr-navbar-hover-color:hsla(0,0%,100%,.75);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:#fff;--tblr-navbar-brand-color:#fff;--tblr-navbar-brand-hover-color:#fff;--tblr-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon,body[data-bs-theme=dark] .navbar[data-bs-theme=light],body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon{--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.7)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--tblr-card-spacer-y:1rem;--tblr-card-spacer-x:1.25rem;--tblr-card-title-spacer-y:1.25rem;--tblr-card-title-color: ;--tblr-card-subtitle-color: ;--tblr-card-border-width:var(--tblr-border-width);--tblr-card-border-color:var(--tblr-border-color-translucent);--tblr-card-border-radius:var(--tblr-border-radius);--tblr-card-box-shadow:var(--tblr-shadow-card);--tblr-card-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-card-cap-padding-y:1rem;--tblr-card-cap-padding-x:1.25rem;--tblr-card-cap-bg:var(--tblr-bg-surface-tertiary);--tblr-card-cap-color:inherit;--tblr-card-height: ;--tblr-card-color:inherit;--tblr-card-bg:var(--tblr-bg-surface);--tblr-card-img-overlay-padding:1rem;--tblr-card-group-margin:1.5rem;color:var(--tblr-body-color);display:flex;flex-direction:column;height:var(--tblr-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--tblr-card-bg);border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.card>.hr,.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--tblr-card-inner-border-radius);border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--tblr-card-color);flex:1 1 auto;padding:var(--tblr-card-spacer-y) var(--tblr-card-spacer-x)}.card-title{color:var(--tblr-card-title-color);margin-bottom:var(--tblr-card-title-spacer-y)}.card-subtitle{color:var(--tblr-card-subtitle-color);margin-top:calc(var(--tblr-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-right:var(--tblr-card-spacer-x)}.card-header{background-color:var(--tblr-card-cap-bg);border-bottom:var(--tblr-card-border-width) solid var(--tblr-card-border-color);color:var(--tblr-card-cap-color);margin-bottom:0;padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x)}.card-header:first-child{border-radius:var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0}.card-footer{background-color:var(--tblr-card-cap-bg);border-top:var(--tblr-card-border-width) solid var(--tblr-card-border-color);color:var(--tblr-card-cap-color);padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--tblr-card-cap-padding-y)*-1);margin-left:calc(var(--tblr-card-cap-padding-x)*-.5);margin-right:calc(var(--tblr-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--tblr-card-bg);border-bottom-color:var(--tblr-card-bg)}.card-header-pills{margin-left:calc(var(--tblr-card-cap-padding-x)*-.5);margin-right:calc(var(--tblr-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--tblr-card-inner-border-radius);bottom:0;left:0;padding:var(--tblr-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--tblr-card-inner-border-radius);border-bottom-right-radius:var(--tblr-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--tblr-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{border-right:0;margin-right:0}.card-group>.card:not(:last-child){border-bottom-left-radius:0;border-top-left-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-bottom-right-radius:0;border-top-right-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-right-radius:0}}.accordion{--tblr-accordion-bg:transparent;--tblr-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;--tblr-accordion-border-color:var(--tblr-border-color-translucent);--tblr-accordion-border-width:var(--tblr-border-width);--tblr-accordion-border-radius:var(--tblr-border-radius);--tblr-accordion-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-accordion-btn-padding-x:1.25rem;--tblr-accordion-btn-padding-y:1rem;--tblr-accordion-btn-color:var(--tblr-body-color);--tblr-accordion-btn-bg:transparent;--tblr-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--tblr-accordion-btn-icon-width:1rem;--tblr-accordion-btn-icon-transform:rotate(-180deg);--tblr-accordion-btn-icon-transition:transform 0.2s ease-in-out;--tblr-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23022c54' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--tblr-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-accordion-body-padding-x:1.25rem;--tblr-accordion-body-padding-y:1rem;--tblr-accordion-active-color:inherit;--tblr-accordion-active-bg:transparent}.accordion-button{align-items:center;background-color:var(--tblr-accordion-btn-bg);border:0;border-radius:0;color:var(--tblr-accordion-btn-color);display:flex;font-size:.875rem;overflow-anchor:none;padding:var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-btn-padding-x);position:relative;text-align:right;transition:var(--tblr-accordion-transition);width:100%}@media (prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--tblr-accordion-active-bg);box-shadow:inset 0 calc(var(--tblr-accordion-border-width)*-1) 0 var(--tblr-accordion-border-color);color:var(--tblr-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--tblr-accordion-btn-active-icon);transform:var(--tblr-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--tblr-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--tblr-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--tblr-accordion-btn-icon-width);margin-right:auto;transition:var(--tblr-accordion-btn-icon-transition);width:var(--tblr-accordion-btn-icon-width)}@media (prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--tblr-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--tblr-accordion-bg);border:var(--tblr-accordion-border-width) solid var(--tblr-accordion-border-color);color:var(--tblr-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--tblr-accordion-border-radius);border-top-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--tblr-accordion-inner-border-radius);border-top-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--tblr-accordion-border-radius);border-bottom-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--tblr-accordion-inner-border-radius);border-bottom-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--tblr-accordion-border-radius);border-bottom-right-radius:var(--tblr-accordion-border-radius)}.accordion-body{padding:var(--tblr-accordion-body-padding-y) var(--tblr-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--tblr-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%236aa9e3' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");--tblr-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%236aa9e3' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.breadcrumb{--tblr-breadcrumb-padding-x:0;--tblr-breadcrumb-padding-y:0;--tblr-breadcrumb-margin-bottom:1rem;--tblr-breadcrumb-bg: ;--tblr-breadcrumb-border-radius: ;--tblr-breadcrumb-divider-color:var(--tblr-gray-500);--tblr-breadcrumb-item-padding-x:0.5rem;--tblr-breadcrumb-item-active-color:inherit;background-color:var(--tblr-breadcrumb-bg);border-radius:var(--tblr-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--tblr-breadcrumb-font-size);list-style:none;margin-bottom:var(--tblr-breadcrumb-margin-bottom);padding:var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x)}.breadcrumb-item+.breadcrumb-item{padding-right:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--tblr-breadcrumb-divider-color);content:var(--tblr-breadcrumb-divider,"/");float:right;padding-left:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item.active{color:var(--tblr-breadcrumb-item-active-color)}.pagination{--tblr-pagination-padding-x:0.25rem;--tblr-pagination-padding-y:0.25rem;--tblr-pagination-font-size:0.875rem;--tblr-pagination-color:var(--tblr-gray-500);--tblr-pagination-bg:transparent;--tblr-pagination-border-width:0;--tblr-pagination-border-color:var(--tblr-border-color);--tblr-pagination-border-radius:var(--tblr-border-radius);--tblr-pagination-hover-color:var(--tblr-link-hover-color);--tblr-pagination-hover-bg:var(--tblr-tertiary-bg);--tblr-pagination-hover-border-color:var(--tblr-border-color);--tblr-pagination-focus-color:var(--tblr-link-hover-color);--tblr-pagination-focus-bg:var(--tblr-secondary-bg);--tblr-pagination-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-pagination-active-color:#fff;--tblr-pagination-active-bg:var(--tblr-primary);--tblr-pagination-active-border-color:var(--tblr-primary);--tblr-pagination-disabled-color:var(--tblr-disabled-color);--tblr-pagination-disabled-bg:transparent;--tblr-pagination-disabled-border-color:var(--tblr-border-color);display:flex;list-style:none;padding-right:0}.page-link{background-color:var(--tblr-pagination-bg);border:var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);color:var(--tblr-pagination-color);display:block;font-size:var(--tblr-pagination-font-size);padding:var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);position:relative;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{background-color:var(--tblr-pagination-hover-bg);border-color:var(--tblr-pagination-hover-border-color);color:var(--tblr-pagination-hover-color);text-decoration:none;z-index:2}.page-link:focus{background-color:var(--tblr-pagination-focus-bg);box-shadow:var(--tblr-pagination-focus-box-shadow);color:var(--tblr-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--tblr-pagination-active-bg);border-color:var(--tblr-pagination-active-border-color);color:var(--tblr-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--tblr-pagination-disabled-bg);border-color:var(--tblr-pagination-disabled-border-color);color:var(--tblr-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-right:0}.page-item:first-child .page-link{border-bottom-right-radius:var(--tblr-pagination-border-radius);border-top-right-radius:var(--tblr-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-left-radius:var(--tblr-pagination-border-radius);border-top-left-radius:var(--tblr-pagination-border-radius)}.pagination-lg{--tblr-pagination-padding-x:1.5rem;--tblr-pagination-padding-y:0.75rem;--tblr-pagination-font-size:1.09375rem;--tblr-pagination-border-radius:var(--tblr-border-radius-lg)}.pagination-sm{--tblr-pagination-padding-x:0.5rem;--tblr-pagination-padding-y:0.25rem;--tblr-pagination-font-size:0.765625rem;--tblr-pagination-border-radius:var(--tblr-border-radius-sm)}.badge{--tblr-badge-padding-x:0.5em;--tblr-badge-padding-y:0.25em;--tblr-badge-font-size:85.714285%;--tblr-badge-font-weight:var(--tblr-font-weight-medium);--tblr-badge-color:var(--tblr-gray-500);--tblr-badge-border-radius:var(--tblr-border-radius);border-radius:var(--tblr-badge-border-radius);color:var(--tblr-badge-color);display:inline-block;font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);line-height:1;padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--tblr-alert-bg:transparent;--tblr-alert-padding-x:1rem;--tblr-alert-padding-y:0.75rem;--tblr-alert-margin-bottom:1rem;--tblr-alert-color:inherit;--tblr-alert-border-color:transparent;--tblr-alert-border:var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius:var(--tblr-border-radius);--tblr-alert-link-color:inherit;background-color:var(--tblr-alert-bg);border:var(--tblr-alert-border);border-radius:var(--tblr-alert-border-radius);color:var(--tblr-alert-color);margin-bottom:var(--tblr-alert-margin-bottom);padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--tblr-alert-link-color);font-weight:var(--tblr-font-weight-bold)}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{left:0;padding:.9375rem 1rem;position:absolute;top:0;z-index:2}.alert-primary{--tblr-alert-color:var(--tblr-primary-text-emphasis);--tblr-alert-bg:var(--tblr-primary-bg-subtle);--tblr-alert-border-color:var(--tblr-primary-border-subtle);--tblr-alert-link-color:var(--tblr-primary-text-emphasis)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary-text-emphasis);--tblr-alert-bg:var(--tblr-secondary-bg-subtle);--tblr-alert-border-color:var(--tblr-secondary-border-subtle);--tblr-alert-link-color:var(--tblr-secondary-text-emphasis)}.alert-success{--tblr-alert-color:var(--tblr-success-text-emphasis);--tblr-alert-bg:var(--tblr-success-bg-subtle);--tblr-alert-border-color:var(--tblr-success-border-subtle);--tblr-alert-link-color:var(--tblr-success-text-emphasis)}.alert-info{--tblr-alert-color:var(--tblr-info-text-emphasis);--tblr-alert-bg:var(--tblr-info-bg-subtle);--tblr-alert-border-color:var(--tblr-info-border-subtle);--tblr-alert-link-color:var(--tblr-info-text-emphasis)}.alert-warning{--tblr-alert-color:var(--tblr-warning-text-emphasis);--tblr-alert-bg:var(--tblr-warning-bg-subtle);--tblr-alert-border-color:var(--tblr-warning-border-subtle);--tblr-alert-link-color:var(--tblr-warning-text-emphasis)}.alert-danger{--tblr-alert-color:var(--tblr-danger-text-emphasis);--tblr-alert-bg:var(--tblr-danger-bg-subtle);--tblr-alert-border-color:var(--tblr-danger-border-subtle);--tblr-alert-link-color:var(--tblr-danger-text-emphasis)}.alert-light{--tblr-alert-color:var(--tblr-light-text-emphasis);--tblr-alert-bg:var(--tblr-light-bg-subtle);--tblr-alert-border-color:var(--tblr-light-border-subtle);--tblr-alert-link-color:var(--tblr-light-text-emphasis)}.alert-dark{--tblr-alert-color:var(--tblr-dark-text-emphasis);--tblr-alert-bg:var(--tblr-dark-bg-subtle);--tblr-alert-border-color:var(--tblr-dark-border-subtle);--tblr-alert-link-color:var(--tblr-dark-text-emphasis)}.alert-muted{--tblr-alert-color:var(--tblr-muted-text-emphasis);--tblr-alert-bg:var(--tblr-muted-bg-subtle);--tblr-alert-border-color:var(--tblr-muted-border-subtle);--tblr-alert-link-color:var(--tblr-muted-text-emphasis)}.alert-blue{--tblr-alert-color:var(--tblr-blue-text-emphasis);--tblr-alert-bg:var(--tblr-blue-bg-subtle);--tblr-alert-border-color:var(--tblr-blue-border-subtle);--tblr-alert-link-color:var(--tblr-blue-text-emphasis)}.alert-azure{--tblr-alert-color:var(--tblr-azure-text-emphasis);--tblr-alert-bg:var(--tblr-azure-bg-subtle);--tblr-alert-border-color:var(--tblr-azure-border-subtle);--tblr-alert-link-color:var(--tblr-azure-text-emphasis)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo-text-emphasis);--tblr-alert-bg:var(--tblr-indigo-bg-subtle);--tblr-alert-border-color:var(--tblr-indigo-border-subtle);--tblr-alert-link-color:var(--tblr-indigo-text-emphasis)}.alert-purple{--tblr-alert-color:var(--tblr-purple-text-emphasis);--tblr-alert-bg:var(--tblr-purple-bg-subtle);--tblr-alert-border-color:var(--tblr-purple-border-subtle);--tblr-alert-link-color:var(--tblr-purple-text-emphasis)}.alert-pink{--tblr-alert-color:var(--tblr-pink-text-emphasis);--tblr-alert-bg:var(--tblr-pink-bg-subtle);--tblr-alert-border-color:var(--tblr-pink-border-subtle);--tblr-alert-link-color:var(--tblr-pink-text-emphasis)}.alert-red{--tblr-alert-color:var(--tblr-red-text-emphasis);--tblr-alert-bg:var(--tblr-red-bg-subtle);--tblr-alert-border-color:var(--tblr-red-border-subtle);--tblr-alert-link-color:var(--tblr-red-text-emphasis)}.alert-orange{--tblr-alert-color:var(--tblr-orange-text-emphasis);--tblr-alert-bg:var(--tblr-orange-bg-subtle);--tblr-alert-border-color:var(--tblr-orange-border-subtle);--tblr-alert-link-color:var(--tblr-orange-text-emphasis)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow-text-emphasis);--tblr-alert-bg:var(--tblr-yellow-bg-subtle);--tblr-alert-border-color:var(--tblr-yellow-border-subtle);--tblr-alert-link-color:var(--tblr-yellow-text-emphasis)}.alert-lime{--tblr-alert-color:var(--tblr-lime-text-emphasis);--tblr-alert-bg:var(--tblr-lime-bg-subtle);--tblr-alert-border-color:var(--tblr-lime-border-subtle);--tblr-alert-link-color:var(--tblr-lime-text-emphasis)}.alert-green{--tblr-alert-color:var(--tblr-green-text-emphasis);--tblr-alert-bg:var(--tblr-green-bg-subtle);--tblr-alert-border-color:var(--tblr-green-border-subtle);--tblr-alert-link-color:var(--tblr-green-text-emphasis)}.alert-teal{--tblr-alert-color:var(--tblr-teal-text-emphasis);--tblr-alert-bg:var(--tblr-teal-bg-subtle);--tblr-alert-border-color:var(--tblr-teal-border-subtle);--tblr-alert-link-color:var(--tblr-teal-text-emphasis)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan-text-emphasis);--tblr-alert-bg:var(--tblr-cyan-bg-subtle);--tblr-alert-border-color:var(--tblr-cyan-border-subtle);--tblr-alert-link-color:var(--tblr-cyan-text-emphasis)}.alert-x{--tblr-alert-color:var(--tblr-x-text-emphasis);--tblr-alert-bg:var(--tblr-x-bg-subtle);--tblr-alert-border-color:var(--tblr-x-border-subtle);--tblr-alert-link-color:var(--tblr-x-text-emphasis)}.alert-facebook{--tblr-alert-color:var(--tblr-facebook-text-emphasis);--tblr-alert-bg:var(--tblr-facebook-bg-subtle);--tblr-alert-border-color:var(--tblr-facebook-border-subtle);--tblr-alert-link-color:var(--tblr-facebook-text-emphasis)}.alert-twitter{--tblr-alert-color:var(--tblr-twitter-text-emphasis);--tblr-alert-bg:var(--tblr-twitter-bg-subtle);--tblr-alert-border-color:var(--tblr-twitter-border-subtle);--tblr-alert-link-color:var(--tblr-twitter-text-emphasis)}.alert-linkedin{--tblr-alert-color:var(--tblr-linkedin-text-emphasis);--tblr-alert-bg:var(--tblr-linkedin-bg-subtle);--tblr-alert-border-color:var(--tblr-linkedin-border-subtle);--tblr-alert-link-color:var(--tblr-linkedin-text-emphasis)}.alert-google{--tblr-alert-color:var(--tblr-google-text-emphasis);--tblr-alert-bg:var(--tblr-google-bg-subtle);--tblr-alert-border-color:var(--tblr-google-border-subtle);--tblr-alert-link-color:var(--tblr-google-text-emphasis)}.alert-youtube{--tblr-alert-color:var(--tblr-youtube-text-emphasis);--tblr-alert-bg:var(--tblr-youtube-bg-subtle);--tblr-alert-border-color:var(--tblr-youtube-border-subtle);--tblr-alert-link-color:var(--tblr-youtube-text-emphasis)}.alert-vimeo{--tblr-alert-color:var(--tblr-vimeo-text-emphasis);--tblr-alert-bg:var(--tblr-vimeo-bg-subtle);--tblr-alert-border-color:var(--tblr-vimeo-border-subtle);--tblr-alert-link-color:var(--tblr-vimeo-text-emphasis)}.alert-dribbble{--tblr-alert-color:var(--tblr-dribbble-text-emphasis);--tblr-alert-bg:var(--tblr-dribbble-bg-subtle);--tblr-alert-border-color:var(--tblr-dribbble-border-subtle);--tblr-alert-link-color:var(--tblr-dribbble-text-emphasis)}.alert-github{--tblr-alert-color:var(--tblr-github-text-emphasis);--tblr-alert-bg:var(--tblr-github-bg-subtle);--tblr-alert-border-color:var(--tblr-github-border-subtle);--tblr-alert-link-color:var(--tblr-github-text-emphasis)}.alert-instagram{--tblr-alert-color:var(--tblr-instagram-text-emphasis);--tblr-alert-bg:var(--tblr-instagram-bg-subtle);--tblr-alert-border-color:var(--tblr-instagram-border-subtle);--tblr-alert-link-color:var(--tblr-instagram-text-emphasis)}.alert-pinterest{--tblr-alert-color:var(--tblr-pinterest-text-emphasis);--tblr-alert-bg:var(--tblr-pinterest-bg-subtle);--tblr-alert-border-color:var(--tblr-pinterest-border-subtle);--tblr-alert-link-color:var(--tblr-pinterest-text-emphasis)}.alert-vk{--tblr-alert-color:var(--tblr-vk-text-emphasis);--tblr-alert-bg:var(--tblr-vk-bg-subtle);--tblr-alert-border-color:var(--tblr-vk-border-subtle);--tblr-alert-link-color:var(--tblr-vk-text-emphasis)}.alert-rss{--tblr-alert-color:var(--tblr-rss-text-emphasis);--tblr-alert-bg:var(--tblr-rss-bg-subtle);--tblr-alert-border-color:var(--tblr-rss-border-subtle);--tblr-alert-link-color:var(--tblr-rss-text-emphasis)}.alert-flickr{--tblr-alert-color:var(--tblr-flickr-text-emphasis);--tblr-alert-bg:var(--tblr-flickr-bg-subtle);--tblr-alert-border-color:var(--tblr-flickr-border-subtle);--tblr-alert-link-color:var(--tblr-flickr-text-emphasis)}.alert-bitbucket{--tblr-alert-color:var(--tblr-bitbucket-text-emphasis);--tblr-alert-bg:var(--tblr-bitbucket-bg-subtle);--tblr-alert-border-color:var(--tblr-bitbucket-border-subtle);--tblr-alert-link-color:var(--tblr-bitbucket-text-emphasis)}.alert-tabler{--tblr-alert-color:var(--tblr-tabler-text-emphasis);--tblr-alert-bg:var(--tblr-tabler-bg-subtle);--tblr-alert-border-color:var(--tblr-tabler-border-subtle);--tblr-alert-link-color:var(--tblr-tabler-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--tblr-progress-height:0.5rem;--tblr-progress-font-size:0.65625rem;--tblr-progress-bg:var(--tblr-border-color);--tblr-progress-border-radius:var(--tblr-border-radius);--tblr-progress-box-shadow:var(--tblr-box-shadow-inset);--tblr-progress-bar-color:#fff;--tblr-progress-bar-bg:var(--tblr-primary);--tblr-progress-bar-transition:width 0.6s ease;background-color:var(--tblr-progress-bg);border-radius:var(--tblr-progress-border-radius);box-shadow:var(--tblr-progress-box-shadow);display:flex;font-size:var(--tblr-progress-font-size);height:var(--tblr-progress-height);overflow:hidden}.progress-bar{background-color:var(--tblr-progress-bar-bg);color:var(--tblr-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--tblr-progress-bar-transition);white-space:nowrap}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(-45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--tblr-progress-height) var(--tblr-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--tblr-list-group-color:var(--tblr-body-color);--tblr-list-group-bg:inherit;--tblr-list-group-border-color:var(--tblr-border-color);--tblr-list-group-border-width:var(--tblr-border-width);--tblr-list-group-border-radius:var(--tblr-border-radius);--tblr-list-group-item-padding-x:1.25rem;--tblr-list-group-item-padding-y:1rem;--tblr-list-group-action-color:inherit;--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:rgba(var(--tblr-secondary-rgb),0.08);--tblr-list-group-action-active-color:var(--tblr-body-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-bg);--tblr-list-group-disabled-color:var(--tblr-secondary-color);--tblr-list-group-disabled-bg:inherit;--tblr-list-group-active-color:inherit;--tblr-list-group-active-bg:var(--tblr-active-bg);--tblr-list-group-active-border-color:var(--tblr-border-color);border-radius:var(--tblr-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-right:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:var(--tblr-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:var(--tblr-list-group-action-hover-bg);color:var(--tblr-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:active{background-color:var(--tblr-list-group-action-active-bg);color:var(--tblr-list-group-action-active-color)}.list-group-item{background-color:var(--tblr-list-group-bg);border:var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color);color:var(--tblr-list-group-color);display:block;padding:var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--tblr-list-group-disabled-bg);color:var(--tblr-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--tblr-list-group-active-bg);border-color:var(--tblr-list-group-active-border-color);color:var(--tblr-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--tblr-list-group-border-width);margin-top:calc(var(--tblr-list-group-border-width)*-1)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}@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-right-radius:var(--tblr-list-group-border-radius);border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-bottom-right-radius:0;border-top-left-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-right-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-right-width:var(--tblr-list-group-border-width);margin-right:calc(var(--tblr-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--tblr-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--tblr-list-group-color:var(--tblr-primary-text-emphasis);--tblr-list-group-bg:var(--tblr-primary-bg-subtle);--tblr-list-group-border-color:var(--tblr-primary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-primary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-primary-border-subtle);--tblr-list-group-active-color:var(--tblr-primary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-primary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-primary-text-emphasis)}.list-group-item-secondary{--tblr-list-group-color:var(--tblr-secondary-text-emphasis);--tblr-list-group-bg:var(--tblr-secondary-bg-subtle);--tblr-list-group-border-color:var(--tblr-secondary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-active-color:var(--tblr-secondary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-secondary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-secondary-text-emphasis)}.list-group-item-success{--tblr-list-group-color:var(--tblr-success-text-emphasis);--tblr-list-group-bg:var(--tblr-success-bg-subtle);--tblr-list-group-border-color:var(--tblr-success-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-success-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-success-border-subtle);--tblr-list-group-active-color:var(--tblr-success-bg-subtle);--tblr-list-group-active-bg:var(--tblr-success-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-success-text-emphasis)}.list-group-item-info{--tblr-list-group-color:var(--tblr-info-text-emphasis);--tblr-list-group-bg:var(--tblr-info-bg-subtle);--tblr-list-group-border-color:var(--tblr-info-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-info-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-info-border-subtle);--tblr-list-group-active-color:var(--tblr-info-bg-subtle);--tblr-list-group-active-bg:var(--tblr-info-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-info-text-emphasis)}.list-group-item-warning{--tblr-list-group-color:var(--tblr-warning-text-emphasis);--tblr-list-group-bg:var(--tblr-warning-bg-subtle);--tblr-list-group-border-color:var(--tblr-warning-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-warning-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-warning-border-subtle);--tblr-list-group-active-color:var(--tblr-warning-bg-subtle);--tblr-list-group-active-bg:var(--tblr-warning-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-warning-text-emphasis)}.list-group-item-danger{--tblr-list-group-color:var(--tblr-danger-text-emphasis);--tblr-list-group-bg:var(--tblr-danger-bg-subtle);--tblr-list-group-border-color:var(--tblr-danger-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-danger-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-danger-border-subtle);--tblr-list-group-active-color:var(--tblr-danger-bg-subtle);--tblr-list-group-active-bg:var(--tblr-danger-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-danger-text-emphasis)}.list-group-item-light{--tblr-list-group-color:var(--tblr-light-text-emphasis);--tblr-list-group-bg:var(--tblr-light-bg-subtle);--tblr-list-group-border-color:var(--tblr-light-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-light-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-light-border-subtle);--tblr-list-group-active-color:var(--tblr-light-bg-subtle);--tblr-list-group-active-bg:var(--tblr-light-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-light-text-emphasis)}.list-group-item-dark{--tblr-list-group-color:var(--tblr-dark-text-emphasis);--tblr-list-group-bg:var(--tblr-dark-bg-subtle);--tblr-list-group-border-color:var(--tblr-dark-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dark-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dark-border-subtle);--tblr-list-group-active-color:var(--tblr-dark-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dark-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dark-text-emphasis)}.list-group-item-muted{--tblr-list-group-color:var(--tblr-muted-text-emphasis);--tblr-list-group-bg:var(--tblr-muted-bg-subtle);--tblr-list-group-border-color:var(--tblr-muted-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-muted-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-muted-border-subtle);--tblr-list-group-active-color:var(--tblr-muted-bg-subtle);--tblr-list-group-active-bg:var(--tblr-muted-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-muted-text-emphasis)}.list-group-item-blue{--tblr-list-group-color:var(--tblr-blue-text-emphasis);--tblr-list-group-bg:var(--tblr-blue-bg-subtle);--tblr-list-group-border-color:var(--tblr-blue-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-blue-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-blue-border-subtle);--tblr-list-group-active-color:var(--tblr-blue-bg-subtle);--tblr-list-group-active-bg:var(--tblr-blue-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-blue-text-emphasis)}.list-group-item-azure{--tblr-list-group-color:var(--tblr-azure-text-emphasis);--tblr-list-group-bg:var(--tblr-azure-bg-subtle);--tblr-list-group-border-color:var(--tblr-azure-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-azure-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-azure-border-subtle);--tblr-list-group-active-color:var(--tblr-azure-bg-subtle);--tblr-list-group-active-bg:var(--tblr-azure-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-azure-text-emphasis)}.list-group-item-indigo{--tblr-list-group-color:var(--tblr-indigo-text-emphasis);--tblr-list-group-bg:var(--tblr-indigo-bg-subtle);--tblr-list-group-border-color:var(--tblr-indigo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-active-color:var(--tblr-indigo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-indigo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-indigo-text-emphasis)}.list-group-item-purple{--tblr-list-group-color:var(--tblr-purple-text-emphasis);--tblr-list-group-bg:var(--tblr-purple-bg-subtle);--tblr-list-group-border-color:var(--tblr-purple-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-purple-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-purple-border-subtle);--tblr-list-group-active-color:var(--tblr-purple-bg-subtle);--tblr-list-group-active-bg:var(--tblr-purple-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-purple-text-emphasis)}.list-group-item-pink{--tblr-list-group-color:var(--tblr-pink-text-emphasis);--tblr-list-group-bg:var(--tblr-pink-bg-subtle);--tblr-list-group-border-color:var(--tblr-pink-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pink-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pink-border-subtle);--tblr-list-group-active-color:var(--tblr-pink-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pink-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pink-text-emphasis)}.list-group-item-red{--tblr-list-group-color:var(--tblr-red-text-emphasis);--tblr-list-group-bg:var(--tblr-red-bg-subtle);--tblr-list-group-border-color:var(--tblr-red-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-red-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-red-border-subtle);--tblr-list-group-active-color:var(--tblr-red-bg-subtle);--tblr-list-group-active-bg:var(--tblr-red-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-red-text-emphasis)}.list-group-item-orange{--tblr-list-group-color:var(--tblr-orange-text-emphasis);--tblr-list-group-bg:var(--tblr-orange-bg-subtle);--tblr-list-group-border-color:var(--tblr-orange-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-orange-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-orange-border-subtle);--tblr-list-group-active-color:var(--tblr-orange-bg-subtle);--tblr-list-group-active-bg:var(--tblr-orange-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-orange-text-emphasis)}.list-group-item-yellow{--tblr-list-group-color:var(--tblr-yellow-text-emphasis);--tblr-list-group-bg:var(--tblr-yellow-bg-subtle);--tblr-list-group-border-color:var(--tblr-yellow-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-active-color:var(--tblr-yellow-bg-subtle);--tblr-list-group-active-bg:var(--tblr-yellow-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-yellow-text-emphasis)}.list-group-item-lime{--tblr-list-group-color:var(--tblr-lime-text-emphasis);--tblr-list-group-bg:var(--tblr-lime-bg-subtle);--tblr-list-group-border-color:var(--tblr-lime-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-lime-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-lime-border-subtle);--tblr-list-group-active-color:var(--tblr-lime-bg-subtle);--tblr-list-group-active-bg:var(--tblr-lime-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-lime-text-emphasis)}.list-group-item-green{--tblr-list-group-color:var(--tblr-green-text-emphasis);--tblr-list-group-bg:var(--tblr-green-bg-subtle);--tblr-list-group-border-color:var(--tblr-green-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-green-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-green-border-subtle);--tblr-list-group-active-color:var(--tblr-green-bg-subtle);--tblr-list-group-active-bg:var(--tblr-green-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-green-text-emphasis)}.list-group-item-teal{--tblr-list-group-color:var(--tblr-teal-text-emphasis);--tblr-list-group-bg:var(--tblr-teal-bg-subtle);--tblr-list-group-border-color:var(--tblr-teal-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-teal-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-teal-border-subtle);--tblr-list-group-active-color:var(--tblr-teal-bg-subtle);--tblr-list-group-active-bg:var(--tblr-teal-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-teal-text-emphasis)}.list-group-item-cyan{--tblr-list-group-color:var(--tblr-cyan-text-emphasis);--tblr-list-group-bg:var(--tblr-cyan-bg-subtle);--tblr-list-group-border-color:var(--tblr-cyan-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-active-color:var(--tblr-cyan-bg-subtle);--tblr-list-group-active-bg:var(--tblr-cyan-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-cyan-text-emphasis)}.list-group-item-x{--tblr-list-group-color:var(--tblr-x-text-emphasis);--tblr-list-group-bg:var(--tblr-x-bg-subtle);--tblr-list-group-border-color:var(--tblr-x-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-x-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-x-border-subtle);--tblr-list-group-active-color:var(--tblr-x-bg-subtle);--tblr-list-group-active-bg:var(--tblr-x-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-x-text-emphasis)}.list-group-item-facebook{--tblr-list-group-color:var(--tblr-facebook-text-emphasis);--tblr-list-group-bg:var(--tblr-facebook-bg-subtle);--tblr-list-group-border-color:var(--tblr-facebook-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-facebook-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-facebook-border-subtle);--tblr-list-group-active-color:var(--tblr-facebook-bg-subtle);--tblr-list-group-active-bg:var(--tblr-facebook-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-facebook-text-emphasis)}.list-group-item-twitter{--tblr-list-group-color:var(--tblr-twitter-text-emphasis);--tblr-list-group-bg:var(--tblr-twitter-bg-subtle);--tblr-list-group-border-color:var(--tblr-twitter-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-twitter-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-twitter-border-subtle);--tblr-list-group-active-color:var(--tblr-twitter-bg-subtle);--tblr-list-group-active-bg:var(--tblr-twitter-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-twitter-text-emphasis)}.list-group-item-linkedin{--tblr-list-group-color:var(--tblr-linkedin-text-emphasis);--tblr-list-group-bg:var(--tblr-linkedin-bg-subtle);--tblr-list-group-border-color:var(--tblr-linkedin-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-linkedin-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-linkedin-border-subtle);--tblr-list-group-active-color:var(--tblr-linkedin-bg-subtle);--tblr-list-group-active-bg:var(--tblr-linkedin-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-linkedin-text-emphasis)}.list-group-item-google{--tblr-list-group-color:var(--tblr-google-text-emphasis);--tblr-list-group-bg:var(--tblr-google-bg-subtle);--tblr-list-group-border-color:var(--tblr-google-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-google-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-google-border-subtle);--tblr-list-group-active-color:var(--tblr-google-bg-subtle);--tblr-list-group-active-bg:var(--tblr-google-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-google-text-emphasis)}.list-group-item-youtube{--tblr-list-group-color:var(--tblr-youtube-text-emphasis);--tblr-list-group-bg:var(--tblr-youtube-bg-subtle);--tblr-list-group-border-color:var(--tblr-youtube-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-youtube-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-youtube-border-subtle);--tblr-list-group-active-color:var(--tblr-youtube-bg-subtle);--tblr-list-group-active-bg:var(--tblr-youtube-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-youtube-text-emphasis)}.list-group-item-vimeo{--tblr-list-group-color:var(--tblr-vimeo-text-emphasis);--tblr-list-group-bg:var(--tblr-vimeo-bg-subtle);--tblr-list-group-border-color:var(--tblr-vimeo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-vimeo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-vimeo-border-subtle);--tblr-list-group-active-color:var(--tblr-vimeo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-vimeo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-vimeo-text-emphasis)}.list-group-item-dribbble{--tblr-list-group-color:var(--tblr-dribbble-text-emphasis);--tblr-list-group-bg:var(--tblr-dribbble-bg-subtle);--tblr-list-group-border-color:var(--tblr-dribbble-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dribbble-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dribbble-border-subtle);--tblr-list-group-active-color:var(--tblr-dribbble-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dribbble-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dribbble-text-emphasis)}.list-group-item-github{--tblr-list-group-color:var(--tblr-github-text-emphasis);--tblr-list-group-bg:var(--tblr-github-bg-subtle);--tblr-list-group-border-color:var(--tblr-github-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-github-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-github-border-subtle);--tblr-list-group-active-color:var(--tblr-github-bg-subtle);--tblr-list-group-active-bg:var(--tblr-github-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-github-text-emphasis)}.list-group-item-instagram{--tblr-list-group-color:var(--tblr-instagram-text-emphasis);--tblr-list-group-bg:var(--tblr-instagram-bg-subtle);--tblr-list-group-border-color:var(--tblr-instagram-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-instagram-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-instagram-border-subtle);--tblr-list-group-active-color:var(--tblr-instagram-bg-subtle);--tblr-list-group-active-bg:var(--tblr-instagram-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-instagram-text-emphasis)}.list-group-item-pinterest{--tblr-list-group-color:var(--tblr-pinterest-text-emphasis);--tblr-list-group-bg:var(--tblr-pinterest-bg-subtle);--tblr-list-group-border-color:var(--tblr-pinterest-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pinterest-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pinterest-border-subtle);--tblr-list-group-active-color:var(--tblr-pinterest-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pinterest-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pinterest-text-emphasis)}.list-group-item-vk{--tblr-list-group-color:var(--tblr-vk-text-emphasis);--tblr-list-group-bg:var(--tblr-vk-bg-subtle);--tblr-list-group-border-color:var(--tblr-vk-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-vk-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-vk-border-subtle);--tblr-list-group-active-color:var(--tblr-vk-bg-subtle);--tblr-list-group-active-bg:var(--tblr-vk-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-vk-text-emphasis)}.list-group-item-rss{--tblr-list-group-color:var(--tblr-rss-text-emphasis);--tblr-list-group-bg:var(--tblr-rss-bg-subtle);--tblr-list-group-border-color:var(--tblr-rss-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-rss-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-rss-border-subtle);--tblr-list-group-active-color:var(--tblr-rss-bg-subtle);--tblr-list-group-active-bg:var(--tblr-rss-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-rss-text-emphasis)}.list-group-item-flickr{--tblr-list-group-color:var(--tblr-flickr-text-emphasis);--tblr-list-group-bg:var(--tblr-flickr-bg-subtle);--tblr-list-group-border-color:var(--tblr-flickr-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-flickr-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-flickr-border-subtle);--tblr-list-group-active-color:var(--tblr-flickr-bg-subtle);--tblr-list-group-active-bg:var(--tblr-flickr-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-flickr-text-emphasis)}.list-group-item-bitbucket{--tblr-list-group-color:var(--tblr-bitbucket-text-emphasis);--tblr-list-group-bg:var(--tblr-bitbucket-bg-subtle);--tblr-list-group-border-color:var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-bitbucket-border-subtle);--tblr-list-group-active-color:var(--tblr-bitbucket-bg-subtle);--tblr-list-group-active-bg:var(--tblr-bitbucket-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-bitbucket-text-emphasis)}.list-group-item-tabler{--tblr-list-group-color:var(--tblr-tabler-text-emphasis);--tblr-list-group-bg:var(--tblr-tabler-bg-subtle);--tblr-list-group-border-color:var(--tblr-tabler-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-tabler-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-tabler-border-subtle);--tblr-list-group-active-color:var(--tblr-tabler-bg-subtle);--tblr-list-group-active-bg:var(--tblr-tabler-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-tabler-text-emphasis)}.btn-close{--tblr-btn-close-color:#182433;--tblr-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23182433' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3E%3C/svg%3E");--tblr-btn-close-opacity:0.4;--tblr-btn-close-hover-opacity:0.75;--tblr-btn-close-focus-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-btn-close-focus-opacity:1;--tblr-btn-close-disabled-opacity:0.25;--tblr-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--tblr-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:4px;box-sizing:content-box;height:1em;opacity:var(--tblr-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--tblr-btn-close-color)}.btn-close:hover{opacity:var(--tblr-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--tblr-btn-close-focus-shadow);opacity:var(--tblr-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--tblr-btn-close-disabled-opacity);pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn-close-white,[data-bs-theme=dark] .btn-close,body[data-bs-theme=dark] [data-bs-theme=light] .btn-close{filter:var(--tblr-btn-close-white-filter)}.toast{--tblr-toast-zindex:1090;--tblr-toast-padding-x:0.75rem;--tblr-toast-padding-y:0.5rem;--tblr-toast-spacing:calc(var(--tblr-page-padding)*2);--tblr-toast-max-width:350px;--tblr-toast-font-size:0.875rem;--tblr-toast-color: ;--tblr-toast-bg:rgba(var(--tblr-body-bg-rgb),0.85);--tblr-toast-border-width:var(--tblr-border-width);--tblr-toast-border-color:var(--tblr-border-color);--tblr-toast-border-radius:var(--tblr-border-radius);--tblr-toast-box-shadow:var(--tblr-box-shadow);--tblr-toast-header-color:var(--tblr-gray-500);--tblr-toast-header-bg:rgba(var(--tblr-body-bg-rgb),0.85);--tblr-toast-header-border-color:var(--tblr-border-color);background-clip:padding-box;background-color:var(--tblr-toast-bg);border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);border-radius:var(--tblr-toast-border-radius);box-shadow:var(--tblr-toast-box-shadow);color:var(--tblr-toast-color);font-size:var(--tblr-toast-font-size);max-width:100%;pointer-events:auto;width:var(--tblr-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--tblr-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:-webkit-max-content;width:-moz-max-content;width:max-content;z-index:var(--tblr-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--tblr-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--tblr-toast-header-bg);border-bottom:var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);border-top-left-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));border-top-right-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));color:var(--tblr-toast-header-color);display:flex;padding:var(--tblr-toast-padding-y) var(--tblr-toast-padding-x)}.toast-header .btn-close{margin-left:calc(var(--tblr-toast-padding-x)*-.5);margin-right:var(--tblr-toast-padding-x)}.toast-body{padding:var(--tblr-toast-padding-x);word-wrap:break-word}.modal{--tblr-modal-zindex:1055;--tblr-modal-width:540px;--tblr-modal-padding:1.5rem;--tblr-modal-margin:0.5rem;--tblr-modal-color: ;--tblr-modal-bg:var(--tblr-bg-surface);--tblr-modal-border-color:transparent;--tblr-modal-border-width:var(--tblr-border-width);--tblr-modal-border-radius:var(--tblr-border-radius-lg);--tblr-modal-box-shadow:var(--tblr-box-shadow-sm);--tblr-modal-inner-border-radius:calc(var(--tblr-modal-border-radius) - 1px);--tblr-modal-header-padding-x:1.5rem;--tblr-modal-header-padding-y:1.5rem;--tblr-modal-header-padding:1.5rem;--tblr-modal-header-border-color:var(--tblr-border-color);--tblr-modal-header-border-width:var(--tblr-border-width);--tblr-modal-title-line-height:1.4285714286;--tblr-modal-footer-gap:0.75rem;--tblr-modal-footer-bg:var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color:var(--tblr-border-color);--tblr-modal-footer-border-width:var(--tblr-border-width);display:none;height:100%;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;right:0;top:0;width:100%;z-index:var(--tblr-modal-zindex)}.modal-dialog{margin:var(--tblr-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-1rem);transition:transform .3s ease-out}@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(--tblr-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--tblr-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--tblr-modal-bg);border:var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);border-radius:var(--tblr-modal-border-radius);box-shadow:var(--tblr-modal-box-shadow);color:var(--tblr-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--tblr-backdrop-zindex:1050;--tblr-backdrop-bg:#182433;--tblr-backdrop-opacity:0.24;background-color:var(--tblr-backdrop-bg);height:100vh;position:fixed;right:0;top:0;width:100vw;z-index:var(--tblr-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--tblr-backdrop-opacity)}.modal-header{border-bottom:var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);border-top-left-radius:var(--tblr-modal-inner-border-radius);border-top-right-radius:var(--tblr-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--tblr-modal-header-padding)}.modal-header .btn-close{margin:calc(var(--tblr-modal-header-padding-y)*-.5) auto calc(var(--tblr-modal-header-padding-y)*-.5) calc(var(--tblr-modal-header-padding-x)*-.5);padding:calc(var(--tblr-modal-header-padding-y)*.5) calc(var(--tblr-modal-header-padding-x)*.5)}.modal-title{line-height:var(--tblr-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--tblr-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--tblr-modal-footer-bg);border-bottom-left-radius:var(--tblr-modal-inner-border-radius);border-bottom-right-radius:var(--tblr-modal-inner-border-radius);border-top:var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--tblr-modal-footer-gap)*.5)}@media (min-width:576px){.modal{--tblr-modal-margin:1.75rem;--tblr-modal-box-shadow:var(--tblr-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--tblr-modal-width)}.modal-sm{--tblr-modal-width:380px}}@media (min-width:992px){.modal-lg,.modal-xl{--tblr-modal-width:720px}}@media (min-width:1200px){.modal-xl{--tblr-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width:575.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width:767.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width:991.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width:1399.98px){.modal-fullscreen-xxl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--tblr-tooltip-zindex:1080;--tblr-tooltip-max-width:200px;--tblr-tooltip-padding-x:var(--tblr-spacer-2);--tblr-tooltip-padding-y:var(--tblr-spacer-2);--tblr-tooltip-margin: ;--tblr-tooltip-font-size:0.765625rem;--tblr-tooltip-color:var(--tblr-light);--tblr-tooltip-bg:var(--tblr-bg-surface-dark);--tblr-tooltip-border-radius:var(--tblr-border-radius);--tblr-tooltip-opacity:0.9;--tblr-tooltip-arrow-width:0.8rem;--tblr-tooltip-arrow-height:0.4rem;display:block;font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4285714286;margin:var(--tblr-tooltip-margin);text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--tblr-tooltip-zindex);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--tblr-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--tblr-tooltip-arrow-height);width:var(--tblr-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--tblr-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--tblr-tooltip-bg);border-width:var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--tblr-tooltip-arrow-width);left:calc(var(--tblr-tooltip-arrow-height)*-1);width:var(--tblr-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--tblr-tooltip-bg);border-width:calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--tblr-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--tblr-tooltip-bg);border-width:0 calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--tblr-tooltip-arrow-width);right:calc(var(--tblr-tooltip-arrow-height)*-1);width:var(--tblr-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--tblr-tooltip-bg);border-width:calc(var(--tblr-tooltip-arrow-width)*.5) 0 calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--tblr-tooltip-bg);border-radius:var(--tblr-tooltip-border-radius);color:var(--tblr-tooltip-color);max-width:var(--tblr-tooltip-max-width);padding:var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);text-align:center}.popover{--tblr-popover-zindex:1070;--tblr-popover-max-width:276px;--tblr-popover-font-size:0.765625rem;--tblr-popover-bg:var(--tblr-bg-surface);--tblr-popover-border-width:var(--tblr-border-width);--tblr-popover-border-color:var(--tblr-border-color);--tblr-popover-border-radius:var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-popover-box-shadow:var(--tblr-box-shadow);--tblr-popover-header-padding-x:1rem;--tblr-popover-header-padding-y:0.5rem;--tblr-popover-header-font-size:0.875rem;--tblr-popover-header-color:inherit;--tblr-popover-header-bg:transparent;--tblr-popover-body-padding-x:1rem;--tblr-popover-body-padding-y:1rem;--tblr-popover-body-color:inherit;--tblr-popover-arrow-width:1rem;--tblr-popover-arrow-height:0.5rem;--tblr-popover-arrow-border:var(--tblr-popover-border-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4285714286;max-width:var(--tblr-popover-max-width);text-align:right;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--tblr-popover-zindex);word-wrap:break-word;background-clip:padding-box;background-color:var(--tblr-popover-bg);border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.popover .popover-arrow{display:block;height:var(--tblr-popover-arrow-height);width:var(--tblr-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-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(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--tblr-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--tblr-popover-bg);bottom:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--tblr-popover-arrow-width);left:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height)}.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(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--tblr-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--tblr-popover-bg);left:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-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(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--tblr-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--tblr-popover-bg);top:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg);content:"";display:block;margin-right:calc(var(--tblr-popover-arrow-width)*-.5);position:absolute;right:50%;top:0;width:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--tblr-popover-arrow-width);right:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height)}.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(--tblr-popover-arrow-width)*.5) 0 calc(var(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--tblr-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--tblr-popover-bg);right:var(--tblr-popover-border-width)}.popover-header{background-color:var(--tblr-popover-header-bg);border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-top-left-radius:var(--tblr-popover-inner-border-radius);border-top-right-radius:var(--tblr-popover-inner-border-radius);color:var(--tblr-popover-header-color);font-size:var(--tblr-popover-header-font-size);margin-bottom:0;padding:var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--tblr-popover-body-color);padding:var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:none;float:right;margin-left:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@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;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@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{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{right:0}.carousel-control-next{left:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:1.5rem;width:1.5rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m15 18-6-6 6-6'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media (prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;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{animation:var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--tblr-spinner-height);vertical-align:var(--tblr-spinner-vertical-align);width:var(--tblr-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-border-width:2px;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-border;border-left-color:currentcolor;border:var(--tblr-spinner-border-width) solid;border-left:var(--tblr-spinner-border-width) solid transparent}.spinner-border-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem;--tblr-spinner-border-width:1px}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem}@media (prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--tblr-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--tblr-offcanvas-zindex:1045;--tblr-offcanvas-width:400px;--tblr-offcanvas-height:30vh;--tblr-offcanvas-padding-x:1.5rem;--tblr-offcanvas-padding-y:1.5rem;--tblr-offcanvas-color:var(--tblr-body-color);--tblr-offcanvas-bg:var(--tblr-bg-surface);--tblr-offcanvas-border-width:var(--tblr-border-width);--tblr-offcanvas-border-color:var(--tblr-border-color);--tblr-offcanvas-box-shadow:var(--tblr-box-shadow-sm);--tblr-offcanvas-transition:transform 0.3s ease-in-out;--tblr-offcanvas-title-line-height:1.4285714286}@media (max-width:575.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:575.98px) and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media (max-width:575.98px){.offcanvas-sm.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:767.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:767.98px) and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media (max-width:767.98px){.offcanvas-md.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-md.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:991.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:991.98px) and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media (max-width:991.98px){.offcanvas-lg.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:1199.98px) and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media (max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media (max-width:1399.98px){.offcanvas-xxl{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media (max-width:1399.98px) and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media (max-width:1399.98px){.offcanvas-xxl.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-xxl.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-xxl.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom,.offcanvas-xxl.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xxl.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}@media (prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas.offcanvas-end{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:#182433;height:100vh;position:fixed;right:0;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.24}.offcanvas-header{align-items:center;display:flex;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--tblr-offcanvas-padding-y)*-.5) auto calc(var(--tblr-offcanvas-padding-y)*-.5) calc(var(--tblr-offcanvas-padding-x)*-.5);padding:calc(var(--tblr-offcanvas-padding-y)*.5) calc(var(--tblr-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--tblr-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.2;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.1}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;-webkit-mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.9) 75%,#000 95%);mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.9) 75%,#000 95%);-webkit-mask-size:200% 100%;mask-size:200% 100%}@keyframes placeholder-wave{to{-webkit-mask-position:-200% 0;mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{background-color:RGBA(var(--tblr-primary-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-secondary{background-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-success{background-color:RGBA(var(--tblr-success-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-info{background-color:RGBA(var(--tblr-info-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-warning{background-color:RGBA(var(--tblr-warning-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-danger{background-color:RGBA(var(--tblr-danger-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-light{background-color:RGBA(var(--tblr-light-rgb),var(--tblr-bg-opacity,1))!important;color:#182433!important}.text-bg-dark{background-color:RGBA(var(--tblr-dark-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-muted{background-color:RGBA(var(--tblr-muted-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-blue{background-color:RGBA(var(--tblr-blue-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-azure{background-color:RGBA(var(--tblr-azure-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-indigo{background-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-purple{background-color:RGBA(var(--tblr-purple-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-pink{background-color:RGBA(var(--tblr-pink-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-red{background-color:RGBA(var(--tblr-red-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-orange{background-color:RGBA(var(--tblr-orange-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-yellow{background-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-lime{background-color:RGBA(var(--tblr-lime-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-green{background-color:RGBA(var(--tblr-green-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-teal{background-color:RGBA(var(--tblr-teal-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-cyan{background-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-x{background-color:RGBA(var(--tblr-x-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-facebook{background-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-twitter{background-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-linkedin{background-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-google{background-color:RGBA(var(--tblr-google-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-youtube{background-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-vimeo{background-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-dribbble{background-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-github{background-color:RGBA(var(--tblr-github-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-instagram{background-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-pinterest{background-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-vk{background-color:RGBA(var(--tblr-vk-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-rss{background-color:RGBA(var(--tblr-rss-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-flickr{background-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-bitbucket{background-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-tabler{background-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.link-primary{color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,98,116,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--tblr-success-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--tblr-info-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--tblr-light-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(248,249,252,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(248,249,252,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(248,249,252,var(--tblr-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(19,29,41,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1))!important}.link-muted{color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1))!important}.link-muted:focus,.link-muted:hover{color:RGBA(86,98,116,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important}.link-blue{color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1))!important}.link-blue:focus,.link-blue:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-azure{color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1))!important}.link-azure:focus,.link-azure:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.link-indigo{color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1))!important}.link-indigo:focus,.link-indigo:hover{color:RGBA(53,79,188,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))!important}.link-purple{color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1))!important}.link-purple:focus,.link-purple:hover{color:RGBA(139,50,161,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))!important}.link-pink{color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1))!important}.link-pink:focus,.link-pink:hover{color:RGBA(171,41,86,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))!important}.link-red{color:RGBA(var(--tblr-red-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1))!important}.link-red:focus,.link-red:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.link-orange{color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1))!important}.link-orange:focus,.link-orange:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.link-yellow{color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1))!important}.link-yellow:focus,.link-yellow:hover{color:RGBA(196,127,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important}.link-lime{color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1))!important}.link-lime:focus,.link-lime:hover{color:RGBA(93,147,18,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))!important}.link-green{color:RGBA(var(--tblr-green-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1))!important}.link-green:focus,.link-green:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.link-teal{color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1))!important}.link-teal:focus,.link-teal:hover{color:RGBA(10,133,96,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))!important}.link-cyan{color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1))!important}.link-cyan:focus,.link-cyan:hover{color:RGBA(18,130,147,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))!important}.link-x{color:RGBA(var(--tblr-x-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-x-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-x-rgb),var(--tblr-link-underline-opacity,1))!important}.link-x:focus,.link-x:hover{color:RGBA(0,0,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(0,0,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(0,0,0,var(--tblr-link-underline-opacity,1))!important}.link-facebook{color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1))!important}.link-facebook:focus,.link-facebook:hover{color:RGBA(19,95,194,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1))!important}.link-twitter{color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1))!important}.link-twitter:focus,.link-twitter:hover{color:RGBA(23,129,194,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1))!important}.link-linkedin{color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1))!important}.link-linkedin:focus,.link-linkedin:hover{color:RGBA(8,82,155,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1))!important}.link-google{color:RGBA(var(--tblr-google-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1))!important}.link-google:focus,.link-google:hover{color:RGBA(176,62,52,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1))!important}.link-youtube{color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1))!important}.link-youtube:focus,.link-youtube:hover{color:RGBA(204,0,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1))!important}.link-vimeo{color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1))!important}.link-vimeo:focus,.link-vimeo:hover{color:RGBA(21,146,187,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1))!important}.link-dribbble{color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1))!important}.link-dribbble:focus,.link-dribbble:hover{color:RGBA(187,61,110,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1))!important}.link-github{color:RGBA(var(--tblr-github-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1))!important}.link-github:focus,.link-github:hover{color:RGBA(19,18,18,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1))!important}.link-instagram{color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1))!important}.link-instagram:focus,.link-instagram:hover{color:RGBA(182,51,76,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1))!important}.link-pinterest{color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1))!important}.link-pinterest:focus,.link-pinterest:hover{color:RGBA(151,6,22,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1))!important}.link-vk{color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1))!important}.link-vk:focus,.link-vk:hover{color:RGBA(79,105,134,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1))!important}.link-rss{color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1))!important}.link-rss:focus,.link-rss:hover{color:RGBA(204,132,0,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1))!important}.link-flickr{color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1))!important}.link-flickr:focus,.link-flickr:hover{color:RGBA(0,79,176,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1))!important}.link-bitbucket{color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1))!important}.link-bitbucket:focus,.link-bitbucket:hover{color:RGBA(0,66,163,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1))!important}.link-tabler{color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1))!important}.link-tabler:focus,.link-tabler:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,1))!important;-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,.75))!important;-webkit-text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--tblr-focus-ring-x,0) var(--tblr-focus-ring-y,0) var(--tblr-focus-ring-blur,0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color);outline:0}.icon-link{align-items:center;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:inline-flex;gap:.375rem;-webkit-text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,.5));text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,.5));text-underline-offset:.25em}.icon-link>.bi{flex-shrink:0;height:1em;width:1em;fill:currentcolor;transition:transform .2s ease-in-out}@media (prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--tblr-icon-link-transform,translate3d(-.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--tblr-aspect-ratio)}.ratio>*{height:100%;position:absolute;right:0;top:0;width:100%}.ratio-1x1{--tblr-aspect-ratio:100%}.ratio-2x1{--tblr-aspect-ratio:50%}.ratio-1x2{--tblr-aspect-ratio:200%}.ratio-3x1{--tblr-aspect-ratio:33.3333333333%}.ratio-1x3{--tblr-aspect-ratio:300%}.ratio-4x3{--tblr-aspect-ratio:75%}.ratio-3x4{--tblr-aspect-ratio:133.3333333333%}.ratio-16x9{--tblr-aspect-ratio:56.25%}.ratio-9x16{--tblr-aspect-ratio:177.7777777778%}.ratio-21x9{--tblr-aspect-ratio:42.8571428571%}.ratio-9x21{--tblr-aspect-ratio:233.3333333333%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media (min-width:576px){.sticky-sm-top{top:0}.sticky-sm-bottom,.sticky-sm-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-sm-bottom{bottom:0}}@media (min-width:768px){.sticky-md-top{top:0}.sticky-md-bottom,.sticky-md-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-md-bottom{bottom:0}}@media (min-width:992px){.sticky-lg-top{top:0}.sticky-lg-bottom,.sticky-lg-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-lg-bottom{bottom:0}}@media (min-width:1200px){.sticky-xl-top{top:0}.sticky-xl-bottom,.sticky-xl-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-xl-bottom{bottom:0}}@media (min-width:1400px){.sticky-xxl-top{top:0}.sticky-xxl-bottom,.sticky-xxl-top{position:-webkit-sticky;position:sticky;z-index:1020}.sticky-xxl-bottom{bottom:0}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;width:1px!important;clip:rect(0,0,0,0)!important;border:0!important;white-space:nowrap!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.16;width:var(--tblr-border-width)}.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:right!important}.float-end{float:left!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}.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(--tblr-box-shadow)!important}.shadow-sm{box-shadow:var(--tblr-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--tblr-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-secondary{--tblr-focus-ring-color:rgba(var(--tblr-secondary-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-success{--tblr-focus-ring-color:rgba(var(--tblr-success-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-info{--tblr-focus-ring-color:rgba(var(--tblr-info-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-warning{--tblr-focus-ring-color:rgba(var(--tblr-warning-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-danger{--tblr-focus-ring-color:rgba(var(--tblr-danger-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-light{--tblr-focus-ring-color:rgba(var(--tblr-light-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-dark{--tblr-focus-ring-color:rgba(var(--tblr-dark-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-muted{--tblr-focus-ring-color:rgba(var(--tblr-muted-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-blue{--tblr-focus-ring-color:rgba(var(--tblr-blue-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-azure{--tblr-focus-ring-color:rgba(var(--tblr-azure-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-indigo{--tblr-focus-ring-color:rgba(var(--tblr-indigo-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-purple{--tblr-focus-ring-color:rgba(var(--tblr-purple-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-pink{--tblr-focus-ring-color:rgba(var(--tblr-pink-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-red{--tblr-focus-ring-color:rgba(var(--tblr-red-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-orange{--tblr-focus-ring-color:rgba(var(--tblr-orange-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-yellow{--tblr-focus-ring-color:rgba(var(--tblr-yellow-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-lime{--tblr-focus-ring-color:rgba(var(--tblr-lime-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-green{--tblr-focus-ring-color:rgba(var(--tblr-green-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-teal{--tblr-focus-ring-color:rgba(var(--tblr-teal-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-cyan{--tblr-focus-ring-color:rgba(var(--tblr-cyan-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-x{--tblr-focus-ring-color:rgba(var(--tblr-x-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-facebook{--tblr-focus-ring-color:rgba(var(--tblr-facebook-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-twitter{--tblr-focus-ring-color:rgba(var(--tblr-twitter-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-linkedin{--tblr-focus-ring-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-google{--tblr-focus-ring-color:rgba(var(--tblr-google-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-youtube{--tblr-focus-ring-color:rgba(var(--tblr-youtube-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-vimeo{--tblr-focus-ring-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-dribbble{--tblr-focus-ring-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-github{--tblr-focus-ring-color:rgba(var(--tblr-github-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-instagram{--tblr-focus-ring-color:rgba(var(--tblr-instagram-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-pinterest{--tblr-focus-ring-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-vk{--tblr-focus-ring-color:rgba(var(--tblr-vk-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-rss{--tblr-focus-ring-color:rgba(var(--tblr-rss-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-flickr{--tblr-focus-ring-color:rgba(var(--tblr-flickr-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-bitbucket{--tblr-focus-ring-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-tabler{--tblr-focus-ring-color:rgba(var(--tblr-tabler-rgb),var(--tblr-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{right:0!important}.start-50{right:50%!important}.start-100{right:100%!important}.end-0{left:0!important}.end-50{left:50%!important}.end-100{left: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(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-wide{border:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-0{border:0!important}.border-top{border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-top-wide{border-top:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-top-0{border-top:0!important}.border-end{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-end-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-end-0{border-left:0!important}.border-bottom{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-bottom-wide{border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-start-wide{border-right:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-start-0{border-right:0!important}.border-primary{--tblr-border-opacity:1;border-color:rgba(var(--tblr-primary-rgb),var(--tblr-border-opacity))!important}.border-secondary{--tblr-border-opacity:1;border-color:rgba(var(--tblr-secondary-rgb),var(--tblr-border-opacity))!important}.border-success{--tblr-border-opacity:1;border-color:rgba(var(--tblr-success-rgb),var(--tblr-border-opacity))!important}.border-info{--tblr-border-opacity:1;border-color:rgba(var(--tblr-info-rgb),var(--tblr-border-opacity))!important}.border-warning{--tblr-border-opacity:1;border-color:rgba(var(--tblr-warning-rgb),var(--tblr-border-opacity))!important}.border-danger{--tblr-border-opacity:1;border-color:rgba(var(--tblr-danger-rgb),var(--tblr-border-opacity))!important}.border-light{--tblr-border-opacity:1;border-color:rgba(var(--tblr-light-rgb),var(--tblr-border-opacity))!important}.border-dark{--tblr-border-opacity:1;border-color:rgba(var(--tblr-dark-rgb),var(--tblr-border-opacity))!important}.border-muted{--tblr-border-opacity:1;border-color:rgba(var(--tblr-muted-rgb),var(--tblr-border-opacity))!important}.border-blue{--tblr-border-opacity:1;border-color:rgba(var(--tblr-blue-rgb),var(--tblr-border-opacity))!important}.border-azure{--tblr-border-opacity:1;border-color:rgba(var(--tblr-azure-rgb),var(--tblr-border-opacity))!important}.border-indigo{--tblr-border-opacity:1;border-color:rgba(var(--tblr-indigo-rgb),var(--tblr-border-opacity))!important}.border-purple{--tblr-border-opacity:1;border-color:rgba(var(--tblr-purple-rgb),var(--tblr-border-opacity))!important}.border-pink{--tblr-border-opacity:1;border-color:rgba(var(--tblr-pink-rgb),var(--tblr-border-opacity))!important}.border-red{--tblr-border-opacity:1;border-color:rgba(var(--tblr-red-rgb),var(--tblr-border-opacity))!important}.border-orange{--tblr-border-opacity:1;border-color:rgba(var(--tblr-orange-rgb),var(--tblr-border-opacity))!important}.border-yellow{--tblr-border-opacity:1;border-color:rgba(var(--tblr-yellow-rgb),var(--tblr-border-opacity))!important}.border-lime{--tblr-border-opacity:1;border-color:rgba(var(--tblr-lime-rgb),var(--tblr-border-opacity))!important}.border-green{--tblr-border-opacity:1;border-color:rgba(var(--tblr-green-rgb),var(--tblr-border-opacity))!important}.border-teal{--tblr-border-opacity:1;border-color:rgba(var(--tblr-teal-rgb),var(--tblr-border-opacity))!important}.border-cyan{border-color:rgba(var(--tblr-cyan-rgb),var(--tblr-border-opacity))!important}.border-cyan,.border-x{--tblr-border-opacity:1}.border-x{border-color:rgba(var(--tblr-x-rgb),var(--tblr-border-opacity))!important}.border-facebook{--tblr-border-opacity:1;border-color:rgba(var(--tblr-facebook-rgb),var(--tblr-border-opacity))!important}.border-twitter{--tblr-border-opacity:1;border-color:rgba(var(--tblr-twitter-rgb),var(--tblr-border-opacity))!important}.border-linkedin{--tblr-border-opacity:1;border-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-border-opacity))!important}.border-google{--tblr-border-opacity:1;border-color:rgba(var(--tblr-google-rgb),var(--tblr-border-opacity))!important}.border-youtube{--tblr-border-opacity:1;border-color:rgba(var(--tblr-youtube-rgb),var(--tblr-border-opacity))!important}.border-vimeo{--tblr-border-opacity:1;border-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-border-opacity))!important}.border-dribbble{--tblr-border-opacity:1;border-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-border-opacity))!important}.border-github{--tblr-border-opacity:1;border-color:rgba(var(--tblr-github-rgb),var(--tblr-border-opacity))!important}.border-instagram{--tblr-border-opacity:1;border-color:rgba(var(--tblr-instagram-rgb),var(--tblr-border-opacity))!important}.border-pinterest{--tblr-border-opacity:1;border-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-border-opacity))!important}.border-vk{border-color:rgba(var(--tblr-vk-rgb),var(--tblr-border-opacity))!important}.border-rss,.border-vk{--tblr-border-opacity:1}.border-rss{border-color:rgba(var(--tblr-rss-rgb),var(--tblr-border-opacity))!important}.border-flickr{--tblr-border-opacity:1;border-color:rgba(var(--tblr-flickr-rgb),var(--tblr-border-opacity))!important}.border-bitbucket{--tblr-border-opacity:1;border-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-border-opacity))!important}.border-tabler{--tblr-border-opacity:1;border-color:rgba(var(--tblr-tabler-rgb),var(--tblr-border-opacity))!important}.border-black{--tblr-border-opacity:1;border-color:rgba(var(--tblr-black-rgb),var(--tblr-border-opacity))!important}.border-white{--tblr-border-opacity:1;border-color:rgba(var(--tblr-white-rgb),var(--tblr-border-opacity))!important}.border-primary-subtle{border-color:var(--tblr-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--tblr-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--tblr-success-border-subtle)!important}.border-info-subtle{border-color:var(--tblr-info-border-subtle)!important}.border-warning-subtle{border-color:var(--tblr-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--tblr-danger-border-subtle)!important}.border-light-subtle{border-color:var(--tblr-light-border-subtle)!important}.border-dark-subtle{border-color:var(--tblr-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{--tblr-border-opacity:0.1}.border-opacity-25{--tblr-border-opacity:0.25}.border-opacity-50{--tblr-border-opacity:0.5}.border-opacity-75{--tblr-border-opacity:0.75}.border-opacity-100{--tblr-border-opacity:1}.w-25{width:25%!important}.w-33{width:33.33333%!important}.w-50{width:50%!important}.w-66{width:66.66666%!important}.w-75{width:75%!important}.w-100{width:100%!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-33{height:33.33333%!important}.h-50{height:50%!important}.h-66{height:66.66666%!important}.h-75{height:75%!important}.h-100{height:100%!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:2rem!important}.m-6{margin:3rem!important}.m-7{margin:5rem!important}.m-8{margin:8rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:2rem!important;margin-right:2rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.mx-7{margin-left:5rem!important;margin-right:5rem!important}.mx-8{margin-left:8rem!important;margin-right:8rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-6{margin-top:3rem!important}.mt-7{margin-top:5rem!important}.mt-8{margin-top:8rem!important}.mt-auto{margin-top:auto!important}.me-0{margin-left:0!important}.me-1{margin-left:.25rem!important}.me-2{margin-left:.5rem!important}.me-3{margin-left:1rem!important}.me-4{margin-left:1.5rem!important}.me-5{margin-left:2rem!important}.me-6{margin-left:3rem!important}.me-7{margin-left:5rem!important}.me-8{margin-left:8rem!important}.me-auto{margin-left: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:2rem!important}.mb-6{margin-bottom:3rem!important}.mb-7{margin-bottom:5rem!important}.mb-8{margin-bottom:8rem!important}.mb-auto{margin-bottom:auto!important}.ms-0{margin-right:0!important}.ms-1{margin-right:.25rem!important}.ms-2{margin-right:.5rem!important}.ms-3{margin-right:1rem!important}.ms-4{margin-right:1.5rem!important}.ms-5{margin-right:2rem!important}.ms-6{margin-right:3rem!important}.ms-7{margin-right:5rem!important}.ms-8{margin-right:8rem!important}.ms-auto{margin-right: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:2rem!important}.p-6{padding:3rem!important}.p-7{padding:5rem!important}.p-8{padding:8rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:2rem!important;padding-right:2rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.px-7{padding-left:5rem!important;padding-right:5rem!important}.px-8{padding-left:8rem!important;padding-right:8rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-6{padding-top:3rem!important}.pt-7{padding-top:5rem!important}.pt-8{padding-top:8rem!important}.pe-0{padding-left:0!important}.pe-1{padding-left:.25rem!important}.pe-2{padding-left:.5rem!important}.pe-3{padding-left:1rem!important}.pe-4{padding-left:1.5rem!important}.pe-5{padding-left:2rem!important}.pe-6{padding-left:3rem!important}.pe-7{padding-left:5rem!important}.pe-8{padding-left:8rem!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:2rem!important}.pb-6{padding-bottom:3rem!important}.pb-7{padding-bottom:5rem!important}.pb-8{padding-bottom:8rem!important}.ps-0{padding-right:0!important}.ps-1{padding-right:.25rem!important}.ps-2{padding-right:.5rem!important}.ps-3{padding-right:1rem!important}.ps-4{padding-right:1.5rem!important}.ps-5{padding-right:2rem!important}.ps-6{padding-right:3rem!important}.ps-7{padding-right:5rem!important}.ps-8{padding-right:8rem!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:2rem!important}.gap-6{gap:3rem!important}.gap-7{gap:5rem!important}.gap-8{gap:8rem!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:2rem!important}.row-gap-6{row-gap:3rem!important}.row-gap-7{row-gap:5rem!important}.row-gap-8{row-gap:8rem!important}.column-gap-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.font-monospace{font-family:var(--tblr-font-monospace)!important}.fs-1{font-size:1.5rem!important}.fs-2{font-size:1.25rem!important}.fs-3{font-size:1rem!important}.fs-4{font-size:.875rem!important}.fs-5{font-size:.75rem!important}.fs-6{font-size:.625rem!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-bold,.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.1428571429!important}.lh-base{line-height:1.4285714286!important}.lh-lg{line-height:1.7142857143!important}.text-start{text-align:right!important}.text-end{text-align:left!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-muted{color:var(--tblr-secondary-color)!important}.text-black{--tblr-text-opacity:1;color:rgba(var(--tblr-black-rgb),var(--tblr-text-opacity))!important}.text-white{--tblr-text-opacity:1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.text-body{--tblr-text-opacity:1;color:rgba(var(--tblr-body-color-rgb),var(--tblr-text-opacity))!important}.text-black-50{--tblr-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--tblr-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--tblr-text-opacity:1;color:var(--tblr-secondary-color)!important}.text-body-tertiary{--tblr-text-opacity:1;color:var(--tblr-tertiary-color)!important}.text-body-emphasis{--tblr-text-opacity:1;color:var(--tblr-emphasis-color)!important}.text-reset{--tblr-text-opacity:1;color:inherit!important}.text-opacity-25{--tblr-text-opacity:0.25}.text-opacity-50{--tblr-text-opacity:0.5}.text-opacity-75{--tblr-text-opacity:0.75}.text-opacity-100{--tblr-text-opacity:1}.text-primary-emphasis{color:var(--tblr-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--tblr-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--tblr-success-text-emphasis)!important}.text-info-emphasis{color:var(--tblr-info-text-emphasis)!important}.text-warning-emphasis{color:var(--tblr-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--tblr-danger-text-emphasis)!important}.text-light-emphasis{color:var(--tblr-light-text-emphasis)!important}.text-dark-emphasis{color:var(--tblr-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--tblr-link-opacity:0.1}.link-opacity-25,.link-opacity-25-hover:hover{--tblr-link-opacity:0.25}.link-opacity-50,.link-opacity-50-hover:hover{--tblr-link-opacity:0.5}.link-opacity-75,.link-opacity-75-hover:hover{--tblr-link-opacity:0.75}.link-opacity-100,.link-opacity-100-hover:hover{--tblr-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-secondary{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-success{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-info{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-warning{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-danger{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-light{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dark{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-muted{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-blue{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-azure{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-indigo{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-purple{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pink{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-red{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-orange{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-yellow{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-lime{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-green{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-teal{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-cyan{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-x{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-x-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-x-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-facebook{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-twitter{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-linkedin{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-google{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-youtube{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vimeo{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dribbble{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-github{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-instagram{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pinterest{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vk{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-rss{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-flickr{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-bitbucket{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-tabler{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important;text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important}.link-underline{--tblr-link-underline-opacity:1;-webkit-text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity,1))!important;text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--tblr-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--tblr-link-underline-opacity:0.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--tblr-link-underline-opacity:0.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--tblr-link-underline-opacity:0.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--tblr-link-underline-opacity:0.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--tblr-link-underline-opacity:1}.bg-black{background-color:rgba(var(--tblr-black-rgb),var(--tblr-bg-opacity))!important}.bg-black,.bg-body{--tblr-bg-opacity:1}.bg-body{background-color:rgba(var(--tblr-body-bg-rgb),var(--tblr-bg-opacity))!important}.bg-transparent{--tblr-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-body-tertiary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tertiary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-opacity-10{--tblr-bg-opacity:0.1}.bg-opacity-25{--tblr-bg-opacity:0.25}.bg-opacity-50{--tblr-bg-opacity:0.5}.bg-opacity-75{--tblr-bg-opacity:0.75}.bg-opacity-100{--tblr-bg-opacity:1}.bg-primary-subtle{background-color:var(--tblr-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--tblr-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--tblr-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--tblr-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--tblr-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--tblr-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--tblr-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--tblr-dark-bg-subtle)!important}.bg-gradient{background-image:var(--tblr-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;-ms-user-select:auto!important;user-select:auto!important}.user-select-none{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--tblr-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--tblr-border-radius-sm)!important}.rounded-2{border-radius:var(--tblr-border-radius)!important}.rounded-3{border-radius:var(--tblr-border-radius-lg)!important}.rounded-4{border-radius:var(--tblr-border-radius-xl)!important}.rounded-5{border-radius:var(--tblr-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--tblr-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-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(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-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(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-border-radius-pill)!important}.rounded-end{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-end-0{border-bottom-left-radius:0!important;border-top-left-radius:0!important}.rounded-end-1{border-bottom-left-radius:var(--tblr-border-radius-sm)!important;border-top-left-radius:var(--tblr-border-radius-sm)!important}.rounded-end-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-end-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-top-left-radius:var(--tblr-border-radius-lg)!important}.rounded-end-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-top-left-radius:var(--tblr-border-radius-xl)!important}.rounded-end-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-top-left-radius:var(--tblr-border-radius-xxl)!important}.rounded-end-circle{border-bottom-left-radius:50%!important;border-top-left-radius:50%!important}.rounded-end-pill{border-bottom-left-radius:var(--tblr-border-radius-pill)!important;border-top-left-radius:var(--tblr-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--tblr-border-radius-sm)!important;border-bottom-right-radius:var(--tblr-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-bottom-right-radius:var(--tblr-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-bottom-right-radius:var(--tblr-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-bottom-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--tblr-border-radius-pill)!important;border-bottom-right-radius:var(--tblr-border-radius-pill)!important}.rounded-start{border-bottom-right-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-start-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-start-1{border-bottom-right-radius:var(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-start-2{border-bottom-right-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-start-3{border-bottom-right-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-start-4{border-bottom-right-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-start-5{border-bottom-right-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-start-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-start-pill{border-bottom-right-radius:var(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-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}.object-contain{-o-object-fit:contain!important;object-fit:contain!important}.object-cover{-o-object-fit:cover!important;object-fit:cover!important}.object-fill{-o-object-fit:fill!important;object-fit:fill!important}.object-scale-down{-o-object-fit:scale-down!important;object-fit:scale-down!important}.object-none{-o-object-fit:none!important;object-fit:none!important}.tracking-tight{letter-spacing:-.05em!important}.tracking-normal{letter-spacing:0!important}.tracking-wide{letter-spacing:.05em!important}.cursor-auto{cursor:auto!important}.cursor-pointer{cursor:pointer!important}.cursor-move{cursor:move!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-zoom-in{cursor:zoom-in!important}.cursor-zoom-out{cursor:zoom-out!important}.cursor-default{cursor:default!important}.cursor-none{cursor:none!important}.cursor-help{cursor:help!important}.cursor-progress{cursor:progress!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-v-text{cursor:vertical-text!important}.cursor-grab{cursor:-webkit-grab!important;cursor:grab!important}.cursor-grabbing{cursor:-webkit-grabbing!important;cursor:grabbing!important}.border-x{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important;border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-x-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.1)!important;border-right:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-x-0{border-left:0!important;border-right:0!important}.border-y{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important;border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-y-wide{border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.1)!important;border-top:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-y-0{border-bottom:0!important;border-top:0!important}.columns-2{-moz-columns:2!important;column-count:2!important}.columns-3{-moz-columns:3!important;column-count:3!important}.columns-4{-moz-columns:4!important;column-count:4!important}@media (min-width:576px){.float-sm-start{float:right!important}.float-sm-end{float:left!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:2rem!important}.m-sm-6{margin:3rem!important}.m-sm-7{margin:5rem!important}.m-sm-8{margin:8rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:2rem!important;margin-right:2rem!important}.mx-sm-6{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-7{margin-left:5rem!important;margin-right:5rem!important}.mx-sm-8{margin-left:8rem!important;margin-right:8rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-sm-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-sm-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-sm-6{margin-top:3rem!important}.mt-sm-7{margin-top:5rem!important}.mt-sm-8{margin-top:8rem!important}.mt-sm-auto{margin-top:auto!important}.me-sm-0{margin-left:0!important}.me-sm-1{margin-left:.25rem!important}.me-sm-2{margin-left:.5rem!important}.me-sm-3{margin-left:1rem!important}.me-sm-4{margin-left:1.5rem!important}.me-sm-5{margin-left:2rem!important}.me-sm-6{margin-left:3rem!important}.me-sm-7{margin-left:5rem!important}.me-sm-8{margin-left:8rem!important}.me-sm-auto{margin-left: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:2rem!important}.mb-sm-6{margin-bottom:3rem!important}.mb-sm-7{margin-bottom:5rem!important}.mb-sm-8{margin-bottom:8rem!important}.mb-sm-auto{margin-bottom:auto!important}.ms-sm-0{margin-right:0!important}.ms-sm-1{margin-right:.25rem!important}.ms-sm-2{margin-right:.5rem!important}.ms-sm-3{margin-right:1rem!important}.ms-sm-4{margin-right:1.5rem!important}.ms-sm-5{margin-right:2rem!important}.ms-sm-6{margin-right:3rem!important}.ms-sm-7{margin-right:5rem!important}.ms-sm-8{margin-right:8rem!important}.ms-sm-auto{margin-right: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:2rem!important}.p-sm-6{padding:3rem!important}.p-sm-7{padding:5rem!important}.p-sm-8{padding:8rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:2rem!important;padding-right:2rem!important}.px-sm-6{padding-left:3rem!important;padding-right:3rem!important}.px-sm-7{padding-left:5rem!important;padding-right:5rem!important}.px-sm-8{padding-left:8rem!important;padding-right:8rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-sm-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-sm-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-sm-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-sm-6{padding-top:3rem!important}.pt-sm-7{padding-top:5rem!important}.pt-sm-8{padding-top:8rem!important}.pe-sm-0{padding-left:0!important}.pe-sm-1{padding-left:.25rem!important}.pe-sm-2{padding-left:.5rem!important}.pe-sm-3{padding-left:1rem!important}.pe-sm-4{padding-left:1.5rem!important}.pe-sm-5{padding-left:2rem!important}.pe-sm-6{padding-left:3rem!important}.pe-sm-7{padding-left:5rem!important}.pe-sm-8{padding-left:8rem!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:2rem!important}.pb-sm-6{padding-bottom:3rem!important}.pb-sm-7{padding-bottom:5rem!important}.pb-sm-8{padding-bottom:8rem!important}.ps-sm-0{padding-right:0!important}.ps-sm-1{padding-right:.25rem!important}.ps-sm-2{padding-right:.5rem!important}.ps-sm-3{padding-right:1rem!important}.ps-sm-4{padding-right:1.5rem!important}.ps-sm-5{padding-right:2rem!important}.ps-sm-6{padding-right:3rem!important}.ps-sm-7{padding-right:5rem!important}.ps-sm-8{padding-right:8rem!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:2rem!important}.gap-sm-6{gap:3rem!important}.gap-sm-7{gap:5rem!important}.gap-sm-8{gap:8rem!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:2rem!important}.row-gap-sm-6{row-gap:3rem!important}.row-gap-sm-7{row-gap:5rem!important}.row-gap-sm-8{row-gap:8rem!important}.column-gap-sm-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-sm-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-sm-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-sm-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-sm-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-sm-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-sm-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-sm-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-sm-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-sm-start{text-align:right!important}.text-sm-end{text-align:left!important}.text-sm-center{text-align:center!important}.columns-sm-2{-moz-columns:2!important;column-count:2!important}.columns-sm-3{-moz-columns:3!important;column-count:3!important}.columns-sm-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:768px){.float-md-start{float:right!important}.float-md-end{float:left!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:2rem!important}.m-md-6{margin:3rem!important}.m-md-7{margin:5rem!important}.m-md-8{margin:8rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:2rem!important;margin-right:2rem!important}.mx-md-6{margin-left:3rem!important;margin-right:3rem!important}.mx-md-7{margin-left:5rem!important;margin-right:5rem!important}.mx-md-8{margin-left:8rem!important;margin-right:8rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-md-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-md-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-md-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-md-6{margin-top:3rem!important}.mt-md-7{margin-top:5rem!important}.mt-md-8{margin-top:8rem!important}.mt-md-auto{margin-top:auto!important}.me-md-0{margin-left:0!important}.me-md-1{margin-left:.25rem!important}.me-md-2{margin-left:.5rem!important}.me-md-3{margin-left:1rem!important}.me-md-4{margin-left:1.5rem!important}.me-md-5{margin-left:2rem!important}.me-md-6{margin-left:3rem!important}.me-md-7{margin-left:5rem!important}.me-md-8{margin-left:8rem!important}.me-md-auto{margin-left: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:2rem!important}.mb-md-6{margin-bottom:3rem!important}.mb-md-7{margin-bottom:5rem!important}.mb-md-8{margin-bottom:8rem!important}.mb-md-auto{margin-bottom:auto!important}.ms-md-0{margin-right:0!important}.ms-md-1{margin-right:.25rem!important}.ms-md-2{margin-right:.5rem!important}.ms-md-3{margin-right:1rem!important}.ms-md-4{margin-right:1.5rem!important}.ms-md-5{margin-right:2rem!important}.ms-md-6{margin-right:3rem!important}.ms-md-7{margin-right:5rem!important}.ms-md-8{margin-right:8rem!important}.ms-md-auto{margin-right: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:2rem!important}.p-md-6{padding:3rem!important}.p-md-7{padding:5rem!important}.p-md-8{padding:8rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:2rem!important;padding-right:2rem!important}.px-md-6{padding-left:3rem!important;padding-right:3rem!important}.px-md-7{padding-left:5rem!important;padding-right:5rem!important}.px-md-8{padding-left:8rem!important;padding-right:8rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-md-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-md-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-md-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-md-6{padding-top:3rem!important}.pt-md-7{padding-top:5rem!important}.pt-md-8{padding-top:8rem!important}.pe-md-0{padding-left:0!important}.pe-md-1{padding-left:.25rem!important}.pe-md-2{padding-left:.5rem!important}.pe-md-3{padding-left:1rem!important}.pe-md-4{padding-left:1.5rem!important}.pe-md-5{padding-left:2rem!important}.pe-md-6{padding-left:3rem!important}.pe-md-7{padding-left:5rem!important}.pe-md-8{padding-left:8rem!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:2rem!important}.pb-md-6{padding-bottom:3rem!important}.pb-md-7{padding-bottom:5rem!important}.pb-md-8{padding-bottom:8rem!important}.ps-md-0{padding-right:0!important}.ps-md-1{padding-right:.25rem!important}.ps-md-2{padding-right:.5rem!important}.ps-md-3{padding-right:1rem!important}.ps-md-4{padding-right:1.5rem!important}.ps-md-5{padding-right:2rem!important}.ps-md-6{padding-right:3rem!important}.ps-md-7{padding-right:5rem!important}.ps-md-8{padding-right:8rem!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:2rem!important}.gap-md-6{gap:3rem!important}.gap-md-7{gap:5rem!important}.gap-md-8{gap:8rem!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:2rem!important}.row-gap-md-6{row-gap:3rem!important}.row-gap-md-7{row-gap:5rem!important}.row-gap-md-8{row-gap:8rem!important}.column-gap-md-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-md-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-md-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-md-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-md-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-md-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-md-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-md-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-md-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-md-start{text-align:right!important}.text-md-end{text-align:left!important}.text-md-center{text-align:center!important}.columns-md-2{-moz-columns:2!important;column-count:2!important}.columns-md-3{-moz-columns:3!important;column-count:3!important}.columns-md-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:992px){.float-lg-start{float:right!important}.float-lg-end{float:left!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:2rem!important}.m-lg-6{margin:3rem!important}.m-lg-7{margin:5rem!important}.m-lg-8{margin:8rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:2rem!important;margin-right:2rem!important}.mx-lg-6{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-7{margin-left:5rem!important;margin-right:5rem!important}.mx-lg-8{margin-left:8rem!important;margin-right:8rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-lg-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-lg-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-lg-6{margin-top:3rem!important}.mt-lg-7{margin-top:5rem!important}.mt-lg-8{margin-top:8rem!important}.mt-lg-auto{margin-top:auto!important}.me-lg-0{margin-left:0!important}.me-lg-1{margin-left:.25rem!important}.me-lg-2{margin-left:.5rem!important}.me-lg-3{margin-left:1rem!important}.me-lg-4{margin-left:1.5rem!important}.me-lg-5{margin-left:2rem!important}.me-lg-6{margin-left:3rem!important}.me-lg-7{margin-left:5rem!important}.me-lg-8{margin-left:8rem!important}.me-lg-auto{margin-left: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:2rem!important}.mb-lg-6{margin-bottom:3rem!important}.mb-lg-7{margin-bottom:5rem!important}.mb-lg-8{margin-bottom:8rem!important}.mb-lg-auto{margin-bottom:auto!important}.ms-lg-0{margin-right:0!important}.ms-lg-1{margin-right:.25rem!important}.ms-lg-2{margin-right:.5rem!important}.ms-lg-3{margin-right:1rem!important}.ms-lg-4{margin-right:1.5rem!important}.ms-lg-5{margin-right:2rem!important}.ms-lg-6{margin-right:3rem!important}.ms-lg-7{margin-right:5rem!important}.ms-lg-8{margin-right:8rem!important}.ms-lg-auto{margin-right: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:2rem!important}.p-lg-6{padding:3rem!important}.p-lg-7{padding:5rem!important}.p-lg-8{padding:8rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:2rem!important;padding-right:2rem!important}.px-lg-6{padding-left:3rem!important;padding-right:3rem!important}.px-lg-7{padding-left:5rem!important;padding-right:5rem!important}.px-lg-8{padding-left:8rem!important;padding-right:8rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-lg-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-lg-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-lg-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-lg-6{padding-top:3rem!important}.pt-lg-7{padding-top:5rem!important}.pt-lg-8{padding-top:8rem!important}.pe-lg-0{padding-left:0!important}.pe-lg-1{padding-left:.25rem!important}.pe-lg-2{padding-left:.5rem!important}.pe-lg-3{padding-left:1rem!important}.pe-lg-4{padding-left:1.5rem!important}.pe-lg-5{padding-left:2rem!important}.pe-lg-6{padding-left:3rem!important}.pe-lg-7{padding-left:5rem!important}.pe-lg-8{padding-left:8rem!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:2rem!important}.pb-lg-6{padding-bottom:3rem!important}.pb-lg-7{padding-bottom:5rem!important}.pb-lg-8{padding-bottom:8rem!important}.ps-lg-0{padding-right:0!important}.ps-lg-1{padding-right:.25rem!important}.ps-lg-2{padding-right:.5rem!important}.ps-lg-3{padding-right:1rem!important}.ps-lg-4{padding-right:1.5rem!important}.ps-lg-5{padding-right:2rem!important}.ps-lg-6{padding-right:3rem!important}.ps-lg-7{padding-right:5rem!important}.ps-lg-8{padding-right:8rem!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:2rem!important}.gap-lg-6{gap:3rem!important}.gap-lg-7{gap:5rem!important}.gap-lg-8{gap:8rem!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:2rem!important}.row-gap-lg-6{row-gap:3rem!important}.row-gap-lg-7{row-gap:5rem!important}.row-gap-lg-8{row-gap:8rem!important}.column-gap-lg-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-lg-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-lg-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-lg-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-lg-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-lg-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-lg-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-lg-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-lg-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-lg-start{text-align:right!important}.text-lg-end{text-align:left!important}.text-lg-center{text-align:center!important}.columns-lg-2{-moz-columns:2!important;column-count:2!important}.columns-lg-3{-moz-columns:3!important;column-count:3!important}.columns-lg-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:1200px){.float-xl-start{float:right!important}.float-xl-end{float:left!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:2rem!important}.m-xl-6{margin:3rem!important}.m-xl-7{margin:5rem!important}.m-xl-8{margin:8rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:2rem!important;margin-right:2rem!important}.mx-xl-6{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-7{margin-left:5rem!important;margin-right:5rem!important}.mx-xl-8{margin-left:8rem!important;margin-right:8rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-xl-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-xl-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-xl-6{margin-top:3rem!important}.mt-xl-7{margin-top:5rem!important}.mt-xl-8{margin-top:8rem!important}.mt-xl-auto{margin-top:auto!important}.me-xl-0{margin-left:0!important}.me-xl-1{margin-left:.25rem!important}.me-xl-2{margin-left:.5rem!important}.me-xl-3{margin-left:1rem!important}.me-xl-4{margin-left:1.5rem!important}.me-xl-5{margin-left:2rem!important}.me-xl-6{margin-left:3rem!important}.me-xl-7{margin-left:5rem!important}.me-xl-8{margin-left:8rem!important}.me-xl-auto{margin-left: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:2rem!important}.mb-xl-6{margin-bottom:3rem!important}.mb-xl-7{margin-bottom:5rem!important}.mb-xl-8{margin-bottom:8rem!important}.mb-xl-auto{margin-bottom:auto!important}.ms-xl-0{margin-right:0!important}.ms-xl-1{margin-right:.25rem!important}.ms-xl-2{margin-right:.5rem!important}.ms-xl-3{margin-right:1rem!important}.ms-xl-4{margin-right:1.5rem!important}.ms-xl-5{margin-right:2rem!important}.ms-xl-6{margin-right:3rem!important}.ms-xl-7{margin-right:5rem!important}.ms-xl-8{margin-right:8rem!important}.ms-xl-auto{margin-right: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:2rem!important}.p-xl-6{padding:3rem!important}.p-xl-7{padding:5rem!important}.p-xl-8{padding:8rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:2rem!important;padding-right:2rem!important}.px-xl-6{padding-left:3rem!important;padding-right:3rem!important}.px-xl-7{padding-left:5rem!important;padding-right:5rem!important}.px-xl-8{padding-left:8rem!important;padding-right:8rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-xl-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-xl-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-xl-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-xl-6{padding-top:3rem!important}.pt-xl-7{padding-top:5rem!important}.pt-xl-8{padding-top:8rem!important}.pe-xl-0{padding-left:0!important}.pe-xl-1{padding-left:.25rem!important}.pe-xl-2{padding-left:.5rem!important}.pe-xl-3{padding-left:1rem!important}.pe-xl-4{padding-left:1.5rem!important}.pe-xl-5{padding-left:2rem!important}.pe-xl-6{padding-left:3rem!important}.pe-xl-7{padding-left:5rem!important}.pe-xl-8{padding-left:8rem!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:2rem!important}.pb-xl-6{padding-bottom:3rem!important}.pb-xl-7{padding-bottom:5rem!important}.pb-xl-8{padding-bottom:8rem!important}.ps-xl-0{padding-right:0!important}.ps-xl-1{padding-right:.25rem!important}.ps-xl-2{padding-right:.5rem!important}.ps-xl-3{padding-right:1rem!important}.ps-xl-4{padding-right:1.5rem!important}.ps-xl-5{padding-right:2rem!important}.ps-xl-6{padding-right:3rem!important}.ps-xl-7{padding-right:5rem!important}.ps-xl-8{padding-right:8rem!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:2rem!important}.gap-xl-6{gap:3rem!important}.gap-xl-7{gap:5rem!important}.gap-xl-8{gap:8rem!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:2rem!important}.row-gap-xl-6{row-gap:3rem!important}.row-gap-xl-7{row-gap:5rem!important}.row-gap-xl-8{row-gap:8rem!important}.column-gap-xl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xl-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-xl-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-xl-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-xl-start{text-align:right!important}.text-xl-end{text-align:left!important}.text-xl-center{text-align:center!important}.columns-xl-2{-moz-columns:2!important;column-count:2!important}.columns-xl-3{-moz-columns:3!important;column-count:3!important}.columns-xl-4{-moz-columns:4!important;column-count:4!important}}@media (min-width:1400px){.float-xxl-start{float:right!important}.float-xxl-end{float:left!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:2rem!important}.m-xxl-6{margin:3rem!important}.m-xxl-7{margin:5rem!important}.m-xxl-8{margin:8rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:2rem!important;margin-right:2rem!important}.mx-xxl-6{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-7{margin-left:5rem!important;margin-right:5rem!important}.mx-xxl-8{margin-left:8rem!important;margin-right:8rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-bottom:0!important;margin-top:0!important}.my-xxl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xxl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xxl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xxl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xxl-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-xxl-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-xxl-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-xxl-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-xxl-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-xxl-6{margin-top:3rem!important}.mt-xxl-7{margin-top:5rem!important}.mt-xxl-8{margin-top:8rem!important}.mt-xxl-auto{margin-top:auto!important}.me-xxl-0{margin-left:0!important}.me-xxl-1{margin-left:.25rem!important}.me-xxl-2{margin-left:.5rem!important}.me-xxl-3{margin-left:1rem!important}.me-xxl-4{margin-left:1.5rem!important}.me-xxl-5{margin-left:2rem!important}.me-xxl-6{margin-left:3rem!important}.me-xxl-7{margin-left:5rem!important}.me-xxl-8{margin-left:8rem!important}.me-xxl-auto{margin-left: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:2rem!important}.mb-xxl-6{margin-bottom:3rem!important}.mb-xxl-7{margin-bottom:5rem!important}.mb-xxl-8{margin-bottom:8rem!important}.mb-xxl-auto{margin-bottom:auto!important}.ms-xxl-0{margin-right:0!important}.ms-xxl-1{margin-right:.25rem!important}.ms-xxl-2{margin-right:.5rem!important}.ms-xxl-3{margin-right:1rem!important}.ms-xxl-4{margin-right:1.5rem!important}.ms-xxl-5{margin-right:2rem!important}.ms-xxl-6{margin-right:3rem!important}.ms-xxl-7{margin-right:5rem!important}.ms-xxl-8{margin-right:8rem!important}.ms-xxl-auto{margin-right: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:2rem!important}.p-xxl-6{padding:3rem!important}.p-xxl-7{padding:5rem!important}.p-xxl-8{padding:8rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:2rem!important;padding-right:2rem!important}.px-xxl-6{padding-left:3rem!important;padding-right:3rem!important}.px-xxl-7{padding-left:5rem!important;padding-right:5rem!important}.px-xxl-8{padding-left:8rem!important;padding-right:8rem!important}.py-xxl-0{padding-bottom:0!important;padding-top:0!important}.py-xxl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xxl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xxl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xxl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xxl-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-xxl-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-xxl-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-xxl-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-xxl-6{padding-top:3rem!important}.pt-xxl-7{padding-top:5rem!important}.pt-xxl-8{padding-top:8rem!important}.pe-xxl-0{padding-left:0!important}.pe-xxl-1{padding-left:.25rem!important}.pe-xxl-2{padding-left:.5rem!important}.pe-xxl-3{padding-left:1rem!important}.pe-xxl-4{padding-left:1.5rem!important}.pe-xxl-5{padding-left:2rem!important}.pe-xxl-6{padding-left:3rem!important}.pe-xxl-7{padding-left:5rem!important}.pe-xxl-8{padding-left:8rem!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:2rem!important}.pb-xxl-6{padding-bottom:3rem!important}.pb-xxl-7{padding-bottom:5rem!important}.pb-xxl-8{padding-bottom:8rem!important}.ps-xxl-0{padding-right:0!important}.ps-xxl-1{padding-right:.25rem!important}.ps-xxl-2{padding-right:.5rem!important}.ps-xxl-3{padding-right:1rem!important}.ps-xxl-4{padding-right:1.5rem!important}.ps-xxl-5{padding-right:2rem!important}.ps-xxl-6{padding-right:3rem!important}.ps-xxl-7{padding-right:5rem!important}.ps-xxl-8{padding-right:8rem!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:2rem!important}.gap-xxl-6{gap:3rem!important}.gap-xxl-7{gap:5rem!important}.gap-xxl-8{gap:8rem!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:2rem!important}.row-gap-xxl-6{row-gap:3rem!important}.row-gap-xxl-7{row-gap:5rem!important}.row-gap-xxl-8{row-gap:8rem!important}.column-gap-xxl-0{-moz-column-gap:0!important;column-gap:0!important}.column-gap-xxl-1{-moz-column-gap:.25rem!important;column-gap:.25rem!important}.column-gap-xxl-2{-moz-column-gap:.5rem!important;column-gap:.5rem!important}.column-gap-xxl-3{-moz-column-gap:1rem!important;column-gap:1rem!important}.column-gap-xxl-4{-moz-column-gap:1.5rem!important;column-gap:1.5rem!important}.column-gap-xxl-5{-moz-column-gap:2rem!important;column-gap:2rem!important}.column-gap-xxl-6{-moz-column-gap:3rem!important;column-gap:3rem!important}.column-gap-xxl-7{-moz-column-gap:5rem!important;column-gap:5rem!important}.column-gap-xxl-8{-moz-column-gap:8rem!important;column-gap:8rem!important}.text-xxl-start{text-align:right!important}.text-xxl-end{text-align:left!important}.text-xxl-center{text-align:center!important}.columns-xxl-2{-moz-columns:2!important;column-count:2!important}.columns-xxl-3{-moz-columns:3!important;column-count:3!important}.columns-xxl-4{-moz-columns:4!important;column-count:4!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}}:host,:root{font-size:16px;height:100%}:host,:root,[data-bs-theme=light]{--tblr-primary:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-primary-fg:var(--tblr-light);--tblr-primary-darken:#0564bc;--tblr-primary-lt:#e6f1fa;--tblr-primary-lt-rgb:230,241,250;--tblr-secondary:#6c7a91;--tblr-secondary-rgb:108,122,145;--tblr-secondary-fg:var(--tblr-light);--tblr-secondary-darken:#616e83;--tblr-secondary-lt:#f0f2f4;--tblr-secondary-lt-rgb:240,242,244;--tblr-success:#2fb344;--tblr-success-rgb:47,179,68;--tblr-success-fg:var(--tblr-light);--tblr-success-darken:#2aa13d;--tblr-success-lt:#eaf7ec;--tblr-success-lt-rgb:234,247,236;--tblr-info:#4299e1;--tblr-info-rgb:66,153,225;--tblr-info-fg:var(--tblr-light);--tblr-info-darken:#3b8acb;--tblr-info-lt:#ecf5fc;--tblr-info-lt-rgb:236,245,252;--tblr-warning:#f76707;--tblr-warning-rgb:247,103,7;--tblr-warning-fg:var(--tblr-light);--tblr-warning-darken:#de5d06;--tblr-warning-lt:#fef0e6;--tblr-warning-lt-rgb:254,240,230;--tblr-danger:#d63939;--tblr-danger-rgb:214,57,57;--tblr-danger-fg:var(--tblr-light);--tblr-danger-darken:#c13333;--tblr-danger-lt:#fbebeb;--tblr-danger-lt-rgb:251,235,235;--tblr-light:#f6f8fb;--tblr-light-rgb:246,248,251;--tblr-light-fg:var(--tblr-dark);--tblr-light-darken:#dddfe2;--tblr-light-lt:#fefeff;--tblr-light-lt-rgb:254,254,255;--tblr-dark:#182433;--tblr-dark-rgb:24,36,51;--tblr-dark-fg:var(--tblr-light);--tblr-dark-darken:#16202e;--tblr-dark-lt:#e8e9eb;--tblr-dark-lt-rgb:232,233,235;--tblr-muted:#6c7a91;--tblr-muted-rgb:108,122,145;--tblr-muted-fg:var(--tblr-light);--tblr-muted-darken:#616e83;--tblr-muted-lt:#f0f2f4;--tblr-muted-lt-rgb:240,242,244;--tblr-blue:#066fd1;--tblr-blue-rgb:6,111,209;--tblr-blue-fg:var(--tblr-light);--tblr-blue-darken:#0564bc;--tblr-blue-lt:#e6f1fa;--tblr-blue-lt-rgb:230,241,250;--tblr-azure:#4299e1;--tblr-azure-rgb:66,153,225;--tblr-azure-fg:var(--tblr-light);--tblr-azure-darken:#3b8acb;--tblr-azure-lt:#ecf5fc;--tblr-azure-lt-rgb:236,245,252;--tblr-indigo:#4263eb;--tblr-indigo-rgb:66,99,235;--tblr-indigo-fg:var(--tblr-light);--tblr-indigo-darken:#3b59d4;--tblr-indigo-lt:#eceffd;--tblr-indigo-lt-rgb:236,239,253;--tblr-purple:#ae3ec9;--tblr-purple-rgb:174,62,201;--tblr-purple-fg:var(--tblr-light);--tblr-purple-darken:#9d38b5;--tblr-purple-lt:#f7ecfa;--tblr-purple-lt-rgb:247,236,250;--tblr-pink:#d6336c;--tblr-pink-rgb:214,51,108;--tblr-pink-fg:var(--tblr-light);--tblr-pink-darken:#c12e61;--tblr-pink-lt:#fbebf0;--tblr-pink-lt-rgb:251,235,240;--tblr-red:#d63939;--tblr-red-rgb:214,57,57;--tblr-red-fg:var(--tblr-light);--tblr-red-darken:#c13333;--tblr-red-lt:#fbebeb;--tblr-red-lt-rgb:251,235,235;--tblr-orange:#f76707;--tblr-orange-rgb:247,103,7;--tblr-orange-fg:var(--tblr-light);--tblr-orange-darken:#de5d06;--tblr-orange-lt:#fef0e6;--tblr-orange-lt-rgb:254,240,230;--tblr-yellow:#f59f00;--tblr-yellow-rgb:245,159,0;--tblr-yellow-fg:var(--tblr-light);--tblr-yellow-darken:#dd8f00;--tblr-yellow-lt:#fef5e6;--tblr-yellow-lt-rgb:254,245,230;--tblr-lime:#74b816;--tblr-lime-rgb:116,184,22;--tblr-lime-fg:var(--tblr-light);--tblr-lime-darken:#68a614;--tblr-lime-lt:#f1f8e8;--tblr-lime-lt-rgb:241,248,232;--tblr-green:#2fb344;--tblr-green-rgb:47,179,68;--tblr-green-fg:var(--tblr-light);--tblr-green-darken:#2aa13d;--tblr-green-lt:#eaf7ec;--tblr-green-lt-rgb:234,247,236;--tblr-teal:#0ca678;--tblr-teal-rgb:12,166,120;--tblr-teal-fg:var(--tblr-light);--tblr-teal-darken:#0b956c;--tblr-teal-lt:#e7f6f2;--tblr-teal-lt-rgb:231,246,242;--tblr-cyan:#17a2b8;--tblr-cyan-rgb:23,162,184;--tblr-cyan-fg:var(--tblr-light);--tblr-cyan-darken:#1592a6;--tblr-cyan-lt:#e8f6f8;--tblr-cyan-lt-rgb:232,246,248;--tblr-x:#000;--tblr-x-rgb:0,0,0;--tblr-x-fg:var(--tblr-light);--tblr-x-darken:#000;--tblr-x-lt:#e6e6e6;--tblr-x-lt-rgb:230,230,230;--tblr-facebook:#1877f2;--tblr-facebook-rgb:24,119,242;--tblr-facebook-fg:var(--tblr-light);--tblr-facebook-darken:#166bda;--tblr-facebook-lt:#e8f1fe;--tblr-facebook-lt-rgb:232,241,254;--tblr-twitter:#1da1f2;--tblr-twitter-rgb:29,161,242;--tblr-twitter-fg:var(--tblr-light);--tblr-twitter-darken:#1a91da;--tblr-twitter-lt:#e8f6fe;--tblr-twitter-lt-rgb:232,246,254;--tblr-linkedin:#0a66c2;--tblr-linkedin-rgb:10,102,194;--tblr-linkedin-fg:var(--tblr-light);--tblr-linkedin-darken:#095caf;--tblr-linkedin-lt:#e7f0f9;--tblr-linkedin-lt-rgb:231,240,249;--tblr-google:#dc4e41;--tblr-google-rgb:220,78,65;--tblr-google-fg:var(--tblr-light);--tblr-google-darken:#c6463b;--tblr-google-lt:#fcedec;--tblr-google-lt-rgb:252,237,236;--tblr-youtube:red;--tblr-youtube-rgb:255,0,0;--tblr-youtube-fg:var(--tblr-light);--tblr-youtube-darken:#e60000;--tblr-youtube-lt:#ffe6e6;--tblr-youtube-lt-rgb:255,230,230;--tblr-vimeo:#1ab7ea;--tblr-vimeo-rgb:26,183,234;--tblr-vimeo-fg:var(--tblr-light);--tblr-vimeo-darken:#17a5d3;--tblr-vimeo-lt:#e8f8fd;--tblr-vimeo-lt-rgb:232,248,253;--tblr-dribbble:#ea4c89;--tblr-dribbble-rgb:234,76,137;--tblr-dribbble-fg:var(--tblr-light);--tblr-dribbble-darken:#d3447b;--tblr-dribbble-lt:#fdedf3;--tblr-dribbble-lt-rgb:253,237,243;--tblr-github:#181717;--tblr-github-rgb:24,23,23;--tblr-github-fg:var(--tblr-light);--tblr-github-darken:#161515;--tblr-github-lt:#e8e8e8;--tblr-github-lt-rgb:232,232,232;--tblr-instagram:#e4405f;--tblr-instagram-rgb:228,64,95;--tblr-instagram-fg:var(--tblr-light);--tblr-instagram-darken:#cd3a56;--tblr-instagram-lt:#fcecef;--tblr-instagram-lt-rgb:252,236,239;--tblr-pinterest:#bd081c;--tblr-pinterest-rgb:189,8,28;--tblr-pinterest-fg:var(--tblr-light);--tblr-pinterest-darken:#aa0719;--tblr-pinterest-lt:#f8e6e8;--tblr-pinterest-lt-rgb:248,230,232;--tblr-vk:#6383a8;--tblr-vk-rgb:99,131,168;--tblr-vk-fg:var(--tblr-light);--tblr-vk-darken:#597697;--tblr-vk-lt:#eff3f6;--tblr-vk-lt-rgb:239,243,246;--tblr-rss:orange;--tblr-rss-rgb:255,165,0;--tblr-rss-fg:var(--tblr-light);--tblr-rss-darken:#e69500;--tblr-rss-lt:#fff6e6;--tblr-rss-lt-rgb:255,246,230;--tblr-flickr:#0063dc;--tblr-flickr-rgb:0,99,220;--tblr-flickr-fg:var(--tblr-light);--tblr-flickr-darken:#0059c6;--tblr-flickr-lt:#e6effc;--tblr-flickr-lt-rgb:230,239,252;--tblr-bitbucket:#0052cc;--tblr-bitbucket-rgb:0,82,204;--tblr-bitbucket-fg:var(--tblr-light);--tblr-bitbucket-darken:#004ab8;--tblr-bitbucket-lt:#e6eefa;--tblr-bitbucket-lt-rgb:230,238,250;--tblr-tabler:#066fd1;--tblr-tabler-rgb:6,111,209;--tblr-tabler-fg:var(--tblr-light);--tblr-tabler-darken:#0564bc;--tblr-tabler-lt:#e6f1fa;--tblr-tabler-lt-rgb:230,241,250;--tblr-gray-50:#f6f8fb;--tblr-gray-50-rgb:246,248,251;--tblr-gray-50-fg:var(--tblr-dark);--tblr-gray-50-darken:#dddfe2;--tblr-gray-50-lt:#fefeff;--tblr-gray-50-lt-rgb:254,254,255;--tblr-gray-100:#eef3f6;--tblr-gray-100-rgb:238,243,246;--tblr-gray-100-fg:var(--tblr-dark);--tblr-gray-100-darken:#d6dbdd;--tblr-gray-100-lt:#fdfefe;--tblr-gray-100-lt-rgb:253,254,254;--tblr-gray-200:#dce1e7;--tblr-gray-200-rgb:220,225,231;--tblr-gray-200-fg:var(--tblr-dark);--tblr-gray-200-darken:#c6cbd0;--tblr-gray-200-lt:#fcfcfd;--tblr-gray-200-lt-rgb:252,252,253;--tblr-gray-300:#b8c4d4;--tblr-gray-300-rgb:184,196,212;--tblr-gray-300-fg:var(--tblr-light);--tblr-gray-300-darken:#a6b0bf;--tblr-gray-300-lt:#f8f9fb;--tblr-gray-300-lt-rgb:248,249,251;--tblr-gray-400:#8a97ab;--tblr-gray-400-rgb:138,151,171;--tblr-gray-400-fg:var(--tblr-light);--tblr-gray-400-darken:#7c889a;--tblr-gray-400-lt:#f3f5f7;--tblr-gray-400-lt-rgb:243,245,247;--tblr-gray-500:#6c7a91;--tblr-gray-500-rgb:108,122,145;--tblr-gray-500-fg:var(--tblr-light);--tblr-gray-500-darken:#616e83;--tblr-gray-500-lt:#f0f2f4;--tblr-gray-500-lt-rgb:240,242,244;--tblr-gray-600:#49566c;--tblr-gray-600-rgb:73,86,108;--tblr-gray-600-fg:var(--tblr-light);--tblr-gray-600-darken:#424d61;--tblr-gray-600-lt:#edeef0;--tblr-gray-600-lt-rgb:237,238,240;--tblr-gray-700:#3a4859;--tblr-gray-700-rgb:58,72,89;--tblr-gray-700-fg:var(--tblr-light);--tblr-gray-700-darken:#344150;--tblr-gray-700-lt:#ebedee;--tblr-gray-700-lt-rgb:235,237,238;--tblr-gray-800:#182433;--tblr-gray-800-rgb:24,36,51;--tblr-gray-800-fg:var(--tblr-light);--tblr-gray-800-darken:#16202e;--tblr-gray-800-lt:#e8e9eb;--tblr-gray-800-lt-rgb:232,233,235;--tblr-gray-900:#040a11;--tblr-gray-900-rgb:4,10,17;--tblr-gray-900-fg:var(--tblr-light);--tblr-gray-900-darken:#04090f;--tblr-gray-900-lt:#e6e7e7;--tblr-gray-900-lt-rgb:230,231,231;--tblr-spacer-0:0;--tblr-spacer-1:0.25rem;--tblr-spacer-2:0.5rem;--tblr-spacer-3:1rem;--tblr-spacer-4:1.5rem;--tblr-spacer-5:2rem;--tblr-spacer-6:3rem;--tblr-spacer-7:5rem;--tblr-spacer-8:8rem;--tblr-spacer:1rem;--tblr-bg-surface:var(--tblr-white);--tblr-bg-surface-secondary:var(--tblr-gray-100);--tblr-bg-surface-tertiary:var(--tblr-gray-50);--tblr-bg-surface-dark:var(--tblr-dark);--tblr-bg-forms:var(--tblr-bg-surface);--tblr-border-color:#dce1e7;--tblr-border-color-translucent:rgba(4,32,69,.1);--tblr-border-dark-color:#8a97ab;--tblr-border-dark-color-translucent:rgba(4,32,69,.27);--tblr-border-active-color:#aab2bf;--tblr-icon-color:var(--tblr-gray-400);--tblr-active-bg:rgba(var(--tblr-primary-rgb),0.04);--tblr-disabled-bg:var(--tblr-bg-surface-secondary);--tblr-disabled-color:var(--tblr-gray-300);--tblr-code-color:var(--tblr-gray-600);--tblr-code-bg:var(--tblr-bg-surface-secondary);--tblr-dark-mode-border-color:#25384f;--tblr-dark-mode-border-color-translucent:rgba(72,110,149,.14);--tblr-dark-mode-border-active-color:#2c415d;--tblr-dark-mode-border-dark-color:#1f2e41;--tblr-page-padding:var(--tblr-spacer-3);--tblr-page-padding-y:var(--tblr-spacer-4);--tblr-font-weight-light:300;--tblr-font-weight-normal:400;--tblr-font-weight-medium:500;--tblr-font-weight-bold:600;--tblr-font-weight-headings:var(--tblr-font-weight-bold);--tblr-font-size-h1:1.5rem;--tblr-font-size-h2:1.25rem;--tblr-font-size-h3:1rem;--tblr-font-size-h4:0.875rem;--tblr-font-size-h5:0.75rem;--tblr-font-size-h6:0.625rem;--tblr-line-height-h1:2rem;--tblr-line-height-h2:1.75rem;--tblr-line-height-h3:1.5rem;--tblr-line-height-h4:1.25rem;--tblr-line-height-h5:1rem;--tblr-line-height-h6:1rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb),0.04) 0 2px 4px 0;--tblr-box-shadow-border:inset 0 0 0 1px var(--tblr-border-color-translucent);--tblr-box-shadow-transparent:0 0 0 0 transparent;--tblr-box-shadow-input:0 1px 1px rgba(var(--tblr-body-color-rgb),0.06);--tblr-box-shadow-card:0 0 4px rgba(var(--tblr-body-color-rgb),0.04);--tblr-box-shadow-card-hover:rgba(var(--tblr-body-color-rgb),0.16) 0 2px 16px 0;--tblr-box-shadow-dropdown:0 16px 24px 2px rgba(0,0,0,.07),0 6px 30px 5px rgba(0,0,0,.06),0 8px 10px -5px rgba(0,0,0,.1)}@media (max-width:991.98px){:host,:root,[data-bs-theme=light]{--tblr-page-padding:var(--tblr-spacer-2)}}@keyframes pulse{0%{opacity:1;transform:scale3d(.8,.8,.8)}50%{opacity:1;transform:scaleX(1)}to{opacity:1;transform:scale3d(.8,.8,.8)}}@keyframes tada{0%{transform:scaleX(1)}10%,5%{transform:scale3d(.9,.9,.9) rotate(5deg)}15%,25%,35%,45%{transform:scale3d(1.1,1.1,1.1) rotate(-5deg)}20%,30%,40%{transform:scale3d(1.1,1.1,1.1) rotate(5deg)}50%{transform:scaleX(1)}}@keyframes rotate-360{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}@keyframes blink{0%{opacity:0}50%{opacity:1}to{opacity:0}}body{font-feature-settings:"liga" 0;height:100%;letter-spacing:0;min-height:100%;position:relative;text-rendering:optimizeLegibility;touch-action:manipulation;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media print{body{background:transparent}}*{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}::-webkit-scrollbar{height:1rem;-webkit-transition:background .3s;transition:background .3s;width:1rem}@media (prefers-reduced-motion:reduce){::-webkit-scrollbar{-webkit-transition:none;transition:none}}::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}::-webkit-scrollbar-track{background:transparent}:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}::-webkit-scrollbar-corner{background:transparent}.layout-fluid .container,.layout-fluid [class*=" container-"],.layout-fluid [class^=container-]{max-width:100%}.layout-boxed{--tblr-theme-boxed-border-radius:0;--tblr-theme-boxed-width:1320px}@media (min-width:768px){.layout-boxed{background:#182433 linear-gradient(270deg,hsla(0,0%,100%,.1),transparent) fixed;padding:1rem;--tblr-theme-boxed-border-radius:4px}}.layout-boxed .page{border-radius:var(--tblr-theme-boxed-border-radius);color:var(--tblr-body-color);margin:0 auto;max-width:var(--tblr-theme-boxed-width)}@media (min-width:768px){.layout-boxed .page{background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}}.layout-boxed .page>.navbar:first-child{border-top-left-radius:var(--tblr-theme-boxed-border-radius);border-top-right-radius:var(--tblr-theme-boxed-border-radius)}.navbar{--tblr-navbar-bg:var(--tblr-bg-surface);--tblr-navbar-border-width:var(--tblr-border-width);--tblr-navbar-active-border-color:var(--tblr-primary);--tblr-navbar-active-bg:rgba(0,0,0,.06);--tblr-navbar-color:var(--tblr-body-color);--tblr-navbar-border-color:var(--tblr-border-color);align-items:stretch;background:var(--tblr-navbar-bg);box-shadow:inset 0 calc(var(--tblr-navbar-border-width)*-1) 0 0 var(--tblr-navbar-border-color);color:var(--tblr-navbar-color);min-height:3.5rem}.navbar-collapse .navbar{flex-grow:1}.navbar.collapsing{min-height:0}.navbar .dropdown-menu{position:absolute;z-index:1030}.navbar .navbar-nav{min-height:3rem}.navbar .navbar-nav .nav-link{border-radius:var(--tblr-border-radius);justify-content:center;min-height:2rem;min-width:2rem;position:relative}.navbar .navbar-nav .nav-link .badge{left:.375rem;position:absolute;top:.375rem;transform:translate(-50%,-50%)}.navbar-nav{margin:0;padding:0}@media (max-width:575.98px){.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:576px){.navbar-expand-sm .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-sm .nav-item.active{position:relative}.navbar-expand-sm .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-sm.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical~.navbar,.navbar-expand-sm.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-sm.navbar-vertical.navbar-right~.navbar,.navbar-expand-sm.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:767.98px){.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:768px){.navbar-expand-md .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-md .nav-item.active{position:relative}.navbar-expand-md .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-md.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical~.navbar,.navbar-expand-md.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-md.navbar-vertical.navbar-right~.navbar,.navbar-expand-md.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:991.98px){.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:992px){.navbar-expand-lg .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-lg .nav-item.active{position:relative}.navbar-expand-lg .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-lg.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical~.navbar,.navbar-expand-lg.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-lg.navbar-vertical.navbar-right~.navbar,.navbar-expand-lg.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:1199.98px){.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1200px){.navbar-expand-xl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xl .nav-item.active{position:relative}.navbar-expand-xl .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-xl.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical~.navbar,.navbar-expand-xl.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-xl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xl.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}@media (max-width:1399.98px){.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1400px){.navbar-expand-xxl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xxl .nav-item.active{position:relative}.navbar-expand-xxl .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-xxl.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical~.navbar,.navbar-expand-xxl.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand-xxl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}}.navbar-expand .navbar-collapse{flex-direction:column}.navbar-expand .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}.navbar-expand .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand .nav-item.active{position:relative}.navbar-expand .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand.navbar-vertical{box-shadow:inset calc((-1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical.navbar-right{box-shadow:inset calc((1*var(--tblr-navbar-border-width))*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical~.navbar,.navbar-expand.navbar-vertical~.page-wrapper{margin-right:15rem}.navbar-expand.navbar-vertical.navbar-right~.navbar,.navbar-expand.navbar-vertical.navbar-right~.page-wrapper{margin-left:15rem;margin-right:0}.navbar-brand{align-items:center;display:inline-flex;font-weight:var(--tblr-font-weight-bold);gap:.5rem;line-height:1;margin:0}.navbar-brand-image{height:2rem;width:auto}.navbar-toggler{align-items:center;border:0;display:flex;height:2rem;justify-content:center;position:relative;width:2rem}.navbar-toggler-icon{background:currentColor;border-radius:10px;height:2px;position:relative;transition:top .2s .2s,bottom .2s .2s,transform .2s,opacity 0s .2s;width:1.25em}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon{transition:none}}.navbar-toggler-icon:after,.navbar-toggler-icon:before{background:inherit;border-radius:inherit;content:"";display:block;height:inherit;position:absolute;right:0;transition:inherit;width:inherit}@media (prefers-reduced-motion:reduce){.navbar-toggler-icon:after,.navbar-toggler-icon:before{transition:none}}.navbar-toggler-icon:before{top:-.45em}.navbar-toggler-icon:after{bottom:-.45em}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transform:rotate(-45deg);transition:top .3s,bottom .3s,transform .3s .3s,opacity 0s .3s}@media (prefers-reduced-motion:reduce){.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transition:none}}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:before{top:0;transform:rotate(90deg)}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:after{bottom:0;opacity:0}.navbar-transparent{--tblr-navbar-border-color:transparent!important;background:transparent!important}.navbar-nav{align-items:stretch}.navbar-nav .nav-item{display:flex;flex-direction:column;justify-content:center}.navbar-side{align-items:center;display:flex;flex-direction:row;justify-content:space-around;margin:0}@media (min-width:576px){.navbar-vertical.navbar-expand-sm{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:576px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm{transition:none}}@media (min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-sm .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-sm>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-right:15rem}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:768px){.navbar-vertical.navbar-expand-md{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:768px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md{transition:none}}@media (min-width:768px){.navbar-vertical.navbar-expand-md.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-md .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-md .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-md>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-right:15rem}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:992px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg{transition:none}}@media (min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-lg .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-lg>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-right:15rem}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:1200px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl{transition:none}}@media (min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-xl .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-xl>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-right:15rem}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media (min-width:1400px) and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl{transition:none}}@media (min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand-xxl .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-xxl>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-right:15rem}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}}.navbar-vertical.navbar-expand{align-items:flex-start;bottom:0;overflow-y:scroll;padding:0;position:fixed;right:0;top:0;transition:transform .3s;width:15rem;z-index:1030}@media (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand.navbar-right{left:0;right:auto}.navbar-vertical.navbar-expand .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand~.page{padding-right:15rem}.navbar-vertical.navbar-expand~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand.navbar-right~.page{padding-left:15rem;padding-right:0}.navbar-vertical.navbar-expand .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-right:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-right:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-right:auto}.navbar-vertical.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-right-width:3px;bottom:0;left:auto;top:0}.navbar-overlap:after{background:inherit;box-shadow:inherit;content:"";height:9rem;left:0;position:absolute;right:0;top:100%;z-index:-1}.page{display:flex;flex-direction:column;min-height:100%;position:relative}.page-wrapper{display:flex;flex:1;flex-direction:column}@media print{.page-wrapper{margin:0!important}}.page-wrapper-full .page-body:first-child{border-top:0;margin:0}.page-body{display:flex;flex:1;flex-direction:column;margin-bottom:var(--tblr-page-padding-y);margin-top:var(--tblr-page-padding-y)}.page-body-card{background:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);flex:1;margin-bottom:0;padding:var(--tblr-page-padding) 0}.page-body~.page-body-card{margin-top:0}.page-cover{background:no-repeat 50%/cover;min-height:9rem}@media (min-width:768px){.page-cover{min-height:12rem}}@media (min-width:992px){.page-cover{min-height:15rem}}.page-cover-overlay{position:relative}.page-cover-overlay:after{background-image:linear-gradient(-180deg,transparent,rgba(0,0,0,.6));bottom:0;content:"";left:0;position:absolute;right:0;top:0}.page-header{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;min-height:2.25rem}.page-wrapper .page-header{margin:var(--tblr-page-padding-y) 0 0}.page-header-border{background-color:var(--tblr-bg-surface);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin:0!important;padding:var(--tblr-page-padding-y) 0}.page-pretitle{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.page-title{align-items:center;color:inherit;display:flex;font-size:var(--tblr-font-size-h2);font-weight:var(--tblr-font-weight-headings);line-height:var(--tblr-line-height-h2);margin:0}.page-title svg{height:1.5rem;margin-left:.25rem;width:1.5rem}.page-title-lg{font-size:1.5rem;line-height:2rem}.page-subtitle{color:var(--tblr-secondary);margin-top:.25rem}.page-cover{--tblr-page-cover-blur:20px;--tblr-page-cover-padding:1rem;min-height:6rem;overflow:hidden;padding:var(--tblr-page-cover-padding) 0;position:relative}.page-cover-img{background-position:50%;background-size:cover;bottom:calc(var(--tblr-page-cover-blur, 0)*-2);filter:blur(var(--tblr-page-cover-blur));left:calc(var(--tblr-page-cover-blur, 0)*-2);-o-object-fit:cover;object-fit:cover;pointer-events:none;position:absolute;right:calc(var(--tblr-page-cover-blur, 0)*-2);top:calc(var(--tblr-page-cover-blur, 0)*-2);z-index:-1}.page-tabs{margin-top:.5rem;position:relative}.page-header-tabs .nav-bordered{border:0}.page-header-tabs+.page-body-card{margin-top:0}.footer{background-color:#fff;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:var(--tblr-gray-500);margin-top:auto;padding:2rem 0}.footer-transparent{background-color:transparent;border-top:0}body.theme-dark .hide-theme-dark,body.theme-dark .img-light,body:not(.theme-dark):not([data-bs-theme=dark]) .hide-theme-light,body:not(.theme-dark):not([data-bs-theme=dark]) .img-dark,body[data-bs-theme=dark] .hide-theme-dark,body[data-bs-theme=dark] .img-light{display:none!important}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{--tblr-body-color:#dce1e7;--tblr-body-color-rgb:220,225,231;--tblr-muted:#49566c;--tblr-body-bg:#151f2c;--tblr-body-bg-rgb:21,31,44;--tblr-emphasis-color:#fff;--tblr-emphasis-color-rgb:255,255,255;--tblr-bg-forms:#151f2c;--tblr-bg-surface:#182433;--tblr-bg-surface-dark:#151f2c;--tblr-bg-surface-secondary:#1b293a;--tblr-bg-surface-tertiary:#151f2c;--tblr-link-color:#0884f8;--tblr-link-hover-color:#066fd1;--tblr-active-bg:#1b293a;--tblr-disabled-color:var(--tblr-gray-700);--tblr-border-color:var(--tblr-dark-mode-border-color);--tblr-border-color-translucent:var( - --tblr-dark-mode-border-color-translucent - );--tblr-border-dark-color:var(--tblr-dark-mode-border-dark-color);--tblr-border-active-color:var( - --tblr-dark-mode-border-active-color - );--tblr-btn-color:#151f2c;--tblr-code-color:var(--tblr-body-color);--tblr-code-bg:#1f2e41;--tblr-primary-lt:#162c43;--tblr-primary-lt-rgb:22,44,67;--tblr-secondary-lt:#202d3c;--tblr-secondary-lt-rgb:32,45,60;--tblr-success-lt:#1a3235;--tblr-success-lt-rgb:26,50,53;--tblr-info-lt:#1c3044;--tblr-info-lt-rgb:28,48,68;--tblr-warning-lt:#2e2b2f;--tblr-warning-lt-rgb:46,43,47;--tblr-danger-lt:#2b2634;--tblr-danger-lt-rgb:43,38,52;--tblr-light-lt:#2e3947;--tblr-light-lt-rgb:46,57,71;--tblr-dark-lt:#182433;--tblr-dark-lt-rgb:24,36,51;--tblr-muted-lt:#202d3c;--tblr-muted-lt-rgb:32,45,60;--tblr-blue-lt:#162c43;--tblr-blue-lt-rgb:22,44,67;--tblr-azure-lt:#1c3044;--tblr-azure-lt-rgb:28,48,68;--tblr-indigo-lt:#1c2a45;--tblr-indigo-lt-rgb:28,42,69;--tblr-purple-lt:#272742;--tblr-purple-lt-rgb:39,39,66;--tblr-pink-lt:#2b2639;--tblr-pink-lt-rgb:43,38,57;--tblr-red-lt:#2b2634;--tblr-red-lt-rgb:43,38,52;--tblr-orange-lt:#2e2b2f;--tblr-orange-lt-rgb:46,43,47;--tblr-yellow-lt:#2e302e;--tblr-yellow-lt-rgb:46,48,46;--tblr-lime-lt:#213330;--tblr-lime-lt-rgb:33,51,48;--tblr-green-lt:#1a3235;--tblr-green-lt-rgb:26,50,53;--tblr-teal-lt:#17313a;--tblr-teal-lt-rgb:23,49,58;--tblr-cyan-lt:#183140;--tblr-cyan-lt-rgb:24,49,64;--tblr-x-lt:#16202e;--tblr-x-lt-rgb:22,32,46;--tblr-facebook-lt:#182c46;--tblr-facebook-lt-rgb:24,44,70;--tblr-twitter-lt:#193146;--tblr-twitter-lt-rgb:25,49,70;--tblr-linkedin-lt:#172b41;--tblr-linkedin-lt-rgb:23,43,65;--tblr-google-lt:#2c2834;--tblr-google-lt-rgb:44,40,52;--tblr-youtube-lt:#2f202e;--tblr-youtube-lt-rgb:47,32,46;--tblr-vimeo-lt:#183345;--tblr-vimeo-lt-rgb:24,51,69;--tblr-dribbble-lt:#2d283c;--tblr-dribbble-lt-rgb:45,40,60;--tblr-github-lt:#182330;--tblr-github-lt-rgb:24,35,48;--tblr-instagram-lt:#2c2737;--tblr-instagram-lt-rgb:44,39,55;--tblr-pinterest-lt:#292131;--tblr-pinterest-lt-rgb:41,33,49;--tblr-vk-lt:#202e3f;--tblr-vk-lt-rgb:32,46,63;--tblr-rss-lt:#2f312e;--tblr-rss-lt-rgb:47,49,46;--tblr-flickr-lt:#162a44;--tblr-flickr-lt-rgb:22,42,68;--tblr-bitbucket-lt:#162942;--tblr-bitbucket-lt-rgb:22,41,66;--tblr-tabler-lt:#162c43;--tblr-tabler-lt-rgb:22,44,67}[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image{filter:brightness(0) invert(1)}.accordion{--tblr-accordion-color:var(--tblr-body-color)}.accordion-button:focus:not(:focus-visible){box-shadow:none;outline:none}.accordion-button:after{opacity:.7}.accordion-button:not(.collapsed){border-bottom-color:transparent;box-shadow:none;font-weight:var(--tblr-font-weight-bold)}.accordion-button:not(.collapsed):after{opacity:1}.alert{--tblr-alert-color:var(--tblr-secondary);--tblr-alert-bg:var(--tblr-bg-surface);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-right:.25rem var(--tblr-border-style) var(--tblr-alert-color);box-shadow:0 2px 4px 0 rgba(24,36,51,.04)}.alert>:last-child{margin-bottom:0}.alert-important{background:var(--tblr-alert-color);border-color:transparent;color:#fff}.alert-important .alert-icon,.alert-important .alert-link,.alert-important .alert-link:hover,.alert-important .alert-title{color:inherit}.alert-important .btn-close{filter:var(--tblr-btn-close-white-filter)}.alert-link,.alert-link:hover{color:var(--tblr-alert-color)}.alert-primary{--tblr-alert-color:var(--tblr-primary)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary)}.alert-success{--tblr-alert-color:var(--tblr-success)}.alert-info{--tblr-alert-color:var(--tblr-info)}.alert-warning{--tblr-alert-color:var(--tblr-warning)}.alert-danger{--tblr-alert-color:var(--tblr-danger)}.alert-light{--tblr-alert-color:var(--tblr-light)}.alert-dark{--tblr-alert-color:var(--tblr-dark)}.alert-muted{--tblr-alert-color:var(--tblr-muted)}.alert-blue{--tblr-alert-color:var(--tblr-blue)}.alert-azure{--tblr-alert-color:var(--tblr-azure)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo)}.alert-purple{--tblr-alert-color:var(--tblr-purple)}.alert-pink{--tblr-alert-color:var(--tblr-pink)}.alert-red{--tblr-alert-color:var(--tblr-red)}.alert-orange{--tblr-alert-color:var(--tblr-orange)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow)}.alert-lime{--tblr-alert-color:var(--tblr-lime)}.alert-green{--tblr-alert-color:var(--tblr-green)}.alert-teal{--tblr-alert-color:var(--tblr-teal)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan)}.alert-x{--tblr-alert-color:var(--tblr-x)}.alert-facebook{--tblr-alert-color:var(--tblr-facebook)}.alert-twitter{--tblr-alert-color:var(--tblr-twitter)}.alert-linkedin{--tblr-alert-color:var(--tblr-linkedin)}.alert-google{--tblr-alert-color:var(--tblr-google)}.alert-youtube{--tblr-alert-color:var(--tblr-youtube)}.alert-vimeo{--tblr-alert-color:var(--tblr-vimeo)}.alert-dribbble{--tblr-alert-color:var(--tblr-dribbble)}.alert-github{--tblr-alert-color:var(--tblr-github)}.alert-instagram{--tblr-alert-color:var(--tblr-instagram)}.alert-pinterest{--tblr-alert-color:var(--tblr-pinterest)}.alert-vk{--tblr-alert-color:var(--tblr-vk)}.alert-rss{--tblr-alert-color:var(--tblr-rss)}.alert-flickr{--tblr-alert-color:var(--tblr-flickr)}.alert-bitbucket{--tblr-alert-color:var(--tblr-bitbucket)}.alert-tabler{--tblr-alert-color:var(--tblr-tabler)}.alert-icon{height:1.5rem!important;margin:-.125rem 0 -.125rem 1rem;width:1.5rem!important}.alert-icon,.alert-title{color:var(--tblr-alert-color)}.alert-title{font-size:.875rem;font-weight:var(--tblr-font-weight-bold);line-height:1.25rem;margin-bottom:.25rem}.avatar{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-bg:var(--tblr-bg-surface-secondary);--tblr-avatar-box-shadow:var(--tblr-box-shadow-border);--tblr-avatar-font-size:1rem;--tblr-avatar-icon-size:1.5rem;align-items:center;background:var(--tblr-avatar-bg) no-repeat center/cover;border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-avatar-box-shadow);color:var(--tblr-secondary);display:inline-flex;font-size:var(--tblr-avatar-font-size);font-weight:var(--tblr-font-weight-medium);height:var(--tblr-avatar-size);justify-content:center;line-height:1;position:relative;text-align:center;text-transform:uppercase;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom;width:var(--tblr-avatar-size)}.avatar .icon{height:var(--tblr-avatar-icon-size);width:var(--tblr-avatar-icon-size)}.avatar .badge{border-radius:100rem;bottom:0;box-shadow:0 0 0 calc(var(--tblr-avatar-status-size)/4) var(--tblr-bg-surface);left:0;position:absolute}a.avatar{cursor:pointer}.avatar-rounded{border-radius:100rem}.avatar-xxs{--tblr-avatar-size:1rem;--tblr-avatar-status-size:0.25rem;--tblr-avatar-font-size:0.5rem;--tblr-avatar-icon-size:0.75rem}.avatar-xxs .badge:empty{height:.25rem;width:.25rem}.avatar-xs{--tblr-avatar-size:1.25rem;--tblr-avatar-status-size:0.375rem;--tblr-avatar-font-size:0.625rem;--tblr-avatar-icon-size:1rem}.avatar-xs .badge:empty{height:.375rem;width:.375rem}.avatar-sm{--tblr-avatar-size:2rem;--tblr-avatar-status-size:0.5rem;--tblr-avatar-font-size:0.75rem;--tblr-avatar-icon-size:1.25rem}.avatar-sm .badge:empty{height:.5rem;width:.5rem}.avatar-md{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:0.875rem;--tblr-avatar-icon-size:1.5rem}.avatar-md .badge:empty{height:.75rem;width:.75rem}.avatar-lg{--tblr-avatar-size:3rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:1.25rem;--tblr-avatar-icon-size:2rem}.avatar-lg .badge:empty{height:.75rem;width:.75rem}.avatar-xl{--tblr-avatar-size:5rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:2rem;--tblr-avatar-icon-size:3rem}.avatar-xl .badge:empty{height:1rem;width:1rem}.avatar-2xl{--tblr-avatar-size:7rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:3rem;--tblr-avatar-icon-size:5rem}.avatar-2xl .badge:empty{height:1rem;width:1rem}.avatar-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.avatar-list a.avatar:hover{z-index:1}.avatar-list-stacked{display:block;--tblr-list-gap:0}.avatar-list-stacked .avatar{box-shadow:var(--tblr-avatar-box-shadow),0 0 0 2px var(--tblr-card-cap-bg,var(--tblr-card-bg,var(--tblr-bg-surface)));margin-left:calc(var(--tblr-avatar-size)*-.5)!important}.avatar-upload{background:var(--tblr-bg-forms);border:var(--tblr-border-width) dashed var(--tblr-border-color);flex-direction:column;height:4rem;transition:color .3s,background-color .3s;width:4rem}@media (prefers-reduced-motion:reduce){.avatar-upload{transition:none}}.avatar-upload svg{height:1.5rem;width:1.5rem;stroke-width:1}.avatar-upload:hover{border-color:var(--tblr-primary);color:var(--tblr-primary);text-decoration:none}.avatar-upload-text{font-size:.625rem;line-height:1;margin-top:.25rem}.avatar-cover{box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-body-bg));margin-top:calc(var(--tblr-avatar-size)*-.5)}.badge{align-items:center;background:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) var(--tblr-border-style) transparent;font-weight:var(--tblr-font-weight-bold);justify-content:center;letter-spacing:.04em;min-width:1.35714285em;overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:bottom}a.badge{color:var(--tblr-bg-surface)}.badge .avatar{box-sizing:content-box;height:1.25rem;margin:0 -.5rem 0 .5rem;width:1.25rem}.badge .icon{font-size:1rem;height:1em;width:1em;stroke-width:2}.badge-empty,.badge:empty{border-radius:100rem;display:inline-block;height:.5rem;min-height:auto;min-width:0;padding:0;vertical-align:baseline;width:.5rem}.badge-outline{background-color:transparent;border:var(--tblr-border-width) var(--tblr-border-style) currentColor}.badge-pill{border-radius:100rem}.badges-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.badge-notification{left:0!important;position:absolute!important;top:0!important;transform:translate(-50%,-50%);z-index:1}.badge-blink{animation:blink 2s infinite}.breadcrumb{--tblr-breadcrumb-item-active-font-weight:var(--tblr-font-weight-bold);--tblr-breadcrumb-item-disabled-color:var(--tblr-disabled-color);--tblr-breadcrumb-link-color:var(--tblr-link-color);background:transparent;margin:0;padding:0}.breadcrumb a{color:var(--tblr-breadcrumb-link-color)}.breadcrumb a:hover{text-decoration:underline}.breadcrumb-muted{--tblr-breadcrumb-link-color:var(--tblr-secondary)}.breadcrumb-item.active{font-weight:var(--tblr-breadcrumb-item-active-font-weight)}.breadcrumb-item.active a{color:inherit;pointer-events:none}.breadcrumb-item.disabled{color:var(--tblr-breadcrumb-item-disabled-color)}.breadcrumb-item.disabled:before{color:inherit}.breadcrumb-item.disabled a{color:inherit;pointer-events:none}.breadcrumb-dots{--tblr-breadcrumb-divider:"·"}.breadcrumb-arrows{--tblr-breadcrumb-divider:"›"}.breadcrumb-bullets{--tblr-breadcrumb-divider:"•"}.btn{--tblr-btn-icon-size:1.25rem;--tblr-btn-bg:var(--tblr-bg-surface);--tblr-btn-color:var(--tblr-body-color);--tblr-btn-border-color:var(--tblr-border-color);--tblr-btn-hover-bg:var(--tblr-btn-bg);--tblr-btn-hover-border-color:var(--tblr-border-active-color);--tblr-btn-box-shadow:var(--tblr-box-shadow-input);--tblr-btn-active-color:var(--tblr-primary);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb),0.04);--tblr-btn-active-border-color:var(--tblr-primary);align-items:center;box-shadow:var(--tblr-btn-box-shadow);display:inline-flex;justify-content:center;white-space:nowrap}.btn .icon{color:inherit;min-width:var(--tblr-btn-icon-size);vertical-align:bottom}.btn .avatar,.btn .icon{height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/-4) 0 calc(var(--tblr-btn-padding-x)/2);width:var(--tblr-btn-icon-size)}.btn .icon-right{margin:0 calc(var(--tblr-btn-padding-x)/2) 0 calc(var(--tblr-btn-padding-x)/-4)}.btn .badge{top:auto}.btn-check+.btn:hover{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);color:var(--tblr-btn-hover-color)}.btn-link{background-color:transparent;border-color:transparent;box-shadow:none;color:#077cea}.btn-link .icon{color:inherit}.btn-link:hover{border-color:transparent;color:#0559a7}.btn-primary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-primary-fg);--tblr-btn-bg:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-primary-rgb),.8);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-border-color:var(--tblr-primary)}.btn-secondary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-secondary-fg);--tblr-btn-bg:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-secondary-rgb),.8);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:rgba(var(--tblr-secondary-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-border-color:var(--tblr-secondary)}.btn-success{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-success-fg);--tblr-btn-bg:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:rgba(var(--tblr-success-rgb),.8);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:rgba(var(--tblr-success-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-border-color:var(--tblr-success)}.btn-info{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-info-fg);--tblr-btn-bg:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:rgba(var(--tblr-info-rgb),.8);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:rgba(var(--tblr-info-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-border-color:var(--tblr-info)}.btn-warning{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-warning-fg);--tblr-btn-bg:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:rgba(var(--tblr-warning-rgb),.8);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:rgba(var(--tblr-warning-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-border-color:var(--tblr-warning)}.btn-danger{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-danger-fg);--tblr-btn-bg:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:rgba(var(--tblr-danger-rgb),.8);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:rgba(var(--tblr-danger-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-border-color:var(--tblr-danger)}.btn-light{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-light-fg);--tblr-btn-bg:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:rgba(var(--tblr-light-rgb),.8);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:rgba(var(--tblr-light-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-border-color:var(--tblr-light)}.btn-dark{--tblr-btn-border-color:var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-active-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-color:var(--tblr-dark-fg);--tblr-btn-bg:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dark-rgb),.8);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:rgba(var(--tblr-dark-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-border-color:var(--tblr-dark)}.btn-muted{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-muted-fg);--tblr-btn-bg:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:rgba(var(--tblr-muted-rgb),.8);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:rgba(var(--tblr-muted-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-border-color:var(--tblr-muted)}.btn-blue{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-blue-fg);--tblr-btn-bg:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:rgba(var(--tblr-blue-rgb),.8);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:rgba(var(--tblr-blue-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-border-color:var(--tblr-blue)}.btn-azure{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-azure-fg);--tblr-btn-bg:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:rgba(var(--tblr-azure-rgb),.8);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:rgba(var(--tblr-azure-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-border-color:var(--tblr-azure)}.btn-indigo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-indigo-fg);--tblr-btn-bg:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-indigo-rgb),.8);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:rgba(var(--tblr-indigo-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-border-color:var(--tblr-indigo)}.btn-purple{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-purple-fg);--tblr-btn-bg:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:rgba(var(--tblr-purple-rgb),.8);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:rgba(var(--tblr-purple-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-border-color:var(--tblr-purple)}.btn-pink{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pink-fg);--tblr-btn-bg:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pink-rgb),.8);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:rgba(var(--tblr-pink-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-border-color:var(--tblr-pink)}.btn-red{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-red-fg);--tblr-btn-bg:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:rgba(var(--tblr-red-rgb),.8);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:rgba(var(--tblr-red-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-border-color:var(--tblr-red)}.btn-orange{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-orange-fg);--tblr-btn-bg:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:rgba(var(--tblr-orange-rgb),.8);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:rgba(var(--tblr-orange-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-border-color:var(--tblr-orange)}.btn-yellow{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-yellow-fg);--tblr-btn-bg:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:rgba(var(--tblr-yellow-rgb),.8);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:rgba(var(--tblr-yellow-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-border-color:var(--tblr-yellow)}.btn-lime{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-lime-fg);--tblr-btn-bg:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:rgba(var(--tblr-lime-rgb),.8);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:rgba(var(--tblr-lime-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-border-color:var(--tblr-lime)}.btn-green{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-green-fg);--tblr-btn-bg:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:rgba(var(--tblr-green-rgb),.8);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:rgba(var(--tblr-green-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-border-color:var(--tblr-green)}.btn-teal{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-teal-fg);--tblr-btn-bg:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:rgba(var(--tblr-teal-rgb),.8);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:rgba(var(--tblr-teal-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-border-color:var(--tblr-teal)}.btn-cyan{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-cyan-fg);--tblr-btn-bg:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:rgba(var(--tblr-cyan-rgb),.8);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:rgba(var(--tblr-cyan-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-border-color:var(--tblr-cyan)}.btn-x{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-x-fg);--tblr-btn-bg:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:rgba(var(--tblr-x-rgb),.8);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:rgba(var(--tblr-x-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-border-color:var(--tblr-x)}.btn-facebook{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-facebook-fg);--tblr-btn-bg:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:rgba(var(--tblr-facebook-rgb),.8);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:rgba(var(--tblr-facebook-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-border-color:var(--tblr-facebook)}.btn-twitter{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-twitter-fg);--tblr-btn-bg:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:rgba(var(--tblr-twitter-rgb),.8);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:rgba(var(--tblr-twitter-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-border-color:var(--tblr-twitter)}.btn-linkedin{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-linkedin-fg);--tblr-btn-bg:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:rgba(var(--tblr-linkedin-rgb),.8);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:rgba(var(--tblr-linkedin-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-border-color:var(--tblr-linkedin)}.btn-google{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-google-fg);--tblr-btn-bg:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:rgba(var(--tblr-google-rgb),.8);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:rgba(var(--tblr-google-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-border-color:var(--tblr-google)}.btn-youtube{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-youtube-fg);--tblr-btn-bg:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:rgba(var(--tblr-youtube-rgb),.8);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:rgba(var(--tblr-youtube-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-border-color:var(--tblr-youtube)}.btn-vimeo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vimeo-fg);--tblr-btn-bg:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vimeo-rgb),.8);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:rgba(var(--tblr-vimeo-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-border-color:var(--tblr-vimeo)}.btn-dribbble{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-dribbble-fg);--tblr-btn-bg:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dribbble-rgb),.8);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:rgba(var(--tblr-dribbble-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-border-color:var(--tblr-dribbble)}.btn-github{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-github-fg);--tblr-btn-bg:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:rgba(var(--tblr-github-rgb),.8);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:rgba(var(--tblr-github-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-border-color:var(--tblr-github)}.btn-instagram{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-instagram-fg);--tblr-btn-bg:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:rgba(var(--tblr-instagram-rgb),.8);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:rgba(var(--tblr-instagram-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-border-color:var(--tblr-instagram)}.btn-pinterest{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pinterest-fg);--tblr-btn-bg:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pinterest-rgb),.8);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:rgba(var(--tblr-pinterest-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-border-color:var(--tblr-pinterest)}.btn-vk{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vk-fg);--tblr-btn-bg:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vk-rgb),.8);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:rgba(var(--tblr-vk-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-border-color:var(--tblr-vk)}.btn-rss{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-rss-fg);--tblr-btn-bg:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:rgba(var(--tblr-rss-rgb),.8);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:rgba(var(--tblr-rss-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-border-color:var(--tblr-rss)}.btn-flickr{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-flickr-fg);--tblr-btn-bg:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:rgba(var(--tblr-flickr-rgb),.8);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:rgba(var(--tblr-flickr-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-border-color:var(--tblr-flickr)}.btn-bitbucket{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-bitbucket-fg);--tblr-btn-bg:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:rgba(var(--tblr-bitbucket-rgb),.8);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:rgba(var(--tblr-bitbucket-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-border-color:var(--tblr-bitbucket)}.btn-tabler{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-tabler-fg);--tblr-btn-bg:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:rgba(var(--tblr-tabler-rgb),.8);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:rgba(var(--tblr-tabler-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-border-color:var(--tblr-tabler)}.btn-ghost-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-hover-border-color:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-hover-border-color:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-hover-border-color:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-hover-border-color:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-hover-border-color:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-hover-border-color:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-hover-border-color:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-hover-border-color:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-hover-border-color:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-hover-border-color:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-hover-border-color:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-hover-border-color:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-hover-border-color:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-hover-border-color:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-hover-border-color:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-hover-border-color:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-hover-border-color:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-hover-border-color:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-hover-border-color:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-hover-border-color:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-hover-border-color:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-hover-border-color:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-hover-border-color:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-hover-border-color:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-hover-border-color:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-hover-border-color:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-hover-border-color:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-hover-border-color:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-hover-border-color:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-hover-border-color:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-hover-border-color:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-hover-border-color:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-hover-border-color:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-hover-border-color:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-hover-border-color:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-hover-border-color:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-hover-border-color:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-group-sm>.btn,.btn-sm{--tblr-btn-line-height:1.5;--tblr-btn-icon-size:.75rem}.btn-group-lg>.btn,.btn-lg{--tblr-btn-line-height:1.5;--tblr-btn-icon-size:2rem}.btn-pill{border-radius:10rem;padding-left:1.5em;padding-right:1.5em}.btn-pill[class*=btn-icon]{padding:.375rem 15px}.btn-square{border-radius:0}.btn-icon{min-height:calc(var(--tblr-btn-line-height)*var(--tblr-btn-font-size) + var(--tblr-btn-padding-y)*2 + var(--tblr-btn-border-width)*2);min-width:calc(var(--tblr-btn-line-height)*var(--tblr-btn-font-size) + var(--tblr-btn-padding-y)*2 + var(--tblr-btn-border-width)*2);padding-left:0;padding-right:0}.btn-icon .icon{margin:calc(var(--tblr-btn-padding-x)*-1)}.btn-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.btn-floating{border-radius:100rem;bottom:1.5rem;left:1.5rem;position:fixed;z-index:1030}.btn-loading{color:transparent!important;pointer-events:none;position:relative;text-shadow:none!important}.btn-loading>*{opacity:0}.btn-loading:after{animation:spinner-border .75s linear infinite;border-left-color:currentcolor;border:2px var(--tblr-border-style);border-left:2px var(--tblr-border-style) transparent;border-radius:100rem;color:var(--tblr-btn-color);content:"";display:inline-block;height:var(--tblr-btn-icon-size);position:absolute;right:calc(50% - var(--tblr-btn-icon-size)/2);top:calc(50% - var(--tblr-btn-icon-size)/2);vertical-align:text-bottom;width:var(--tblr-btn-icon-size)}.btn-action{align-items:center;background:transparent;border:0;border-radius:var(--tblr-border-radius);color:var(--tblr-secondary);display:inline-flex;height:2rem;justify-content:center;padding:0;width:2rem}.btn-action:after{content:none}.btn-action:focus{box-shadow:none;outline:none}.btn-action.show,.btn-action:hover{background:var(--tblr-active-bg);color:var(--tblr-body-color)}.btn-action.show{color:var(--tblr-primary)}.btn-action .icon{font-size:1.25rem;height:1.25rem;margin:0;width:1.25rem;stroke-width:1}.btn-actions{display:flex}.btn-group,.btn-group-vertical{box-shadow:var(--tblr-box-shadow-input)}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group>.btn-check:checked+.btn,.btn-group>.btn.active,.btn-group>.btn:active{z-index:5}.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.calendar{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);display:block;font-size:.765625rem}.calendar-nav{align-items:center;display:flex}.calendar-title{flex:1;text-align:center}.calendar-body,.calendar-header{display:flex;flex-wrap:wrap;justify-content:flex-start;padding:.5rem 0}.calendar-header{color:var(--tblr-secondary)}.calendar-date{border:0;flex:0 0 14.2857142857%;max-width:14.2857142857%;padding:.2rem;text-align:center}.calendar-date.next-month,.calendar-date.prev-month{opacity:.25}.calendar-date .date-item{background:100% 0;border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:100rem;color:#66758c;cursor:pointer;display:inline-block;height:1.4rem;line-height:1.4rem;outline:0;position:relative;text-align:center;text-decoration:none;transition:background .3s,border .3s,box-shadow .32s,color .3s;vertical-align:middle;white-space:nowrap;width:1.4rem}@media (prefers-reduced-motion:reduce){.calendar-date .date-item{transition:none}}.calendar-date .date-item:hover{background:#fefeff;text-decoration:none}.calendar-date .date-item:hover,.calendar-date .date-today{border-color:var(--tblr-border-color);color:var(--tblr-primary)}.calendar-range{position:relative}.calendar-range:before{background:rgba(var(--tblr-primary-rgb),.1);content:"";height:1.4rem;left:0;position:absolute;right:0;top:50%;transform:translateY(-50%)}.calendar-range.range-end .date-item,.calendar-range.range-start .date-item{background:var(--tblr-primary);border-color:var(--tblr-primary);color:#fff}.calendar-range.range-start:before{right:50%}.calendar-range.range-end:before{left:50%}.carousel-indicators-vertical{flex-direction:column;margin:0 0 0 1rem;right:auto;top:0}.carousel-indicators-vertical [data-bs-target]{border:0;border-left:10px var(--tblr-border-style) transparent;border-right:10px var(--tblr-border-style) transparent;height:30px;margin:3px 0;width:3px}.carousel-indicators-dot [data-bs-target]{border:10px var(--tblr-border-style) transparent;border-radius:100rem;height:.5rem;margin:0;width:.5rem}.carousel-indicators-thumb [data-bs-target]{background:no-repeat 50%/cover;border:0;border-radius:var(--tblr-border-radius);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0;height:auto;margin:0 3px;opacity:.75;width:2rem}@media (min-width:992px){.carousel-indicators-thumb [data-bs-target]{width:4rem}}.carousel-indicators-thumb [data-bs-target]:before{content:"";display:block;padding-top:var(--tblr-aspect-ratio,100%)}.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target]{margin:3px 0}.carousel-caption-background{background:red;background:linear-gradient(0deg,rgba(24,36,51,.9),rgba(24,36,51,0));bottom:0;height:90%;left:0;position:absolute;right:0}.card{transition:transform .3s ease-out,opacity .3s ease-out,box-shadow .3s ease-out}@media (prefers-reduced-motion:reduce){.card{transition:none}}@media print{.card{border:none;box-shadow:none}}a.card{color:inherit}a.card:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.16) 0 2px 16px 0;text-decoration:none}.card .card{box-shadow:none}.card-borderless,.card-borderless .card-footer,.card-borderless .card-header{border-color:transparent}.card-stamp{--tblr-stamp-size:7rem;border-top-left-radius:4px;height:calc(var(--tblr-stamp-size)*1);left:0;max-height:100%;opacity:.2;overflow:hidden;pointer-events:none;position:absolute;top:0;width:calc(var(--tblr-stamp-size)*1)}.card-stamp-lg{--tblr-stamp-size:13rem}.card-stamp-icon{align-items:center;background:var(--tblr-secondary);border-radius:100rem;color:var(--tblr-card-bg,var(--tblr-bg-surface));display:flex;font-size:calc(var(--tblr-stamp-size)*.75);height:calc(var(--tblr-stamp-size)*1);justify-content:center;left:calc(var(--tblr-stamp-size)*-.25);position:relative;top:calc(var(--tblr-stamp-size)*-.25);transform:rotate(-10deg);width:calc(var(--tblr-stamp-size)*1)}.card-stamp-icon .icon{stroke-width:2;height:calc(var(--tblr-stamp-size)*.75);width:calc(var(--tblr-stamp-size)*.75)}.card-img,.card-img-start{border-bottom-right-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));border-top-right-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width))}.card-img,.card-img-end{border-bottom-left-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));border-top-left-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width))}.card-img-overlay{display:flex;flex-direction:column;justify-content:flex-end}.card-img-overlay-dark{background-image:linear-gradient(-180deg,transparent,rgba(0,0,0,.6))}.card-inactive{box-shadow:none;pointer-events:none}.card-inactive .card-body{opacity:.64}.card-active{--tblr-card-border-color:var(--tblr-primary);--tblr-card-bg:var(--tblr-active-bg)}.card-btn{align-items:center;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;display:flex;flex:1;font-weight:var(--tblr-font-weight-medium);justify-content:center;padding:1rem 1.25rem;text-align:center;transition:background .3s}@media (prefers-reduced-motion:reduce){.card-btn{transition:none}}.card-btn:hover{background:rgba(var(--tblr-primary-rgb),.04);text-decoration:none}.card-btn+.card-btn{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-stacked{--tblr-card-stacked-offset:.25rem;position:relative}.card-stacked:after{background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;content:"";height:var(--tblr-card-stacked-offset);left:var(--tblr-card-stacked-offset);position:absolute;right:var(--tblr-card-stacked-offset);top:calc(var(--tblr-card-stacked-offset)*-1)}.card-cover{background:#666 no-repeat 50%/cover;padding:1rem 1.25rem;position:relative}.card-cover:before{background:rgba(24,36,51,.48);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.card-cover:first-child,.card-cover:first-child:before{border-radius:4px 4px 0 0}.card-cover-blurred:before{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.card-actions{margin:-.5rem auto -.5rem -.5rem;padding-right:.5rem}.card-actions a{text-decoration:none}.card-header{align-items:center;background:transparent;color:inherit;display:flex}.card-header:first-child{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-header-light{border-bottom-color:transparent}.card-header-light,.card-header-tabs{background:var(--tblr-bg-surface-tertiary)}.card-header-tabs{flex:1;margin:calc(var(--tblr-card-cap-padding-y)*-1) calc(var(--tblr-card-cap-padding-x)*-1) calc(var(--tblr-card-cap-padding-y)*-1);padding:calc(var(--tblr-card-cap-padding-y)*.5) calc(var(--tblr-card-cap-padding-x)*.5) 0}.card-header-pills{flex:1;margin-bottom:-.5rem;margin-top:-.5rem}.card-rotate-left{transform:rotate(1.5deg)}.card-rotate-right{transform:rotate(-1.5deg)}.card-link{color:inherit}.card-link:hover{box-shadow:0 1px 6px 0 rgba(0,0,0,.08);color:inherit;text-decoration:none}.card-link-rotate:hover{opacity:1;transform:rotate(-1.5deg)}.card-link-pop:hover{opacity:1;transform:translateY(-2px)}.card-footer{margin-top:auto}.card-footer:last-child{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius)}.card-footer-transparent{background:transparent;border-color:transparent;padding-top:0}.card-footer-borderless{border-top:none}.card-progress{height:.25rem}.card-progress:last-child{border-radius:0 0 2px 2px}.card-progress:first-child{border-radius:2px 2px 0 0}.card-meta{color:var(--tblr-secondary)}.card-title{display:block;font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem;margin:0 0 1rem}.card-title,a.card-title:hover{color:inherit}.card-header .card-title{margin:0}.card-subtitle{color:var(--tblr-secondary);font-weight:400;margin-bottom:1.25rem}.card-header .card-subtitle{margin:0}.card-title .card-subtitle{font-size:.875rem;margin:0 .25rem 0 0}.card-body{position:relative}.card-body>:last-child{margin-bottom:0}.card-sm>.card-body{padding:1rem}@media (min-width:768px){.card-md>.card-body{padding:2.5rem}.card-lg>.card-body{padding:2rem}}@media (min-width:992px){.card-lg>.card-body{padding:4rem}}@media print{.card-body{padding:0}}.card-body+.card-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-body-scrollable{overflow:auto}.card-options{display:flex;left:.75rem;margin-right:auto;top:1.5rem}.card-options-link{color:var(--tblr-secondary);display:inline-block;margin-right:.25rem;min-width:1rem}.card-status-top{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;height:2px;left:0;position:absolute;right:0;top:0}.card-status-start{border-radius:0 var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0;bottom:0;height:100%;left:auto;position:absolute;width:2px}.card-status-bottom{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);bottom:0;height:2px;position:absolute;top:auto;width:100%}.card-table{margin-bottom:0!important}.card-table tr td:first-child,.card-table tr th:first-child{border-right:0;padding-right:1.25rem}.card-table tr td:last-child,.card-table tr th:last-child{border-left:0;padding-left:1.25rem}.card-table tbody tr:first-child,.card-table tbody tr:first-child td,.card-table tbody tr:first-child th,.card-table tfoot tr:first-child,.card-table tfoot tr:first-child td,.card-table tfoot tr:first-child th,.card-table thead tr:first-child,.card-table thead tr:first-child td,.card-table thead tr:first-child th{border-top:0}.card-body+.card-table{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color)}.card-code{padding:0}.card-code .highlight{border:0;margin:0}.card-code pre{border:0!important;margin:0!important}.card-chart{height:3.5rem;position:relative;z-index:1}.card-avatar{box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-bg-surface));margin-left:auto;margin-right:auto;margin-top:calc(var(--tblr-avatar-size)*-1*.5)}.card-body+.card-list-group{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-list-group .list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:1.25rem;padding-right:1.25rem}.card-list-group .list-group-item:last-child{border-bottom:0}.card-list-group .list-group-item:first-child{border-top:0}.card-tabs .nav-tabs{border-bottom:0;position:relative;z-index:1000}.card-tabs .nav-tabs .nav-link{background:var(--tblr-bg-surface-tertiary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.card-tabs .nav-tabs .nav-link.active,.card-tabs .nav-tabs .nav-link:active,.card-tabs .nav-tabs .nav-link:hover{border-color:var(--tblr-border-color-translucent);color:var(--tblr-body-color)}.card-tabs .nav-tabs .nav-link.active{background:var(--tblr-card-bg,var(--tblr-bg-surface));border-bottom-color:transparent;color:inherit}.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link{border-top-right-radius:0}.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link{border-top-left-radius:0}.card-tabs .nav-tabs .nav-item+.nav-item{margin-right:calc(var(--tblr-border-width)*-1)}.card-tabs .nav-tabs-bottom,.card-tabs .nav-tabs-bottom .nav-link{margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-link.active{border-top-color:transparent}.card-tabs .nav-tabs-bottom .nav-item{margin-bottom:0;margin-top:calc(var(--tblr-border-width)*-1)}.card-tabs .nav-tabs-bottom .nav-item .nav-link{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:0 0 var(--tblr-border-radius) var(--tblr-border-radius)}.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link{border-bottom-right-radius:0}.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link{border-bottom-left-radius:0}.card-tabs .card{border-bottom-right-radius:0}.card-tabs .nav-tabs+.tab-content .card{border-bottom-right-radius:var(--tblr-card-border-radius);border-top-right-radius:0}.card-note{--tblr-card-bg:#fff7dd;--tblr-card-border-color:#fff1c9}.btn-close{cursor:pointer}.btn-close:focus{outline:none}.dropdown-menu{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.dropdown-menu.card{display:none;min-width:25rem;padding:0}.dropdown-menu.card.show{display:flex}.dropdown-item{align-items:center;display:flex;line-height:1.4285714286;margin:0;min-width:11rem}.dropdown-item-icon{color:var(--tblr-secondary);height:1.25rem!important;margin-left:.5rem;opacity:.7;text-align:center;width:1.25rem!important}.dropdown-item-indicator{align-items:center;display:inline-flex;height:1.25rem;line-height:1;margin-left:.5rem;margin-right:-.25rem;vertical-align:bottom}.dropdown-header{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;padding-bottom:.25rem;pointer-events:none;text-transform:uppercase}.dropdown-menu-scrollable{height:auto;max-height:13rem;overflow-x:hidden}.dropdown-menu-column{min-width:11rem}.dropdown-menu-column .dropdown-item{min-width:0}.dropdown-menu-columns{display:flex;flex:0 0.25rem}.dropdown-menu-arrow:before{background:inherit;border:1px solid;border-color:inherit;content:"";display:block;height:14px;position:absolute;right:.75rem;top:-.25rem;transform:rotate(45deg);transform-origin:center;width:14px;z-index:-1;clip:rect(0,9px,9px,0)}.dropdown-menu-arrow.dropdown-menu-end:before{left:.75rem;right:auto}.dropend>.dropdown-menu{margin-right:-.25rem;margin-top:calc(-.25rem - 1px)}.dropend .dropdown-toggle:after{margin-right:auto}.dropdown-menu-card{padding:0}.dropdown-menu-card>.card{border:0;box-shadow:none;margin:0}.datagrid{--tblr-datagrid-padding:1.5rem;--tblr-datagrid-item-width:15rem;display:grid;grid-gap:var(--tblr-datagrid-padding);grid-template-columns:repeat(auto-fit,minmax(var(--tblr-datagrid-item-width),1fr))}.datagrid-title{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;margin-bottom:.25rem;text-transform:uppercase}.empty{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;padding:1rem;text-align:center}@media (min-width:768px){.empty{padding:3rem}}.empty-icon{color:var(--tblr-secondary);height:3rem;line-height:1;margin:0 0 1rem;width:3rem}.empty-icon svg{height:100%;width:100%}.empty-img{line-height:1;margin:0 0 2rem}.empty-header{color:var(--tblr-secondary);font-size:4rem;font-weight:var(--tblr-font-weight-light);line-height:1;margin:0 0 1rem}.empty-title{font-size:1.25rem;font-weight:var(--tblr-font-weight-bold);line-height:1.75rem}.empty-subtitle,.empty-title{margin:0 0 .5rem}.empty-action{margin-top:1.5rem}.empty-bordered{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.row>*{min-width:0}.col-separator{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.container-slim{max-width:16rem}.container-slim,.container-tight{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.container-tight{max-width:30rem}.container-narrow{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;max-width:45rem;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.row-0{margin-left:0;margin-right:0}.row-0>.col,.row-0>[class*=col-]{padding-left:0;padding-right:0}.row-0 .card{margin-bottom:0}.row-sm{margin-left:-.375rem;margin-right:-.375rem}.row-sm>.col,.row-sm>[class*=col-]{padding-left:.375rem;padding-right:.375rem}.row-sm .card{margin-bottom:.75rem}.row-md{margin-left:-1.5rem;margin-right:-1.5rem}.row-md>.col,.row-md>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.row-md .card{margin-bottom:3rem}.row-lg{margin-left:-3rem;margin-right:-3rem}.row-lg>.col,.row-lg>[class*=col-]{padding-left:3rem;padding-right:3rem}.row-lg .card{margin-bottom:6rem}.row-deck>.col,.row-deck>[class*=col-]{align-items:stretch;display:flex}.row-deck>.col .card,.row-deck>[class*=col-] .card{flex:1 1 auto}.row-cards{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:var(--tblr-page-padding);min-width:0}.row-cards .row-cards{flex:1}.space-y{flex-direction:column}.space-x,.space-y{display:flex;gap:1rem}.space-y-0{flex-direction:column}.space-x-0,.space-y-0{display:flex;gap:0}.space-y-1{flex-direction:column}.space-x-1,.space-y-1{display:flex;gap:.25rem}.space-y-2{flex-direction:column}.space-x-2,.space-y-2{display:flex;gap:.5rem}.space-y-3{flex-direction:column}.space-x-3,.space-y-3{display:flex;gap:1rem}.space-y-4{flex-direction:column}.space-x-4,.space-y-4{display:flex;gap:1.5rem}.space-y-5{flex-direction:column}.space-x-5,.space-y-5{display:flex;gap:2rem}.space-y-6{flex-direction:column}.space-x-6,.space-y-6{display:flex;gap:3rem}.space-y-7{flex-direction:column}.space-x-7,.space-y-7{display:flex;gap:5rem}.space-y-8{flex-direction:column}.space-x-8,.space-y-8{display:flex;gap:8rem}.divide-y>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y>:not(template):not(:first-child){padding-top:1rem!important}.divide-y>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x>:not(template):not(:first-child){padding-right:1rem!important}.divide-x>:not(template):not(:last-child){padding-left:1rem!important}.divide-y-0>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-0>:not(template):not(:first-child){padding-top:0!important}.divide-y-0>:not(template):not(:last-child){padding-bottom:0!important}.divide-x-0>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-0>:not(template):not(:first-child){padding-right:0!important}.divide-x-0>:not(template):not(:last-child){padding-left:0!important}.divide-y-1>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-1>:not(template):not(:first-child){padding-top:.25rem!important}.divide-y-1>:not(template):not(:last-child){padding-bottom:.25rem!important}.divide-x-1>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-1>:not(template):not(:first-child){padding-right:.25rem!important}.divide-x-1>:not(template):not(:last-child){padding-left:.25rem!important}.divide-y-2>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-2>:not(template):not(:first-child){padding-top:.5rem!important}.divide-y-2>:not(template):not(:last-child){padding-bottom:.5rem!important}.divide-x-2>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-2>:not(template):not(:first-child){padding-right:.5rem!important}.divide-x-2>:not(template):not(:last-child){padding-left:.5rem!important}.divide-y-3>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-3>:not(template):not(:first-child){padding-top:1rem!important}.divide-y-3>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x-3>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-3>:not(template):not(:first-child){padding-right:1rem!important}.divide-x-3>:not(template):not(:last-child){padding-left:1rem!important}.divide-y-4>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-4>:not(template):not(:first-child){padding-top:1.5rem!important}.divide-y-4>:not(template):not(:last-child){padding-bottom:1.5rem!important}.divide-x-4>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-4>:not(template):not(:first-child){padding-right:1.5rem!important}.divide-x-4>:not(template):not(:last-child){padding-left:1.5rem!important}.divide-y-5>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-5>:not(template):not(:first-child){padding-top:2rem!important}.divide-y-5>:not(template):not(:last-child){padding-bottom:2rem!important}.divide-x-5>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-5>:not(template):not(:first-child){padding-right:2rem!important}.divide-x-5>:not(template):not(:last-child){padding-left:2rem!important}.divide-y-6>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-6>:not(template):not(:first-child){padding-top:3rem!important}.divide-y-6>:not(template):not(:last-child){padding-bottom:3rem!important}.divide-x-6>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-6>:not(template):not(:first-child){padding-right:3rem!important}.divide-x-6>:not(template):not(:last-child){padding-left:3rem!important}.divide-y-7>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-7>:not(template):not(:first-child){padding-top:5rem!important}.divide-y-7>:not(template):not(:last-child){padding-bottom:5rem!important}.divide-x-7>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-7>:not(template):not(:first-child){padding-right:5rem!important}.divide-x-7>:not(template):not(:last-child){padding-left:5rem!important}.divide-y-8>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-8>:not(template):not(:first-child){padding-top:8rem!important}.divide-y-8>:not(template):not(:last-child){padding-bottom:8rem!important}.divide-x-8>:not(template)~:not(template){border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-8>:not(template):not(:first-child){padding-right:8rem!important}.divide-x-8>:not(template):not(:last-child){padding-left:8rem!important}.divide-y-fill{display:flex;flex-direction:column;height:100%}.divide-y-fill>:not(template){display:flex;flex:1;flex-direction:column;justify-content:center}.icon{--tblr-icon-size:1.25rem;font-size:var(--tblr-icon-size);height:var(--tblr-icon-size);vertical-align:bottom;width:var(--tblr-icon-size);stroke-width:1.5}.icon:hover{text-decoration:none}.icon-inline{--tblr-icon-size:1rem;vertical-align:-.2rem}.icon-filled{fill:currentColor}.icon-sm{--tblr-icon-size:1rem;stroke-width:1}.icon-md{--tblr-icon-size:2.5rem;stroke-width:1}.icon-lg{--tblr-icon-size:3.5rem;stroke-width:1}.icon-pulse{animation:pulse 2s ease infinite;animation-fill-mode:both}.icon-pulse,.icon-tada{transition:all .15s ease 0s}.icon-tada{animation:tada 3s ease infinite;animation-fill-mode:both}.icon-rotate{animation:rotate-360 3s linear infinite;animation-fill-mode:both;transition:all .15s ease 0s}.img-responsive{--tblr-img-responsive-ratio:75%;background:no-repeat 50%/cover;padding-top:var(--tblr-img-responsive-ratio)}.img-responsive-grid{padding-top:calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y)/2)}.img-responsive-1x1{--tblr-img-responsive-ratio:100%}.img-responsive-2x1{--tblr-img-responsive-ratio:50%}.img-responsive-1x2{--tblr-img-responsive-ratio:200%}.img-responsive-3x1{--tblr-img-responsive-ratio:33.3333333333%}.img-responsive-1x3{--tblr-img-responsive-ratio:300%}.img-responsive-4x3{--tblr-img-responsive-ratio:75%}.img-responsive-3x4{--tblr-img-responsive-ratio:133.3333333333%}.img-responsive-16x9{--tblr-img-responsive-ratio:56.25%}.img-responsive-9x16{--tblr-img-responsive-ratio:177.7777777778%}.img-responsive-21x9{--tblr-img-responsive-ratio:42.8571428571%}.img-responsive-9x21{--tblr-img-responsive-ratio:233.3333333333%}textarea[cols]{height:auto}.col-form-label,.form-label{display:block;font-weight:var(--tblr-font-weight-medium)}.col-form-label.required:after,.form-label.required:after{color:#d63939;content:"*";margin-right:.25rem}.form-label-description{color:var(--tblr-gray-500);float:left;font-weight:var(--tblr-font-weight-normal)}.form-hint{color:var(--tblr-gray-500);display:block}.form-hint:last-child{margin-bottom:0}.form-hint+.form-control{margin-top:.25rem}.form-label+.form-hint{margin-top:-.25rem}.form-control+.form-hint,.form-select+.form-hint,.input-group+.form-hint{color:var(--tblr-gray-500);margin-top:.5rem}.form-select:-moz-focusring{color:var(--tblr-body-color)}.form-control:-webkit-autofill{box-shadow:0 0 0 1000px var(--tblr-body-bg) inset;color:var(--tblr-body-color);-webkit-text-fill-color:var(--tblr-body-color)}.form-control.disabled,.form-control:disabled{color:var(--tblr-gray-500);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-control[size]{width:auto}.form-control-light{background-color:var(--tblr-gray-100);border-color:transparent}.form-control-dark{background-color:rgba(0,0,0,.1);border-color:transparent;color:#fff}.form-control-dark:focus{background-color:rgba(0,0,0,.1);border-color:hsla(0,0%,100%,.24);box-shadow:none}.form-control-dark::-webkit-input-placeholder{color:hsla(0,0%,100%,.6)}.form-control-dark:-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.form-control-dark::-ms-input-placeholder{color:hsla(0,0%,100%,.6)}.form-control-dark::placeholder{color:hsla(0,0%,100%,.6)}.form-control-rounded{border-radius:10rem}.form-control-flush{background:none!important;border-color:transparent!important;box-shadow:none!important;line-height:inherit;padding:0;resize:none}.form-footer{margin-top:2rem}.form-fieldset{background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);margin-bottom:1rem;padding:1rem}.form-help{align-items:center;background:var(--tblr-gray-100);border-radius:100rem;color:var(--tblr-gray-500);cursor:pointer;display:inline-flex;font-size:.75rem;font-weight:var(--tblr-font-weight-bold);height:1.125rem;justify-content:center;text-align:center;text-decoration:none;transition:background-color .3s,color .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1.125rem}@media (prefers-reduced-motion:reduce){.form-help{transition:none}}.form-help:hover,.form-help[aria-describedby]{background:var(--tblr-primary);color:#fff}.input-group{border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input)}.input-group .btn,.input-group .form-control{box-shadow:none}.input-group-link{font-size:.75rem}.input-group-flat:focus-within{border-radius:var(--tblr-border-radius);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:#83b7e8!important}.input-group-flat .form-control:focus{border-color:var(--tblr-border-color);box-shadow:none}.input-group-flat .form-control:not(:last-child){border-left:0}.input-group-flat .form-control:not(:first-child){border-right:0}.input-group-flat .input-group-text{background:var(--tblr-bg-forms);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.input-group-flat .input-group-text{transition:none}}.input-group-flat .input-group-text:first-child{padding-left:0}.input-group-flat .input-group-text:last-child{padding-right:0}.form-file-button{border-right:0;margin-right:0}.input-icon{position:relative}.input-icon .form-control:not(:last-child),.input-icon .form-select:not(:last-child){padding-left:2.5rem}.input-icon .form-control:not(:first-child),.input-icon .form-select:not(:last-child){padding-right:2.5rem}.input-icon-addon{align-items:center;bottom:0;color:var(--tblr-icon-color);display:flex;font-size:1.2em;justify-content:center;min-width:2.5rem;pointer-events:none;position:absolute;right:0;top:0}.input-icon-addon:last-child{left:0;right:auto}.form-colorinput{cursor:pointer;display:inline-block;line-height:1;margin:0;position:relative}.form-colorinput-input{opacity:0;position:absolute;z-index:-1}.form-colorinput-color{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:3px;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:#fff;display:block;height:1.5rem;width:1.5rem}.form-colorinput-color:before{background:no-repeat 50%/1.25rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E");content:"";height:100%;opacity:0;position:absolute;right:0;top:0;transition:opacity .3s;width:100%}@media (prefers-reduced-motion:reduce){.form-colorinput-color:before{transition:none}}.form-colorinput-input:checked~.form-colorinput-color:before{opacity:1}.form-colorinput-input:focus~.form-colorinput-color{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-colorinput-light .form-colorinput-color:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-imagecheck{cursor:pointer;margin:0;position:relative}.form-imagecheck-input{opacity:0;position:absolute;z-index:-1}.form-imagecheck-figure{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px;display:block;margin:0;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-imagecheck-input:focus~.form-imagecheck-figure{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-imagecheck-input:checked~.form-imagecheck-figure{border-color:var(--tblr-primary)}.form-imagecheck-figure:before{background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:#fff;content:"";display:block;height:1.25rem;pointer-events:none;position:absolute;right:.25rem;top:.25rem;transition:opacity .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1.25rem;z-index:1}@media (prefers-reduced-motion:reduce){.form-imagecheck-figure:before{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure:before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E");background-position:50%;background-repeat:repeat;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]~.form-imagecheck-figure:before{border-radius:50%}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-imagecheck-image{display:block;max-width:100%;opacity:.64;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-image{transition:none}}.form-imagecheck-image:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.form-imagecheck-image:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck:hover .form-imagecheck-image{opacity:1}.form-imagecheck-caption{color:var(--tblr-secondary);font-size:.765625rem;padding:.25rem;text-align:center;transition:color .3s}@media (prefers-reduced-motion:reduce){.form-imagecheck-caption{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck:hover .form-imagecheck-caption{color:var(--tblr-body-color)}.form-selectgroup{display:inline-flex;flex-wrap:wrap;margin:0 0 -.5rem -.5rem}.form-selectgroup .form-selectgroup-item{margin:0 0 .5rem .5rem}.form-selectgroup-vertical{flex-direction:column}.form-selectgroup-item{display:block;position:relative}.form-selectgroup-input{opacity:0;position:absolute;right:0;top:0;z-index:-1}.form-selectgroup-label{background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px;box-shadow:var(--tblr-box-shadow-input);color:var(--tblr-secondary);cursor:pointer;display:block;font-size:.875rem;line-height:1.4285714286;margin:0;min-width:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2);padding:.5625rem .75rem;position:relative;text-align:center;transition:border-color .3s,background .3s,color .3s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}@media (prefers-reduced-motion:reduce){.form-selectgroup-label{transition:none}}.form-selectgroup-label .icon:only-child{margin:0 -.25rem}.form-selectgroup-label:hover{color:var(--tblr-body-color)}.form-selectgroup-check{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:var(--tblr-box-shadow-input);display:inline-block;height:1.25rem;vertical-align:middle;width:1.25rem}.form-selectgroup-input[type=checkbox]+.form-selectgroup-label .form-selectgroup-check{border-radius:var(--tblr-border-radius)}.form-selectgroup-input[type=radio]+.form-selectgroup-label .form-selectgroup-check{border-radius:50%}.form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-check{background-color:var(--tblr-primary);background-position:50%;background-repeat:repeat;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-selectgroup-check-floated{left:.5625rem;position:absolute;top:.5625rem}.form-selectgroup-input:checked+.form-selectgroup-label{background:rgba(var(--tblr-primary-rgb),.04);border-color:var(--tblr-primary);color:var(--tblr-primary);z-index:1}.form-selectgroup-input:focus+.form-selectgroup-label{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);color:var(--tblr-primary);z-index:2}.form-selectgroup-boxes .form-selectgroup-label{color:inherit;padding:1.25rem 1rem;text-align:right}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label{color:inherit}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-title{color:var(--tblr-primary)}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-label-content{opacity:1}.form-selectgroup-pills{align-items:flex-start;flex-wrap:wrap}.form-selectgroup-pills .form-selectgroup-item{flex-grow:0}.form-selectgroup-pills .form-selectgroup-label{border-radius:50px}.form-control-color::-webkit-color-swatch{border:none}[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.form-control::-webkit-file-upload-button{background-color:var(--tblr-btn-color,var(--tblr-tertiary-bg))}.form-control::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-tertiary-bg))}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:var(--tblr-btn-color,var(--tblr-secondary-bg))}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-secondary-bg))}.form-check{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check .form-check-label-off,.form-check.form-check-highlight .form-check-input:not(:checked)~.form-check-label{color:var(--tblr-secondary)}.form-check .form-check-input:checked~.form-check-label-off,.form-check .form-check-input:not(:checked)~.form-check-label-on{display:none}.form-check-input{background-size:1.25rem;box-shadow:var(--tblr-box-shadow-input);margin-top:0}.form-switch .form-check-input{transition:background-color .3s,background-position .3s}@media (prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-check-label{display:block}.form-check-label.required:after{color:#d63939;content:"*";margin-right:.25rem}.form-check-description{color:var(--tblr-secondary);display:block;font-size:.75rem;margin-top:.25rem}.form-check-single,.form-check-single .form-check-input{margin:0}.form-switch .form-check-input{height:1.25rem;margin-top:0}.form-switch-lg{min-height:1.5rem;padding-right:3.5rem}.form-switch-lg .form-check-input{background-size:1.5rem;height:1.5rem;margin-right:-3.5rem;width:2.75rem}.form-switch-lg .form-check-label{padding-top:.125rem}.form-check-input:checked{border:none}.form-control.is-invalid-lite,.form-control.is-valid-lite,.form-select.is-invalid-lite,.form-select.is-valid-lite{border-color:var(--tblr-border-color)!important}.legend{--tblr-legend-size:0.75em;background:var(--tblr-border-color);border:1px solid var(--tblr-border-color-translucent);border-radius:var(--tblr-border-radius-sm);display:inline-block;height:var(--tblr-legend-size);width:var(--tblr-legend-size)}.list-group{margin-left:0;margin-right:0}.list-group-header{background:var(--tblr-bg-surface-tertiary);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:var(--tblr-gray-500);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;padding:.5rem 1.25rem;text-transform:uppercase}.list-group-flush>.list-group-header:last-child{border-bottom-width:0}.list-group-item{background-color:inherit}.list-group-item.active{border-right-color:#066fd1;border-right-width:2px}.list-group-item.active,.list-group-item.disabled,.list-group-item:active,.list-group-item:disabled,.list-group-item:focus,.list-group-item:hover{background-color:rgba(var(--tblr-secondary-rgb),.08)}.list-group-item.disabled,.list-group-item:disabled{color:#6c7a91}.list-bordered .list-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-top:-1px}.list-bordered .list-item:first-child{border-top:none}.list-group-hoverable .list-group-item-actions{opacity:0;transition:opacity .3s}@media (prefers-reduced-motion:reduce){.list-group-hoverable .list-group-item-actions{transition:none}}.list-group-hoverable .list-group-item-actions.show,.list-group-hoverable .list-group-item:hover .list-group-item-actions{opacity:1}.list-group-transparent{--tblr-list-group-border-radius:0;margin:0 -1.25rem}.list-group-transparent .list-group-item{background:none;border:0}.list-group-transparent .list-group-item .icon{color:var(--tblr-secondary)}.list-group-transparent .list-group-item.active{background:var(--tblr-active-bg);color:inherit;font-weight:var(--tblr-font-weight-bold)}.list-group-transparent .list-group-item.active .icon{color:inherit}.list-separated-item{padding:1rem 0}.list-separated-item:first-child{padding-top:0}.list-separated-item:last-child{padding-bottom:0}.list-separated-item+.list-separated-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-inline-item:not(:last-child){margin-left:auto;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.list-inline-dots .list-inline-item+.list-inline-item:before{content:" · ";-webkit-margin-end:.5rem;margin-inline-end:.5rem}.loader{color:#066fd1;display:block;height:2.5rem;position:relative;vertical-align:middle;width:2.5rem}.loader:after{animation:rotate-360 .6s linear;animation-iteration-count:infinite;border:1px var(--tblr-border-style);border-color:currentColor currentColor transparent transparent;border-radius:100rem;content:"";height:100%;position:absolute;right:0;top:0;width:100%}.dimmer{position:relative}.dimmer .loader{display:none;left:0;margin:0 auto;position:absolute;right:0;top:50%;transform:translateY(-50%)}.dimmer.active .loader{display:block}.dimmer.active .dimmer-content{opacity:.1;pointer-events:none}@keyframes animated-dots{0%{transform:translateX(100%)}}.animated-dots{display:inline-block;overflow:hidden;vertical-align:bottom}.animated-dots:after{animation:animated-dots 1.2s steps(4,jump-none) infinite;content:"...";display:inline-block}.modal-content>.btn-close,.modal-header>.btn-close{height:3.5rem;left:0;margin:0;padding:0;position:absolute;top:0;width:3.5rem;z-index:10}.modal-body{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.modal-body::-webkit-scrollbar{height:1rem;-webkit-transition:background .3s;transition:background .3s;width:1rem}@media (prefers-reduced-motion:reduce){.modal-body::-webkit-scrollbar{-webkit-transition:none;transition:none}}.modal-body::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.modal-body::-webkit-scrollbar-track{background:transparent}.modal-body:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.modal-body::-webkit-scrollbar-corner{background:transparent}.modal-body .modal-title{margin-bottom:1rem}.modal-body+.modal-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.modal-status{background:var(--tblr-secondary);border-radius:var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0;height:2px;left:0;position:absolute;right:0;top:0}.modal-header{align-items:center;background:transparent;min-height:3.5rem;padding:0 1.5rem 0 3.5rem}.modal-title{color:inherit;font-size:1rem;font-weight:var(--tblr-font-weight-bold);line-height:1.4285714286}.modal-footer{padding-bottom:.75rem;padding-top:.75rem}.modal-blur{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal-full-width{margin:0 .5rem;max-width:none}.nav-vertical,.nav-vertical .nav{flex-direction:column;flex-wrap:nowrap}.nav-vertical .nav{border-right:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-right:1.25rem;padding-right:.5rem}.nav-vertical .nav-item.show .nav-link,.nav-vertical .nav-link.active{font-weight:var(--tblr-font-weight-bold)}.nav-vertical.nav-pills{margin:0 -.75rem}.nav-bordered{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.nav-bordered .nav-item+.nav-item{margin-right:1.25rem}.nav-bordered .nav-link{border:0;border-bottom:2px var(--tblr-border-style) transparent;color:var(--tblr-secondary);margin:0 0 -var(--tblr-border-width);padding-left:0;padding-right:0}.nav-bordered .nav-item.show .nav-link,.nav-bordered .nav-link.active{border-color:var(--tblr-primary);color:var(--tblr-primary)}.nav-link{align-items:center;display:flex;transition:color .3s}@media (prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link-toggle{margin-right:auto;padding:0 .25rem;transition:transform .3s}@media (prefers-reduced-motion:reduce){.nav-link-toggle{transition:none}}.nav-link-toggle:after{border-bottom:1px var(--tblr-border-style);border-right:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.1em;margin-right:.4em;margin:0;transform:rotate(45deg);vertical-align:.306em;width:.36em}.nav-link[aria-expanded=true] .nav-link-toggle{transform:rotate(-180deg)}.nav-link-icon{color:var(--tblr-icon-color);height:1.25rem;margin-left:.5rem;width:1.25rem}.nav-link-icon svg{display:block;height:100%}.nav-fill .nav-item .nav-link{justify-content:center}.stars{color:#8a97ab;display:inline-flex;font-size:.75rem}.stars .star:not(:first-child){margin-right:.25rem}.pagination{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.page-link{border-radius:var(--tblr-border-radius);min-width:1.75rem}.page-item{text-align:center}.page-item:not(.active) .page-link:hover{background:transparent}.page-item.page-next,.page-item.page-prev{flex:0 0 50%;text-align:right}.page-item.page-next{margin-right:auto;text-align:left}.page-item-subtitle{color:var(--tblr-secondary);font-size:12px;margin-bottom:2px;text-transform:uppercase}.page-item.disabled .page-item-subtitle{color:var(--tblr-disabled-color)}.page-item-title{color:var(--tblr-body-color);font-size:1rem;font-weight:var(--tblr-font-weight-normal)}.page-link:hover .page-item-title{color:#066fd1}.page-item.disabled .page-item-title{color:var(--tblr-disabled-color)}@keyframes progress-indeterminate{0%{left:100%;right:-35%}60%,to{left:-90%;right:100%}}.progress{-webkit-appearance:none;-moz-appearance:none;appearance:none;line-height:.5rem;position:relative;width:100%}.progress::-webkit-progress-bar{background:var(--tblr-progress-bg)}.progress::-webkit-progress-value{background-color:var(--tblr-primary)}.progress::-moz-progress-bar{background-color:var(--tblr-primary)}.progress::-ms-fill{background-color:var(--tblr-primary);border:none}.progress-sm{height:.25rem}.progress-bar{height:100%}.progress-bar-indeterminate:after,.progress-bar-indeterminate:before{background-color:inherit;bottom:0;content:"";position:absolute;right:0;top:0;will-change:left,right}.progress-bar-indeterminate:before{animation:progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite}.progress-separated .progress-bar{box-shadow:0 0 0 2px var(--tblr-card-bg,var(--tblr-bg-surface))}.progressbg{display:flex;padding:.25rem .5rem;position:relative}.progressbg-text{overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;z-index:1}.progressbg-progress{background:transparent;bottom:0;height:100%;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.progressbg-value{font-weight:var(--tblr-font-weight-medium);margin-right:auto;padding-right:2rem}.ribbon{--tblr-ribbon-margin:0.25rem;--tblr-ribbon-border-radius:var(--tblr-border-radius);align-items:center;background:var(--tblr-primary);border-color:var(--tblr-primary);border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);color:#fff;display:inline-flex;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);justify-content:center;left:calc(var(--tblr-ribbon-margin)*-1);line-height:1;min-height:2rem;min-width:2rem;padding:.25rem .75rem;position:absolute;text-align:center;text-transform:uppercase;top:.75rem;z-index:1}.ribbon:before{border:calc(var(--tblr-ribbon-margin)*.5) var(--tblr-border-style);border-color:inherit;border-left-color:transparent;border-top-color:transparent;bottom:100%;content:"";filter:brightness(70%);height:0;left:0;position:absolute;width:0}.ribbon.bg-blue{border-color:var(--tblr-blue)}.ribbon.bg-blue-lt{border-color:rgba(var(--tblr-blue-rgb),.1)!important}.ribbon.bg-azure{border-color:var(--tblr-azure)}.ribbon.bg-azure-lt{border-color:rgba(var(--tblr-azure-rgb),.1)!important}.ribbon.bg-indigo{border-color:var(--tblr-indigo)}.ribbon.bg-indigo-lt{border-color:rgba(var(--tblr-indigo-rgb),.1)!important}.ribbon.bg-purple{border-color:var(--tblr-purple)}.ribbon.bg-purple-lt{border-color:rgba(var(--tblr-purple-rgb),.1)!important}.ribbon.bg-pink{border-color:var(--tblr-pink)}.ribbon.bg-pink-lt{border-color:rgba(var(--tblr-pink-rgb),.1)!important}.ribbon.bg-red{border-color:var(--tblr-red)}.ribbon.bg-red-lt{border-color:rgba(var(--tblr-red-rgb),.1)!important}.ribbon.bg-orange{border-color:var(--tblr-orange)}.ribbon.bg-orange-lt{border-color:rgba(var(--tblr-orange-rgb),.1)!important}.ribbon.bg-yellow{border-color:var(--tblr-yellow)}.ribbon.bg-yellow-lt{border-color:rgba(var(--tblr-yellow-rgb),.1)!important}.ribbon.bg-lime{border-color:var(--tblr-lime)}.ribbon.bg-lime-lt{border-color:rgba(var(--tblr-lime-rgb),.1)!important}.ribbon.bg-green{border-color:var(--tblr-green)}.ribbon.bg-green-lt{border-color:rgba(var(--tblr-green-rgb),.1)!important}.ribbon.bg-teal{border-color:var(--tblr-teal)}.ribbon.bg-teal-lt{border-color:rgba(var(--tblr-teal-rgb),.1)!important}.ribbon.bg-cyan{border-color:var(--tblr-cyan)}.ribbon.bg-cyan-lt{border-color:rgba(var(--tblr-cyan-rgb),.1)!important}.ribbon .icon{font-size:1.25rem;height:1.25rem;width:1.25rem}.ribbon-top{border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);left:.75rem;padding:.5rem 0;top:calc(var(--tblr-ribbon-margin)*-1);width:2rem}.ribbon-top:before{border-color:inherit;border-right-color:transparent;border-top-color:transparent;bottom:auto;left:100%;top:0}.ribbon-top.ribbon-start{left:auto;right:.75rem}.ribbon-top.ribbon-start:before{left:100%;right:auto;top:0}.ribbon-start{border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);left:auto;right:calc(var(--tblr-ribbon-margin)*-1)}.ribbon-start:before{border-color:inherit;border-right-color:transparent;border-top-color:transparent;bottom:100%;right:0;top:auto}.ribbon-bottom{bottom:.75rem;top:auto}.ribbon-bookmark{border-radius:0 0 0 var(--tblr-ribbon-border-radius);padding-right:.25rem}.ribbon-bookmark:after{border:1rem var(--tblr-border-style);border-color:inherit;border-left-width:0;border-right-color:transparent;border-right-width:.5rem;content:"";display:block;height:0;left:100%;position:absolute;top:0;width:0}.ribbon-bookmark.ribbon-left{padding-left:.5rem}.ribbon-bookmark.ribbon-left:after{border-left-color:transparent;border-left-width:.5rem;border-right-width:0;left:auto;right:100%}.ribbon-bookmark.ribbon-top{border-radius:var(--tblr-ribbon-border-radius) 0 0 0;padding-bottom:.25rem;padding-left:0;padding-right:0}.ribbon-bookmark.ribbon-top:after{border-color:inherit;border-bottom-color:transparent;border-width:0 1rem .5rem;left:0;right:0;top:100%}.markdown{line-height:1.7142857143}.markdown>:first-child{margin-top:0}.markdown>:last-child,.markdown>:last-child .highlight{margin-bottom:0}@media (min-width:768px){.markdown>.hr,.markdown>hr{margin-bottom:3em;margin-top:3em}}.markdown>.h1,.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{font-weight:var(--tblr-font-weight-bold)}.markdown>blockquote{font-size:1rem;margin:1.5rem 0;padding:.5rem 1.5rem}.markdown>img{border-radius:var(--tblr-border-radius)}.placeholder:not(.btn):not([class*=bg-]){background-color:currentColor!important}.placeholder:not(.avatar):not([class*=card-img-]){border-radius:var(--tblr-border-radius)}.steps{--tblr-steps-color:var(--tblr-primary);--tblr-steps-inactive-color:var(--tblr-border-color);--tblr-steps-dot-size:.5rem;--tblr-steps-border-width:2px;display:flex;flex-wrap:nowrap;list-style:none;margin:0;padding:0;width:100%}.steps-blue{--tblr-steps-color:var(--tblr-blue)}.steps-azure{--tblr-steps-color:var(--tblr-azure)}.steps-indigo{--tblr-steps-color:var(--tblr-indigo)}.steps-purple{--tblr-steps-color:var(--tblr-purple)}.steps-pink{--tblr-steps-color:var(--tblr-pink)}.steps-red{--tblr-steps-color:var(--tblr-red)}.steps-orange{--tblr-steps-color:var(--tblr-orange)}.steps-yellow{--tblr-steps-color:var(--tblr-yellow)}.steps-lime{--tblr-steps-color:var(--tblr-lime)}.steps-green{--tblr-steps-color:var(--tblr-green)}.steps-teal{--tblr-steps-color:var(--tblr-teal)}.steps-cyan{--tblr-steps-color:var(--tblr-cyan)}.step-item{color:inherit;cursor:default;flex:1 1 0;margin-top:0;min-height:1rem;padding-top:calc(var(--tblr-steps-dot-size));position:relative;text-align:center}a.step-item{cursor:pointer}a.step-item:hover{color:inherit}.step-item:after,.step-item:before{background:var(--tblr-steps-color)}.step-item:not(:last-child):after{content:"";position:absolute;right:50%;transform:translateY(-50%);width:100%}.step-item:after{height:var(--tblr-steps-border-width);top:calc(var(--tblr-steps-dot-size)*.5)}.step-item:before{align-items:center;border-radius:100rem;box-sizing:content-box;color:var(--tblr-white);content:"";display:flex;height:var(--tblr-steps-dot-size);justify-content:center;position:absolute;right:50%;top:0;transform:translateX(50%);width:var(--tblr-steps-dot-size);z-index:1}.step-item.active{font-weight:var(--tblr-font-weight-bold)}.step-item.active:after{background:var(--tblr-steps-inactive-color)}.step-item.active~.step-item{color:var(--tblr-disabled-color)}.step-item.active~.step-item:after,.step-item.active~.step-item:before{background:var(--tblr-steps-inactive-color)}.steps-counter{--tblr-steps-dot-size:1.5rem;counter-reset:steps}.steps-counter .step-item{counter-increment:steps}.steps-counter .step-item:before{content:counter(steps)}.steps-vertical{--tblr-steps-dot-offset:6px;flex-direction:column}.steps-vertical.steps-counter{--tblr-steps-dot-offset:-2px}.steps-vertical .step-item{min-height:auto;padding-right:calc(var(--tblr-steps-dot-size) + 1rem);padding-top:0;text-align:right}.steps-vertical .step-item:not(:first-child){margin-top:1rem}.steps-vertical .step-item:before{right:0;top:var(--tblr-steps-dot-offset);transform:translate(0)}.steps-vertical .step-item:not(:last-child):after{content:"";height:calc(100% + 1rem);position:absolute;right:calc(var(--tblr-steps-dot-size)*.5);top:var(--tblr-steps-dot-offset);transform:translateX(50%);width:var(--tblr-steps-border-width)}@keyframes status-pulsate-main{40%{transform:scale(1.25)}60%{transform:scale(1.25)}}@keyframes status-pulsate-secondary{10%{transform:scale(1)}30%{transform:scale(3)}80%{transform:scale(3)}to{transform:scale(1)}}@keyframes status-pulsate-tertiary{25%{transform:scale(1)}80%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(3)}}.status{--tblr-status-height:1.5rem;--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145;align-items:center;background:rgba(var(--tblr-status-color-rgb),.1);border-radius:100rem;color:var(--tblr-status-color);display:inline-flex;font-size:.875rem;font-weight:var(--tblr-font-weight-medium);gap:.5rem;height:var(--tblr-status-height);letter-spacing:normal;line-height:1;margin:0;padding:.25rem .75rem;text-transform:none}.status .status-dot{background:var(--tblr-status-color)}.status .icon{font-size:1.25rem}.status-lite{background:transparent!important;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;color:var(--tblr-body-color)!important}.status-primary{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-secondary{--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145}.status-success{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-info{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-warning{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-danger{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-light{--tblr-status-color:#f6f8fb;--tblr-status-color-rgb:246,248,251}.status-dark{--tblr-status-color:#182433;--tblr-status-color-rgb:24,36,51}.status-muted{--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145}.status-blue{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-azure{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-indigo{--tblr-status-color:#4263eb;--tblr-status-color-rgb:66,99,235}.status-purple{--tblr-status-color:#ae3ec9;--tblr-status-color-rgb:174,62,201}.status-pink{--tblr-status-color:#d6336c;--tblr-status-color-rgb:214,51,108}.status-red{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-orange{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-yellow{--tblr-status-color:#f59f00;--tblr-status-color-rgb:245,159,0}.status-lime{--tblr-status-color:#74b816;--tblr-status-color-rgb:116,184,22}.status-green{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-teal{--tblr-status-color:#0ca678;--tblr-status-color-rgb:12,166,120}.status-cyan{--tblr-status-color:#17a2b8;--tblr-status-color-rgb:23,162,184}.status-x{--tblr-status-color:#000;--tblr-status-color-rgb:0,0,0}.status-facebook{--tblr-status-color:#1877f2;--tblr-status-color-rgb:24,119,242}.status-twitter{--tblr-status-color:#1da1f2;--tblr-status-color-rgb:29,161,242}.status-linkedin{--tblr-status-color:#0a66c2;--tblr-status-color-rgb:10,102,194}.status-google{--tblr-status-color:#dc4e41;--tblr-status-color-rgb:220,78,65}.status-youtube{--tblr-status-color:red;--tblr-status-color-rgb:255,0,0}.status-vimeo{--tblr-status-color:#1ab7ea;--tblr-status-color-rgb:26,183,234}.status-dribbble{--tblr-status-color:#ea4c89;--tblr-status-color-rgb:234,76,137}.status-github{--tblr-status-color:#181717;--tblr-status-color-rgb:24,23,23}.status-instagram{--tblr-status-color:#e4405f;--tblr-status-color-rgb:228,64,95}.status-pinterest{--tblr-status-color:#bd081c;--tblr-status-color-rgb:189,8,28}.status-vk{--tblr-status-color:#6383a8;--tblr-status-color-rgb:99,131,168}.status-rss{--tblr-status-color:orange;--tblr-status-color-rgb:255,165,0}.status-flickr{--tblr-status-color:#0063dc;--tblr-status-color-rgb:0,99,220}.status-bitbucket{--tblr-status-color:#0052cc;--tblr-status-color-rgb:0,82,204}.status-tabler{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-dot{--tblr-status-dot-color:var(--tblr-status-color,#6c7a91);--tblr-status-size:0.5rem;background:var(--tblr-status-dot-color);border-radius:100rem;display:inline-block;height:var(--tblr-status-size);position:relative;width:var(--tblr-status-size)}.status-dot-animated:before{animation:status-pulsate-tertiary 1s linear 2s infinite backwards;background:inherit;border-radius:inherit;content:"";inset:0;opacity:.6;position:absolute;z-index:0}.status-indicator{--tblr-status-indicator-size:2.5rem;--tblr-status-indicator-color:var(--tblr-status-color,#6c7a91);display:block;height:var(--tblr-status-indicator-size);position:relative;width:var(--tblr-status-indicator-size)}.status-indicator-circle{--tblr-status-circle-size:.75rem;background:var(--tblr-status-color);border-radius:100rem;height:var(--tblr-status-circle-size);margin:calc(var(--tblr-status-circle-size)/-2) calc(var(--tblr-status-circle-size)/-2) 0 0;position:absolute;right:50%;top:50%;width:var(--tblr-status-circle-size)}.status-indicator-circle:first-child{z-index:3}.status-indicator-circle:nth-child(2){opacity:.1;z-index:2}.status-indicator-circle:nth-child(3){opacity:.3;z-index:1}.status-indicator-animated .status-indicator-circle:first-child{animation:status-pulsate-main 2s linear 1s infinite backwards}.status-indicator-animated .status-indicator-circle:nth-child(2){animation:status-pulsate-secondary 2s linear 1s infinite backwards}.status-indicator-animated .status-indicator-circle:nth-child(3){animation:status-pulsate-tertiary 2s linear 1s infinite backwards}.switch-icon{background:transparent;border:0;cursor:pointer;display:inline-block;height:1.25rem;line-height:1;padding:0;position:relative;vertical-align:bottom;width:1.25rem}.switch-icon.disabled{opacity:.4;pointer-events:none}.switch-icon:focus{outline:none}.switch-icon .switch-icon-a,.switch-icon .switch-icon-b,.switch-icon svg{display:block;height:100%;width:100%}.switch-icon .switch-icon-a{opacity:1}.switch-icon .switch-icon-b{opacity:0;position:absolute;right:0;top:0}.switch-icon.active .switch-icon-a{opacity:0}.switch-icon.active .switch-icon-b{opacity:1}.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:opacity .5s}@media (prefers-reduced-motion:reduce){.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:opacity .5s,transform 0s .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-b{transform:scale(1.5)}.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:opacity 0s,transform .5s}@media (prefers-reduced-motion:reduce){.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:none}}.switch-icon-scale.active .switch-icon-b{transform:scale(1)}.switch-icon-flip{perspective:10em}.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{-webkit-backface-visibility:hidden;backface-visibility:hidden;transform-style:preserve-3d;transition:opacity 0s .2s,transform .4s ease-in-out}@media (prefers-reduced-motion:reduce){.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{transition:none}}.switch-icon-flip .switch-icon-a{opacity:1;transform:rotateY(0deg)}.switch-icon-flip .switch-icon-b{opacity:1;transform:rotateY(180deg)}.switch-icon-flip.active .switch-icon-a{opacity:1;transform:rotateY(-180deg)}.switch-icon-flip.active .switch-icon-b{opacity:1;transform:rotateY(0deg)}.switch-icon-slide-down,.switch-icon-slide-left,.switch-icon-slide-right,.switch-icon-slide-up{overflow:hidden}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:opacity .3s,transform .3s}@media (prefers-reduced-motion:reduce){.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:none}}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-up .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-b{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-a,.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a,.switch-icon-slide-up.active .switch-icon-a{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-b,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b,.switch-icon-slide-up.active .switch-icon-b{transform:translateY(0)}.switch-icon-slide-left .switch-icon-a{transform:translateX(0)}.switch-icon-slide-left .switch-icon-b{transform:translateX(-100%)}.switch-icon-slide-left.active .switch-icon-a{transform:translateX(100%)}.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right .switch-icon-a{transform:translateX(0)}.switch-icon-slide-right .switch-icon-b{transform:translateX(100%)}.switch-icon-slide-right.active .switch-icon-a{transform:translateX(-100%)}.switch-icon-slide-right.active .switch-icon-b{transform:translateX(0)}.switch-icon-slide-down .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-a{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-b{transform:translateY(0)}.markdown>table thead th,.table thead th{background:var(--tblr-bg-surface-tertiary);color:var(--tblr-gray-500);color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;padding-bottom:.5rem;padding-top:.5rem;text-transform:uppercase;white-space:nowrap}@media print{.markdown>table thead th,.table thead th{background:transparent}}.table-responsive .markdown>table,.table-responsive .table{margin-bottom:0}.table-responsive+.card-footer{border-top:0}.table-transparent thead th{background:transparent}.table-nowrap>:not(caption)>*>*{white-space:nowrap}.table-vcenter>:not(caption)>*>*{vertical-align:middle}.table-center>:not(caption)>*>*{text-align:center}.td-truncate{max-width:1px;width:100%}.table-mobile{display:block}.table-mobile thead{display:none}.table-mobile tbody,.table-mobile tr{display:flex;flex-direction:column}.table-mobile td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile .btn{display:block}@media (max-width:575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-sm td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media (max-width:767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-md td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media (max-width:991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-lg td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media (max-width:1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-xl td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media (max-width:1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-xxl td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}.table-sort{background:inherit;border:0;color:inherit;display:block;font:inherit;letter-spacing:inherit;margin:-.5rem -.75rem;padding:.5rem .75rem;text-align:inherit;text-transform:inherit;transition:color .3s;width:100%}@media (prefers-reduced-motion:reduce){.table-sort{transition:none}}.table-sort.asc,.table-sort.desc,.table-sort:hover{color:var(--tblr-body-color)}.table-sort:after{background:currentColor;content:"";display:inline-flex;height:1rem;margin-right:.25rem;-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m5 7 3-3 3 3M5 10l3 3 3-3'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m5 7 3-3 3 3M5 10l3 3 3-3'/%3E%3C/svg%3E");vertical-align:bottom;width:1rem}.table-sort.asc:after{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 10 3-3 3 3'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 10 3-3 3 3'/%3E%3C/svg%3E")}.table-sort.desc:after{-webkit-mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 7 3 3 3-3'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 7 3 3 3-3'/%3E%3C/svg%3E")}.table-borderless thead th{background:transparent}.tag{--tblr-tag-height:1.5rem;align-items:center;background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);display:inline-flex;gap:.5rem;height:var(--tblr-tag-height);padding:0 .5rem}.tag .btn-close{font-size:.5rem;height:1rem;margin-left:-.25rem;margin-right:-.125rem;padding:0;width:1rem}.tag-badge{--tblr-badge-font-size:0.625rem;--tblr-badge-padding-x:.25rem;--tblr-badge-padding-y:.125rem;margin-left:-.25rem}.tag-avatar,.tag-check,.tag-flag,.tag-icon,.tag-payment{margin-right:-.25rem}.tag-icon{color:var(--tblr-secondary);margin-left:-.125rem}.tag-check,.tag-icon{height:1rem;width:1rem}.tag-check{background-size:1rem}.tags-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.toast{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:0 2px 4px 0 rgba(24,36,51,.04)}.toast .toast-header{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toast button[data-bs-dismiss=toast]{outline:none}.toast-primary{--tblr-toast-color:#066fd1}.toast-secondary{--tblr-toast-color:#6c7a91}.toast-success{--tblr-toast-color:#2fb344}.toast-info{--tblr-toast-color:#4299e1}.toast-warning{--tblr-toast-color:#f76707}.toast-danger{--tblr-toast-color:#d63939}.toast-light{--tblr-toast-color:#f6f8fb}.toast-dark{--tblr-toast-color:#182433}.toast-muted{--tblr-toast-color:#6c7a91}.toast-blue{--tblr-toast-color:#066fd1}.toast-azure{--tblr-toast-color:#4299e1}.toast-indigo{--tblr-toast-color:#4263eb}.toast-purple{--tblr-toast-color:#ae3ec9}.toast-pink{--tblr-toast-color:#d6336c}.toast-red{--tblr-toast-color:#d63939}.toast-orange{--tblr-toast-color:#f76707}.toast-yellow{--tblr-toast-color:#f59f00}.toast-lime{--tblr-toast-color:#74b816}.toast-green{--tblr-toast-color:#2fb344}.toast-teal{--tblr-toast-color:#0ca678}.toast-cyan{--tblr-toast-color:#17a2b8}.toast-x{--tblr-toast-color:#000}.toast-facebook{--tblr-toast-color:#1877f2}.toast-twitter{--tblr-toast-color:#1da1f2}.toast-linkedin{--tblr-toast-color:#0a66c2}.toast-google{--tblr-toast-color:#dc4e41}.toast-youtube{--tblr-toast-color:red}.toast-vimeo{--tblr-toast-color:#1ab7ea}.toast-dribbble{--tblr-toast-color:#ea4c89}.toast-github{--tblr-toast-color:#181717}.toast-instagram{--tblr-toast-color:#e4405f}.toast-pinterest{--tblr-toast-color:#bd081c}.toast-vk{--tblr-toast-color:#6383a8}.toast-rss{--tblr-toast-color:orange}.toast-flickr{--tblr-toast-color:#0063dc}.toast-bitbucket{--tblr-toast-color:#0052cc}.toast-tabler{--tblr-toast-color:#066fd1}.toolbar{display:flex;flex-shrink:0;flex-wrap:nowrap;margin:0 -.5rem}.toolbar>*{margin:0 .5rem}.tracking{--tblr-tracking-height:1.5rem;--tblr-tracking-gap-width:0.125rem;--tblr-tracking-block-border-radius:var(--tblr-border-radius);display:flex;gap:var(--tblr-tracking-gap-width)}.tracking-squares{--tblr-tracking-block-border-radius:var(--tblr-border-radius-sm)}.tracking-squares .tracking-block{height:auto}.tracking-squares .tracking-block:before{content:"";display:block;padding-top:100%}.tracking-block{background:var(--tblr-border-color);border-radius:var(--tblr-tracking-block-border-radius);flex:1;height:var(--tblr-tracking-height);min-width:.25rem}.timeline{--tblr-timeline-icon-size:2.5rem;list-style:none;padding:0}.timeline,.timeline-event{position:relative}.timeline-event:not(:last-child){margin-bottom:var(--tblr-page-padding)}.timeline-event:not(:last-child):before{background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius);bottom:calc(var(--tblr-page-padding)*-1);content:"";position:absolute;right:calc(var(--tblr-timeline-icon-size)/2);top:var(--tblr-timeline-icon-size);width:var(--tblr-border-width)}.timeline-event-icon{align-items:center;background:var(--tblr-gray-200);border-radius:var(--tblr-border-radius);color:var(--tblr-secondary);display:flex;height:var(--tblr-timeline-icon-size,2.5rem);justify-content:center;position:absolute;width:var(--tblr-timeline-icon-size,2.5rem);z-index:5}.timeline-event-card{margin-right:calc(var(--tblr-timeline-icon-size, 2.5rem) + var(--tblr-page-padding))}.timeline-simple .timeline-event-icon{display:none}.timeline-simple .timeline-event-card{margin-right:0}.hr-text{align-items:center;color:var(--tblr-secondary);display:flex;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);height:1px;letter-spacing:.04em;line-height:1rem;margin:2rem 0;text-transform:uppercase}.hr-text:after,.hr-text:before{background-color:var(--tblr-border-color);flex:1 1 auto;height:1px}.hr-text:before{content:"";margin-left:.5rem}.hr-text:after{content:"";margin-right:.5rem}.hr-text>:first-child{color:var(--tblr-secondary);padding-left:.5rem;padding-right:0}.hr-text.hr-text-left:before{content:none}.hr-text.hr-text-left>:first-child{padding-left:.5rem;padding-right:.5rem}.hr-text.hr-text-right:before{content:""}.hr-text.hr-text-right:after{content:none}.hr-text.hr-text-right>:first-child{padding-left:0;padding-right:.5rem}.card>.hr-text{margin:0}.hr-text-spaceless{margin:-.5rem 0}.lead{line-height:1.4}a{-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto}.h1 a,.h1 a:hover,.h2 a,.h2 a:hover,.h3 a,.h3 a:hover,.h4 a,.h4 a:hover,.h5 a,.h5 a:hover,.h6 a,.h6 a:hover,h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{color:inherit}.h1,h1{font-size:var(--tblr-font-size-h1);line-height:var(--tblr-line-height-h1)}.h2,h2{font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2)}.h3,h3{font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-h3)}.h4,h4{font-size:var(--tblr-font-size-h4);line-height:var(--tblr-line-height-h4)}.h5,h5{font-size:var(--tblr-font-size-h5);line-height:var(--tblr-line-height-h5)}.h6,h6{font-size:var(--tblr-font-size-h6);line-height:var(--tblr-line-height-h6)}.strong,b,strong{font-weight:var(--tblr-font-weight-bold)}blockquote{border-right:2px var(--tblr-border-style) var(--tblr-border-color);padding-right:1rem}blockquote p{margin-bottom:1rem}blockquote cite{display:block;text-align:left}blockquote cite:before{content:"— "}ol,ul{padding-right:1.5rem}.hr,hr{margin:2rem 0}dl dd:last-child{margin-bottom:0}pre{background:var(--tblr-bg-surface-dark);border-radius:var(--tblr-border-radius);color:var(--tblr-light);padding:1rem}pre code{background:transparent}code{background:var(--tblr-code-bg);border-radius:var(--tblr-border-radius);padding:2px 4px}.kbd,kbd{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-sizing:border-box;display:inline-block;font-size:var(--tblr-font-size-h5);font-weight:var(--tblr-font-weight-medium);line-height:1;max-width:100%;vertical-align:baseline}img,svg{height:auto;max-width:100%}.list-unstyled{margin-right:0}::-moz-selection{background-color:rgba(var(--tblr-primary-rgb),.16)}::selection{background-color:rgba(var(--tblr-primary-rgb),.16)}[class*=" link-"].disabled,[class^=link-].disabled{color:var(--tblr-disabled-color)!important;pointer-events:none}.subheader{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.chart{display:block;min-height:10rem}.chart text{font-family:inherit}.chart-sm{height:2.5rem}.chart-lg{height:15rem}.chart-square{height:5.75rem}.chart-sparkline{height:2.5rem;line-height:1;min-height:0!important;position:relative;width:4rem}.chart-sparkline-sm{height:1.5rem}.chart-sparkline-square{width:2.5rem}.chart-sparkline-wide{width:6rem}.chart-sparkline-label{align-items:center;bottom:0;display:flex;font-size:.625rem;justify-content:center;left:0;position:absolute;right:0;top:0}.chart-sparkline-label .icon{font-size:1rem;height:1rem;width:1rem}.offcanvas-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)}.offcanvas-footer{padding:1.5rem}.offcanvas-title{font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem}.offcanvas-narrow{width:20rem}.chat-bubbles{display:flex;flex-direction:column;gap:1rem}.chat-bubble{background:var(--tblr-bg-surface-secondary);border-radius:var(--tblr-border-radius-lg);padding:1rem;position:relative}.chat-bubble-me{background-color:var(--tblr-primary-lt);box-shadow:none}.chat-bubble-title{margin-bottom:.25rem}.chat-bubble-author{font-weight:600}.chat-bubble-date{color:var(--tblr-secondary)}.chat-bubble-body>:last-child{margin-bottom:0}.bg-white-overlay{background-color:rgba(246,248,251,.24);color:#fff}.bg-dark-overlay{background-color:rgba(24,36,51,.24);color:#fff}.bg-cover{background-position:50%;background-repeat:no-repeat;background-size:cover}.bg-primary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-primary-rgb),var(--tblr-bg-opacity))!important}.bg-primary-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-primary-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.border-primary{border-color:#066fd1!important}.bg-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-rgb),var(--tblr-bg-opacity))!important}.bg-secondary-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-secondary-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.border-secondary{border-color:#6c7a91!important}.bg-success{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-success-rgb),var(--tblr-bg-opacity))!important}.bg-success-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-success-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.border-success{border-color:#2fb344!important}.bg-info{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-info-rgb),var(--tblr-bg-opacity))!important}.bg-info-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-info-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.border-info{border-color:#4299e1!important}.bg-warning{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-warning-rgb),var(--tblr-bg-opacity))!important}.bg-warning-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-warning-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.border-warning{border-color:#f76707!important}.bg-danger{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-danger-rgb),var(--tblr-bg-opacity))!important}.bg-danger-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-danger-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.border-danger{border-color:#d63939!important}.bg-light{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-light-rgb),var(--tblr-bg-opacity))!important}.bg-light-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-light-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.border-light{border-color:#f6f8fb!important}.bg-dark{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-dark-rgb),var(--tblr-bg-opacity))!important}.bg-dark-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-dark-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.border-dark{border-color:#182433!important}.bg-muted{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-muted-rgb),var(--tblr-bg-opacity))!important}.bg-muted-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-muted-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important}.border-muted{border-color:#6c7a91!important}.bg-blue{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-blue-rgb),var(--tblr-bg-opacity))!important}.bg-blue-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-blue-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.border-blue{border-color:#066fd1!important}.bg-azure{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-azure-rgb),var(--tblr-bg-opacity))!important}.bg-azure-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-azure-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.border-azure{border-color:#4299e1!important}.bg-indigo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-indigo-rgb),var(--tblr-bg-opacity))!important}.bg-indigo-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-indigo-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.border-indigo{border-color:#4263eb!important}.bg-purple{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-purple-rgb),var(--tblr-bg-opacity))!important}.bg-purple-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-purple-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.border-purple{border-color:#ae3ec9!important}.bg-pink{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-pink-rgb),var(--tblr-bg-opacity))!important}.bg-pink-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-pink-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.border-pink{border-color:#d6336c!important}.bg-red{background-color:rgba(var(--tblr-red-rgb),var(--tblr-bg-opacity))!important}.bg-red,.bg-red-lt{--tblr-bg-opacity:1}.bg-red-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-red-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.border-red{border-color:#d63939!important}.bg-orange{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-orange-rgb),var(--tblr-bg-opacity))!important}.bg-orange-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-orange-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.border-orange{border-color:#f76707!important}.bg-yellow{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-yellow-rgb),var(--tblr-bg-opacity))!important}.bg-yellow-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-yellow-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.border-yellow{border-color:#f59f00!important}.bg-lime{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-lime-rgb),var(--tblr-bg-opacity))!important}.bg-lime-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-lime-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.border-lime{border-color:#74b816!important}.bg-green{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-green-rgb),var(--tblr-bg-opacity))!important}.bg-green-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-green-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.border-green{border-color:#2fb344!important}.bg-teal{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-teal-rgb),var(--tblr-bg-opacity))!important}.bg-teal-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-teal-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.border-teal{border-color:#0ca678!important}.bg-cyan{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-cyan-rgb),var(--tblr-bg-opacity))!important}.bg-cyan-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-cyan-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.border-cyan{border-color:#17a2b8!important}.bg-x{background-color:rgba(var(--tblr-x-rgb),var(--tblr-bg-opacity))!important}.bg-x,.bg-x-lt{--tblr-bg-opacity:1}.bg-x-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-x-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-x-rgb),var(--tblr-text-opacity))!important}.border-x{border-color:#000!important}.bg-facebook{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-facebook-rgb),var(--tblr-bg-opacity))!important}.bg-facebook-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-facebook-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important}.border-facebook{border-color:#1877f2!important}.bg-twitter{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-twitter-rgb),var(--tblr-bg-opacity))!important}.bg-twitter-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-twitter-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important}.border-twitter{border-color:#1da1f2!important}.bg-linkedin{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity))!important}.bg-linkedin-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-linkedin-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important}.border-linkedin{border-color:#0a66c2!important}.bg-google{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-google-rgb),var(--tblr-bg-opacity))!important}.bg-google-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-google-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important}.border-google{border-color:#dc4e41!important}.bg-youtube{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-youtube-rgb),var(--tblr-bg-opacity))!important}.bg-youtube-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-youtube-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important}.border-youtube{border-color:red!important}.bg-vimeo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity))!important}.bg-vimeo-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-vimeo-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important}.border-vimeo{border-color:#1ab7ea!important}.bg-dribbble{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity))!important}.bg-dribbble-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-dribbble-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important}.border-dribbble{border-color:#ea4c89!important}.bg-github{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-github-rgb),var(--tblr-bg-opacity))!important}.bg-github-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-github-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important}.border-github{border-color:#181717!important}.bg-instagram{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-instagram-rgb),var(--tblr-bg-opacity))!important}.bg-instagram-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-instagram-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important}.border-instagram{border-color:#e4405f!important}.bg-pinterest{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity))!important}.bg-pinterest-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-pinterest-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important}.border-pinterest{border-color:#bd081c!important}.bg-vk{background-color:rgba(var(--tblr-vk-rgb),var(--tblr-bg-opacity))!important}.bg-vk,.bg-vk-lt{--tblr-bg-opacity:1}.bg-vk-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-vk-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important}.border-vk{border-color:#6383a8!important}.bg-rss{background-color:rgba(var(--tblr-rss-rgb),var(--tblr-bg-opacity))!important}.bg-rss,.bg-rss-lt{--tblr-bg-opacity:1}.bg-rss-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-rss-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important}.border-rss{border-color:orange!important}.bg-flickr{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-flickr-rgb),var(--tblr-bg-opacity))!important}.bg-flickr-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-flickr-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important}.border-flickr{border-color:#0063dc!important}.bg-bitbucket{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity))!important}.bg-bitbucket-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-bitbucket-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important}.border-bitbucket{border-color:#0052cc!important}.bg-tabler{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tabler-rgb),var(--tblr-bg-opacity))!important}.bg-tabler-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-tabler-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important}.border-tabler{border-color:#066fd1!important}.bg-white{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-white-rgb),var(--tblr-bg-opacity))!important}.bg-white-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-white-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.border-white{border-color:#fff!important}.text-primary{--tblr-text-opacity:1;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.text-primary-fg{color:var(--tblr-primary-fg)!important}.text-secondary{--tblr-text-opacity:1;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.text-secondary-fg{color:var(--tblr-secondary-fg)!important}.text-success{--tblr-text-opacity:1;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.text-success-fg{color:var(--tblr-success-fg)!important}.text-info{--tblr-text-opacity:1;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.text-info-fg{color:var(--tblr-info-fg)!important}.text-warning{--tblr-text-opacity:1;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.text-warning-fg{color:var(--tblr-warning-fg)!important}.text-danger{--tblr-text-opacity:1;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.text-danger-fg{color:var(--tblr-danger-fg)!important}.text-light{--tblr-text-opacity:1;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.text-light-fg{color:var(--tblr-light-fg)!important}.text-dark{--tblr-text-opacity:1;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.text-dark-fg{color:var(--tblr-dark-fg)!important}.text-muted{--tblr-text-opacity:1;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important}.text-muted-fg{color:var(--tblr-muted-fg)!important}.text-blue{--tblr-text-opacity:1;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.text-blue-fg{color:var(--tblr-blue-fg)!important}.text-azure{--tblr-text-opacity:1;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.text-azure-fg{color:var(--tblr-azure-fg)!important}.text-indigo{--tblr-text-opacity:1;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.text-indigo-fg{color:var(--tblr-indigo-fg)!important}.text-purple{--tblr-text-opacity:1;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.text-purple-fg{color:var(--tblr-purple-fg)!important}.text-pink{--tblr-text-opacity:1;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.text-pink-fg{color:var(--tblr-pink-fg)!important}.text-red{--tblr-text-opacity:1;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.text-red-fg{color:var(--tblr-red-fg)!important}.text-orange{--tblr-text-opacity:1;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.text-orange-fg{color:var(--tblr-orange-fg)!important}.text-yellow{--tblr-text-opacity:1;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.text-yellow-fg{color:var(--tblr-yellow-fg)!important}.text-lime{--tblr-text-opacity:1;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.text-lime-fg{color:var(--tblr-lime-fg)!important}.text-green{--tblr-text-opacity:1;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.text-green-fg{color:var(--tblr-green-fg)!important}.text-teal{--tblr-text-opacity:1;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.text-teal-fg{color:var(--tblr-teal-fg)!important}.text-cyan{--tblr-text-opacity:1;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.text-cyan-fg{color:var(--tblr-cyan-fg)!important}.text-x{--tblr-text-opacity:1;color:rgba(var(--tblr-x-rgb),var(--tblr-text-opacity))!important}.text-x-fg{color:var(--tblr-x-fg)!important}.text-facebook{--tblr-text-opacity:1;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important}.text-facebook-fg{color:var(--tblr-facebook-fg)!important}.text-twitter{--tblr-text-opacity:1;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important}.text-twitter-fg{color:var(--tblr-twitter-fg)!important}.text-linkedin{--tblr-text-opacity:1;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important}.text-linkedin-fg{color:var(--tblr-linkedin-fg)!important}.text-google{--tblr-text-opacity:1;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important}.text-google-fg{color:var(--tblr-google-fg)!important}.text-youtube{--tblr-text-opacity:1;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important}.text-youtube-fg{color:var(--tblr-youtube-fg)!important}.text-vimeo{--tblr-text-opacity:1;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important}.text-vimeo-fg{color:var(--tblr-vimeo-fg)!important}.text-dribbble{--tblr-text-opacity:1;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important}.text-dribbble-fg{color:var(--tblr-dribbble-fg)!important}.text-github{--tblr-text-opacity:1;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important}.text-github-fg{color:var(--tblr-github-fg)!important}.text-instagram{--tblr-text-opacity:1;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important}.text-instagram-fg{color:var(--tblr-instagram-fg)!important}.text-pinterest{--tblr-text-opacity:1;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important}.text-pinterest-fg{color:var(--tblr-pinterest-fg)!important}.text-vk{--tblr-text-opacity:1;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important}.text-vk-fg{color:var(--tblr-vk-fg)!important}.text-rss{--tblr-text-opacity:1;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important}.text-rss-fg{color:var(--tblr-rss-fg)!important}.text-flickr{--tblr-text-opacity:1;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important}.text-flickr-fg{color:var(--tblr-flickr-fg)!important}.text-bitbucket{--tblr-text-opacity:1;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important}.text-bitbucket-fg{color:var(--tblr-bitbucket-fg)!important}.text-tabler{--tblr-text-opacity:1;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important}.text-tabler-fg{color:var(--tblr-tabler-fg)!important}.bg-gray-50{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-50-rgb),var(--tblr-bg-opacity))!important}.text-gray-50-fg{color:#182433!important}.bg-gray-100{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-100-rgb),var(--tblr-bg-opacity))!important}.text-gray-100-fg{color:#182433!important}.bg-gray-200{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-200-rgb),var(--tblr-bg-opacity))!important}.text-gray-200-fg{color:#182433!important}.bg-gray-300{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-300-rgb),var(--tblr-bg-opacity))!important}.text-gray-300-fg{color:#f6f8fb!important}.bg-gray-400{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-400-rgb),var(--tblr-bg-opacity))!important}.text-gray-400-fg{color:#f6f8fb!important}.bg-gray-500{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-500-rgb),var(--tblr-bg-opacity))!important}.text-gray-500-fg{color:#f6f8fb!important}.bg-gray-600{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-600-rgb),var(--tblr-bg-opacity))!important}.text-gray-600-fg{color:#f6f8fb!important}.bg-gray-700{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-700-rgb),var(--tblr-bg-opacity))!important}.text-gray-700-fg{color:#f6f8fb!important}.bg-gray-800{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-800-rgb),var(--tblr-bg-opacity))!important}.text-gray-800-fg{color:#f6f8fb!important}.bg-gray-900{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-900-rgb),var(--tblr-bg-opacity))!important}.text-gray-900-fg{color:#f6f8fb!important}.scrollable{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.scrollable.hover{overflow-y:hidden}.scrollable.hover>*{margin-top:-1px}.scrollable.hover:active,.scrollable.hover:focus,.scrollable.hover:hover{overflow:visible;overflow-y:auto}.touch .scrollable{overflow-y:auto!important}.scroll-x,.scroll-y{overflow:hidden;-webkit-overflow-scrolling:touch}.scroll-y{overflow-y:auto}.scroll-x{overflow-x:auto}.no-scroll{overflow:hidden}.w-0{width:0!important}.h-0{height:0!important}.w-1{width:.25rem!important}.h-1{height:.25rem!important}.w-2{width:.5rem!important}.h-2{height:.5rem!important}.w-3{width:1rem!important}.h-3{height:1rem!important}.w-4{width:1.5rem!important}.h-4{height:1.5rem!important}.w-5{width:2rem!important}.h-5{height:2rem!important}.w-6{width:3rem!important}.h-6{height:3rem!important}.w-7{width:5rem!important}.h-7{height:5rem!important}.w-8{width:8rem!important}.h-8{height:8rem!important}.w-auto{width:auto!important}.h-auto{height:auto!important}.w-px{width:1px!important}.h-px{height:1px!important}.w-full{width:100%!important}.h-full{height:100%!important}.opacity-0{opacity:0!important}.opacity-5{opacity:.05!important}.opacity-10{opacity:.1!important}.opacity-15{opacity:.15!important}.opacity-20{opacity:.2!important}.opacity-25{opacity:.25!important}.opacity-30{opacity:.3!important}.opacity-35{opacity:.35!important}.opacity-40{opacity:.4!important}.opacity-45{opacity:.45!important}.opacity-50{opacity:.5!important}.opacity-55{opacity:.55!important}.opacity-60{opacity:.6!important}.opacity-65{opacity:.65!important}.opacity-70{opacity:.7!important}.opacity-75{opacity:.75!important}.opacity-80{opacity:.8!important}.opacity-85{opacity:.85!important}.opacity-90{opacity:.9!important}.opacity-95{opacity:.95!important}.opacity-100{opacity:1!important}.hover-shadow-sm:hover{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.hover-shadow:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0!important}.hover-shadow-lg:hover{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.hover-shadow-none:hover{box-shadow:none!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.noUi-target,.noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing:border-box;touch-action:none;-webkit-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none}.noUi-target{position:relative}.noUi-base,.noUi-connects{height:100%;position:relative;width:100%;z-index:1}.noUi-connects{overflow:hidden;z-index:0}.noUi-connect,.noUi-origin{height:100%;left:0;position:absolute;top:0;-ms-transform-origin:100% 0;-webkit-transform-origin:100% 0;transform-origin:100% 0;-webkit-transform-style:preserve-3d;transform-style:flat;width:100%;will-change:transform;z-index:1}.noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:auto;right:0}.noUi-vertical .noUi-origin{top:-100%;width:0}.noUi-horizontal .noUi-origin{height:0}.noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.noUi-touch-area{height:100%;width:100%}.noUi-state-tap .noUi-connect,.noUi-state-tap .noUi-origin{transition:transform .3s}.noUi-state-drag *{cursor:inherit!important}.noUi-horizontal{height:18px}.noUi-horizontal .noUi-handle{height:28px;left:-17px;top:-6px;width:34px}.noUi-vertical{width:18px}.noUi-vertical .noUi-handle{bottom:-17px;height:34px;left:-6px;width:28px}.noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:auto;right:-17px}.noUi-target{background:#fafafa;border:1px solid #d3d3d3;border-radius:4px;box-shadow:inset 0 1px 1px #f0f0f0,0 3px 6px -5px #bbb}.noUi-connects{border-radius:3px}.noUi-connect{background:#3fb8af}.noUi-draggable{cursor:ew-resize}.noUi-vertical .noUi-draggable{cursor:ns-resize}.noUi-handle{background:#fff;border:1px solid #d9d9d9;border-radius:3px;box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ebebeb,0 3px 6px -3px #bbb;cursor:default}.noUi-active{box-shadow:inset 0 0 1px #fff,inset 0 1px 7px #ddd,0 3px 6px -3px #bbb}.noUi-handle:after,.noUi-handle:before{background:#e8e7e6;content:"";display:block;height:14px;position:absolute;right:14px;top:6px;width:1px}.noUi-handle:after{right:17px}.noUi-vertical .noUi-handle:after,.noUi-vertical .noUi-handle:before{height:1px;right:6px;top:14px;width:14px}.noUi-vertical .noUi-handle:after{top:17px}[disabled] .noUi-connect{background:#b8b8b8}[disabled] .noUi-handle,[disabled].noUi-handle,[disabled].noUi-target{cursor:not-allowed}.noUi-pips,.noUi-pips *{box-sizing:border-box}.noUi-pips{color:#999;position:absolute}.noUi-value{position:absolute;text-align:center;white-space:nowrap}.noUi-value-sub{color:#ccc;font-size:10px}.noUi-marker{background:#ccc;position:absolute}.noUi-marker-large,.noUi-marker-sub{background:#aaa}.noUi-pips-horizontal{height:80px;padding:10px 0;right:0;top:100%;width:100%}.noUi-value-horizontal{transform:translate(50%,50%)}.noUi-rtl .noUi-value-horizontal{transform:translate(-50%,50%)}.noUi-marker-horizontal.noUi-marker{height:5px;margin-right:-1px;width:2px}.noUi-marker-horizontal.noUi-marker-sub{height:10px}.noUi-marker-horizontal.noUi-marker-large{height:15px}.noUi-pips-vertical{height:100%;padding:0 10px;right:100%;top:0}.noUi-value-vertical{padding-right:25px;transform:translateY(-50%)}.noUi-rtl .noUi-value-vertical{transform:translateY(50%)}.noUi-marker-vertical.noUi-marker{height:2px;margin-top:-1px;width:5px}.noUi-marker-vertical.noUi-marker-sub{width:10px}.noUi-marker-vertical.noUi-marker-large{width:15px}.noUi-tooltip{background:#fff;border:1px solid #d9d9d9;border-radius:3px;color:#000;display:block;padding:5px;position:absolute;text-align:center;white-space:nowrap}.noUi-horizontal .noUi-tooltip{bottom:120%;right:50%;transform:translate(50%)}.noUi-vertical .noUi-tooltip{left:120%;top:50%;transform:translateY(-50%)}.noUi-horizontal .noUi-origin>.noUi-tooltip{bottom:10px;right:auto;transform:translate(-50%)}.noUi-vertical .noUi-origin>.noUi-tooltip{left:28px;top:auto;transform:translateY(-18px)}.noUi-target{background:none;border:0;border-radius:0;box-shadow:none;color:var(--tblr-primary)}.noUi-horizontal{height:1.25rem;padding:.5rem 0}.noUi-base{background:var(--tblr-border-color);border-radius:1rem}.noUi-handle{background:currentColor;border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;outline:0;width:1rem}.noUi-handle:after,.noUi-handle:before{content:none}.noUi-horizontal .noUi-handle{height:1rem;left:-.5rem;margin:1px 0 0 1px;top:-.5rem;width:1rem}.noUi-handle.noUi-active,.noUi-handle:focus{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.noUi-connect{background:currentColor}.litepicker{--litepicker-month-weekday-color:var(--tblr-secondary);--litepicker-button-prev-month-color:var(--tblr-secondary);--litepicker-button-next-month-color:var(--tblr-secondary);--litepicker-button-prev-month-color-hover:var(--tblr-primary);--litepicker-button-next-month-color-hover:var(--tblr-primary);--litepicker-day-color:var(--tblr-body-color);--litepicker-day-color-hover:var(--tblr-primary);--litepicker-is-end-color-bg:var(--tblr-primary);--litepicker-is-today-color:var(--tblr-primary);--litepicker-month-header-color:var(--tblr-body-color);--litepicker-container-months-color-bg:var(--tblr-bg-surface);font:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.litepicker svg{fill:none!important}.litepicker .container__main{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:none}.litepicker .container__months .month-item-name,.litepicker .container__months .month-item-year{font-weight:var(--tblr-font-weight-medium)!important}.litepicker .container__months .button-next-month,.litepicker .container__months .button-previous-month{cursor:pointer!important}.litepicker .container__months .month-item-weekdays-row>div{font-size:.75rem;padding:.5rem 0!important}.litepicker .container__days .day-item{cursor:pointer!important;padding:.5rem 0!important;transition:color .3s,background-color .3s,border-color .3s}@media (prefers-reduced-motion:reduce){.litepicker .container__days .day-item{transition:none}}.datepicker-inline .litepicker{box-shadow:var(--tblr-box-shadow-input)}.datepicker-inline .litepicker .container__months{background-color:var(--tblr-bg-forms);box-shadow:none}.ts-control{border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:none;box-sizing:border-box;flex-wrap:wrap;overflow:hidden;padding:.5625rem .75rem;position:relative;width:100%;z-index:1}.ts-wrapper.multi.has-items .ts-control{padding:calc(.5625rem - 1px) .75rem calc(.5625rem - 4px)}.full .ts-control{background-color:var(--tblr-bg-forms)}.disabled .ts-control,.disabled .ts-control *{cursor:default!important}.focus .ts-control{box-shadow:none}.ts-control>*{display:inline-block;vertical-align:baseline}.ts-wrapper.multi .ts-control>div{background:#efefef;border:0 solid #dce1e7;color:#182433;cursor:pointer;margin:0 0 3px 3px;padding:1px 5px}.ts-wrapper.multi .ts-control>div.active{background:#066fd1;border:0 solid transparent;color:#fff}.ts-wrapper.multi.disabled .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div.active{background:#fff;border:0 solid #fff;color:#727272}.ts-control>input{background:none!important;border:0!important;box-shadow:none!important;display:inline-block!important;flex:1 1 auto;line-height:inherit!important;margin:0!important;max-height:none!important;max-width:100%!important;min-height:0!important;min-width:7rem;padding:0!important;text-indent:0!important;-webkit-user-select:auto!important;-moz-user-select:auto!important;-ms-user-select:auto!important;user-select:auto!important}.ts-control>input::-ms-clear{display:none}.ts-control>input:focus{outline:none!important}.has-items .ts-control>input{margin:0 4px!important}.ts-control.rtl{text-align:left}.ts-control.rtl.single .ts-control:after{left:auto;right:calc(.75rem + 5px)}.ts-control.rtl .ts-control>input{margin:0 -2px 0 4px!important}.disabled .ts-control{background-color:var(--tblr-bg-surface-secondary);opacity:.5}.input-hidden .ts-control>input{opacity:0;position:absolute;right:-10000px}.ts-dropdown{background:#fff;border:1px solid #d0d0d0;border-radius:0 0 var(--tblr-border-radius) var(--tblr-border-radius);border-top:0;box-shadow:0 1px 3px rgba(0,0,0,.1);box-sizing:border-box;margin:.25rem 0 0;position:absolute;right:0;top:100%;width:100%;z-index:10}.ts-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.ts-dropdown [data-selectable] .highlight{background:rgba(255,237,40,.4);border-radius:1px}.ts-dropdown .create,.ts-dropdown .no-results,.ts-dropdown .optgroup-header,.ts-dropdown .option{padding:3px .75rem}.ts-dropdown .option,.ts-dropdown [data-disabled],.ts-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.ts-dropdown [data-selectable].option{cursor:pointer;opacity:1}.ts-dropdown .optgroup:first-child .optgroup-header{border-top:0}.ts-dropdown .optgroup-header{background:var(--tblr-bg-surface);color:#49566c;cursor:default}.ts-dropdown .active{background-color:rgba(var(--tblr-secondary-rgb),.08);color:inherit}.ts-dropdown .active.create{color:inherit}.ts-dropdown .create{color:rgba(24,36,51,.5)}.ts-dropdown .spinner{display:inline-block;height:30px;margin:3px .75rem;width:30px}.ts-dropdown .spinner:after{animation:lds-dual-ring 1.2s linear infinite;border-color:#d0d0d0 transparent;border-radius:50%;border-style:solid;border-width:5px;content:" ";display:block;height:24px;margin:3px;width:24px}@keyframes lds-dual-ring{0%{transform:rotate(0deg)}to{transform:rotate(-1turn)}}.ts-dropdown-content{max-height:200px;overflow:hidden auto;scroll-behavior:smooth}.ts-wrapper.plugin-drag_drop .ts-dragging{color:transparent!important}.ts-wrapper.plugin-drag_drop .ts-dragging>*{visibility:hidden!important}.plugin-checkbox_options:not(.rtl) .option input{margin-left:.5rem}.plugin-checkbox_options.rtl .option input{margin-right:.5rem}.plugin-clear_button{--ts-pr-clear-button:1em}.plugin-clear_button .clear-button{background:transparent!important;cursor:pointer;left:calc(.75rem - 5px);margin-left:0!important;opacity:0;position:absolute;top:50%;transform:translateY(-50%);transition:opacity .5s}.plugin-clear_button.form-select .clear-button,.plugin-clear_button.single .clear-button{left:max(var(--ts-pr-caret),.75rem)}.plugin-clear_button.focus.has-items .clear-button,.plugin-clear_button:not(.disabled):hover.has-items .clear-button{opacity:1}.ts-wrapper .dropdown-header{background:color-mix(#fff,#d0d0d0,85%);border-bottom:1px solid #d0d0d0;border-radius:var(--tblr-border-radius) var(--tblr-border-radius) 0 0;padding:6px .75rem;position:relative}.ts-wrapper .dropdown-header-close{color:#182433;font-size:20px!important;left:.75rem;line-height:20px;margin-top:-12px;opacity:.4;position:absolute;top:50%}.ts-wrapper .dropdown-header-close:hover{color:#000}.plugin-dropdown_input.focus.dropdown-active .ts-control{border:1px solid var(--tblr-border-color);box-shadow:none;box-shadow:var(--tblr-box-shadow-input)}.plugin-dropdown_input .dropdown-input{background:transparent;border:solid #d0d0d0;border-width:0 0 1px;box-shadow:none;display:block;padding:.5625rem .75rem;width:100%}.plugin-dropdown_input.focus .ts-dropdown .dropdown-input{border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.plugin-dropdown_input .items-placeholder{border:0!important;box-shadow:none!important;width:100%}.plugin-dropdown_input.dropdown-active .items-placeholder,.plugin-dropdown_input.has-items .items-placeholder{display:none!important}.ts-wrapper.plugin-input_autogrow.has-items .ts-control>input{min-width:0}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input{flex:none;min-width:4px}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::-webkit-input-placeholder{color:transparent}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input:-ms-input-placeholder{color:transparent}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::-ms-input-placeholder{color:transparent}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::placeholder{color:transparent}.ts-dropdown.plugin-optgroup_columns .ts-dropdown-content{display:flex}.ts-dropdown.plugin-optgroup_columns .optgroup{border-left:1px solid #f2f2f2;border-top:0;flex-basis:0;flex-grow:1;min-width:0}.ts-dropdown.plugin-optgroup_columns .optgroup:last-child{border-left:0}.ts-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.ts-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0}.ts-wrapper.plugin-remove_button .item{align-items:center;display:inline-flex}.ts-wrapper.plugin-remove_button .item .remove{border-radius:2px 0 0 2px;box-sizing:border-box;color:inherit;display:inline-block;padding:0 5px;text-decoration:none;vertical-align:middle}.ts-wrapper.plugin-remove_button .item .remove:hover{background:rgba(0,0,0,.05)}.ts-wrapper.plugin-remove_button.disabled .item .remove:hover{background:none}.ts-wrapper.plugin-remove_button .remove-single{font-size:23px;left:0;position:absolute;top:0}.ts-wrapper.plugin-remove_button:not(.rtl) .item{padding-left:0!important}.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove{border-right:1px solid #dce1e7;margin-right:5px}.ts-wrapper.plugin-remove_button:not(.rtl) .item.active .remove{border-right-color:transparent}.ts-wrapper.plugin-remove_button:not(.rtl).disabled .item .remove{border-right-color:#fff}.ts-wrapper.plugin-remove_button.rtl .item{padding-right:0!important}.ts-wrapper.plugin-remove_button.rtl .item .remove{border-left:1px solid #dce1e7;margin-left:5px}.ts-wrapper.plugin-remove_button.rtl .item.active .remove{border-left-color:transparent}.ts-wrapper.plugin-remove_button.rtl.disabled .item .remove{border-left-color:#fff}:root{--ts-pr-clear-button:0;--ts-pr-caret:0;--ts-pr-min:.75rem}.ts-wrapper.single .ts-control,.ts-wrapper.single .ts-control input{cursor:pointer}.ts-control:not(.rtl){padding-left:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-control.rtl{padding-right:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-wrapper{position:relative}.ts-control,.ts-control input,.ts-dropdown{color:#182433;font-family:inherit;font-size:inherit;line-height:1.4285714286}.ts-control,.ts-wrapper.single.input-active .ts-control{background:var(--tblr-bg-forms);cursor:text}.ts-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;-webkit-clip-path:inset(50%)!important;clip-path:inset(50%)!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.ts-dropdown,.ts-dropdown.form-control,.ts-dropdown.form-select{background:#fff;border:1px solid var(--tblr-border-color-translucent);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);height:auto;padding:0;z-index:1000}.ts-dropdown .optgroup-header{font-size:.765625rem;line-height:1.4285714286}.ts-dropdown .optgroup:first-child:before{display:none}.ts-dropdown .optgroup:before{border-top:1px solid var(--tblr-border-color-translucent);content:" ";display:block;height:0;margin:var(--tblr-spacer-2) 0;margin-left:-.75rem;margin-right:-.75rem;overflow:hidden}.ts-dropdown .create{padding-right:.75rem}.ts-dropdown-content{padding:5px 0}.ts-control{align-items:center;box-shadow:var(--tblr-box-shadow-input);display:flex;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.ts-control{transition:none}}.focus .ts-control{border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.ts-control .item{align-items:center;display:flex}.ts-wrapper.is-invalid,.was-validated .invalid,.was-validated :invalid+.ts-wrapper{border-color:var(--tblr-form-invalid-color)}.ts-wrapper.is-invalid:not(.single),.was-validated .invalid:not(.single),.was-validated :invalid+.ts-wrapper:not(.single){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:left calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-invalid.single,.was-validated .invalid.single,.was-validated :invalid+.ts-wrapper.single{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:left .75rem center,center left 2.25rem;background-repeat:no-repeat;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-invalid.focus .ts-control,.was-validated .invalid.focus .ts-control,.was-validated :invalid+.ts-wrapper.focus .ts-control{border-color:var(--tblr-form-invalid-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-form-invalid-color),.25)}.ts-wrapper.is-valid,.was-validated .valid,.was-validated :valid+.ts-wrapper{border-color:var(--tblr-form-valid-color)}.ts-wrapper.is-valid:not(.single),.was-validated .valid:not(.single),.was-validated :valid+.ts-wrapper:not(.single){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:left calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-valid.single,.was-validated .valid.single,.was-validated :valid+.ts-wrapper.single{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:left .75rem center,center left 2.25rem;background-repeat:no-repeat;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-valid.focus .ts-control,.was-validated .valid.focus .ts-control,.was-validated :valid+.ts-wrapper.focus .ts-control{border-color:var(--tblr-form-valid-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-form-valid-color),.25)}.ts-wrapper{display:flex;min-height:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2)}.input-group-sm>.ts-wrapper,.ts-wrapper.form-control-sm,.ts-wrapper.form-select-sm{min-height:calc(1.42857em + .25rem + var(--tblr-border-width)*2)}.input-group-sm>.ts-wrapper .ts-control,.ts-wrapper.form-control-sm .ts-control,.ts-wrapper.form-select-sm .ts-control{border-radius:var(--tblr-border-radius-sm);font-size:.75rem}.input-group-sm>.ts-wrapper.has-items .ts-control,.ts-wrapper.form-control-sm.has-items .ts-control,.ts-wrapper.form-select-sm.has-items .ts-control{font-size:.75rem;padding-bottom:0}.input-group-sm>.ts-wrapper.multi.has-items .ts-control,.ts-wrapper.form-control-sm.multi.has-items .ts-control,.ts-wrapper.form-select-sm.multi.has-items .ts-control{padding-top:calc(.71429em - .41071rem + var(--tblr-border-width)*2/2 - 2px)!important}.ts-wrapper.multi.has-items .ts-control{padding-right:calc(.75rem - 5px);--ts-pr-min:calc(0.75rem - 5px)}.ts-wrapper.multi .ts-control>div{border-radius:calc(var(--tblr-border-radius) - 1px)}.input-group-lg>.ts-wrapper,.ts-wrapper.form-control-lg,.ts-wrapper.form-select-lg{min-height:calc(1.42857em + 1rem + var(--tblr-border-width)*2)}.input-group-lg>.ts-wrapper .ts-control,.ts-wrapper.form-control-lg .ts-control,.ts-wrapper.form-select-lg .ts-control{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem}.ts-wrapper:not(.form-control,.form-select){background:none;border:none;box-shadow:none;height:auto;padding:0}.ts-wrapper:not(.form-control,.form-select).single .ts-control{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");background-position:left .75rem center;background-repeat:no-repeat;background-size:16px 12px}.ts-wrapper.form-select,.ts-wrapper.single{--ts-pr-caret:2.25rem}.ts-wrapper.form-control,.ts-wrapper.form-select{box-shadow:none;display:flex;height:auto;padding:0!important}.ts-wrapper.form-control .ts-control,.ts-wrapper.form-control.single.input-active .ts-control,.ts-wrapper.form-select .ts-control,.ts-wrapper.form-select.single.input-active .ts-control{border:none!important}.ts-wrapper.form-control:not(.disabled) .ts-control,.ts-wrapper.form-control:not(.disabled).single.input-active .ts-control,.ts-wrapper.form-select:not(.disabled) .ts-control,.ts-wrapper.form-select:not(.disabled).single.input-active .ts-control{background:transparent!important}.input-group>.ts-wrapper{flex-grow:1;width:1%}.input-group>.ts-wrapper:not(:nth-child(2))>.ts-control{border-bottom-right-radius:0;border-top-right-radius:0}.input-group>.ts-wrapper:not(:last-child)>.ts-control{border-bottom-left-radius:0;border-top-left-radius:0}:root{--ts-pr-clear-button:0rem;--ts-pr-caret:0rem}.ts-control,.ts-input{color:inherit}.ts-control .dropdown-menu{height:auto;width:100%}.ts-wrapper .form-control,.ts-wrapper .form-select,.ts-wrapper.form-control,.ts-wrapper.form-select{box-shadow:var(--tblr-box-shadow-input)}.ts-wrapper.is-invalid .ts-control,.ts-wrapper.is-valid .ts-control{--ts-pr-clear-button:1.5rem}.ts-dropdown{background:var(--tblr-bg-surface);box-shadow:var(--tblr-box-shadow-dropdown);color:var(--tblr-body-color)}.ts-dropdown .option{padding:.5rem .75rem}.ts-control,.ts-control input{color:var(--tblr-body-color)}.ts-control input::-webkit-input-placeholder{color:#8a97ab}.ts-control input:-ms-input-placeholder{color:#8a97ab}.ts-control input::-ms-input-placeholder{color:#8a97ab}.ts-control input::placeholder{color:#8a97ab}.ts-wrapper.multi .ts-control>div{background:var(--tblr-bg-surface-secondary);border:1px solid var(--tblr-border-color);color:var(--tblr-body-color)}.apexcharts-tooltip{background:var(--tblr-bg-surface-dark)!important;box-shadow:none!important;color:var(--tblr-light)!important;font-size:.765625rem!important;padding:.25rem!important}.apexcharts-tooltip-title{background:transparent!important;border:0!important;font-weight:var(--tblr-font-weight-bold);margin:0!important;padding:.25rem .5rem!important}.apexcharts-tooltip-y-group{padding:2px 0!important}.apexcharts-tooltip-series-group{padding:0 .5rem!important}.apexcharts-tooltip-marker{height:10px!important;width:10px!important}.apexcharts-text{fill:var(--tblr-body-color)!important}.apexcharts-gridline{stroke:var(--tblr-border-color)!important}.apexcharts-legend-text{color:inherit!important}.apexcharts-radialbar-track .apexcharts-radialbar-area{stroke:var(--tblr-border-color)!important}svg{touch-action:none}.jvm-zoomin,.jvm-zoomout,image,text{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.jvm-container{height:100%;overflow:hidden;position:relative;touch-action:none;width:100%}.jvm-tooltip{background-color:#5c5cff;border-radius:3px;box-shadow:-1px 2px 12px rgba(0,0,0,.2);color:#fff;display:none;font-family:sans-serif,Verdana;font-size:smaller;padding:3px 5px;position:absolute;white-space:nowrap}.jvm-tooltip.active{display:block}.jvm-zoom-btn{background-color:#292929;border-radius:3px;box-sizing:border-box;color:#fff;cursor:pointer;height:15px;line-height:10px;padding:3px;position:absolute;right:10px;width:15px}.jvm-zoom-btn.jvm-zoomout{top:30px}.jvm-zoom-btn.jvm-zoomin{top:10px}.jvm-series-container{left:15px;position:absolute}.jvm-series-container.jvm-series-h{bottom:15px}.jvm-series-container.jvm-series-v{top:15px}.jvm-series-container .jvm-legend{background-color:#fff;border:1px solid #e5e7eb;border-radius:.25rem;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);float:right;margin-right:.75rem;padding:.6rem}.jvm-series-container .jvm-legend .jvm-legend-title{border-bottom:1px solid #e5e7eb;line-height:1;margin-bottom:.575rem;padding-bottom:.5rem;text-align:right}.jvm-series-container .jvm-legend .jvm-legend-inner{overflow:hidden}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick{min-width:40px;overflow:hidden}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick:not(:first-child){margin-top:.575rem}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick .jvm-legend-tick-sample{border-radius:4px;float:right;height:16px;margin-left:.65rem;width:16px}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick .jvm-legend-tick-text{float:right;font-size:12px;text-align:center}.jvm-line[animation=true]{animation:jvm-line-animation 10s linear infinite forwards}@keyframes jvm-line-animation{0%{stroke-dashoffset:250}}.jvm-tooltip{background:#182433;box-shadow:var(--tblr-shadow-card);font-family:inherit;font-size:.75rem}.jvm-series-container .jvm-legend .jvm-legend-title{border-bottom:0;font-weight:var(--tblr-font-weight-medium)}.jvm-series-container .jvm-legend{background-color:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);min-width:8rem}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick{align-items:center;display:flex}.jvm-series-container .jvm-legend .jvm-legend-inner .jvm-legend-tick .jvm-legend-tick-sample{height:.75rem;width:.75rem}.jvm-zoom-btn{align-items:center;background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);box-shadow:var(--tblr-shadow-card);color:var(--tblr-body-color);display:flex;font-size:1rem;height:1.5rem;justify-content:center;line-height:1;padding:0;width:1.5rem}.jvm-zoom-btn.jvm-zoomout{top:2.5rem}.dropzone{border:var(--tblr-border-width) dashed var(--tblr-border-color);color:var(--tblr-secondary);padding:1rem}.dropzone.dz-drag-hover{background:rgba(var(--tblr-primary-rgb),.01);border:var(--tblr-border-width) dashed var(--tblr-primary);color:var(--tblr-primary)}.dropzone.dz-drag-hover .dz-message{opacity:1}.dropzone .dz-preview{margin:.5rem}.dropzone .dz-preview .dz-image{border-radius:var(--tblr-border-radius)}.dropzone .dz-preview .dz-success-mark{height:54px}.fslightbox-container{-webkit-backdrop-filter:blur(4px)!important;backdrop-filter:blur(4px)!important;background:rgba(24,36,51,.24)!important;font-family:inherit!important}.fslightbox-slide-number-container{color:inherit!important}.fslightbox-slash{background:currentColor!important}body{--plyr-color-main:var(--tblr-primary)}.tox-tinymce{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;border-radius:4px!important;font-family:var(--tblr-font-sans-serif)!important}.tox-toolbar__group{padding:0 .5rem}.tox .tox-toolbar__primary{background:transparent!important}.tox:not(.tox-tinymce-inline) .tox-editor-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;box-shadow:none!important;padding:0!important}.tox-tbtn{margin:0!important}.tox-statusbar{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important}.tox .tox-toolbar-overlord,.tox:not(.tox-tinymce-inline) .tox-editor-header{background:transparent!important}:root{--gl-star-size:auto;--gl-star-color:var(--tblr-yellow);--gl-star-color-inactive:var(--tblr-border-color)}[data-star-rating] svg{height:var(--tblr-icon-size,--gl-star-size);width:var(--tblr-icon-size,--gl-star-size)}[data-star-rating] :not(.gl-active)>.gl-star-full{color:var(--gl-star-color-inactive)!important}[data-star-rating] .gl-active>.gl-star-full{color:var(--gl-star-color)}.clr-picker{background-color:var(--tblr-bg-surface);box-shadow:var(--tblr-box-shadow-dropdown)}input.clr-color{background:transparent;border-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:var(--tblr-body-color)}input.clr-color:focus{border-color:rgba(var(--tblr-primary-rgb),.25);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-swatches button{border-radius:var(--tblr-border-radius);padding:0 2px 4px}.clr-swatches button:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-preview{overflow:visible}.clr-preview,.clr-preview button,.clr-preview:after,.clr-preview:before{border-radius:var(--tblr-border-radius)}.clr-preview button:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-field{display:block}.clr-field button{border-radius:var(--tblr-border-radius);height:1.5rem;left:auto;right:6px;width:1.5rem}.clr-field button:after{box-shadow:inset 0 0 0 1px var(--tblr-border-color-translucent)}.clr-field button:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.clr-field input{padding-right:2.5rem}.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:Font Awesome\ 6 Free}.fa-brands,.fab{font-family:Font Awesome\ 6 Brands}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);line-height:inherit;position:absolute;text-align:center;width:var(--fa-li-width,2em)}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-bounce;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-flip;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-shake;animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,steps(8))}@media(prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}24%,8%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:"\30 ";--fa--fa:"\30 \30 "}.fa-1{--fa:"\31 ";--fa--fa:"\31 \31 "}.fa-2{--fa:"\32 ";--fa--fa:"\32 \32 "}.fa-3{--fa:"\33 ";--fa--fa:"\33 \33 "}.fa-4{--fa:"\34 ";--fa--fa:"\34 \34 "}.fa-5{--fa:"\35 ";--fa--fa:"\35 \35 "}.fa-6{--fa:"\36 ";--fa--fa:"\36 \36 "}.fa-7{--fa:"\37 ";--fa--fa:"\37 \37 "}.fa-8{--fa:"\38 ";--fa--fa:"\38 \38 "}.fa-9{--fa:"\39 ";--fa--fa:"\39 \39 "}.fa-fill-drip{--fa:"";--fa--fa:""}.fa-arrows-to-circle{--fa:"";--fa--fa:""}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:"";--fa--fa:""}.fa-at{--fa:"\@";--fa--fa:"\@\@"}.fa-trash-alt,.fa-trash-can{--fa:"";--fa--fa:""}.fa-text-height{--fa:"";--fa--fa:""}.fa-user-times,.fa-user-xmark{--fa:"";--fa--fa:""}.fa-stethoscope{--fa:"";--fa--fa:""}.fa-comment-alt,.fa-message{--fa:"";--fa--fa:""}.fa-info{--fa:"";--fa--fa:""}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:"";--fa--fa:""}.fa-explosion{--fa:"";--fa--fa:""}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:"";--fa--fa:""}.fa-wave-square{--fa:"";--fa--fa:""}.fa-ring{--fa:"";--fa--fa:""}.fa-building-un{--fa:"";--fa--fa:""}.fa-dice-three{--fa:"";--fa--fa:""}.fa-calendar-alt,.fa-calendar-days{--fa:"";--fa--fa:""}.fa-anchor-circle-check{--fa:"";--fa--fa:""}.fa-building-circle-arrow-right{--fa:"";--fa--fa:""}.fa-volleyball,.fa-volleyball-ball{--fa:"";--fa--fa:""}.fa-arrows-up-to-line{--fa:"";--fa--fa:""}.fa-sort-desc,.fa-sort-down{--fa:"";--fa--fa:""}.fa-circle-minus,.fa-minus-circle{--fa:"";--fa--fa:""}.fa-door-open{--fa:"";--fa--fa:""}.fa-right-from-bracket,.fa-sign-out-alt{--fa:"";--fa--fa:""}.fa-atom{--fa:"";--fa--fa:""}.fa-soap{--fa:"";--fa--fa:""}.fa-heart-music-camera-bolt,.fa-icons{--fa:"";--fa--fa:""}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:"";--fa--fa:""}.fa-bridge-circle-check{--fa:"";--fa--fa:""}.fa-pump-medical{--fa:"";--fa--fa:""}.fa-fingerprint{--fa:"";--fa--fa:""}.fa-hand-point-right{--fa:"";--fa--fa:""}.fa-magnifying-glass-location,.fa-search-location{--fa:"";--fa--fa:""}.fa-forward-step,.fa-step-forward{--fa:"";--fa--fa:""}.fa-face-smile-beam,.fa-smile-beam{--fa:"";--fa--fa:""}.fa-flag-checkered{--fa:"";--fa--fa:""}.fa-football,.fa-football-ball{--fa:"";--fa--fa:""}.fa-school-circle-exclamation{--fa:"";--fa--fa:""}.fa-crop{--fa:"";--fa--fa:""}.fa-angle-double-down,.fa-angles-down{--fa:"";--fa--fa:""}.fa-users-rectangle{--fa:"";--fa--fa:""}.fa-people-roof{--fa:"";--fa--fa:""}.fa-people-line{--fa:"";--fa--fa:""}.fa-beer,.fa-beer-mug-empty{--fa:"";--fa--fa:""}.fa-diagram-predecessor{--fa:"";--fa--fa:""}.fa-arrow-up-long,.fa-long-arrow-up{--fa:"";--fa--fa:""}.fa-burn,.fa-fire-flame-simple{--fa:"";--fa--fa:""}.fa-male,.fa-person{--fa:"";--fa--fa:""}.fa-laptop{--fa:"";--fa--fa:""}.fa-file-csv{--fa:"";--fa--fa:""}.fa-menorah{--fa:"";--fa--fa:""}.fa-truck-plane{--fa:"";--fa--fa:""}.fa-record-vinyl{--fa:"";--fa--fa:""}.fa-face-grin-stars,.fa-grin-stars{--fa:"";--fa--fa:""}.fa-bong{--fa:"";--fa--fa:""}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:"";--fa--fa:""}.fa-arrow-down-up-across-line{--fa:"";--fa--fa:""}.fa-spoon,.fa-utensil-spoon{--fa:"";--fa--fa:""}.fa-jar-wheat{--fa:"";--fa--fa:""}.fa-envelopes-bulk,.fa-mail-bulk{--fa:"";--fa--fa:""}.fa-file-circle-exclamation{--fa:"";--fa--fa:""}.fa-circle-h,.fa-hospital-symbol{--fa:"";--fa--fa:""}.fa-pager{--fa:"";--fa--fa:""}.fa-address-book,.fa-contact-book{--fa:"";--fa--fa:""}.fa-strikethrough{--fa:"";--fa--fa:""}.fa-k{--fa:"K";--fa--fa:"KK"}.fa-landmark-flag{--fa:"";--fa--fa:""}.fa-pencil,.fa-pencil-alt{--fa:"";--fa--fa:""}.fa-backward{--fa:"";--fa--fa:""}.fa-caret-right{--fa:"";--fa--fa:""}.fa-comments{--fa:"";--fa--fa:""}.fa-file-clipboard,.fa-paste{--fa:"";--fa--fa:""}.fa-code-pull-request{--fa:"";--fa--fa:""}.fa-clipboard-list{--fa:"";--fa--fa:""}.fa-truck-loading,.fa-truck-ramp-box{--fa:"";--fa--fa:""}.fa-user-check{--fa:"";--fa--fa:""}.fa-vial-virus{--fa:"";--fa--fa:""}.fa-sheet-plastic{--fa:"";--fa--fa:""}.fa-blog{--fa:"";--fa--fa:""}.fa-user-ninja{--fa:"";--fa--fa:""}.fa-person-arrow-up-from-line{--fa:"";--fa--fa:""}.fa-scroll-torah,.fa-torah{--fa:"";--fa--fa:""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:"";--fa--fa:""}.fa-toggle-off{--fa:"";--fa--fa:""}.fa-archive,.fa-box-archive{--fa:"";--fa--fa:""}.fa-person-drowning{--fa:"";--fa--fa:""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:"";--fa--fa:""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:"";--fa--fa:""}.fa-spray-can{--fa:"";--fa--fa:""}.fa-truck-monster{--fa:"";--fa--fa:""}.fa-w{--fa:"W";--fa--fa:"WW"}.fa-earth-africa,.fa-globe-africa{--fa:"";--fa--fa:""}.fa-rainbow{--fa:"";--fa--fa:""}.fa-circle-notch{--fa:"";--fa--fa:""}.fa-tablet-alt,.fa-tablet-screen-button{--fa:"";--fa--fa:""}.fa-paw{--fa:"";--fa--fa:""}.fa-cloud{--fa:"";--fa--fa:""}.fa-trowel-bricks{--fa:"";--fa--fa:""}.fa-face-flushed,.fa-flushed{--fa:"";--fa--fa:""}.fa-hospital-user{--fa:"";--fa--fa:""}.fa-tent-arrow-left-right{--fa:"";--fa--fa:""}.fa-gavel,.fa-legal{--fa:"";--fa--fa:""}.fa-binoculars{--fa:"";--fa--fa:""}.fa-microphone-slash{--fa:"";--fa--fa:""}.fa-box-tissue{--fa:"";--fa--fa:""}.fa-motorcycle{--fa:"";--fa--fa:""}.fa-bell-concierge,.fa-concierge-bell{--fa:"";--fa--fa:""}.fa-pen-ruler,.fa-pencil-ruler{--fa:"";--fa--fa:""}.fa-people-arrows,.fa-people-arrows-left-right{--fa:"";--fa--fa:""}.fa-mars-and-venus-burst{--fa:"";--fa--fa:""}.fa-caret-square-right,.fa-square-caret-right{--fa:"";--fa--fa:""}.fa-cut,.fa-scissors{--fa:"";--fa--fa:""}.fa-sun-plant-wilt{--fa:"";--fa--fa:""}.fa-toilets-portable{--fa:"";--fa--fa:""}.fa-hockey-puck{--fa:"";--fa--fa:""}.fa-table{--fa:"";--fa--fa:""}.fa-magnifying-glass-arrow-right{--fa:"";--fa--fa:""}.fa-digital-tachograph,.fa-tachograph-digital{--fa:"";--fa--fa:""}.fa-users-slash{--fa:"";--fa--fa:""}.fa-clover{--fa:"";--fa--fa:""}.fa-mail-reply,.fa-reply{--fa:"";--fa--fa:""}.fa-star-and-crescent{--fa:"";--fa--fa:""}.fa-house-fire{--fa:"";--fa--fa:""}.fa-minus-square,.fa-square-minus{--fa:"";--fa--fa:""}.fa-helicopter{--fa:"";--fa--fa:""}.fa-compass{--fa:"";--fa--fa:""}.fa-caret-square-down,.fa-square-caret-down{--fa:"";--fa--fa:""}.fa-file-circle-question{--fa:"";--fa--fa:""}.fa-laptop-code{--fa:"";--fa--fa:""}.fa-swatchbook{--fa:"";--fa--fa:""}.fa-prescription-bottle{--fa:"";--fa--fa:""}.fa-bars,.fa-navicon{--fa:"";--fa--fa:""}.fa-people-group{--fa:"";--fa--fa:""}.fa-hourglass-3,.fa-hourglass-end{--fa:"";--fa--fa:""}.fa-heart-broken,.fa-heart-crack{--fa:"";--fa--fa:""}.fa-external-link-square-alt,.fa-square-up-right{--fa:"";--fa--fa:""}.fa-face-kiss-beam,.fa-kiss-beam{--fa:"";--fa--fa:""}.fa-film{--fa:"";--fa--fa:""}.fa-ruler-horizontal{--fa:"";--fa--fa:""}.fa-people-robbery{--fa:"";--fa--fa:""}.fa-lightbulb{--fa:"";--fa--fa:""}.fa-caret-left{--fa:"";--fa--fa:""}.fa-circle-exclamation,.fa-exclamation-circle{--fa:"";--fa--fa:""}.fa-school-circle-xmark{--fa:"";--fa--fa:""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:"";--fa--fa:""}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:"";--fa--fa:""}.fa-unlock-alt,.fa-unlock-keyhole{--fa:"";--fa--fa:""}.fa-cloud-showers-heavy{--fa:"";--fa--fa:""}.fa-headphones-alt,.fa-headphones-simple{--fa:"";--fa--fa:""}.fa-sitemap{--fa:"";--fa--fa:""}.fa-circle-dollar-to-slot,.fa-donate{--fa:"";--fa--fa:""}.fa-memory{--fa:"";--fa--fa:""}.fa-road-spikes{--fa:"";--fa--fa:""}.fa-fire-burner{--fa:"";--fa--fa:""}.fa-flag{--fa:"";--fa--fa:""}.fa-hanukiah{--fa:"";--fa--fa:""}.fa-feather{--fa:"";--fa--fa:""}.fa-volume-down,.fa-volume-low{--fa:"";--fa--fa:""}.fa-comment-slash{--fa:"";--fa--fa:""}.fa-cloud-sun-rain{--fa:"";--fa--fa:""}.fa-compress{--fa:"";--fa--fa:""}.fa-wheat-alt,.fa-wheat-awn{--fa:"";--fa--fa:""}.fa-ankh{--fa:"";--fa--fa:""}.fa-hands-holding-child{--fa:"";--fa--fa:""}.fa-asterisk{--fa:"\*";--fa--fa:"\*\*"}.fa-check-square,.fa-square-check{--fa:"";--fa--fa:""}.fa-peseta-sign{--fa:"";--fa--fa:""}.fa-header,.fa-heading{--fa:"";--fa--fa:""}.fa-ghost{--fa:"";--fa--fa:""}.fa-list,.fa-list-squares{--fa:"";--fa--fa:""}.fa-phone-square-alt,.fa-square-phone-flip{--fa:"";--fa--fa:""}.fa-cart-plus{--fa:"";--fa--fa:""}.fa-gamepad{--fa:"";--fa--fa:""}.fa-circle-dot,.fa-dot-circle{--fa:"";--fa--fa:""}.fa-dizzy,.fa-face-dizzy{--fa:"";--fa--fa:""}.fa-egg{--fa:"";--fa--fa:""}.fa-house-medical-circle-xmark{--fa:"";--fa--fa:""}.fa-campground{--fa:"";--fa--fa:""}.fa-folder-plus{--fa:"";--fa--fa:""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:"";--fa--fa:""}.fa-paint-brush,.fa-paintbrush{--fa:"";--fa--fa:""}.fa-lock{--fa:"";--fa--fa:""}.fa-gas-pump{--fa:"";--fa--fa:""}.fa-hot-tub,.fa-hot-tub-person{--fa:"";--fa--fa:""}.fa-map-location,.fa-map-marked{--fa:"";--fa--fa:""}.fa-house-flood-water{--fa:"";--fa--fa:""}.fa-tree{--fa:"";--fa--fa:""}.fa-bridge-lock{--fa:"";--fa--fa:""}.fa-sack-dollar{--fa:"";--fa--fa:""}.fa-edit,.fa-pen-to-square{--fa:"";--fa--fa:""}.fa-car-side{--fa:"";--fa--fa:""}.fa-share-alt,.fa-share-nodes{--fa:"";--fa--fa:""}.fa-heart-circle-minus{--fa:"";--fa--fa:""}.fa-hourglass-2,.fa-hourglass-half{--fa:"";--fa--fa:""}.fa-microscope{--fa:"";--fa--fa:""}.fa-sink{--fa:"";--fa--fa:""}.fa-bag-shopping,.fa-shopping-bag{--fa:"";--fa--fa:""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:"";--fa--fa:""}.fa-mitten{--fa:"";--fa--fa:""}.fa-person-rays{--fa:"";--fa--fa:""}.fa-users{--fa:"";--fa--fa:""}.fa-eye-slash{--fa:"";--fa--fa:""}.fa-flask-vial{--fa:"";--fa--fa:""}.fa-hand,.fa-hand-paper{--fa:"";--fa--fa:""}.fa-om{--fa:"";--fa--fa:""}.fa-worm{--fa:"";--fa--fa:""}.fa-house-circle-xmark{--fa:"";--fa--fa:""}.fa-plug{--fa:"";--fa--fa:""}.fa-chevron-up{--fa:"";--fa--fa:""}.fa-hand-spock{--fa:"";--fa--fa:""}.fa-stopwatch{--fa:"";--fa--fa:""}.fa-face-kiss,.fa-kiss{--fa:"";--fa--fa:""}.fa-bridge-circle-xmark{--fa:"";--fa--fa:""}.fa-face-grin-tongue,.fa-grin-tongue{--fa:"";--fa--fa:""}.fa-chess-bishop{--fa:"";--fa--fa:""}.fa-face-grin-wink,.fa-grin-wink{--fa:"";--fa--fa:""}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:"";--fa--fa:""}.fa-road-circle-check{--fa:"";--fa--fa:""}.fa-dice-five{--fa:"";--fa--fa:""}.fa-rss-square,.fa-square-rss{--fa:"";--fa--fa:""}.fa-land-mine-on{--fa:"";--fa--fa:""}.fa-i-cursor{--fa:"";--fa--fa:""}.fa-stamp{--fa:"";--fa--fa:""}.fa-stairs{--fa:"";--fa--fa:""}.fa-i{--fa:"I";--fa--fa:"II"}.fa-hryvnia,.fa-hryvnia-sign{--fa:"";--fa--fa:""}.fa-pills{--fa:"";--fa--fa:""}.fa-face-grin-wide,.fa-grin-alt{--fa:"";--fa--fa:""}.fa-tooth{--fa:"";--fa--fa:""}.fa-v{--fa:"V";--fa--fa:"VV"}.fa-bangladeshi-taka-sign{--fa:"";--fa--fa:""}.fa-bicycle{--fa:"";--fa--fa:""}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:"";--fa--fa:""}.fa-head-side-cough-slash{--fa:"";--fa--fa:""}.fa-ambulance,.fa-truck-medical{--fa:"";--fa--fa:""}.fa-wheat-awn-circle-exclamation{--fa:"";--fa--fa:""}.fa-snowman{--fa:"";--fa--fa:""}.fa-mortar-pestle{--fa:"";--fa--fa:""}.fa-road-barrier{--fa:"";--fa--fa:""}.fa-school{--fa:"";--fa--fa:""}.fa-igloo{--fa:"";--fa--fa:""}.fa-joint{--fa:"";--fa--fa:""}.fa-angle-right{--fa:"";--fa--fa:""}.fa-horse{--fa:"";--fa--fa:""}.fa-q{--fa:"Q";--fa--fa:"QQ"}.fa-g{--fa:"G";--fa--fa:"GG"}.fa-notes-medical{--fa:"";--fa--fa:""}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:"";--fa--fa:""}.fa-dong-sign{--fa:"";--fa--fa:""}.fa-capsules{--fa:"";--fa--fa:""}.fa-poo-bolt,.fa-poo-storm{--fa:"";--fa--fa:""}.fa-face-frown-open,.fa-frown-open{--fa:"";--fa--fa:""}.fa-hand-point-up{--fa:"";--fa--fa:""}.fa-money-bill{--fa:"";--fa--fa:""}.fa-bookmark{--fa:"";--fa--fa:""}.fa-align-justify{--fa:"";--fa--fa:""}.fa-umbrella-beach{--fa:"";--fa--fa:""}.fa-helmet-un{--fa:"";--fa--fa:""}.fa-bullseye{--fa:"";--fa--fa:""}.fa-bacon{--fa:"";--fa--fa:""}.fa-hand-point-down{--fa:"";--fa--fa:""}.fa-arrow-up-from-bracket{--fa:"";--fa--fa:""}.fa-folder,.fa-folder-blank{--fa:"";--fa--fa:""}.fa-file-medical-alt,.fa-file-waveform{--fa:"";--fa--fa:""}.fa-radiation{--fa:"";--fa--fa:""}.fa-chart-simple{--fa:"";--fa--fa:""}.fa-mars-stroke{--fa:"";--fa--fa:""}.fa-vial{--fa:"";--fa--fa:""}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:"";--fa--fa:""}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:"";--fa--fa:""}.fa-e{--fa:"E";--fa--fa:"EE"}.fa-pen-alt,.fa-pen-clip{--fa:"";--fa--fa:""}.fa-bridge-circle-exclamation{--fa:"";--fa--fa:""}.fa-user{--fa:"";--fa--fa:""}.fa-school-circle-check{--fa:"";--fa--fa:""}.fa-dumpster{--fa:"";--fa--fa:""}.fa-shuttle-van,.fa-van-shuttle{--fa:"";--fa--fa:""}.fa-building-user{--fa:"";--fa--fa:""}.fa-caret-square-left,.fa-square-caret-left{--fa:"";--fa--fa:""}.fa-highlighter{--fa:"";--fa--fa:""}.fa-key{--fa:"";--fa--fa:""}.fa-bullhorn{--fa:"";--fa--fa:""}.fa-globe{--fa:"";--fa--fa:""}.fa-synagogue{--fa:"";--fa--fa:""}.fa-person-half-dress{--fa:"";--fa--fa:""}.fa-road-bridge{--fa:"";--fa--fa:""}.fa-location-arrow{--fa:"";--fa--fa:""}.fa-c{--fa:"C";--fa--fa:"CC"}.fa-tablet-button{--fa:"";--fa--fa:""}.fa-building-lock{--fa:"";--fa--fa:""}.fa-pizza-slice{--fa:"";--fa--fa:""}.fa-money-bill-wave{--fa:"";--fa--fa:""}.fa-area-chart,.fa-chart-area{--fa:"";--fa--fa:""}.fa-house-flag{--fa:"";--fa--fa:""}.fa-person-circle-minus{--fa:"";--fa--fa:""}.fa-ban,.fa-cancel{--fa:"";--fa--fa:""}.fa-camera-rotate{--fa:"";--fa--fa:""}.fa-air-freshener,.fa-spray-can-sparkles{--fa:"";--fa--fa:""}.fa-star{--fa:"";--fa--fa:""}.fa-repeat{--fa:"";--fa--fa:""}.fa-cross{--fa:"";--fa--fa:""}.fa-box{--fa:"";--fa--fa:""}.fa-venus-mars{--fa:"";--fa--fa:""}.fa-arrow-pointer,.fa-mouse-pointer{--fa:"";--fa--fa:""}.fa-expand-arrows-alt,.fa-maximize{--fa:"";--fa--fa:""}.fa-charging-station{--fa:"";--fa--fa:""}.fa-shapes,.fa-triangle-circle-square{--fa:"";--fa--fa:""}.fa-random,.fa-shuffle{--fa:"";--fa--fa:""}.fa-person-running,.fa-running{--fa:"";--fa--fa:""}.fa-mobile-retro{--fa:"";--fa--fa:""}.fa-grip-lines-vertical{--fa:"";--fa--fa:""}.fa-spider{--fa:"";--fa--fa:""}.fa-hands-bound{--fa:"";--fa--fa:""}.fa-file-invoice-dollar{--fa:"";--fa--fa:""}.fa-plane-circle-exclamation{--fa:"";--fa--fa:""}.fa-x-ray{--fa:"";--fa--fa:""}.fa-spell-check{--fa:"";--fa--fa:""}.fa-slash{--fa:"";--fa--fa:""}.fa-computer-mouse,.fa-mouse{--fa:"";--fa--fa:""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:"";--fa--fa:""}.fa-shop-slash,.fa-store-alt-slash{--fa:"";--fa--fa:""}.fa-server{--fa:"";--fa--fa:""}.fa-virus-covid-slash{--fa:"";--fa--fa:""}.fa-shop-lock{--fa:"";--fa--fa:""}.fa-hourglass-1,.fa-hourglass-start{--fa:"";--fa--fa:""}.fa-blender-phone{--fa:"";--fa--fa:""}.fa-building-wheat{--fa:"";--fa--fa:""}.fa-person-breastfeeding{--fa:"";--fa--fa:""}.fa-right-to-bracket,.fa-sign-in-alt{--fa:"";--fa--fa:""}.fa-venus{--fa:"";--fa--fa:""}.fa-passport{--fa:"";--fa--fa:""}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:"";--fa--fa:""}.fa-heart-pulse,.fa-heartbeat{--fa:"";--fa--fa:""}.fa-people-carry,.fa-people-carry-box{--fa:"";--fa--fa:""}.fa-temperature-high{--fa:"";--fa--fa:""}.fa-microchip{--fa:"";--fa--fa:""}.fa-crown{--fa:"";--fa--fa:""}.fa-weight-hanging{--fa:"";--fa--fa:""}.fa-xmarks-lines{--fa:"";--fa--fa:""}.fa-file-prescription{--fa:"";--fa--fa:""}.fa-weight,.fa-weight-scale{--fa:"";--fa--fa:""}.fa-user-friends,.fa-user-group{--fa:"";--fa--fa:""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:"";--fa--fa:""}.fa-chess-knight{--fa:"";--fa--fa:""}.fa-face-laugh-squint,.fa-laugh-squint{--fa:"";--fa--fa:""}.fa-wheelchair{--fa:"";--fa--fa:""}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:"";--fa--fa:""}.fa-toggle-on{--fa:"";--fa--fa:""}.fa-person-walking,.fa-walking{--fa:"";--fa--fa:""}.fa-l{--fa:"L";--fa--fa:"LL"}.fa-fire{--fa:"";--fa--fa:""}.fa-bed-pulse,.fa-procedures{--fa:"";--fa--fa:""}.fa-shuttle-space,.fa-space-shuttle{--fa:"";--fa--fa:""}.fa-face-laugh,.fa-laugh{--fa:"";--fa--fa:""}.fa-folder-open{--fa:"";--fa--fa:""}.fa-heart-circle-plus{--fa:"";--fa--fa:""}.fa-code-fork{--fa:"";--fa--fa:""}.fa-city{--fa:"";--fa--fa:""}.fa-microphone-alt,.fa-microphone-lines{--fa:"";--fa--fa:""}.fa-pepper-hot{--fa:"";--fa--fa:""}.fa-unlock{--fa:"";--fa--fa:""}.fa-colon-sign{--fa:"";--fa--fa:""}.fa-headset{--fa:"";--fa--fa:""}.fa-store-slash{--fa:"";--fa--fa:""}.fa-road-circle-xmark{--fa:"";--fa--fa:""}.fa-user-minus{--fa:"";--fa--fa:""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:"";--fa--fa:""}.fa-champagne-glasses,.fa-glass-cheers{--fa:"";--fa--fa:""}.fa-clipboard{--fa:"";--fa--fa:""}.fa-house-circle-exclamation{--fa:"";--fa--fa:""}.fa-file-arrow-up,.fa-file-upload{--fa:"";--fa--fa:""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:"";--fa--fa:""}.fa-bath,.fa-bathtub{--fa:"";--fa--fa:""}.fa-underline{--fa:"";--fa--fa:""}.fa-user-edit,.fa-user-pen{--fa:"";--fa--fa:""}.fa-signature{--fa:"";--fa--fa:""}.fa-stroopwafel{--fa:"";--fa--fa:""}.fa-bold{--fa:"";--fa--fa:""}.fa-anchor-lock{--fa:"";--fa--fa:""}.fa-building-ngo{--fa:"";--fa--fa:""}.fa-manat-sign{--fa:"";--fa--fa:""}.fa-not-equal{--fa:"";--fa--fa:""}.fa-border-style,.fa-border-top-left{--fa:"";--fa--fa:""}.fa-map-location-dot,.fa-map-marked-alt{--fa:"";--fa--fa:""}.fa-jedi{--fa:"";--fa--fa:""}.fa-poll,.fa-square-poll-vertical{--fa:"";--fa--fa:""}.fa-mug-hot{--fa:"";--fa--fa:""}.fa-battery-car,.fa-car-battery{--fa:"";--fa--fa:""}.fa-gift{--fa:"";--fa--fa:""}.fa-dice-two{--fa:"";--fa--fa:""}.fa-chess-queen{--fa:"";--fa--fa:""}.fa-glasses{--fa:"";--fa--fa:""}.fa-chess-board{--fa:"";--fa--fa:""}.fa-building-circle-check{--fa:"";--fa--fa:""}.fa-person-chalkboard{--fa:"";--fa--fa:""}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:"";--fa--fa:""}.fa-hand-back-fist,.fa-hand-rock{--fa:"";--fa--fa:""}.fa-caret-square-up,.fa-square-caret-up{--fa:"";--fa--fa:""}.fa-cloud-showers-water{--fa:"";--fa--fa:""}.fa-bar-chart,.fa-chart-bar{--fa:"";--fa--fa:""}.fa-hands-bubbles,.fa-hands-wash{--fa:"";--fa--fa:""}.fa-less-than-equal{--fa:"";--fa--fa:""}.fa-train{--fa:"";--fa--fa:""}.fa-eye-low-vision,.fa-low-vision{--fa:"";--fa--fa:""}.fa-crow{--fa:"";--fa--fa:""}.fa-sailboat{--fa:"";--fa--fa:""}.fa-window-restore{--fa:"";--fa--fa:""}.fa-plus-square,.fa-square-plus{--fa:"";--fa--fa:""}.fa-torii-gate{--fa:"";--fa--fa:""}.fa-frog{--fa:"";--fa--fa:""}.fa-bucket{--fa:"";--fa--fa:""}.fa-image{--fa:"";--fa--fa:""}.fa-microphone{--fa:"";--fa--fa:""}.fa-cow{--fa:"";--fa--fa:""}.fa-caret-up{--fa:"";--fa--fa:""}.fa-screwdriver{--fa:"";--fa--fa:""}.fa-folder-closed{--fa:"";--fa--fa:""}.fa-house-tsunami{--fa:"";--fa--fa:""}.fa-square-nfi{--fa:"";--fa--fa:""}.fa-arrow-up-from-ground-water{--fa:"";--fa--fa:""}.fa-glass-martini-alt,.fa-martini-glass{--fa:"";--fa--fa:""}.fa-square-binary{--fa:"";--fa--fa:""}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:"";--fa--fa:""}.fa-columns,.fa-table-columns{--fa:"";--fa--fa:""}.fa-lemon{--fa:"";--fa--fa:""}.fa-head-side-mask{--fa:"";--fa--fa:""}.fa-handshake{--fa:"";--fa--fa:""}.fa-gem{--fa:"";--fa--fa:""}.fa-dolly,.fa-dolly-box{--fa:"";--fa--fa:""}.fa-smoking{--fa:"";--fa--fa:""}.fa-compress-arrows-alt,.fa-minimize{--fa:"";--fa--fa:""}.fa-monument{--fa:"";--fa--fa:""}.fa-snowplow{--fa:"";--fa--fa:""}.fa-angle-double-right,.fa-angles-right{--fa:"";--fa--fa:""}.fa-cannabis{--fa:"";--fa--fa:""}.fa-circle-play,.fa-play-circle{--fa:"";--fa--fa:""}.fa-tablets{--fa:"";--fa--fa:""}.fa-ethernet{--fa:"";--fa--fa:""}.fa-eur,.fa-euro,.fa-euro-sign{--fa:"";--fa--fa:""}.fa-chair{--fa:"";--fa--fa:""}.fa-check-circle,.fa-circle-check{--fa:"";--fa--fa:""}.fa-circle-stop,.fa-stop-circle{--fa:"";--fa--fa:""}.fa-compass-drafting,.fa-drafting-compass{--fa:"";--fa--fa:""}.fa-plate-wheat{--fa:"";--fa--fa:""}.fa-icicles{--fa:"";--fa--fa:""}.fa-person-shelter{--fa:"";--fa--fa:""}.fa-neuter{--fa:"";--fa--fa:""}.fa-id-badge{--fa:"";--fa--fa:""}.fa-marker{--fa:"";--fa--fa:""}.fa-face-laugh-beam,.fa-laugh-beam{--fa:"";--fa--fa:""}.fa-helicopter-symbol{--fa:"";--fa--fa:""}.fa-universal-access{--fa:"";--fa--fa:""}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:"";--fa--fa:""}.fa-lari-sign{--fa:"";--fa--fa:""}.fa-volcano{--fa:"";--fa--fa:""}.fa-person-walking-dashed-line-arrow-right{--fa:"";--fa--fa:""}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:"";--fa--fa:""}.fa-viruses{--fa:"";--fa--fa:""}.fa-square-person-confined{--fa:"";--fa--fa:""}.fa-user-tie{--fa:"";--fa--fa:""}.fa-arrow-down-long,.fa-long-arrow-down{--fa:"";--fa--fa:""}.fa-tent-arrow-down-to-line{--fa:"";--fa--fa:""}.fa-certificate{--fa:"";--fa--fa:""}.fa-mail-reply-all,.fa-reply-all{--fa:"";--fa--fa:""}.fa-suitcase{--fa:"";--fa--fa:""}.fa-person-skating,.fa-skating{--fa:"";--fa--fa:""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:"";--fa--fa:""}.fa-camera-retro{--fa:"";--fa--fa:""}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:"";--fa--fa:""}.fa-arrow-right-to-file,.fa-file-import{--fa:"";--fa--fa:""}.fa-external-link-square,.fa-square-arrow-up-right{--fa:"";--fa--fa:""}.fa-box-open{--fa:"";--fa--fa:""}.fa-scroll{--fa:"";--fa--fa:""}.fa-spa{--fa:"";--fa--fa:""}.fa-location-pin-lock{--fa:"";--fa--fa:""}.fa-pause{--fa:"";--fa--fa:""}.fa-hill-avalanche{--fa:"";--fa--fa:""}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:"";--fa--fa:""}.fa-bomb{--fa:"";--fa--fa:""}.fa-registered{--fa:"";--fa--fa:""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:"";--fa--fa:""}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:"";--fa--fa:""}.fa-subscript{--fa:"";--fa--fa:""}.fa-diamond-turn-right,.fa-directions{--fa:"";--fa--fa:""}.fa-burst{--fa:"";--fa--fa:""}.fa-house-laptop,.fa-laptop-house{--fa:"";--fa--fa:""}.fa-face-tired,.fa-tired{--fa:"";--fa--fa:""}.fa-money-bills{--fa:"";--fa--fa:""}.fa-smog{--fa:"";--fa--fa:""}.fa-crutch{--fa:"";--fa--fa:""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:"";--fa--fa:""}.fa-palette{--fa:"";--fa--fa:""}.fa-arrows-turn-right{--fa:"";--fa--fa:""}.fa-vest{--fa:"";--fa--fa:""}.fa-ferry{--fa:"";--fa--fa:""}.fa-arrows-down-to-people{--fa:"";--fa--fa:""}.fa-seedling,.fa-sprout{--fa:"";--fa--fa:""}.fa-arrows-alt-h,.fa-left-right{--fa:"";--fa--fa:""}.fa-boxes-packing{--fa:"";--fa--fa:""}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:"";--fa--fa:""}.fa-group-arrows-rotate{--fa:"";--fa--fa:""}.fa-bowl-food{--fa:"";--fa--fa:""}.fa-candy-cane{--fa:"";--fa--fa:""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:"";--fa--fa:""}.fa-cloud-bolt,.fa-thunderstorm{--fa:"";--fa--fa:""}.fa-remove-format,.fa-text-slash{--fa:"";--fa--fa:""}.fa-face-smile-wink,.fa-smile-wink{--fa:"";--fa--fa:""}.fa-file-word{--fa:"";--fa--fa:""}.fa-file-powerpoint{--fa:"";--fa--fa:""}.fa-arrows-h,.fa-arrows-left-right{--fa:"";--fa--fa:""}.fa-house-lock{--fa:"";--fa--fa:""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:"";--fa--fa:""}.fa-children{--fa:"";--fa--fa:""}.fa-blackboard,.fa-chalkboard{--fa:"";--fa--fa:""}.fa-user-alt-slash,.fa-user-large-slash{--fa:"";--fa--fa:""}.fa-envelope-open{--fa:"";--fa--fa:""}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:"";--fa--fa:""}.fa-mattress-pillow{--fa:"";--fa--fa:""}.fa-guarani-sign{--fa:"";--fa--fa:""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:"";--fa--fa:""}.fa-fire-extinguisher{--fa:"";--fa--fa:""}.fa-cruzeiro-sign{--fa:"";--fa--fa:""}.fa-greater-than-equal{--fa:"";--fa--fa:""}.fa-shield-alt,.fa-shield-halved{--fa:"";--fa--fa:""}.fa-atlas,.fa-book-atlas{--fa:"";--fa--fa:""}.fa-virus{--fa:"";--fa--fa:""}.fa-envelope-circle-check{--fa:"";--fa--fa:""}.fa-layer-group{--fa:"";--fa--fa:""}.fa-arrows-to-dot{--fa:"";--fa--fa:""}.fa-archway{--fa:"";--fa--fa:""}.fa-heart-circle-check{--fa:"";--fa--fa:""}.fa-house-chimney-crack,.fa-house-damage{--fa:"";--fa--fa:""}.fa-file-archive,.fa-file-zipper{--fa:"";--fa--fa:""}.fa-square{--fa:"";--fa--fa:""}.fa-glass-martini,.fa-martini-glass-empty{--fa:"";--fa--fa:""}.fa-couch{--fa:"";--fa--fa:""}.fa-cedi-sign{--fa:"";--fa--fa:""}.fa-italic{--fa:"";--fa--fa:""}.fa-table-cells-column-lock{--fa:"";--fa--fa:""}.fa-church{--fa:"";--fa--fa:""}.fa-comments-dollar{--fa:"";--fa--fa:""}.fa-democrat{--fa:"";--fa--fa:""}.fa-z{--fa:"Z";--fa--fa:"ZZ"}.fa-person-skiing,.fa-skiing{--fa:"";--fa--fa:""}.fa-road-lock{--fa:"";--fa--fa:""}.fa-a{--fa:"A";--fa--fa:"AA"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:"";--fa--fa:""}.fa-feather-alt,.fa-feather-pointed{--fa:"";--fa--fa:""}.fa-p{--fa:"P";--fa--fa:"PP"}.fa-snowflake{--fa:"";--fa--fa:""}.fa-newspaper{--fa:"";--fa--fa:""}.fa-ad,.fa-rectangle-ad{--fa:"";--fa--fa:""}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:"";--fa--fa:""}.fa-filter-circle-xmark{--fa:"";--fa--fa:""}.fa-locust{--fa:"";--fa--fa:""}.fa-sort,.fa-unsorted{--fa:"";--fa--fa:""}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:"";--fa--fa:""}.fa-person-dress-burst{--fa:"";--fa--fa:""}.fa-money-check-alt,.fa-money-check-dollar{--fa:"";--fa--fa:""}.fa-vector-square{--fa:"";--fa--fa:""}.fa-bread-slice{--fa:"";--fa--fa:""}.fa-language{--fa:"";--fa--fa:""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:"";--fa--fa:""}.fa-filter{--fa:"";--fa--fa:""}.fa-question{--fa:"\?";--fa--fa:"\?\?"}.fa-file-signature{--fa:"";--fa--fa:""}.fa-arrows-alt,.fa-up-down-left-right{--fa:"";--fa--fa:""}.fa-house-chimney-user{--fa:"";--fa--fa:""}.fa-hand-holding-heart{--fa:"";--fa--fa:""}.fa-puzzle-piece{--fa:"";--fa--fa:""}.fa-money-check{--fa:"";--fa--fa:""}.fa-star-half-alt,.fa-star-half-stroke{--fa:"";--fa--fa:""}.fa-code{--fa:"";--fa--fa:""}.fa-glass-whiskey,.fa-whiskey-glass{--fa:"";--fa--fa:""}.fa-building-circle-exclamation{--fa:"";--fa--fa:""}.fa-magnifying-glass-chart{--fa:"";--fa--fa:""}.fa-arrow-up-right-from-square,.fa-external-link{--fa:"";--fa--fa:""}.fa-cubes-stacked{--fa:"";--fa--fa:""}.fa-krw,.fa-won,.fa-won-sign{--fa:"";--fa--fa:""}.fa-virus-covid{--fa:"";--fa--fa:""}.fa-austral-sign{--fa:"";--fa--fa:""}.fa-f{--fa:"F";--fa--fa:"FF"}.fa-leaf{--fa:"";--fa--fa:""}.fa-road{--fa:"";--fa--fa:""}.fa-cab,.fa-taxi{--fa:"";--fa--fa:""}.fa-person-circle-plus{--fa:"";--fa--fa:""}.fa-chart-pie,.fa-pie-chart{--fa:"";--fa--fa:""}.fa-bolt-lightning{--fa:"";--fa--fa:""}.fa-sack-xmark{--fa:"";--fa--fa:""}.fa-file-excel{--fa:"";--fa--fa:""}.fa-file-contract{--fa:"";--fa--fa:""}.fa-fish-fins{--fa:"";--fa--fa:""}.fa-building-flag{--fa:"";--fa--fa:""}.fa-face-grin-beam,.fa-grin-beam{--fa:"";--fa--fa:""}.fa-object-ungroup{--fa:"";--fa--fa:""}.fa-poop{--fa:"";--fa--fa:""}.fa-location-pin,.fa-map-marker{--fa:"";--fa--fa:""}.fa-kaaba{--fa:"";--fa--fa:""}.fa-toilet-paper{--fa:"";--fa--fa:""}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:"";--fa--fa:""}.fa-eject{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:"";--fa--fa:""}.fa-plane-circle-check{--fa:"";--fa--fa:""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:"";--fa--fa:""}.fa-object-group{--fa:"";--fa--fa:""}.fa-chart-line,.fa-line-chart{--fa:"";--fa--fa:""}.fa-mask-ventilator{--fa:"";--fa--fa:""}.fa-arrow-right{--fa:"";--fa--fa:""}.fa-map-signs,.fa-signs-post{--fa:"";--fa--fa:""}.fa-cash-register{--fa:"";--fa--fa:""}.fa-person-circle-question{--fa:"";--fa--fa:""}.fa-h{--fa:"H";--fa--fa:"HH"}.fa-tarp{--fa:"";--fa--fa:""}.fa-screwdriver-wrench,.fa-tools{--fa:"";--fa--fa:""}.fa-arrows-to-eye{--fa:"";--fa--fa:""}.fa-plug-circle-bolt{--fa:"";--fa--fa:""}.fa-heart{--fa:"";--fa--fa:""}.fa-mars-and-venus{--fa:"";--fa--fa:""}.fa-home-user,.fa-house-user{--fa:"";--fa--fa:""}.fa-dumpster-fire{--fa:"";--fa--fa:""}.fa-house-crack{--fa:"";--fa--fa:""}.fa-cocktail,.fa-martini-glass-citrus{--fa:"";--fa--fa:""}.fa-face-surprise,.fa-surprise{--fa:"";--fa--fa:""}.fa-bottle-water{--fa:"";--fa--fa:""}.fa-circle-pause,.fa-pause-circle{--fa:"";--fa--fa:""}.fa-toilet-paper-slash{--fa:"";--fa--fa:""}.fa-apple-alt,.fa-apple-whole{--fa:"";--fa--fa:""}.fa-kitchen-set{--fa:"";--fa--fa:""}.fa-r{--fa:"R";--fa--fa:"RR"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:"";--fa--fa:""}.fa-cube{--fa:"";--fa--fa:""}.fa-bitcoin-sign{--fa:"";--fa--fa:""}.fa-shield-dog{--fa:"";--fa--fa:""}.fa-solar-panel{--fa:"";--fa--fa:""}.fa-lock-open{--fa:"";--fa--fa:""}.fa-elevator{--fa:"";--fa--fa:""}.fa-money-bill-transfer{--fa:"";--fa--fa:""}.fa-money-bill-trend-up{--fa:"";--fa--fa:""}.fa-house-flood-water-circle-arrow-right{--fa:"";--fa--fa:""}.fa-poll-h,.fa-square-poll-horizontal{--fa:"";--fa--fa:""}.fa-circle{--fa:"";--fa--fa:""}.fa-backward-fast,.fa-fast-backward{--fa:"";--fa--fa:""}.fa-recycle{--fa:"";--fa--fa:""}.fa-user-astronaut{--fa:"";--fa--fa:""}.fa-plane-slash{--fa:"";--fa--fa:""}.fa-trademark{--fa:"";--fa--fa:""}.fa-basketball,.fa-basketball-ball{--fa:"";--fa--fa:""}.fa-satellite-dish{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:"";--fa--fa:""}.fa-mobile-alt,.fa-mobile-screen-button{--fa:"";--fa--fa:""}.fa-volume-high,.fa-volume-up{--fa:"";--fa--fa:""}.fa-users-rays{--fa:"";--fa--fa:""}.fa-wallet{--fa:"";--fa--fa:""}.fa-clipboard-check{--fa:"";--fa--fa:""}.fa-file-audio{--fa:"";--fa--fa:""}.fa-burger,.fa-hamburger{--fa:"";--fa--fa:""}.fa-wrench{--fa:"";--fa--fa:""}.fa-bugs{--fa:"";--fa--fa:""}.fa-rupee,.fa-rupee-sign{--fa:"";--fa--fa:""}.fa-file-image{--fa:"";--fa--fa:""}.fa-circle-question,.fa-question-circle{--fa:"";--fa--fa:""}.fa-plane-departure{--fa:"";--fa--fa:""}.fa-handshake-slash{--fa:"";--fa--fa:""}.fa-book-bookmark{--fa:"";--fa--fa:""}.fa-code-branch{--fa:"";--fa--fa:""}.fa-hat-cowboy{--fa:"";--fa--fa:""}.fa-bridge{--fa:"";--fa--fa:""}.fa-phone-alt,.fa-phone-flip{--fa:"";--fa--fa:""}.fa-truck-front{--fa:"";--fa--fa:""}.fa-cat{--fa:"";--fa--fa:""}.fa-anchor-circle-exclamation{--fa:"";--fa--fa:""}.fa-truck-field{--fa:"";--fa--fa:""}.fa-route{--fa:"";--fa--fa:""}.fa-clipboard-question{--fa:"";--fa--fa:""}.fa-panorama{--fa:"";--fa--fa:""}.fa-comment-medical{--fa:"";--fa--fa:""}.fa-teeth-open{--fa:"";--fa--fa:""}.fa-file-circle-minus{--fa:"";--fa--fa:""}.fa-tags{--fa:"";--fa--fa:""}.fa-wine-glass{--fa:"";--fa--fa:""}.fa-fast-forward,.fa-forward-fast{--fa:"";--fa--fa:""}.fa-face-meh-blank,.fa-meh-blank{--fa:"";--fa--fa:""}.fa-parking,.fa-square-parking{--fa:"";--fa--fa:""}.fa-house-signal{--fa:"";--fa--fa:""}.fa-bars-progress,.fa-tasks-alt{--fa:"";--fa--fa:""}.fa-faucet-drip{--fa:"";--fa--fa:""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:"";--fa--fa:""}.fa-ban-smoking,.fa-smoking-ban{--fa:"";--fa--fa:""}.fa-terminal{--fa:"";--fa--fa:""}.fa-mobile-button{--fa:"";--fa--fa:""}.fa-house-medical-flag{--fa:"";--fa--fa:""}.fa-basket-shopping,.fa-shopping-basket{--fa:"";--fa--fa:""}.fa-tape{--fa:"";--fa--fa:""}.fa-bus-alt,.fa-bus-simple{--fa:"";--fa--fa:""}.fa-eye{--fa:"";--fa--fa:""}.fa-face-sad-cry,.fa-sad-cry{--fa:"";--fa--fa:""}.fa-audio-description{--fa:"";--fa--fa:""}.fa-person-military-to-person{--fa:"";--fa--fa:""}.fa-file-shield{--fa:"";--fa--fa:""}.fa-user-slash{--fa:"";--fa--fa:""}.fa-pen{--fa:"";--fa--fa:""}.fa-tower-observation{--fa:"";--fa--fa:""}.fa-file-code{--fa:"";--fa--fa:""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:"";--fa--fa:""}.fa-bus{--fa:"";--fa--fa:""}.fa-heart-circle-xmark{--fa:"";--fa--fa:""}.fa-home-lg,.fa-house-chimney{--fa:"";--fa--fa:""}.fa-window-maximize{--fa:"";--fa--fa:""}.fa-face-frown,.fa-frown{--fa:"";--fa--fa:""}.fa-prescription{--fa:"";--fa--fa:""}.fa-shop,.fa-store-alt{--fa:"";--fa--fa:""}.fa-floppy-disk,.fa-save{--fa:"";--fa--fa:""}.fa-vihara{--fa:"";--fa--fa:""}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:"";--fa--fa:""}.fa-sort-asc,.fa-sort-up{--fa:"";--fa--fa:""}.fa-comment-dots,.fa-commenting{--fa:"";--fa--fa:""}.fa-plant-wilt{--fa:"";--fa--fa:""}.fa-diamond{--fa:"";--fa--fa:""}.fa-face-grin-squint,.fa-grin-squint{--fa:"";--fa--fa:""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:"";--fa--fa:""}.fa-chart-diagram{--fa:"";--fa--fa:""}.fa-bacterium{--fa:"";--fa--fa:""}.fa-hand-pointer{--fa:"";--fa--fa:""}.fa-drum-steelpan{--fa:"";--fa--fa:""}.fa-hand-scissors{--fa:"";--fa--fa:""}.fa-hands-praying,.fa-praying-hands{--fa:"";--fa--fa:""}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:"";--fa--fa:""}.fa-biohazard{--fa:"";--fa--fa:""}.fa-location,.fa-location-crosshairs{--fa:"";--fa--fa:""}.fa-mars-double{--fa:"";--fa--fa:""}.fa-child-dress{--fa:"";--fa--fa:""}.fa-users-between-lines{--fa:"";--fa--fa:""}.fa-lungs-virus{--fa:"";--fa--fa:""}.fa-face-grin-tears,.fa-grin-tears{--fa:"";--fa--fa:""}.fa-phone{--fa:"";--fa--fa:""}.fa-calendar-times,.fa-calendar-xmark{--fa:"";--fa--fa:""}.fa-child-reaching{--fa:"";--fa--fa:""}.fa-head-side-virus{--fa:"";--fa--fa:""}.fa-user-cog,.fa-user-gear{--fa:"";--fa--fa:""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:"";--fa--fa:""}.fa-door-closed{--fa:"";--fa--fa:""}.fa-shield-virus{--fa:"";--fa--fa:""}.fa-dice-six{--fa:"";--fa--fa:""}.fa-mosquito-net{--fa:"";--fa--fa:""}.fa-file-fragment{--fa:"";--fa--fa:""}.fa-bridge-water{--fa:"";--fa--fa:""}.fa-person-booth{--fa:"";--fa--fa:""}.fa-text-width{--fa:"";--fa--fa:""}.fa-hat-wizard{--fa:"";--fa--fa:""}.fa-pen-fancy{--fa:"";--fa--fa:""}.fa-digging,.fa-person-digging{--fa:"";--fa--fa:""}.fa-trash{--fa:"";--fa--fa:""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:"";--fa--fa:""}.fa-book-medical{--fa:"";--fa--fa:""}.fa-poo{--fa:"";--fa--fa:""}.fa-quote-right,.fa-quote-right-alt{--fa:"";--fa--fa:""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:"";--fa--fa:""}.fa-cubes{--fa:"";--fa--fa:""}.fa-divide{--fa:"";--fa--fa:""}.fa-tenge,.fa-tenge-sign{--fa:"";--fa--fa:""}.fa-headphones{--fa:"";--fa--fa:""}.fa-hands-holding{--fa:"";--fa--fa:""}.fa-hands-clapping{--fa:"";--fa--fa:""}.fa-republican{--fa:"";--fa--fa:""}.fa-arrow-left{--fa:"";--fa--fa:""}.fa-person-circle-xmark{--fa:"";--fa--fa:""}.fa-ruler{--fa:"";--fa--fa:""}.fa-align-left{--fa:"";--fa--fa:""}.fa-dice-d6{--fa:"";--fa--fa:""}.fa-restroom{--fa:"";--fa--fa:""}.fa-j{--fa:"J";--fa--fa:"JJ"}.fa-users-viewfinder{--fa:"";--fa--fa:""}.fa-file-video{--fa:"";--fa--fa:""}.fa-external-link-alt,.fa-up-right-from-square{--fa:"";--fa--fa:""}.fa-table-cells,.fa-th{--fa:"";--fa--fa:""}.fa-file-pdf{--fa:"";--fa--fa:""}.fa-bible,.fa-book-bible{--fa:"";--fa--fa:""}.fa-o{--fa:"O";--fa--fa:"OO"}.fa-medkit,.fa-suitcase-medical{--fa:"";--fa--fa:""}.fa-user-secret{--fa:"";--fa--fa:""}.fa-otter{--fa:"";--fa--fa:""}.fa-female,.fa-person-dress{--fa:"";--fa--fa:""}.fa-comment-dollar{--fa:"";--fa--fa:""}.fa-briefcase-clock,.fa-business-time{--fa:"";--fa--fa:""}.fa-table-cells-large,.fa-th-large{--fa:"";--fa--fa:""}.fa-book-tanakh,.fa-tanakh{--fa:"";--fa--fa:""}.fa-phone-volume,.fa-volume-control-phone{--fa:"";--fa--fa:""}.fa-hat-cowboy-side{--fa:"";--fa--fa:""}.fa-clipboard-user{--fa:"";--fa--fa:""}.fa-child{--fa:"";--fa--fa:""}.fa-lira-sign{--fa:"";--fa--fa:""}.fa-satellite{--fa:"";--fa--fa:""}.fa-plane-lock{--fa:"";--fa--fa:""}.fa-tag{--fa:"";--fa--fa:""}.fa-comment{--fa:"";--fa--fa:""}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:"";--fa--fa:""}.fa-envelope{--fa:"";--fa--fa:""}.fa-angle-double-up,.fa-angles-up{--fa:"";--fa--fa:""}.fa-paperclip{--fa:"";--fa--fa:""}.fa-arrow-right-to-city{--fa:"";--fa--fa:""}.fa-ribbon{--fa:"";--fa--fa:""}.fa-lungs{--fa:"";--fa--fa:""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:"";--fa--fa:""}.fa-litecoin-sign{--fa:"";--fa--fa:""}.fa-border-none{--fa:"";--fa--fa:""}.fa-circle-nodes{--fa:"";--fa--fa:""}.fa-parachute-box{--fa:"";--fa--fa:""}.fa-indent{--fa:"";--fa--fa:""}.fa-truck-field-un{--fa:"";--fa--fa:""}.fa-hourglass,.fa-hourglass-empty{--fa:"";--fa--fa:""}.fa-mountain{--fa:"";--fa--fa:""}.fa-user-doctor,.fa-user-md{--fa:"";--fa--fa:""}.fa-circle-info,.fa-info-circle{--fa:"";--fa--fa:""}.fa-cloud-meatball{--fa:"";--fa--fa:""}.fa-camera,.fa-camera-alt{--fa:"";--fa--fa:""}.fa-square-virus{--fa:"";--fa--fa:""}.fa-meteor{--fa:"";--fa--fa:""}.fa-car-on{--fa:"";--fa--fa:""}.fa-sleigh{--fa:"";--fa--fa:""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:"";--fa--fa:""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:"";--fa--fa:""}.fa-water{--fa:"";--fa--fa:""}.fa-calendar-check{--fa:"";--fa--fa:""}.fa-braille{--fa:"";--fa--fa:""}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:"";--fa--fa:""}.fa-landmark{--fa:"";--fa--fa:""}.fa-truck{--fa:"";--fa--fa:""}.fa-crosshairs{--fa:"";--fa--fa:""}.fa-person-cane{--fa:"";--fa--fa:""}.fa-tent{--fa:"";--fa--fa:""}.fa-vest-patches{--fa:"";--fa--fa:""}.fa-check-double{--fa:"";--fa--fa:""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:"";--fa--fa:""}.fa-money-bill-wheat{--fa:"";--fa--fa:""}.fa-cookie{--fa:"";--fa--fa:""}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:"";--fa--fa:""}.fa-hard-drive,.fa-hdd{--fa:"";--fa--fa:""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:"";--fa--fa:""}.fa-dumbbell{--fa:"";--fa--fa:""}.fa-list-alt,.fa-rectangle-list{--fa:"";--fa--fa:""}.fa-tarp-droplet{--fa:"";--fa--fa:""}.fa-house-medical-circle-check{--fa:"";--fa--fa:""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:"";--fa--fa:""}.fa-calendar-plus{--fa:"";--fa--fa:""}.fa-plane-arrival{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:"";--fa--fa:""}.fa-subway,.fa-train-subway{--fa:"";--fa--fa:""}.fa-chart-gantt{--fa:"";--fa--fa:""}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:"";--fa--fa:""}.fa-crop-alt,.fa-crop-simple{--fa:"";--fa--fa:""}.fa-money-bill-1,.fa-money-bill-alt{--fa:"";--fa--fa:""}.fa-left-long,.fa-long-arrow-alt-left{--fa:"";--fa--fa:""}.fa-dna{--fa:"";--fa--fa:""}.fa-virus-slash{--fa:"";--fa--fa:""}.fa-minus,.fa-subtract{--fa:"";--fa--fa:""}.fa-chess{--fa:"";--fa--fa:""}.fa-arrow-left-long,.fa-long-arrow-left{--fa:"";--fa--fa:""}.fa-plug-circle-check{--fa:"";--fa--fa:""}.fa-street-view{--fa:"";--fa--fa:""}.fa-franc-sign{--fa:"";--fa--fa:""}.fa-volume-off{--fa:"";--fa--fa:""}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:"";--fa--fa:""}.fa-cog,.fa-gear{--fa:"";--fa--fa:""}.fa-droplet-slash,.fa-tint-slash{--fa:"";--fa--fa:""}.fa-mosque{--fa:"";--fa--fa:""}.fa-mosquito{--fa:"";--fa--fa:""}.fa-star-of-david{--fa:"";--fa--fa:""}.fa-person-military-rifle{--fa:"";--fa--fa:""}.fa-cart-shopping,.fa-shopping-cart{--fa:"";--fa--fa:""}.fa-vials{--fa:"";--fa--fa:""}.fa-plug-circle-plus{--fa:"";--fa--fa:""}.fa-place-of-worship{--fa:"";--fa--fa:""}.fa-grip-vertical{--fa:"";--fa--fa:""}.fa-hexagon-nodes{--fa:"";--fa--fa:""}.fa-arrow-turn-up,.fa-level-up{--fa:"";--fa--fa:""}.fa-u{--fa:"U";--fa--fa:"UU"}.fa-square-root-alt,.fa-square-root-variable{--fa:"";--fa--fa:""}.fa-clock,.fa-clock-four{--fa:"";--fa--fa:""}.fa-backward-step,.fa-step-backward{--fa:"";--fa--fa:""}.fa-pallet{--fa:"";--fa--fa:""}.fa-faucet{--fa:"";--fa--fa:""}.fa-baseball-bat-ball{--fa:"";--fa--fa:""}.fa-s{--fa:"S";--fa--fa:"SS"}.fa-timeline{--fa:"";--fa--fa:""}.fa-keyboard{--fa:"";--fa--fa:""}.fa-caret-down{--fa:"";--fa--fa:""}.fa-clinic-medical,.fa-house-chimney-medical{--fa:"";--fa--fa:""}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:"";--fa--fa:""}.fa-mobile-android-alt,.fa-mobile-screen{--fa:"";--fa--fa:""}.fa-plane-up{--fa:"";--fa--fa:""}.fa-piggy-bank{--fa:"";--fa--fa:""}.fa-battery-3,.fa-battery-half{--fa:"";--fa--fa:""}.fa-mountain-city{--fa:"";--fa--fa:""}.fa-coins{--fa:"";--fa--fa:""}.fa-khanda{--fa:"";--fa--fa:""}.fa-sliders,.fa-sliders-h{--fa:"";--fa--fa:""}.fa-folder-tree{--fa:"";--fa--fa:""}.fa-network-wired{--fa:"";--fa--fa:""}.fa-map-pin{--fa:"";--fa--fa:""}.fa-hamsa{--fa:"";--fa--fa:""}.fa-cent-sign{--fa:"";--fa--fa:""}.fa-flask{--fa:"";--fa--fa:""}.fa-person-pregnant{--fa:"";--fa--fa:""}.fa-wand-sparkles{--fa:"";--fa--fa:""}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:"";--fa--fa:""}.fa-ticket{--fa:"";--fa--fa:""}.fa-power-off{--fa:"";--fa--fa:""}.fa-long-arrow-alt-right,.fa-right-long{--fa:"";--fa--fa:""}.fa-flag-usa{--fa:"";--fa--fa:""}.fa-laptop-file{--fa:"";--fa--fa:""}.fa-teletype,.fa-tty{--fa:"";--fa--fa:""}.fa-diagram-next{--fa:"";--fa--fa:""}.fa-person-rifle{--fa:"";--fa--fa:""}.fa-house-medical-circle-exclamation{--fa:"";--fa--fa:""}.fa-closed-captioning{--fa:"";--fa--fa:""}.fa-hiking,.fa-person-hiking{--fa:"";--fa--fa:""}.fa-venus-double{--fa:"";--fa--fa:""}.fa-images{--fa:"";--fa--fa:""}.fa-calculator{--fa:"";--fa--fa:""}.fa-people-pulling{--fa:"";--fa--fa:""}.fa-n{--fa:"N";--fa--fa:"NN"}.fa-cable-car,.fa-tram{--fa:"";--fa--fa:""}.fa-cloud-rain{--fa:"";--fa--fa:""}.fa-building-circle-xmark{--fa:"";--fa--fa:""}.fa-ship{--fa:"";--fa--fa:""}.fa-arrows-down-to-line{--fa:"";--fa--fa:""}.fa-download{--fa:"";--fa--fa:""}.fa-face-grin,.fa-grin{--fa:"";--fa--fa:""}.fa-backspace,.fa-delete-left{--fa:"";--fa--fa:""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:"";--fa--fa:""}.fa-file-circle-check{--fa:"";--fa--fa:""}.fa-forward{--fa:"";--fa--fa:""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:"";--fa--fa:""}.fa-face-meh,.fa-meh{--fa:"";--fa--fa:""}.fa-align-center{--fa:"";--fa--fa:""}.fa-book-dead,.fa-book-skull{--fa:"";--fa--fa:""}.fa-drivers-license,.fa-id-card{--fa:"";--fa--fa:""}.fa-dedent,.fa-outdent{--fa:"";--fa--fa:""}.fa-heart-circle-exclamation{--fa:"";--fa--fa:""}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:"";--fa--fa:""}.fa-calendar-week{--fa:"";--fa--fa:""}.fa-laptop-medical{--fa:"";--fa--fa:""}.fa-b{--fa:"B";--fa--fa:"BB"}.fa-file-medical{--fa:"";--fa--fa:""}.fa-dice-one{--fa:"";--fa--fa:""}.fa-kiwi-bird{--fa:"";--fa--fa:""}.fa-arrow-right-arrow-left,.fa-exchange{--fa:"";--fa--fa:""}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:"";--fa--fa:""}.fa-cutlery,.fa-utensils{--fa:"";--fa--fa:""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:"";--fa--fa:""}.fa-mill-sign{--fa:"";--fa--fa:""}.fa-bowl-rice{--fa:"";--fa--fa:""}.fa-skull{--fa:"";--fa--fa:""}.fa-broadcast-tower,.fa-tower-broadcast{--fa:"";--fa--fa:""}.fa-truck-pickup{--fa:"";--fa--fa:""}.fa-long-arrow-alt-up,.fa-up-long{--fa:"";--fa--fa:""}.fa-stop{--fa:"";--fa--fa:""}.fa-code-merge{--fa:"";--fa--fa:""}.fa-upload{--fa:"";--fa--fa:""}.fa-hurricane{--fa:"";--fa--fa:""}.fa-mound{--fa:"";--fa--fa:""}.fa-toilet-portable{--fa:"";--fa--fa:""}.fa-compact-disc{--fa:"";--fa--fa:""}.fa-file-arrow-down,.fa-file-download{--fa:"";--fa--fa:""}.fa-caravan{--fa:"";--fa--fa:""}.fa-shield-cat{--fa:"";--fa--fa:""}.fa-bolt,.fa-zap{--fa:"";--fa--fa:""}.fa-glass-water{--fa:"";--fa--fa:""}.fa-oil-well{--fa:"";--fa--fa:""}.fa-vault{--fa:"";--fa--fa:""}.fa-mars{--fa:"";--fa--fa:""}.fa-toilet{--fa:"";--fa--fa:""}.fa-plane-circle-xmark{--fa:"";--fa--fa:""}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:"";--fa--fa:""}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:"";--fa--fa:""}.fa-sun{--fa:"";--fa--fa:""}.fa-guitar{--fa:"";--fa--fa:""}.fa-face-laugh-wink,.fa-laugh-wink{--fa:"";--fa--fa:""}.fa-horse-head{--fa:"";--fa--fa:""}.fa-bore-hole{--fa:"";--fa--fa:""}.fa-industry{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:"";--fa--fa:""}.fa-arrows-turn-to-dots{--fa:"";--fa--fa:""}.fa-florin-sign{--fa:"";--fa--fa:""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:"";--fa--fa:""}.fa-less-than{--fa:"\<";--fa--fa:"\<\<"}.fa-angle-down{--fa:"";--fa--fa:""}.fa-car-tunnel{--fa:"";--fa--fa:""}.fa-head-side-cough{--fa:"";--fa--fa:""}.fa-grip-lines{--fa:"";--fa--fa:""}.fa-thumbs-down{--fa:"";--fa--fa:""}.fa-user-lock{--fa:"";--fa--fa:""}.fa-arrow-right-long,.fa-long-arrow-right{--fa:"";--fa--fa:""}.fa-anchor-circle-xmark{--fa:"";--fa--fa:""}.fa-ellipsis,.fa-ellipsis-h{--fa:"";--fa--fa:""}.fa-chess-pawn{--fa:"";--fa--fa:""}.fa-first-aid,.fa-kit-medical{--fa:"";--fa--fa:""}.fa-person-through-window{--fa:"";--fa--fa:""}.fa-toolbox{--fa:"";--fa--fa:""}.fa-hands-holding-circle{--fa:"";--fa--fa:""}.fa-bug{--fa:"";--fa--fa:""}.fa-credit-card,.fa-credit-card-alt{--fa:"";--fa--fa:""}.fa-automobile,.fa-car{--fa:"";--fa--fa:""}.fa-hand-holding-hand{--fa:"";--fa--fa:""}.fa-book-open-reader,.fa-book-reader{--fa:"";--fa--fa:""}.fa-mountain-sun{--fa:"";--fa--fa:""}.fa-arrows-left-right-to-line{--fa:"";--fa--fa:""}.fa-dice-d20{--fa:"";--fa--fa:""}.fa-truck-droplet{--fa:"";--fa--fa:""}.fa-file-circle-xmark{--fa:"";--fa--fa:""}.fa-temperature-arrow-up,.fa-temperature-up{--fa:"";--fa--fa:""}.fa-medal{--fa:"";--fa--fa:""}.fa-bed{--fa:"";--fa--fa:""}.fa-h-square,.fa-square-h{--fa:"";--fa--fa:""}.fa-podcast{--fa:"";--fa--fa:""}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:"";--fa--fa:""}.fa-bell{--fa:"";--fa--fa:""}.fa-superscript{--fa:"";--fa--fa:""}.fa-plug-circle-xmark{--fa:"";--fa--fa:""}.fa-star-of-life{--fa:"";--fa--fa:""}.fa-phone-slash{--fa:"";--fa--fa:""}.fa-paint-roller{--fa:"";--fa--fa:""}.fa-hands-helping,.fa-handshake-angle{--fa:"";--fa--fa:""}.fa-location-dot,.fa-map-marker-alt{--fa:"";--fa--fa:""}.fa-file{--fa:"";--fa--fa:""}.fa-greater-than{--fa:"\>";--fa--fa:"\>\>"}.fa-person-swimming,.fa-swimmer{--fa:"";--fa--fa:""}.fa-arrow-down{--fa:"";--fa--fa:""}.fa-droplet,.fa-tint{--fa:"";--fa--fa:""}.fa-eraser{--fa:"";--fa--fa:""}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:"";--fa--fa:""}.fa-person-burst{--fa:"";--fa--fa:""}.fa-dove{--fa:"";--fa--fa:""}.fa-battery-0,.fa-battery-empty{--fa:"";--fa--fa:""}.fa-socks{--fa:"";--fa--fa:""}.fa-inbox{--fa:"";--fa--fa:""}.fa-section{--fa:"";--fa--fa:""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:"";--fa--fa:""}.fa-envelope-open-text{--fa:"";--fa--fa:""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:"";--fa--fa:""}.fa-wine-bottle{--fa:"";--fa--fa:""}.fa-chess-rook{--fa:"";--fa--fa:""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:"";--fa--fa:""}.fa-dharmachakra{--fa:"";--fa--fa:""}.fa-hotdog{--fa:"";--fa--fa:""}.fa-blind,.fa-person-walking-with-cane{--fa:"";--fa--fa:""}.fa-drum{--fa:"";--fa--fa:""}.fa-ice-cream{--fa:"";--fa--fa:""}.fa-heart-circle-bolt{--fa:"";--fa--fa:""}.fa-fax{--fa:"";--fa--fa:""}.fa-paragraph{--fa:"";--fa--fa:""}.fa-check-to-slot,.fa-vote-yea{--fa:"";--fa--fa:""}.fa-star-half{--fa:"";--fa--fa:""}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:"";--fa--fa:""}.fa-chain,.fa-link{--fa:"";--fa--fa:""}.fa-assistive-listening-systems,.fa-ear-listen{--fa:"";--fa--fa:""}.fa-tree-city{--fa:"";--fa--fa:""}.fa-play{--fa:"";--fa--fa:""}.fa-font{--fa:"";--fa--fa:""}.fa-table-cells-row-lock{--fa:"";--fa--fa:""}.fa-rupiah-sign{--fa:"";--fa--fa:""}.fa-magnifying-glass,.fa-search{--fa:"";--fa--fa:""}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:"";--fa--fa:""}.fa-diagnoses,.fa-person-dots-from-line{--fa:"";--fa--fa:""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:"";--fa--fa:""}.fa-naira-sign{--fa:"";--fa--fa:""}.fa-cart-arrow-down{--fa:"";--fa--fa:""}.fa-walkie-talkie{--fa:"";--fa--fa:""}.fa-file-edit,.fa-file-pen{--fa:"";--fa--fa:""}.fa-receipt{--fa:"";--fa--fa:""}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:"";--fa--fa:""}.fa-suitcase-rolling{--fa:"";--fa--fa:""}.fa-person-circle-exclamation{--fa:"";--fa--fa:""}.fa-chevron-down{--fa:"";--fa--fa:""}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:"";--fa--fa:""}.fa-skull-crossbones{--fa:"";--fa--fa:""}.fa-code-compare{--fa:"";--fa--fa:""}.fa-list-dots,.fa-list-ul{--fa:"";--fa--fa:""}.fa-school-lock{--fa:"";--fa--fa:""}.fa-tower-cell{--fa:"";--fa--fa:""}.fa-down-long,.fa-long-arrow-alt-down{--fa:"";--fa--fa:""}.fa-ranking-star{--fa:"";--fa--fa:""}.fa-chess-king{--fa:"";--fa--fa:""}.fa-person-harassing{--fa:"";--fa--fa:""}.fa-brazilian-real-sign{--fa:"";--fa--fa:""}.fa-landmark-alt,.fa-landmark-dome{--fa:"";--fa--fa:""}.fa-arrow-up{--fa:"";--fa--fa:""}.fa-television,.fa-tv,.fa-tv-alt{--fa:"";--fa--fa:""}.fa-shrimp{--fa:"";--fa--fa:""}.fa-list-check,.fa-tasks{--fa:"";--fa--fa:""}.fa-jug-detergent{--fa:"";--fa--fa:""}.fa-circle-user,.fa-user-circle{--fa:"";--fa--fa:""}.fa-user-shield{--fa:"";--fa--fa:""}.fa-wind{--fa:"";--fa--fa:""}.fa-car-burst,.fa-car-crash{--fa:"";--fa--fa:""}.fa-y{--fa:"Y";--fa--fa:"YY"}.fa-person-snowboarding,.fa-snowboarding{--fa:"";--fa--fa:""}.fa-shipping-fast,.fa-truck-fast{--fa:"";--fa--fa:""}.fa-fish{--fa:"";--fa--fa:""}.fa-user-graduate{--fa:"";--fa--fa:""}.fa-adjust,.fa-circle-half-stroke{--fa:"";--fa--fa:""}.fa-clapperboard{--fa:"";--fa--fa:""}.fa-circle-radiation,.fa-radiation-alt{--fa:"";--fa--fa:""}.fa-baseball,.fa-baseball-ball{--fa:"";--fa--fa:""}.fa-jet-fighter-up{--fa:"";--fa--fa:""}.fa-diagram-project,.fa-project-diagram{--fa:"";--fa--fa:""}.fa-copy{--fa:"";--fa--fa:""}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:"";--fa--fa:""}.fa-hand-sparkles{--fa:"";--fa--fa:""}.fa-grip,.fa-grip-horizontal{--fa:"";--fa--fa:""}.fa-share-from-square,.fa-share-square{--fa:"";--fa--fa:""}.fa-child-combatant,.fa-child-rifle{--fa:"";--fa--fa:""}.fa-gun{--fa:"";--fa--fa:""}.fa-phone-square,.fa-square-phone{--fa:"";--fa--fa:""}.fa-add,.fa-plus{--fa:"\+";--fa--fa:"\+\+"}.fa-expand{--fa:"";--fa--fa:""}.fa-computer{--fa:"";--fa--fa:""}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:"";--fa--fa:""}.fa-arrows,.fa-arrows-up-down-left-right{--fa:"";--fa--fa:""}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:"";--fa--fa:""}.fa-peso-sign{--fa:"";--fa--fa:""}.fa-building-shield{--fa:"";--fa--fa:""}.fa-baby{--fa:"";--fa--fa:""}.fa-users-line{--fa:"";--fa--fa:""}.fa-quote-left,.fa-quote-left-alt{--fa:"";--fa--fa:""}.fa-tractor{--fa:"";--fa--fa:""}.fa-trash-arrow-up,.fa-trash-restore{--fa:"";--fa--fa:""}.fa-arrow-down-up-lock{--fa:"";--fa--fa:""}.fa-lines-leaning{--fa:"";--fa--fa:""}.fa-ruler-combined{--fa:"";--fa--fa:""}.fa-copyright{--fa:"";--fa--fa:""}.fa-equals{--fa:"\=";--fa--fa:"\=\="}.fa-blender{--fa:"";--fa--fa:""}.fa-teeth{--fa:"";--fa--fa:""}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:"";--fa--fa:""}.fa-map{--fa:"";--fa--fa:""}.fa-rocket{--fa:"";--fa--fa:""}.fa-photo-film,.fa-photo-video{--fa:"";--fa--fa:""}.fa-folder-minus{--fa:"";--fa--fa:""}.fa-hexagon-nodes-bolt{--fa:"";--fa--fa:""}.fa-store{--fa:"";--fa--fa:""}.fa-arrow-trend-up{--fa:"";--fa--fa:""}.fa-plug-circle-minus{--fa:"";--fa--fa:""}.fa-sign,.fa-sign-hanging{--fa:"";--fa--fa:""}.fa-bezier-curve{--fa:"";--fa--fa:""}.fa-bell-slash{--fa:"";--fa--fa:""}.fa-tablet,.fa-tablet-android{--fa:"";--fa--fa:""}.fa-school-flag{--fa:"";--fa--fa:""}.fa-fill{--fa:"";--fa--fa:""}.fa-angle-up{--fa:"";--fa--fa:""}.fa-drumstick-bite{--fa:"";--fa--fa:""}.fa-holly-berry{--fa:"";--fa--fa:""}.fa-chevron-left{--fa:"";--fa--fa:""}.fa-bacteria{--fa:"";--fa--fa:""}.fa-hand-lizard{--fa:"";--fa--fa:""}.fa-notdef{--fa:"";--fa--fa:""}.fa-disease{--fa:"";--fa--fa:""}.fa-briefcase-medical{--fa:"";--fa--fa:""}.fa-genderless{--fa:"";--fa--fa:""}.fa-chevron-right{--fa:"";--fa--fa:""}.fa-retweet{--fa:"";--fa--fa:""}.fa-car-alt,.fa-car-rear{--fa:"";--fa--fa:""}.fa-pump-soap{--fa:"";--fa--fa:""}.fa-video-slash{--fa:"";--fa--fa:""}.fa-battery-2,.fa-battery-quarter{--fa:"";--fa--fa:""}.fa-radio{--fa:"";--fa--fa:""}.fa-baby-carriage,.fa-carriage-baby{--fa:"";--fa--fa:""}.fa-traffic-light{--fa:"";--fa--fa:""}.fa-thermometer{--fa:"";--fa--fa:""}.fa-vr-cardboard{--fa:"";--fa--fa:""}.fa-hand-middle-finger{--fa:"";--fa--fa:""}.fa-percent,.fa-percentage{--fa:"\%";--fa--fa:"\%\%"}.fa-truck-moving{--fa:"";--fa--fa:""}.fa-glass-water-droplet{--fa:"";--fa--fa:""}.fa-display{--fa:"";--fa--fa:""}.fa-face-smile,.fa-smile{--fa:"";--fa--fa:""}.fa-thumb-tack,.fa-thumbtack{--fa:"";--fa--fa:""}.fa-trophy{--fa:"";--fa--fa:""}.fa-person-praying,.fa-pray{--fa:"";--fa--fa:""}.fa-hammer{--fa:"";--fa--fa:""}.fa-hand-peace{--fa:"";--fa--fa:""}.fa-rotate,.fa-sync-alt{--fa:"";--fa--fa:""}.fa-spinner{--fa:"";--fa--fa:""}.fa-robot{--fa:"";--fa--fa:""}.fa-peace{--fa:"";--fa--fa:""}.fa-cogs,.fa-gears{--fa:"";--fa--fa:""}.fa-warehouse{--fa:"";--fa--fa:""}.fa-arrow-up-right-dots{--fa:"";--fa--fa:""}.fa-splotch{--fa:"";--fa--fa:""}.fa-face-grin-hearts,.fa-grin-hearts{--fa:"";--fa--fa:""}.fa-dice-four{--fa:"";--fa--fa:""}.fa-sim-card{--fa:"";--fa--fa:""}.fa-transgender,.fa-transgender-alt{--fa:"";--fa--fa:""}.fa-mercury{--fa:"";--fa--fa:""}.fa-arrow-turn-down,.fa-level-down{--fa:"";--fa--fa:""}.fa-person-falling-burst{--fa:"";--fa--fa:""}.fa-award{--fa:"";--fa--fa:""}.fa-ticket-alt,.fa-ticket-simple{--fa:"";--fa--fa:""}.fa-building{--fa:"";--fa--fa:""}.fa-angle-double-left,.fa-angles-left{--fa:"";--fa--fa:""}.fa-qrcode{--fa:"";--fa--fa:""}.fa-clock-rotate-left,.fa-history{--fa:"";--fa--fa:""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:"";--fa--fa:""}.fa-arrow-right-from-file,.fa-file-export{--fa:"";--fa--fa:""}.fa-shield,.fa-shield-blank{--fa:"";--fa--fa:""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:"";--fa--fa:""}.fa-comment-nodes{--fa:"";--fa--fa:""}.fa-house-medical{--fa:"";--fa--fa:""}.fa-golf-ball,.fa-golf-ball-tee{--fa:"";--fa--fa:""}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:"";--fa--fa:""}.fa-house-chimney-window{--fa:"";--fa--fa:""}.fa-pen-nib{--fa:"";--fa--fa:""}.fa-tent-arrow-turn-left{--fa:"";--fa--fa:""}.fa-tents{--fa:"";--fa--fa:""}.fa-magic,.fa-wand-magic{--fa:"";--fa--fa:""}.fa-dog{--fa:"";--fa--fa:""}.fa-carrot{--fa:"";--fa--fa:""}.fa-moon{--fa:"";--fa--fa:""}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:"";--fa--fa:""}.fa-cheese{--fa:"";--fa--fa:""}.fa-yin-yang{--fa:"";--fa--fa:""}.fa-music{--fa:"";--fa--fa:""}.fa-code-commit{--fa:"";--fa--fa:""}.fa-temperature-low{--fa:"";--fa--fa:""}.fa-biking,.fa-person-biking{--fa:"";--fa--fa:""}.fa-broom{--fa:"";--fa--fa:""}.fa-shield-heart{--fa:"";--fa--fa:""}.fa-gopuram{--fa:"";--fa--fa:""}.fa-earth-oceania,.fa-globe-oceania{--fa:"";--fa--fa:""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:"";--fa--fa:""}.fa-hashtag{--fa:"\#";--fa--fa:"\#\#"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:"";--fa--fa:""}.fa-oil-can{--fa:"";--fa--fa:""}.fa-t{--fa:"T";--fa--fa:"TT"}.fa-hippo{--fa:"";--fa--fa:""}.fa-chart-column{--fa:"";--fa--fa:""}.fa-infinity{--fa:"";--fa--fa:""}.fa-vial-circle-check{--fa:"";--fa--fa:""}.fa-person-arrow-down-to-line{--fa:"";--fa--fa:""}.fa-voicemail{--fa:"";--fa--fa:""}.fa-fan{--fa:"";--fa--fa:""}.fa-person-walking-luggage{--fa:"";--fa--fa:""}.fa-arrows-alt-v,.fa-up-down{--fa:"";--fa--fa:""}.fa-cloud-moon-rain{--fa:"";--fa--fa:""}.fa-calendar{--fa:"";--fa--fa:""}.fa-trailer{--fa:"";--fa--fa:""}.fa-bahai,.fa-haykal{--fa:"";--fa--fa:""}.fa-sd-card{--fa:"";--fa--fa:""}.fa-dragon{--fa:"";--fa--fa:""}.fa-shoe-prints{--fa:"";--fa--fa:""}.fa-circle-plus,.fa-plus-circle{--fa:"";--fa--fa:""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:"";--fa--fa:""}.fa-hand-holding{--fa:"";--fa--fa:""}.fa-plug-circle-exclamation{--fa:"";--fa--fa:""}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:"";--fa--fa:""}.fa-clone{--fa:"";--fa--fa:""}.fa-person-walking-arrow-loop-left{--fa:"";--fa--fa:""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:"";--fa--fa:""}.fa-fire-alt,.fa-fire-flame-curved{--fa:"";--fa--fa:""}.fa-tornado{--fa:"";--fa--fa:""}.fa-file-circle-plus{--fa:"";--fa--fa:""}.fa-book-quran,.fa-quran{--fa:"";--fa--fa:""}.fa-anchor{--fa:"";--fa--fa:""}.fa-border-all{--fa:"";--fa--fa:""}.fa-angry,.fa-face-angry{--fa:"";--fa--fa:""}.fa-cookie-bite{--fa:"";--fa--fa:""}.fa-arrow-trend-down{--fa:"";--fa--fa:""}.fa-feed,.fa-rss{--fa:"";--fa--fa:""}.fa-draw-polygon{--fa:"";--fa--fa:""}.fa-balance-scale,.fa-scale-balanced{--fa:"";--fa--fa:""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:"";--fa--fa:""}.fa-shower{--fa:"";--fa--fa:""}.fa-desktop,.fa-desktop-alt{--fa:"";--fa--fa:""}.fa-m{--fa:"M";--fa--fa:"MM"}.fa-table-list,.fa-th-list{--fa:"";--fa--fa:""}.fa-comment-sms,.fa-sms{--fa:"";--fa--fa:""}.fa-book{--fa:"";--fa--fa:""}.fa-user-plus{--fa:"";--fa--fa:""}.fa-check{--fa:"";--fa--fa:""}.fa-battery-4,.fa-battery-three-quarters{--fa:"";--fa--fa:""}.fa-house-circle-check{--fa:"";--fa--fa:""}.fa-angle-left{--fa:"";--fa--fa:""}.fa-diagram-successor{--fa:"";--fa--fa:""}.fa-truck-arrow-right{--fa:"";--fa--fa:""}.fa-arrows-split-up-and-left{--fa:"";--fa--fa:""}.fa-fist-raised,.fa-hand-fist{--fa:"";--fa--fa:""}.fa-cloud-moon{--fa:"";--fa--fa:""}.fa-briefcase{--fa:"";--fa--fa:""}.fa-person-falling{--fa:"";--fa--fa:""}.fa-image-portrait,.fa-portrait{--fa:"";--fa--fa:""}.fa-user-tag{--fa:"";--fa--fa:""}.fa-rug{--fa:"";--fa--fa:""}.fa-earth-europe,.fa-globe-europe{--fa:"";--fa--fa:""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:"";--fa--fa:""}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:"";--fa--fa:""}.fa-baht-sign{--fa:"";--fa--fa:""}.fa-book-open{--fa:"";--fa--fa:""}.fa-book-journal-whills,.fa-journal-whills{--fa:"";--fa--fa:""}.fa-handcuffs{--fa:"";--fa--fa:""}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:"";--fa--fa:""}.fa-database{--fa:"";--fa--fa:""}.fa-mail-forward,.fa-share{--fa:"";--fa--fa:""}.fa-bottle-droplet{--fa:"";--fa--fa:""}.fa-mask-face{--fa:"";--fa--fa:""}.fa-hill-rockslide{--fa:"";--fa--fa:""}.fa-exchange-alt,.fa-right-left{--fa:"";--fa--fa:""}.fa-paper-plane{--fa:"";--fa--fa:""}.fa-road-circle-exclamation{--fa:"";--fa--fa:""}.fa-dungeon{--fa:"";--fa--fa:""}.fa-align-right{--fa:"";--fa--fa:""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:"";--fa--fa:""}.fa-life-ring{--fa:"";--fa--fa:""}.fa-hands,.fa-sign-language,.fa-signing{--fa:"";--fa--fa:""}.fa-calendar-day{--fa:"";--fa--fa:""}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:"";--fa--fa:""}.fa-arrows-up-down,.fa-arrows-v{--fa:"";--fa--fa:""}.fa-face-grimace,.fa-grimace{--fa:"";--fa--fa:""}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:"";--fa--fa:""}.fa-level-down-alt,.fa-turn-down{--fa:"";--fa--fa:""}.fa-person-walking-arrow-right{--fa:"";--fa--fa:""}.fa-envelope-square,.fa-square-envelope{--fa:"";--fa--fa:""}.fa-dice{--fa:"";--fa--fa:""}.fa-bowling-ball{--fa:"";--fa--fa:""}.fa-brain{--fa:"";--fa--fa:""}.fa-band-aid,.fa-bandage{--fa:"";--fa--fa:""}.fa-calendar-minus{--fa:"";--fa--fa:""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:"";--fa--fa:""}.fa-gifts{--fa:"";--fa--fa:""}.fa-hotel{--fa:"";--fa--fa:""}.fa-earth-asia,.fa-globe-asia{--fa:"";--fa--fa:""}.fa-id-card-alt,.fa-id-card-clip{--fa:"";--fa--fa:""}.fa-magnifying-glass-plus,.fa-search-plus{--fa:"";--fa--fa:""}.fa-thumbs-up{--fa:"";--fa--fa:""}.fa-user-clock{--fa:"";--fa--fa:""}.fa-allergies,.fa-hand-dots{--fa:"";--fa--fa:""}.fa-file-invoice{--fa:"";--fa--fa:""}.fa-window-minimize{--fa:"";--fa--fa:""}.fa-coffee,.fa-mug-saucer{--fa:"";--fa--fa:""}.fa-brush{--fa:"";--fa--fa:""}.fa-file-half-dashed{--fa:"";--fa--fa:""}.fa-mask{--fa:"";--fa--fa:""}.fa-magnifying-glass-minus,.fa-search-minus{--fa:"";--fa--fa:""}.fa-ruler-vertical{--fa:"";--fa--fa:""}.fa-user-alt,.fa-user-large{--fa:"";--fa--fa:""}.fa-train-tram{--fa:"";--fa--fa:""}.fa-user-nurse{--fa:"";--fa--fa:""}.fa-syringe{--fa:"";--fa--fa:""}.fa-cloud-sun{--fa:"";--fa--fa:""}.fa-stopwatch-20{--fa:"";--fa--fa:""}.fa-square-full{--fa:"";--fa--fa:""}.fa-magnet{--fa:"";--fa--fa:""}.fa-jar{--fa:"";--fa--fa:""}.fa-note-sticky,.fa-sticky-note{--fa:"";--fa--fa:""}.fa-bug-slash{--fa:"";--fa--fa:""}.fa-arrow-up-from-water-pump{--fa:"";--fa--fa:""}.fa-bone{--fa:"";--fa--fa:""}.fa-table-cells-row-unlock{--fa:"";--fa--fa:""}.fa-user-injured{--fa:"";--fa--fa:""}.fa-face-sad-tear,.fa-sad-tear{--fa:"";--fa--fa:""}.fa-plane{--fa:"";--fa--fa:""}.fa-tent-arrows-down{--fa:"";--fa--fa:""}.fa-exclamation{--fa:"\!";--fa--fa:"\!\!"}.fa-arrows-spin{--fa:"";--fa--fa:""}.fa-print{--fa:"";--fa--fa:""}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:"";--fa--fa:""}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:"\$";--fa--fa:"\$\$"}.fa-x{--fa:"X";--fa--fa:"XX"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:"";--fa--fa:""}.fa-users-cog,.fa-users-gear{--fa:"";--fa--fa:""}.fa-person-military-pointing{--fa:"";--fa--fa:""}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:"";--fa--fa:""}.fa-umbrella{--fa:"";--fa--fa:""}.fa-trowel{--fa:"";--fa--fa:""}.fa-d{--fa:"D";--fa--fa:"DD"}.fa-stapler{--fa:"";--fa--fa:""}.fa-masks-theater,.fa-theater-masks{--fa:"";--fa--fa:""}.fa-kip-sign{--fa:"";--fa--fa:""}.fa-hand-point-left{--fa:"";--fa--fa:""}.fa-handshake-alt,.fa-handshake-simple{--fa:"";--fa--fa:""}.fa-fighter-jet,.fa-jet-fighter{--fa:"";--fa--fa:""}.fa-share-alt-square,.fa-square-share-nodes{--fa:"";--fa--fa:""}.fa-barcode{--fa:"";--fa--fa:""}.fa-plus-minus{--fa:"";--fa--fa:""}.fa-video,.fa-video-camera{--fa:"";--fa--fa:""}.fa-graduation-cap,.fa-mortar-board{--fa:"";--fa--fa:""}.fa-hand-holding-medical{--fa:"";--fa--fa:""}.fa-person-circle-check{--fa:"";--fa--fa:""}.fa-level-up-alt,.fa-turn-up{--fa:"";--fa--fa:""}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:400;src:url(/build/fonts/fa-regular-400.4f6a2dab.woff2) format("woff2"),url(/build/fonts/fa-regular-400.05fdd87b.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:900;src:url(/build/fonts/fa-solid-900.83a538a0.woff2) format("woff2"),url(/build/fonts/fa-solid-900.ad1782c7.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(/build/fonts/fa-brands-400.fdbb5585.woff2) format("woff2"),url(/build/fonts/fa-brands-400.26b80c88.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:""}.fa-hooli{--fa:""}.fa-yelp{--fa:""}.fa-cc-visa{--fa:""}.fa-lastfm{--fa:""}.fa-shopware{--fa:""}.fa-creative-commons-nc{--fa:""}.fa-aws{--fa:""}.fa-redhat{--fa:""}.fa-yoast{--fa:""}.fa-cloudflare{--fa:""}.fa-ups{--fa:""}.fa-pixiv{--fa:""}.fa-wpexplorer{--fa:""}.fa-dyalog{--fa:""}.fa-bity{--fa:""}.fa-stackpath{--fa:""}.fa-buysellads{--fa:""}.fa-first-order{--fa:""}.fa-modx{--fa:""}.fa-guilded{--fa:""}.fa-vnv{--fa:""}.fa-js-square,.fa-square-js{--fa:""}.fa-microsoft{--fa:""}.fa-qq{--fa:""}.fa-orcid{--fa:""}.fa-java{--fa:""}.fa-invision{--fa:""}.fa-creative-commons-pd-alt{--fa:""}.fa-centercode{--fa:""}.fa-glide-g{--fa:""}.fa-drupal{--fa:""}.fa-jxl{--fa:""}.fa-dart-lang{--fa:""}.fa-hire-a-helper{--fa:""}.fa-creative-commons-by{--fa:""}.fa-unity{--fa:""}.fa-whmcs{--fa:""}.fa-rocketchat{--fa:""}.fa-vk{--fa:""}.fa-untappd{--fa:""}.fa-mailchimp{--fa:""}.fa-css3-alt{--fa:""}.fa-reddit-square,.fa-square-reddit{--fa:""}.fa-vimeo-v{--fa:""}.fa-contao{--fa:""}.fa-square-font-awesome{--fa:""}.fa-deskpro{--fa:""}.fa-brave{--fa:""}.fa-sistrix{--fa:""}.fa-instagram-square,.fa-square-instagram{--fa:""}.fa-battle-net{--fa:""}.fa-the-red-yeti{--fa:""}.fa-hacker-news-square,.fa-square-hacker-news{--fa:""}.fa-edge{--fa:""}.fa-threads{--fa:""}.fa-napster{--fa:""}.fa-snapchat-square,.fa-square-snapchat{--fa:""}.fa-google-plus-g{--fa:""}.fa-artstation{--fa:""}.fa-markdown{--fa:""}.fa-sourcetree{--fa:""}.fa-google-plus{--fa:""}.fa-diaspora{--fa:""}.fa-foursquare{--fa:""}.fa-stack-overflow{--fa:""}.fa-github-alt{--fa:""}.fa-phoenix-squadron{--fa:""}.fa-pagelines{--fa:""}.fa-algolia{--fa:""}.fa-red-river{--fa:""}.fa-creative-commons-sa{--fa:""}.fa-safari{--fa:""}.fa-google{--fa:""}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:""}.fa-atlassian{--fa:""}.fa-linkedin-in{--fa:""}.fa-digital-ocean{--fa:""}.fa-nimblr{--fa:""}.fa-chromecast{--fa:""}.fa-evernote{--fa:""}.fa-hacker-news{--fa:""}.fa-creative-commons-sampling{--fa:""}.fa-adversal{--fa:""}.fa-creative-commons{--fa:""}.fa-watchman-monitoring{--fa:""}.fa-fonticons{--fa:""}.fa-weixin{--fa:""}.fa-shirtsinbulk{--fa:""}.fa-codepen{--fa:""}.fa-git-alt{--fa:""}.fa-lyft{--fa:""}.fa-rev{--fa:""}.fa-windows{--fa:""}.fa-wizards-of-the-coast{--fa:""}.fa-square-viadeo,.fa-viadeo-square{--fa:""}.fa-meetup{--fa:""}.fa-centos{--fa:""}.fa-adn{--fa:""}.fa-cloudsmith{--fa:""}.fa-opensuse{--fa:""}.fa-pied-piper-alt{--fa:""}.fa-dribbble-square,.fa-square-dribbble{--fa:""}.fa-codiepie{--fa:""}.fa-node{--fa:""}.fa-mix{--fa:""}.fa-steam{--fa:""}.fa-cc-apple-pay{--fa:""}.fa-scribd{--fa:""}.fa-debian{--fa:""}.fa-openid{--fa:""}.fa-instalod{--fa:""}.fa-files-pinwheel{--fa:""}.fa-expeditedssl{--fa:""}.fa-sellcast{--fa:""}.fa-square-twitter,.fa-twitter-square{--fa:""}.fa-r-project{--fa:""}.fa-delicious{--fa:""}.fa-freebsd{--fa:""}.fa-vuejs{--fa:""}.fa-accusoft{--fa:""}.fa-ioxhost{--fa:""}.fa-fonticons-fi{--fa:""}.fa-app-store{--fa:""}.fa-cc-mastercard{--fa:""}.fa-itunes-note{--fa:""}.fa-golang{--fa:""}.fa-kickstarter,.fa-square-kickstarter{--fa:""}.fa-grav{--fa:""}.fa-weibo{--fa:""}.fa-uncharted{--fa:""}.fa-firstdraft{--fa:""}.fa-square-youtube,.fa-youtube-square{--fa:""}.fa-wikipedia-w{--fa:""}.fa-rendact,.fa-wpressr{--fa:""}.fa-angellist{--fa:""}.fa-galactic-republic{--fa:""}.fa-nfc-directional{--fa:""}.fa-skype{--fa:""}.fa-joget{--fa:""}.fa-fedora{--fa:""}.fa-stripe-s{--fa:""}.fa-meta{--fa:""}.fa-laravel{--fa:""}.fa-hotjar{--fa:""}.fa-bluetooth-b{--fa:""}.fa-square-letterboxd{--fa:""}.fa-sticker-mule{--fa:""}.fa-creative-commons-zero{--fa:""}.fa-hips{--fa:""}.fa-css{--fa:""}.fa-behance{--fa:""}.fa-reddit{--fa:""}.fa-discord{--fa:""}.fa-chrome{--fa:""}.fa-app-store-ios{--fa:""}.fa-cc-discover{--fa:""}.fa-wpbeginner{--fa:""}.fa-confluence{--fa:""}.fa-shoelace{--fa:""}.fa-mdb{--fa:""}.fa-dochub{--fa:""}.fa-accessible-icon{--fa:""}.fa-ebay{--fa:""}.fa-amazon{--fa:""}.fa-unsplash{--fa:""}.fa-yarn{--fa:""}.fa-square-steam,.fa-steam-square{--fa:""}.fa-500px{--fa:""}.fa-square-vimeo,.fa-vimeo-square{--fa:""}.fa-asymmetrik{--fa:""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:""}.fa-gratipay{--fa:""}.fa-apple{--fa:""}.fa-hive{--fa:""}.fa-gitkraken{--fa:""}.fa-keybase{--fa:""}.fa-apple-pay{--fa:""}.fa-padlet{--fa:""}.fa-amazon-pay{--fa:""}.fa-github-square,.fa-square-github{--fa:""}.fa-stumbleupon{--fa:""}.fa-fedex{--fa:""}.fa-phoenix-framework{--fa:""}.fa-shopify{--fa:""}.fa-neos{--fa:""}.fa-square-threads{--fa:""}.fa-hackerrank{--fa:""}.fa-researchgate{--fa:""}.fa-swift{--fa:""}.fa-angular{--fa:""}.fa-speakap{--fa:""}.fa-angrycreative{--fa:""}.fa-y-combinator{--fa:""}.fa-empire{--fa:""}.fa-envira{--fa:""}.fa-google-scholar{--fa:""}.fa-gitlab-square,.fa-square-gitlab{--fa:""}.fa-studiovinari{--fa:""}.fa-pied-piper{--fa:""}.fa-wordpress{--fa:""}.fa-product-hunt{--fa:""}.fa-firefox{--fa:""}.fa-linode{--fa:""}.fa-goodreads{--fa:""}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:""}.fa-jsfiddle{--fa:""}.fa-sith{--fa:""}.fa-themeisle{--fa:""}.fa-page4{--fa:""}.fa-hashnode{--fa:""}.fa-react{--fa:""}.fa-cc-paypal{--fa:""}.fa-squarespace{--fa:""}.fa-cc-stripe{--fa:""}.fa-creative-commons-share{--fa:""}.fa-bitcoin{--fa:""}.fa-keycdn{--fa:""}.fa-opera{--fa:""}.fa-itch-io{--fa:""}.fa-umbraco{--fa:""}.fa-galactic-senate{--fa:""}.fa-ubuntu{--fa:""}.fa-draft2digital{--fa:""}.fa-stripe{--fa:""}.fa-houzz{--fa:""}.fa-gg{--fa:""}.fa-dhl{--fa:""}.fa-pinterest-square,.fa-square-pinterest{--fa:""}.fa-xing{--fa:""}.fa-blackberry{--fa:""}.fa-creative-commons-pd{--fa:""}.fa-playstation{--fa:""}.fa-quinscape{--fa:""}.fa-less{--fa:""}.fa-blogger-b{--fa:""}.fa-opencart{--fa:""}.fa-vine{--fa:""}.fa-signal-messenger{--fa:""}.fa-paypal{--fa:""}.fa-gitlab{--fa:""}.fa-typo3{--fa:""}.fa-reddit-alien{--fa:""}.fa-yahoo{--fa:""}.fa-dailymotion{--fa:""}.fa-affiliatetheme{--fa:""}.fa-pied-piper-pp{--fa:""}.fa-bootstrap{--fa:""}.fa-odnoklassniki{--fa:""}.fa-nfc-symbol{--fa:""}.fa-mintbit{--fa:""}.fa-ethereum{--fa:""}.fa-speaker-deck{--fa:""}.fa-creative-commons-nc-eu{--fa:""}.fa-patreon{--fa:""}.fa-avianex{--fa:""}.fa-ello{--fa:""}.fa-gofore{--fa:""}.fa-bimobject{--fa:""}.fa-brave-reverse{--fa:""}.fa-facebook-f{--fa:""}.fa-google-plus-square,.fa-square-google-plus{--fa:""}.fa-web-awesome{--fa:""}.fa-mandalorian{--fa:""}.fa-first-order-alt{--fa:""}.fa-osi{--fa:""}.fa-google-wallet{--fa:""}.fa-d-and-d-beyond{--fa:""}.fa-periscope{--fa:""}.fa-fulcrum{--fa:""}.fa-cloudscale{--fa:""}.fa-forumbee{--fa:""}.fa-mizuni{--fa:""}.fa-schlix{--fa:""}.fa-square-xing,.fa-xing-square{--fa:""}.fa-bandcamp{--fa:""}.fa-wpforms{--fa:""}.fa-cloudversify{--fa:""}.fa-usps{--fa:""}.fa-megaport{--fa:""}.fa-magento{--fa:""}.fa-spotify{--fa:""}.fa-optin-monster{--fa:""}.fa-fly{--fa:""}.fa-square-bluesky{--fa:""}.fa-aviato{--fa:""}.fa-itunes{--fa:""}.fa-cuttlefish{--fa:""}.fa-blogger{--fa:""}.fa-flickr{--fa:""}.fa-viber{--fa:""}.fa-soundcloud{--fa:""}.fa-digg{--fa:""}.fa-tencent-weibo{--fa:""}.fa-letterboxd{--fa:""}.fa-symfony{--fa:""}.fa-maxcdn{--fa:""}.fa-etsy{--fa:""}.fa-facebook-messenger{--fa:""}.fa-audible{--fa:""}.fa-think-peaks{--fa:""}.fa-bilibili{--fa:""}.fa-erlang{--fa:""}.fa-x-twitter{--fa:""}.fa-cotton-bureau{--fa:""}.fa-dashcube{--fa:""}.fa-42-group,.fa-innosoft{--fa:""}.fa-stack-exchange{--fa:""}.fa-elementor{--fa:""}.fa-pied-piper-square,.fa-square-pied-piper{--fa:""}.fa-creative-commons-nd{--fa:""}.fa-palfed{--fa:""}.fa-superpowers{--fa:""}.fa-resolving{--fa:""}.fa-xbox{--fa:""}.fa-square-web-awesome-stroke{--fa:""}.fa-searchengin{--fa:""}.fa-tiktok{--fa:""}.fa-facebook-square,.fa-square-facebook{--fa:""}.fa-renren{--fa:""}.fa-linux{--fa:""}.fa-glide{--fa:""}.fa-linkedin{--fa:""}.fa-hubspot{--fa:""}.fa-deploydog{--fa:""}.fa-twitch{--fa:""}.fa-flutter{--fa:""}.fa-ravelry{--fa:""}.fa-mixer{--fa:""}.fa-lastfm-square,.fa-square-lastfm{--fa:""}.fa-vimeo{--fa:""}.fa-mendeley{--fa:""}.fa-uniregistry{--fa:""}.fa-figma{--fa:""}.fa-creative-commons-remix{--fa:""}.fa-cc-amazon-pay{--fa:""}.fa-dropbox{--fa:""}.fa-instagram{--fa:""}.fa-cmplid{--fa:""}.fa-upwork{--fa:""}.fa-facebook{--fa:""}.fa-gripfire{--fa:""}.fa-jedi-order{--fa:""}.fa-uikit{--fa:""}.fa-fort-awesome-alt{--fa:""}.fa-phabricator{--fa:""}.fa-ussunnah{--fa:""}.fa-earlybirds{--fa:""}.fa-trade-federation{--fa:""}.fa-autoprefixer{--fa:""}.fa-whatsapp{--fa:""}.fa-square-upwork{--fa:""}.fa-slideshare{--fa:""}.fa-google-play{--fa:""}.fa-viadeo{--fa:""}.fa-line{--fa:""}.fa-google-drive{--fa:""}.fa-servicestack{--fa:""}.fa-simplybuilt{--fa:""}.fa-bitbucket{--fa:""}.fa-imdb{--fa:""}.fa-deezer{--fa:""}.fa-raspberry-pi{--fa:""}.fa-jira{--fa:""}.fa-docker{--fa:""}.fa-screenpal{--fa:""}.fa-bluetooth{--fa:""}.fa-gitter{--fa:""}.fa-d-and-d{--fa:""}.fa-microblog{--fa:""}.fa-cc-diners-club{--fa:""}.fa-gg-circle{--fa:""}.fa-pied-piper-hat{--fa:""}.fa-kickstarter-k{--fa:""}.fa-yandex{--fa:""}.fa-readme{--fa:""}.fa-html5{--fa:""}.fa-sellsy{--fa:""}.fa-square-web-awesome{--fa:""}.fa-sass{--fa:""}.fa-wirsindhandwerk,.fa-wsh{--fa:""}.fa-buromobelexperte{--fa:""}.fa-salesforce{--fa:""}.fa-octopus-deploy{--fa:""}.fa-medapps{--fa:""}.fa-ns8{--fa:""}.fa-pinterest-p{--fa:""}.fa-apper{--fa:""}.fa-fort-awesome{--fa:""}.fa-waze{--fa:""}.fa-bluesky{--fa:""}.fa-cc-jcb{--fa:""}.fa-snapchat,.fa-snapchat-ghost{--fa:""}.fa-fantasy-flight-games{--fa:""}.fa-rust{--fa:""}.fa-wix{--fa:""}.fa-behance-square,.fa-square-behance{--fa:""}.fa-supple{--fa:""}.fa-webflow{--fa:""}.fa-rebel{--fa:""}.fa-css3{--fa:""}.fa-staylinked{--fa:""}.fa-kaggle{--fa:""}.fa-space-awesome{--fa:""}.fa-deviantart{--fa:""}.fa-cpanel{--fa:""}.fa-goodreads-g{--fa:""}.fa-git-square,.fa-square-git{--fa:""}.fa-square-tumblr,.fa-tumblr-square{--fa:""}.fa-trello{--fa:""}.fa-creative-commons-nc-jp{--fa:""}.fa-get-pocket{--fa:""}.fa-perbyte{--fa:""}.fa-grunt{--fa:""}.fa-weebly{--fa:""}.fa-connectdevelop{--fa:""}.fa-leanpub{--fa:""}.fa-black-tie{--fa:""}.fa-themeco{--fa:""}.fa-python{--fa:""}.fa-android{--fa:""}.fa-bots{--fa:""}.fa-free-code-camp{--fa:""}.fa-hornbill{--fa:""}.fa-js{--fa:""}.fa-ideal{--fa:""}.fa-git{--fa:""}.fa-dev{--fa:""}.fa-sketch{--fa:""}.fa-yandex-international{--fa:""}.fa-cc-amex{--fa:""}.fa-uber{--fa:""}.fa-github{--fa:""}.fa-php{--fa:""}.fa-alipay{--fa:""}.fa-youtube{--fa:""}.fa-skyatlas{--fa:""}.fa-firefox-browser{--fa:""}.fa-replyd{--fa:""}.fa-suse{--fa:""}.fa-jenkins{--fa:""}.fa-twitter{--fa:""}.fa-rockrms{--fa:""}.fa-pinterest{--fa:""}.fa-buffer{--fa:""}.fa-npm{--fa:""}.fa-yammer{--fa:""}.fa-btc{--fa:""}.fa-dribbble{--fa:""}.fa-stumbleupon-circle{--fa:""}.fa-internet-explorer{--fa:""}.fa-stubber{--fa:""}.fa-telegram,.fa-telegram-plane{--fa:""}.fa-old-republic{--fa:""}.fa-odysee{--fa:""}.fa-square-whatsapp,.fa-whatsapp-square{--fa:""}.fa-node-js{--fa:""}.fa-edge-legacy{--fa:""}.fa-slack,.fa-slack-hash{--fa:""}.fa-medrt{--fa:""}.fa-usb{--fa:""}.fa-tumblr{--fa:""}.fa-vaadin{--fa:""}.fa-quora{--fa:""}.fa-square-x-twitter{--fa:""}.fa-reacteurope{--fa:""}.fa-medium,.fa-medium-m{--fa:""}.fa-amilia{--fa:""}.fa-mixcloud{--fa:""}.fa-flipboard{--fa:""}.fa-viacoin{--fa:""}.fa-critical-role{--fa:""}.fa-sitrox{--fa:""}.fa-discourse{--fa:""}.fa-joomla{--fa:""}.fa-mastodon{--fa:""}.fa-airbnb{--fa:""}.fa-wolf-pack-battalion{--fa:""}.fa-buy-n-large{--fa:""}.fa-gulp{--fa:""}.fa-creative-commons-sampling-plus{--fa:""}.fa-strava{--fa:""}.fa-ember{--fa:""}.fa-canadian-maple-leaf{--fa:""}.fa-teamspeak{--fa:""}.fa-pushed{--fa:""}.fa-wordpress-simple{--fa:""}.fa-nutritionix{--fa:""}.fa-wodu{--fa:""}.fa-google-pay{--fa:""}.fa-intercom{--fa:""}.fa-zhihu{--fa:""}.fa-korvue{--fa:""}.fa-pix{--fa:""}.fa-steam-symbol{--fa:""}.inline-search{max-width:200px}@media(min-width:360px){.inline-search{max-width:235px}}@media(min-width:768px){.inline-search{max-width:325px}.search-dropdown{width:500px}}h1.navbar-brand a span{display:inline-block;padding-top:.5rem}h1.navbar-brand a:hover{text-decoration:none}#export-buttons .dropdown-menu,.inline-search .dropdown-menu,.page-actions .dropdown-menu{z-index:1021}.navbar{--tblr-navbar-brand-font-size:1rem}.user-shortcuts .dropdown-menu-card{min-width:260px}.user-shortcuts .user-shortcuts-icon{align-items:center;background-color:var(--tblr-bg-surface-secondary);color:var(--tblr-gray-500);display:flex;height:3.125rem;justify-content:center;margin-left:auto;margin-right:auto;width:3.125rem}.error-page{margin-bottom:50px}@media print{.control-sidebar,.sf-toolbar{display:none!important}.col-print-12{width:100%}.content-wrapper{margin:0!important}section.content{margin:0;padding:0}span i.dot{display:none;margin-right:0!important}}.page-center{justify-content:center}.hidden-no-space{margin:0;padding:0}.pre-scrollable{max-height:340px;overflow-y:scroll}td.timesheet-description ul{padding-left:15px}td.timesheet-description p{margin:0}td.badges{line-height:22px}.open-edit{cursor:pointer}td.w-min,th.w-min{white-space:nowrap;width:1%}table.dataTable thead>tr>th.hw-min{white-space:normal;width:1%}@media(min-width:576px){td.w-sm-min,th.w-sm-min{white-space:nowrap;width:1%}}.w-avatar{width:40px}.w-avatar img.avatar{max-width:40px}.list-group-item.danger{border-left:.2rem solid #d63939!important;padding-left:1.05rem}.list-group-item.success{border-left:.2rem solid #2fb344!important;padding-left:1.05rem}.box-body-scrollable{max-height:340px;overflow:auto}#activity_details_box th,#customer_details_box th,#project_details_box th{width:30%}.overlay{background:hsla(0,0%,100%,.7);height:100%;left:0;position:fixed;top:0;width:100%;z-index:1021}.overlay>.fas{color:#000;font-size:30px;left:50vw;margin-left:-15px;margin-top:-15px;position:absolute;top:50vh}table.dataTable{clear:both;margin-bottom:0!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;position:relative}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{font-weight:700}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:Font Awesome\ 6 Free;font-size:12px;opacity:.5;padding-left:5px}table.dataTable thead .sorting:after{content:"";opacity:.2}table.dataTable thead .sorting_asc:after{content:""}table.dataTable thead .sorting_desc:after{content:""}table.dataTable thead>tr>th{vertical-align:top;white-space:nowrap}table.dataTable th:active{outline:none}table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-bottom-width:0;border-left-width:0}table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}@media(min-width:1200px){table.dataTable.table>tbody>tr>td{vertical-align:middle}}table.dataTable .actions{width:40px}table.dataTable tr.summary td{background-color:var(--tblr-bg-surface-secondary);border:0;font-weight:700}table.dataTable tr th.multiCheckbox{width:15px}table.dataTable tr.overlapping{border-top:2px solid rgba(214,57,57,.2)}table.dataTable tr.exported{opacity:.7}table.dataTable td .btn-group{display:flex}table.dataTable td .label{font-size:85%;line-height:24px;padding:.3em .6em}table.dataTable td span.label-invisible{opacity:.6}table.dataTable td.weekend,table.dataTable th.weekend{background-color:var(--tblr-bg-surface-tertiary)}table.dataTable th.today{background-color:var(--tblr-highlight-bg)}table.dataTable td.total,table.dataTable th.total{font-weight:700}.form-dataTable table.dataTable .form-group{margin-bottom:0}table.table-hover tr.exported:hover{opacity:1}.action-dropdown,.actions .dropdown .dropdown-menu{z-index:1021}.calendar-entry ul{list-style-type:none;padding:0}.calendar-entry div{white-space:pre-line}.draggable{cursor:grab}#timesheet_calendar{--bs-gray-400:var(--tblr-border-color);--bs-gray-200:var(--tblr-gray-200)}.fc-day-sat,.fc-day-sun{background-color:var(--tblr-bg-surface-secondary)}@keyframes ticktac-blink{0%{opacity:1}5%{opacity:.95}10%{opacity:.9}15%{opacity:.85}20%{opacity:.8}25%{opacity:.75}30%{opacity:.7}35%{opacity:.65}40%{opacity:.6}45%{opacity:.65}50%{opacity:.7}55%{opacity:.75}60%{opacity:.8}65%{opacity:.85}70%{opacity:.9}75%{opacity:.95}to{opacity:1}}.ticktac-start i,.ticktac-stop i{animation:ticktac-blink 2s step-end infinite;font-size:140%}@media(max-width:991.98px){aside.navbar .btn-outline-white,header.navbar .btn-outline-white{border-color:hsla(0,0%,100%,.2)}}.ts-dropdown{z-index:1021}.ts-control>input{min-width:unset}.ts-dropdown .optgroup [data-selectable].option{padding-left:20px}.checkbox-menu.show{z-index:1021}.duration-widget .input-group{min-width:110px}.duration-widget input.duration-input{min-width:55px}#report-form div.btn-list{width:100%}#report-form div.btn-list div.selectpicker{max-width:400px;min-width:200px}#report-form div.btn-list li.dropdown-item .form-check{margin-bottom:0}#report-form div.btn-list .input-group{width:unset}.color-choice-item{border-radius:var(--tblr-border-radius);display:inline-block;height:20px;width:20px}fieldset>.mb-3.row:last-child{margin-bottom:0!important}.form-fieldset-light{background-color:unset;border-left:none;border-radius:0;border-right:none;border-top:none;margin-bottom:0}.form-fieldset-light:last-child{border:none}.modal-content{box-shadow:0 10px 80px rgba(0,0,0,.6)}.progress-group .progress-title{white-space:nowrap;width:100%}.progress-group .progress-title .progress-text{display:inline-block;width:1%}.progress-group .progress-title .progress-number{display:inline-block;float:none;width:98%}.initials{font-size:13px;font-weight:700}.avatar-xs{height:23px;width:23px}.avatar-xs .initials{font-size:10px}.avatar-sm{height:38px;width:38px}.avatar-sm .initials{font-size:17px}.avatar-md{height:45px;width:45px}.avatar-md .initials{font-size:21px}.avatar-lg{height:60px;width:60px}.avatar-lg .initials{font-size:28px}.widget-user-image{border:3px solid #fff;border-radius:50%}.widget-user-image .avatar{height:83px;width:83px}.widget-user-image .avatar .initials{font-size:40px}table.dataTable.table>tbody>tr>td.avatars .avatar{margin:1px}.avatar-list-stacked .avatar{margin-right:calc(var(--tblr-avatar-size)*-.2)!important}[data-bs-theme=dark] .table thead th{color:inherit;opacity:.6}[data-bs-theme=dark] table.dataTable thead .sorting:after{opacity:.6}[data-bs-theme=dark] .overlay{background:rgba(0,0,0,.5)}[data-bs-theme=dark] .overlay>.fas{color:var(--tblr-white)}[data-bs-theme=dark] .nav{--tblr-nav-link-color:inherit;opacity:.6}[data-bs-theme=dark] .datagrid-title{color:inherit;opacity:.6}[data-bs-theme=dark] .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){color:inherit}section.quick-entry-page #quick_entry_form{display:none}section.quick-entry-page .ts-wrapper{display:table;table-layout:fixed}section.quick-entry-page #quick_entry_box .duration-widget .input-group{min-width:85px}section.quick-entry-page #quick_entry_box .duration-widget .btn-duration-preset{padding:7px 8px 7px 5px}section.quick-entry-page #quick_entry_box .duration-widget input{padding:7px 3px 7px 7px}fieldset legend.col-form-label{padding-top:0}fieldset.form-fieldset>legend{font-size:1rem;font-weight:700}.ts-dropdown .optgroup:before{--tblr-spacer:.5rem}.dropdown-divider{--tblr-dropdown-divider-margin-y:.5rem}.dropdown-menu{background-clip:border-box}fieldset:empty{display:none}:host,:root,[data-bs-theme=light]{--tblr-box-shadow-input:none}.navbar[data-bs-theme=dark]{--tblr-navbar-color:hsla(0,0%,100%,.8)}.nav-pills .nav-link.active{border-style:solid;border-width:1px}[data-bs-theme=dark] .litepicker .container__days .day-item.is-in-range{--litepicker-is-in-range-color:var(--tblr-primary-text-emphasis)}.multiupdater[type=checkbox]{--tblr-border-color-translucent:rgba(4,32,69,.2)}.tag{--tblr-tag-height:unset}.float-help{background-color:var(--tblr-body-color);border-radius:50px;bottom:20px;height:50px;position:fixed;right:20px;text-align:center;width:50px;z-index:1021}.float-help i{color:var(--tblr-body-bg);font-size:30px;margin-top:11px}@media(max-width:767.98px){.float-help{border-radius:36px;height:36px;width:36px}.float-help i{font-size:20px;margin-top:8px}}div.chart-container{position:relative}div.chart-container canvas.chartjs{height:300px;width:100%}section.dashboard .widget{max-height:600px}html[dir=rtl] .fa-chevron-left:before{content:""}html[dir=rtl] .fa-chevron-right:before{content:""} \ No newline at end of file diff --git a/public/build/app.079f3158.css b/public/build/app.079f3158.css deleted file mode 100644 index 94c2b6797..000000000 --- a/public/build/app.079f3158.css +++ /dev/null @@ -1 +0,0 @@ -:root,[data-bs-theme=light]{--tblr-black:#000;--tblr-white:#fff;--tblr-gray:#49566c;--tblr-gray-dark:#182433;--tblr-gray-100:#eef3f6;--tblr-gray-200:#dce1e7;--tblr-gray-300:#b8c4d4;--tblr-gray-400:#8a97ab;--tblr-gray-500:#6c7a91;--tblr-gray-600:#49566c;--tblr-gray-700:#3a4859;--tblr-gray-800:#182433;--tblr-gray-900:#040a11;--tblr-primary:#066fd1;--tblr-secondary:#6c7a91;--tblr-success:#2fb344;--tblr-info:#4299e1;--tblr-warning:#f76707;--tblr-danger:#d63939;--tblr-light:#f6f8fb;--tblr-dark:#182433;--tblr-muted:#6c7a91;--tblr-blue:#066fd1;--tblr-azure:#4299e1;--tblr-indigo:#4263eb;--tblr-purple:#ae3ec9;--tblr-pink:#d6336c;--tblr-red:#d63939;--tblr-orange:#f76707;--tblr-yellow:#f59f00;--tblr-lime:#74b816;--tblr-green:#2fb344;--tblr-teal:#0ca678;--tblr-cyan:#17a2b8;--tblr-x:#000;--tblr-facebook:#1877f2;--tblr-twitter:#1da1f2;--tblr-linkedin:#0a66c2;--tblr-google:#dc4e41;--tblr-youtube:red;--tblr-vimeo:#1ab7ea;--tblr-dribbble:#ea4c89;--tblr-github:#181717;--tblr-instagram:#e4405f;--tblr-pinterest:#bd081c;--tblr-vk:#6383a8;--tblr-rss:orange;--tblr-flickr:#0063dc;--tblr-bitbucket:#0052cc;--tblr-tabler:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-secondary-rgb:108,122,145;--tblr-success-rgb:47,179,68;--tblr-info-rgb:66,153,225;--tblr-warning-rgb:247,103,7;--tblr-danger-rgb:214,57,57;--tblr-light-rgb:246,248,251;--tblr-dark-rgb:24,36,51;--tblr-muted-rgb:108,122,145;--tblr-blue-rgb:6,111,209;--tblr-azure-rgb:66,153,225;--tblr-indigo-rgb:66,99,235;--tblr-purple-rgb:174,62,201;--tblr-pink-rgb:214,51,108;--tblr-red-rgb:214,57,57;--tblr-orange-rgb:247,103,7;--tblr-yellow-rgb:245,159,0;--tblr-lime-rgb:116,184,22;--tblr-green-rgb:47,179,68;--tblr-teal-rgb:12,166,120;--tblr-cyan-rgb:23,162,184;--tblr-x-rgb:0,0,0;--tblr-facebook-rgb:24,119,242;--tblr-twitter-rgb:29,161,242;--tblr-linkedin-rgb:10,102,194;--tblr-google-rgb:220,78,65;--tblr-youtube-rgb:255,0,0;--tblr-vimeo-rgb:26,183,234;--tblr-dribbble-rgb:234,76,137;--tblr-github-rgb:24,23,23;--tblr-instagram-rgb:228,64,95;--tblr-pinterest-rgb:189,8,28;--tblr-vk-rgb:99,131,168;--tblr-rss-rgb:255,165,0;--tblr-flickr-rgb:0,99,220;--tblr-bitbucket-rgb:0,82,204;--tblr-tabler-rgb:6,111,209;--tblr-primary-text-emphasis:#022c54;--tblr-secondary-text-emphasis:#2b313a;--tblr-success-text-emphasis:#13481b;--tblr-info-text-emphasis:#1a3d5a;--tblr-warning-text-emphasis:#632903;--tblr-danger-text-emphasis:#561717;--tblr-light-text-emphasis:#3a4859;--tblr-dark-text-emphasis:#3a4859;--tblr-primary-bg-subtle:#cde2f6;--tblr-secondary-bg-subtle:#e2e4e9;--tblr-success-bg-subtle:#d5f0da;--tblr-info-bg-subtle:#d9ebf9;--tblr-warning-bg-subtle:#fde1cd;--tblr-danger-bg-subtle:#f7d7d7;--tblr-light-bg-subtle:#f7f9fb;--tblr-dark-bg-subtle:#8a97ab;--tblr-primary-border-subtle:#9bc5ed;--tblr-secondary-border-subtle:#c4cad3;--tblr-success-border-subtle:#ace1b4;--tblr-info-border-subtle:#b3d6f3;--tblr-warning-border-subtle:#fcc29c;--tblr-danger-border-subtle:#efb0b0;--tblr-light-border-subtle:#dce1e7;--tblr-dark-border-subtle:#6c7a91;--tblr-white-rgb:255,255,255;--tblr-black-rgb:0,0,0;--tblr-font-sans-serif:-apple-system,BlinkMacSystemFont,San Francisco,Segoe UI,Roboto,Helvetica Neue,sans-serif;--tblr-font-monospace:Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;--tblr-gradient:linear-gradient(180deg,hsla(0,0%,100%,.15),hsla(0,0%,100%,0));--tblr-body-font-family:var(--tblr-font-sans-serif);--tblr-body-font-size:0.875rem;--tblr-body-font-weight:400;--tblr-body-line-height:1.4285714286;--tblr-body-color:#182433;--tblr-body-color-rgb:24,36,51;--tblr-body-bg:#f6f8fb;--tblr-body-bg-rgb:246,248,251;--tblr-emphasis-color:#3a4859;--tblr-emphasis-color-rgb:58,72,89;--tblr-secondary-color:rgba(24,36,51,.75);--tblr-secondary-color-rgb:24,36,51;--tblr-secondary-bg:#dce1e7;--tblr-secondary-bg-rgb:220,225,231;--tblr-tertiary-color:rgba(24,36,51,.5);--tblr-tertiary-color-rgb:24,36,51;--tblr-tertiary-bg:#eef3f6;--tblr-tertiary-bg-rgb:238,243,246;--tblr-heading-color:inherit;--tblr-link-color:#066fd1;--tblr-link-color-rgb:6,111,209;--tblr-link-decoration:none;--tblr-link-hover-color:#0559a7;--tblr-link-hover-color-rgb:5,89,167;--tblr-link-hover-decoration:underline;--tblr-code-color:var(--tblr-gray-600);--tblr-highlight-color:#182433;--tblr-highlight-bg:#fdeccc;--tblr-border-width:1px;--tblr-border-style:solid;--tblr-border-color:#dce1e7;--tblr-border-color-translucent:rgba(4,32,69,.1);--tblr-border-radius:4px;--tblr-border-radius-sm:2px;--tblr-border-radius-lg:8px;--tblr-border-radius-xl:1rem;--tblr-border-radius-xxl:2rem;--tblr-border-radius-2xl:var(--tblr-border-radius-xxl);--tblr-border-radius-pill:100rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb),0.04) 0 2px 4px 0;--tblr-box-shadow-sm:0 0.125rem 0.25rem rgba(0,0,0,.075);--tblr-box-shadow-lg:0 1rem 3rem rgba(0,0,0,.175);--tblr-box-shadow-inset:0 0 transparent;--tblr-focus-ring-width:0.25rem;--tblr-focus-ring-opacity:0.25;--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb),0.25);--tblr-form-valid-color:#2fb344;--tblr-form-valid-border-color:#2fb344;--tblr-form-invalid-color:#d63939;--tblr-form-invalid-border-color:#d63939}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{color-scheme:dark;--tblr-body-bg:#040a11;--tblr-body-bg-rgb:4,10,17;--tblr-secondary-color:rgba(220,225,231,.75);--tblr-secondary-color-rgb:220,225,231;--tblr-secondary-bg:#182433;--tblr-secondary-bg-rgb:24,36,51;--tblr-tertiary-color:rgba(220,225,231,.5);--tblr-tertiary-color-rgb:220,225,231;--tblr-tertiary-bg:#0e1722;--tblr-tertiary-bg-rgb:14,23,34;--tblr-primary-text-emphasis:#6aa9e3;--tblr-secondary-text-emphasis:#a7afbd;--tblr-success-text-emphasis:#82d18f;--tblr-info-text-emphasis:#8ec2ed;--tblr-warning-text-emphasis:#faa46a;--tblr-danger-text-emphasis:#e68888;--tblr-light-text-emphasis:#eef3f6;--tblr-dark-text-emphasis:#b8c4d4;--tblr-primary-bg-subtle:#01162a;--tblr-secondary-bg-subtle:#16181d;--tblr-success-bg-subtle:#09240e;--tblr-info-bg-subtle:#0d1f2d;--tblr-warning-bg-subtle:#311501;--tblr-danger-bg-subtle:#2b0b0b;--tblr-light-bg-subtle:#182433;--tblr-dark-bg-subtle:#0c121a;--tblr-primary-border-subtle:#04437d;--tblr-secondary-border-subtle:#414957;--tblr-success-border-subtle:#1c6b29;--tblr-info-border-subtle:#285c87;--tblr-warning-border-subtle:#943e04;--tblr-danger-border-subtle:#802222;--tblr-light-border-subtle:#3a4859;--tblr-dark-border-subtle:#182433;--tblr-heading-color:inherit;--tblr-link-color:#6aa9e3;--tblr-link-hover-color:#87bae9;--tblr-link-color-rgb:106,169,227;--tblr-link-hover-color-rgb:135,186,233;--tblr-code-color:var(--tblr-gray-300);--tblr-highlight-color:#dce1e7;--tblr-highlight-bg:#624000;--tblr-border-color:#25384f;--tblr-border-color-translucent:rgba(72,110,149,.14);--tblr-form-valid-color:#82d18f;--tblr-form-valid-border-color:#82d18f;--tblr-form-invalid-color:#e68888;--tblr-form-invalid-border-color:#e68888}*,:after,:before{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--tblr-body-bg);color:var(--tblr-body-color);font-family:var(--tblr-body-font-family);font-size:var(--tblr-body-font-size);font-weight:var(--tblr-body-font-weight);line-height:var(--tblr-body-line-height);margin:0;text-align:var(--tblr-body-text-align);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}.hr,hr{border:0;border-top:var(--tblr-border-width) solid;color:inherit;opacity:.16}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--tblr-heading-color);font-weight:var(--tblr-font-weight-bold);line-height:1.2;margin-bottom:var(--tblr-spacer);margin-top:0}.h1,h1{font-size:1.5rem}.h2,h2{font-size:1.25rem}.h3,h3{font-size:1rem}.h4,h4{font-size:.875rem}.h5,h5{font-size:.75rem}.h6,h6{font-size:.625rem}p{margin-bottom:1rem;margin-top:0}abbr[title]{cursor:help;text-decoration:underline dotted;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:600}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}.small,small{font-size:85.714285%}.mark,mark{background-color:var(--tblr-highlight-bg);color:var(--tblr-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,1));text-decoration:none}a:hover{--tblr-link-color-rgb:var(--tblr-link-hover-color-rgb);text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:var(--tblr-font-monospace);font-size:1em}pre{display:block;font-size:85.714285%;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{color:var(--tblr-code-color);font-size:85.714285%;word-wrap:break-word}a>code{color:inherit}kbd{background-color:var(--tblr-code-bg);border-radius:2px;color:var(--tblr-text-secondary-dark);font-size:var(--tblr-font-size-h5);padding:.25rem .5rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--tblr-secondary-color);padding-bottom:.75rem;padding-top:.75rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:1.5rem;line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}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}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:.875rem;font-weight:var(--tblr-font-weight-normal)}.display-1{font-size:5rem}.display-1,.display-2{font-weight:300;line-height:1.2}.display-2{font-size:4.5rem}.display-3{font-size:4rem}.display-3,.display-4{font-weight:300;line-height:1.2}.display-4{font-size:3.5rem}.display-5{font-size:3rem}.display-5,.display-6{font-weight:300;line-height:1.2}.display-6{font-size:2rem}.list-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:85.714285%;text-transform:uppercase}.blockquote{font-size:.875rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#49566c;font-size:85.714285%;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}.img-fluid,.img-thumbnail{height:auto;max-width:100%}.img-thumbnail{background-color:var(--tblr-body-bg);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-sm);padding:.25rem}.figure{display:inline-block}.figure-img{line-height:1;margin-bottom:.5rem}.figure-caption{color:var(--tblr-secondary-color);font-size:85.714285%}.container,.container-fluid,.container-lg,.container-md,.container-sm,.container-xl,.container-xxl{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}@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{--tblr-breakpoint-xs:0;--tblr-breakpoint-sm:576px;--tblr-breakpoint-md:768px;--tblr-breakpoint-lg:992px;--tblr-breakpoint-xl:1200px;--tblr-breakpoint-xxl:1400px}.row{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:0;display:flex;flex-wrap:wrap;margin-left:calc(var(--tblr-gutter-x)*-.5);margin-right:calc(var(--tblr-gutter-x)*-.5);margin-top:calc(var(--tblr-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--tblr-gutter-y);max-width:100%;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.grid{display:grid;gap:var(--tblr-gap,var(--tblr-page-padding));grid-template-columns:repeat(var(--tblr-columns,12),1fr);grid-template-rows:repeat(var(--tblr-rows,1),1fr)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width:576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width:768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width:992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width:1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width:1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.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{--tblr-gutter-x:0}.g-0,.gy-0{--tblr-gutter-y:0}.g-1,.gx-1{--tblr-gutter-x:0.25rem}.g-1,.gy-1{--tblr-gutter-y:0.25rem}.g-2,.gx-2{--tblr-gutter-x:0.5rem}.g-2,.gy-2{--tblr-gutter-y:0.5rem}.g-3,.gx-3{--tblr-gutter-x:1rem}.g-3,.gy-3{--tblr-gutter-y:1rem}.g-4,.gx-4{--tblr-gutter-x:1.5rem}.g-4,.gy-4{--tblr-gutter-y:1.5rem}.g-5,.gx-5{--tblr-gutter-x:2rem}.g-5,.gy-5{--tblr-gutter-y:2rem}.g-6,.gx-6{--tblr-gutter-x:3rem}.g-6,.gy-6{--tblr-gutter-y:3rem}.g-7,.gx-7{--tblr-gutter-x:5rem}.g-7,.gy-7{--tblr-gutter-y:5rem}.g-8,.gx-8{--tblr-gutter-x:8rem}.g-8,.gy-8{--tblr-gutter-y:8rem}@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{--tblr-gutter-x:0}.g-sm-0,.gy-sm-0{--tblr-gutter-y:0}.g-sm-1,.gx-sm-1{--tblr-gutter-x:0.25rem}.g-sm-1,.gy-sm-1{--tblr-gutter-y:0.25rem}.g-sm-2,.gx-sm-2{--tblr-gutter-x:0.5rem}.g-sm-2,.gy-sm-2{--tblr-gutter-y:0.5rem}.g-sm-3,.gx-sm-3{--tblr-gutter-x:1rem}.g-sm-3,.gy-sm-3{--tblr-gutter-y:1rem}.g-sm-4,.gx-sm-4{--tblr-gutter-x:1.5rem}.g-sm-4,.gy-sm-4{--tblr-gutter-y:1.5rem}.g-sm-5,.gx-sm-5{--tblr-gutter-x:2rem}.g-sm-5,.gy-sm-5{--tblr-gutter-y:2rem}.g-sm-6,.gx-sm-6{--tblr-gutter-x:3rem}.g-sm-6,.gy-sm-6{--tblr-gutter-y:3rem}.g-sm-7,.gx-sm-7{--tblr-gutter-x:5rem}.g-sm-7,.gy-sm-7{--tblr-gutter-y:5rem}.g-sm-8,.gx-sm-8{--tblr-gutter-x:8rem}.g-sm-8,.gy-sm-8{--tblr-gutter-y:8rem}}@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{--tblr-gutter-x:0}.g-md-0,.gy-md-0{--tblr-gutter-y:0}.g-md-1,.gx-md-1{--tblr-gutter-x:0.25rem}.g-md-1,.gy-md-1{--tblr-gutter-y:0.25rem}.g-md-2,.gx-md-2{--tblr-gutter-x:0.5rem}.g-md-2,.gy-md-2{--tblr-gutter-y:0.5rem}.g-md-3,.gx-md-3{--tblr-gutter-x:1rem}.g-md-3,.gy-md-3{--tblr-gutter-y:1rem}.g-md-4,.gx-md-4{--tblr-gutter-x:1.5rem}.g-md-4,.gy-md-4{--tblr-gutter-y:1.5rem}.g-md-5,.gx-md-5{--tblr-gutter-x:2rem}.g-md-5,.gy-md-5{--tblr-gutter-y:2rem}.g-md-6,.gx-md-6{--tblr-gutter-x:3rem}.g-md-6,.gy-md-6{--tblr-gutter-y:3rem}.g-md-7,.gx-md-7{--tblr-gutter-x:5rem}.g-md-7,.gy-md-7{--tblr-gutter-y:5rem}.g-md-8,.gx-md-8{--tblr-gutter-x:8rem}.g-md-8,.gy-md-8{--tblr-gutter-y:8rem}}@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{--tblr-gutter-x:0}.g-lg-0,.gy-lg-0{--tblr-gutter-y:0}.g-lg-1,.gx-lg-1{--tblr-gutter-x:0.25rem}.g-lg-1,.gy-lg-1{--tblr-gutter-y:0.25rem}.g-lg-2,.gx-lg-2{--tblr-gutter-x:0.5rem}.g-lg-2,.gy-lg-2{--tblr-gutter-y:0.5rem}.g-lg-3,.gx-lg-3{--tblr-gutter-x:1rem}.g-lg-3,.gy-lg-3{--tblr-gutter-y:1rem}.g-lg-4,.gx-lg-4{--tblr-gutter-x:1.5rem}.g-lg-4,.gy-lg-4{--tblr-gutter-y:1.5rem}.g-lg-5,.gx-lg-5{--tblr-gutter-x:2rem}.g-lg-5,.gy-lg-5{--tblr-gutter-y:2rem}.g-lg-6,.gx-lg-6{--tblr-gutter-x:3rem}.g-lg-6,.gy-lg-6{--tblr-gutter-y:3rem}.g-lg-7,.gx-lg-7{--tblr-gutter-x:5rem}.g-lg-7,.gy-lg-7{--tblr-gutter-y:5rem}.g-lg-8,.gx-lg-8{--tblr-gutter-x:8rem}.g-lg-8,.gy-lg-8{--tblr-gutter-y:8rem}}@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{--tblr-gutter-x:0}.g-xl-0,.gy-xl-0{--tblr-gutter-y:0}.g-xl-1,.gx-xl-1{--tblr-gutter-x:0.25rem}.g-xl-1,.gy-xl-1{--tblr-gutter-y:0.25rem}.g-xl-2,.gx-xl-2{--tblr-gutter-x:0.5rem}.g-xl-2,.gy-xl-2{--tblr-gutter-y:0.5rem}.g-xl-3,.gx-xl-3{--tblr-gutter-x:1rem}.g-xl-3,.gy-xl-3{--tblr-gutter-y:1rem}.g-xl-4,.gx-xl-4{--tblr-gutter-x:1.5rem}.g-xl-4,.gy-xl-4{--tblr-gutter-y:1.5rem}.g-xl-5,.gx-xl-5{--tblr-gutter-x:2rem}.g-xl-5,.gy-xl-5{--tblr-gutter-y:2rem}.g-xl-6,.gx-xl-6{--tblr-gutter-x:3rem}.g-xl-6,.gy-xl-6{--tblr-gutter-y:3rem}.g-xl-7,.gx-xl-7{--tblr-gutter-x:5rem}.g-xl-7,.gy-xl-7{--tblr-gutter-y:5rem}.g-xl-8,.gx-xl-8{--tblr-gutter-x:8rem}.g-xl-8,.gy-xl-8{--tblr-gutter-y:8rem}}@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{--tblr-gutter-x:0}.g-xxl-0,.gy-xxl-0{--tblr-gutter-y:0}.g-xxl-1,.gx-xxl-1{--tblr-gutter-x:0.25rem}.g-xxl-1,.gy-xxl-1{--tblr-gutter-y:0.25rem}.g-xxl-2,.gx-xxl-2{--tblr-gutter-x:0.5rem}.g-xxl-2,.gy-xxl-2{--tblr-gutter-y:0.5rem}.g-xxl-3,.gx-xxl-3{--tblr-gutter-x:1rem}.g-xxl-3,.gy-xxl-3{--tblr-gutter-y:1rem}.g-xxl-4,.gx-xxl-4{--tblr-gutter-x:1.5rem}.g-xxl-4,.gy-xxl-4{--tblr-gutter-y:1.5rem}.g-xxl-5,.gx-xxl-5{--tblr-gutter-x:2rem}.g-xxl-5,.gy-xxl-5{--tblr-gutter-y:2rem}.g-xxl-6,.gx-xxl-6{--tblr-gutter-x:3rem}.g-xxl-6,.gy-xxl-6{--tblr-gutter-y:3rem}.g-xxl-7,.gx-xxl-7{--tblr-gutter-x:5rem}.g-xxl-7,.gy-xxl-7{--tblr-gutter-y:5rem}.g-xxl-8,.gx-xxl-8{--tblr-gutter-x:8rem}.g-xxl-8,.gy-xxl-8{--tblr-gutter-y:8rem}}.markdown>table,.table{--tblr-table-color-type:initial;--tblr-table-bg-type:initial;--tblr-table-color-state:initial;--tblr-table-bg-state:initial;--tblr-table-color:inherit;--tblr-table-bg:transparent;--tblr-table-border-color:var(--tblr-border-color-translucent);--tblr-table-accent-bg:transparent;--tblr-table-striped-color:inherit;--tblr-table-striped-bg:var(--tblr-bg-surface-tertiary);--tblr-table-active-color:inherit;--tblr-table-active-bg:rgba(var(--tblr-emphasis-color-rgb),0.1);--tblr-table-hover-color:inherit;--tblr-table-hover-bg:rgba(var(--tblr-emphasis-color-rgb),0.075);border-color:var(--tblr-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.markdown>table>:not(caption)>*>*,.table>:not(caption)>*>*{background-color:var(--tblr-table-bg);border-bottom-width:var(--tblr-border-width);box-shadow:inset 0 0 0 9999px var(--tblr-table-bg-state,var(--tblr-table-bg-type,var(--tblr-table-accent-bg)));color:var(--tblr-table-color-state,var(--tblr-table-color-type,var(--tblr-table-color)));padding:.75rem}.markdown>table>tbody,.table>tbody{vertical-align:inherit}.markdown>table>thead,.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--tblr-border-width)*2) solid var(--tblr-border-color-translucent)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.markdown>table>:not(caption)>*,.table-bordered>:not(caption)>*{border-width:var(--tblr-border-width) 0}.markdown>table>:not(caption)>*>*,.table-bordered>:not(caption)>*>*{border-width:0 var(--tblr-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.table-striped>tbody>tr:nth-of-type(2n)>*{--tblr-table-color-type:var(--tblr-table-striped-color);--tblr-table-bg-type:var(--tblr-table-striped-bg)}.table-active{--tblr-table-color-state:var(--tblr-table-active-color);--tblr-table-bg-state:var(--tblr-table-active-bg)}.table-hover>tbody>tr:hover>*{--tblr-table-color-state:var(--tblr-table-hover-color);--tblr-table-bg-state:var(--tblr-table-hover-bg)}.table-primary{--tblr-table-color:#182433;--tblr-table-bg:#cde2f6;--tblr-table-border-color:#a9bccf;--tblr-table-striped-bg:#c4d9ec;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#bbcfe2;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#c0d4e7;--tblr-table-hover-color:#182433;border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-secondary{--tblr-table-color:#182433;--tblr-table-bg:#e2e4e9;--tblr-table-border-color:#b9bec5;--tblr-table-striped-bg:#d8dbe0;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#cdd1d7;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#d2d6db;--tblr-table-hover-color:#182433}.table-secondary,.table-success{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-success{--tblr-table-color:#182433;--tblr-table-bg:#d5f0da;--tblr-table-border-color:#b0c7b8;--tblr-table-striped-bg:#cce6d1;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c2dbc9;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#c7e1cd;--tblr-table-hover-color:#182433}.table-info{--tblr-table-color:#182433;--tblr-table-bg:#d9ebf9;--tblr-table-border-color:#b3c3d1;--tblr-table-striped-bg:#d0e1ef;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#c6d7e5;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#cbdcea;--tblr-table-hover-color:#182433}.table-info,.table-warning{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-warning{--tblr-table-color:#182433;--tblr-table-bg:#fde1cd;--tblr-table-border-color:#d0bbaf;--tblr-table-striped-bg:#f2d7c6;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e6cebe;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#ecd2c2;--tblr-table-hover-color:#182433}.table-danger{--tblr-table-color:#182433;--tblr-table-bg:#f7d7d7;--tblr-table-border-color:#cab4b7;--tblr-table-striped-bg:#eccecf;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e1c5c7;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#e6cacb;--tblr-table-hover-color:#182433}.table-danger,.table-light{border-color:var(--tblr-table-border-color);color:var(--tblr-table-color)}.table-light{--tblr-table-color:#182433;--tblr-table-bg:#f6f8fb;--tblr-table-border-color:#caced3;--tblr-table-striped-bg:#ebedf1;--tblr-table-striped-color:#182433;--tblr-table-active-bg:#e0e3e7;--tblr-table-active-color:#182433;--tblr-table-hover-bg:#e5e8ec;--tblr-table-hover-color:#182433}.table-dark{--tblr-table-color:#f6f8fb;--tblr-table-bg:#182433;--tblr-table-border-color:#444e5b;--tblr-table-striped-bg:#232f3d;--tblr-table-striped-color:#f6f8fb;--tblr-table-active-bg:#2e3947;--tblr-table-active-color:#f6f8fb;--tblr-table-hover-bg:#293442;--tblr-table-hover-color:#f6f8fb;border-color:var(--tblr-table-border-color);color:var(--tblr-table-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{font-size:.875rem;margin-bottom:.5rem}.col-form-label,.form-label{font-weight:var(--tblr-font-weight-medium)}.col-form-label{font-size:inherit;line-height:1.4285714286;margin-bottom:0;padding-bottom:calc(.5625rem + var(--tblr-border-width));padding-top:calc(.5625rem + var(--tblr-border-width))}.col-form-label-lg{font-size:1.25rem;padding-bottom:calc(.5rem + var(--tblr-border-width));padding-top:calc(.5rem + var(--tblr-border-width))}.col-form-label-sm{font-size:.75rem;padding-bottom:calc(.125rem + var(--tblr-border-width));padding-top:calc(.125rem + var(--tblr-border-width))}.form-text{color:var(--tblr-secondary-color);font-size:85.714285%;margin-top:.25rem}.form-control{appearance:none;background-clip:padding-box;background-color:var(--tblr-bg-forms);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);color:var(--tblr-body-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:.5625rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@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{background-color:var(--tblr-bg-forms);border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);color:var(--tblr-body-color);outline:0}.form-control::-webkit-date-and-time-value{height:1.4285714286em;margin:0;min-width:85px}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:#8a97ab;opacity:1}.form-control:disabled{background-color:var(--tblr-bg-surface-secondary);opacity:1}.form-control::file-selector-button{background-color:var(--tblr-tertiary-bg);border:0 solid;border-color:inherit;border-inline-end-width:var(--tblr-border-width);border-radius:0;color:var(--tblr-body-color);margin:-.5625rem -.75rem;margin-inline-end:.75rem;padding:.5625rem .75rem;pointer-events:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-secondary-bg)}.form-control-plaintext{background-color:transparent;border:solid transparent;border-width:var(--tblr-border-width) 0;color:var(--tblr-body-color);display:block;line-height:1.4285714286;margin-bottom:0;padding:.5625rem 0;width:100%}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-left:0;padding-right:0}.form-control-sm{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;min-height:calc(1.42857em + .25rem + var(--tblr-border-width)*2);padding:.125rem .25rem}.form-control-sm::file-selector-button{margin:-.125rem -.25rem;margin-inline-end:.25rem;padding:.125rem .25rem}.form-control-lg{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem;min-height:calc(1.42857em + 1rem + var(--tblr-border-width)*2);padding:.5rem .75rem}.form-control-lg::file-selector-button{margin:-.5rem -.75rem;margin-inline-end:.75rem;padding:.5rem .75rem}textarea.form-control{min-height:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2)}textarea.form-control-sm{min-height:calc(1.42857em + .25rem + var(--tblr-border-width)*2)}textarea.form-control-lg{min-height:calc(1.42857em + 1rem + var(--tblr-border-width)*2)}.form-control-color{height:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2);padding:.5625rem;width:3rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color::-webkit-color-swatch{border:0!important;border-radius:var(--tblr-border-radius)}.form-control-color.form-control-sm{height:calc(1.42857em + .25rem + var(--tblr-border-width)*2)}.form-control-color.form-control-lg{height:calc(1.42857em + 1rem + var(--tblr-border-width)*2)}.form-select{--tblr-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");appearance:none;background-color:var(--tblr-bg-forms);background-image:var(--tblr-form-select-bg-img),var(--tblr-form-select-bg-icon,none);background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px;border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);color:var(--tblr-body-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:.5625rem 2.25rem .5625rem .75rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:100%}@media(prefers-reduced-motion:reduce){.form-select{transition:none}}.form-select:focus{border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.form-select[multiple],.form-select[size]:not([size="1"]){background-image:none;padding-right:.75rem}.form-select:disabled{background-color:var(--tblr-bg-surface-secondary)}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 var(--tblr-body-color)}.form-select-sm{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;padding-bottom:.125rem;padding-left:.25rem;padding-top:.125rem}.form-select-lg{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem;padding-bottom:.5rem;padding-left:.75rem;padding-top:.5rem}[data-bs-theme=dark] .form-select,body[data-bs-theme=dark] [data-bs-theme=light] .form-select{--tblr-form-select-bg-img:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23dce1e7' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E")}.form-check{display:block;margin-bottom:.75rem;min-height:1.25rem;padding-left:2rem}.form-check .form-check-input{float:left;margin-left:-2rem}.form-check-reverse{padding-left:0;padding-right:2rem;text-align:right}.form-check-reverse .form-check-input{float:right;margin-left:0;margin-right:-2rem}.form-check-input{--tblr-form-check-bg:var(--tblr-bg-forms);appearance:none;background-color:var(--tblr-form-check-bg);background-image:var(--tblr-form-check-bg-image);background-position:50%;background-repeat:no-repeat;background-size:contain;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);flex-shrink:0;height:1.25rem;margin-top:.0892857143rem;print-color-adjust:exact;vertical-align:top;width:1.25rem}.form-check-input[type=checkbox]{border-radius:var(--tblr-border-radius)}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#83b7e8;box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.form-check-input:checked{background-color:var(--tblr-primary);border-color:var(--tblr-border-color-translucent)}.form-check-input:checked[type=checkbox]{--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-check-input:checked[type=radio]{--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-check-input[type=checkbox]:indeterminate{background-color:var(--tblr-primary);border-color:var(--tblr-primary);--tblr-form-check-bg-image:url("data:image/svg+xml;charset=utf-8,%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{filter:none;opacity:.5;pointer-events:none}.form-check-input:disabled~.form-check-label,.form-check-input[disabled]~.form-check-label{cursor:default;opacity:.7}.form-switch{padding-left:2.5rem}.form-switch .form-check-input{--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23dce1e7'/%3E%3C/svg%3E");background-image:var(--tblr-form-switch-bg);background-position:0;border-radius:2rem;margin-left:-2.5rem;transition:background-position .15s ease-in-out;width:2rem}.form-switch .form-check-input:focus{--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%2382B7E8'/%3E%3C/svg%3E")}.form-switch .form-check-input:checked{background-position:100%;--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%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-left:0;padding-right:2.5rem}.form-switch.form-check-reverse .form-check-input{margin-left:0;margin-right:-2.5rem}.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{filter:none;opacity:.4;pointer-events:none}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--tblr-form-switch-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 0.25)'/%3E%3C/svg%3E")}.form-range{appearance:none;background-color:transparent;height:1.25rem;padding:0;width:100%}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f6f8fb,0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;margin-top:-.375rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media(prefers-reduced-motion:reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b4d4f1}.form-range::-webkit-slider-runnable-track{background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range::-moz-range-thumb{appearance:none;background-color:var(--tblr-primary);border:2px var(--tblr-border-style) #fff;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);height:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;width:1rem}@media(prefers-reduced-motion:reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b4d4f1}.form-range::-moz-range-track{background-color:var(--tblr-border-color);border-color:transparent;border-radius:1rem;box-shadow:var(--tblr-box-shadow-inset);color:transparent;cursor:pointer;height:.25rem;width:100%}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:var(--tblr-secondary-color)}.form-range:disabled::-moz-range-thumb{background-color:var(--tblr-secondary-color)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + var(--tblr-border-width)*2);line-height:1.25;min-height:calc(3.5rem + var(--tblr-border-width)*2)}.form-floating>label{border:var(--tblr-border-width) solid transparent;height:100%;left:0;overflow:hidden;padding:1rem .75rem;pointer-events:none;position:absolute;text-align:start;text-overflow:ellipsis;top:0;transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out;white-space:nowrap;z-index:2}@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::placeholder,.form-floating>.form-control::placeholder{color:transparent}.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-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-control-plaintext:-webkit-autofill,.form-floating>.form-control:-webkit-autofill{padding-bottom:.625rem;padding-top:1.625rem}.form-floating>.form-select{padding-bottom:.625rem;padding-top:1.625rem}.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(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.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{background-color:var(--tblr-bg-forms);border-radius:var(--tblr-border-radius);content:"";height:1.5em;inset:1rem .375rem;position:absolute;z-index:-1}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--tblr-body-color-rgb),.65);transform:scale(.85) translateY(-.5rem) translateX(.15rem)}.form-floating>.form-control-plaintext~label{border-width:var(--tblr-border-width) 0}.form-floating>.form-control:disabled~label,.form-floating>:disabled~label{color:#49566c}.form-floating>.form-control:disabled~label:after,.form-floating>:disabled~label:after{background-color:var(--tblr-bg-surface-secondary)}.input-group{align-items:stretch;display:flex;flex-wrap:wrap;position:relative;width:100%}.input-group>.form-control,.input-group>.form-floating,.input-group>.form-select{flex:1 1 auto;min-width:0;position:relative;width:1%}.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{align-items:center;background-color:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:var(--tblr-gray-500);display:flex;font-size:.875rem;font-weight:400;line-height:1.4285714286;padding:.5625rem .75rem;text-align:center;white-space:nowrap}.input-group-lg>.btn,.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem;padding:.5rem .75rem}.input-group-sm>.btn,.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text{border-radius:var(--tblr-border-radius-sm);font-size:.75rem;padding:.125rem .25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.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),.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-bottom-right-radius:0;border-top-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){border-bottom-left-radius:0;border-top-left-radius:0;margin-left:calc(var(--tblr-border-width)*-1)}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-bottom-left-radius:0;border-top-left-radius:0}.valid-feedback{color:var(--tblr-form-valid-color);display:none;font-size:85.714285%;margin-top:.25rem;width:100%}.valid-tooltip{background-color:var(--tblr-success);border-radius:var(--tblr-border-radius);color:#fff;display:none;font-size:.765625rem;margin-top:.1rem;max-width:100%;padding:var(--tblr-spacer-2) var(--tblr-spacer-2);position:absolute;top:100%;z-index:5}.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{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:right calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem);border-color:var(--tblr-form-valid-border-color);padding-right:calc(1.42857em + 1.125rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{background-position:top calc(.35714em + .28125rem) right calc(.35714em + .28125rem);padding-right:calc(1.42857em + 1.125rem)}.form-select.is-valid,.was-validated .form-select:valid{border-color:var(--tblr-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"]{--tblr-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem);padding-right:4.125rem}.form-select.is-valid:focus,.was-validated .form-select:valid:focus{border-color:var(--tblr-form-valid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-control-color.is-valid,.was-validated .form-control-color:valid{width:calc(4.125rem + 1.42857em)}.form-check-input.is-valid,.was-validated .form-check-input:valid{border-color:var(--tblr-form-valid-border-color)}.form-check-input.is-valid:checked,.was-validated .form-check-input:valid:checked{background-color:var(--tblr-form-valid-color)}.form-check-input.is-valid:focus,.was-validated .form-check-input:valid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-success-rgb),.25)}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:var(--tblr-form-valid-color)}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.input-group>.form-control:not(:focus).is-valid,.input-group>.form-floating:not(:focus-within).is-valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-control:not(:focus):valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.was-validated .input-group>.form-select:not(:focus):valid{z-index:3}.invalid-feedback{color:var(--tblr-form-invalid-color);display:none;font-size:85.714285%;margin-top:.25rem;width:100%}.invalid-tooltip{background-color:var(--tblr-danger);border-radius:var(--tblr-border-radius);color:#fff;display:none;font-size:.765625rem;margin-top:.1rem;max-width:100%;padding:var(--tblr-spacer-2) var(--tblr-spacer-2);position:absolute;top:100%;z-index:5}.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{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:right calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem);border-color:var(--tblr-form-invalid-border-color);padding-right:calc(1.42857em + 1.125rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{background-position:top calc(.35714em + .28125rem) right calc(.35714em + .28125rem);padding-right:calc(1.42857em + 1.125rem)}.form-select.is-invalid,.was-validated .form-select:invalid{border-color:var(--tblr-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"]{--tblr-form-select-bg-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem);padding-right:4.125rem}.form-select.is-invalid:focus,.was-validated .form-select:invalid:focus{border-color:var(--tblr-form-invalid-border-color);box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-control-color.is-invalid,.was-validated .form-control-color:invalid{width:calc(4.125rem + 1.42857em)}.form-check-input.is-invalid,.was-validated .form-check-input:invalid{border-color:var(--tblr-form-invalid-border-color)}.form-check-input.is-invalid:checked,.was-validated .form-check-input:invalid:checked{background-color:var(--tblr-form-invalid-color)}.form-check-input.is-invalid:focus,.was-validated .form-check-input:invalid:focus{box-shadow:0 0 0 .25rem rgba(var(--tblr-danger-rgb),.25)}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:var(--tblr-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{--tblr-btn-padding-x:1rem;--tblr-btn-padding-y:0.5625rem;--tblr-btn-font-family:var(--tblr-font-sans-serif);--tblr-btn-font-size:0.875rem;--tblr-btn-font-weight:var(--tblr-font-weight-medium);--tblr-btn-line-height:1.4285714286;--tblr-btn-bg:transparent;--tblr-btn-border-width:var(--tblr-border-width);--tblr-btn-border-color:transparent;--tblr-btn-border-radius:var(--tblr-border-radius);--tblr-btn-hover-border-color:transparent;--tblr-btn-disabled-opacity:0.4;--tblr-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-btn-focus-shadow-rgb),.5);background-color:var(--tblr-btn-bg);border:var(--tblr-btn-border-width) solid var(--tblr-btn-border-color);border-radius:var(--tblr-btn-border-radius);color:var(--tblr-btn-color);cursor:pointer;display:inline-block;font-family:var(--tblr-btn-font-family);font-size:var(--tblr-btn-font-size);font-weight:var(--tblr-btn-font-weight);line-height:var(--tblr-btn-line-height);padding:var(--tblr-btn-padding-y) var(--tblr-btn-padding-x);text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;user-select:none;vertical-align:middle}@media(prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);color:var(--tblr-btn-hover-color);text-decoration:none}.btn-check+.btn:hover{background-color:var(--tblr-btn-bg);border-color:var(--tblr-btn-border-color);color:var(--tblr-btn-color)}.btn:focus-visible{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow);color:var(--tblr-btn-hover-color);outline:0}.btn-check:focus-visible+.btn{border-color:var(--tblr-btn-hover-border-color);box-shadow:var(--tblr-btn-box-shadow),var(--tblr-btn-focus-box-shadow);outline:0}.btn-check:checked+.btn,.btn.active,.btn.show,.btn:first-child:active,:not(.btn-check)+.btn:active{background-color:var(--tblr-btn-active-bg);border-color:var(--tblr-btn-active-border-color);box-shadow:var(--tblr-btn-active-shadow);color:var(--tblr-btn-active-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(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn-check:checked:focus-visible+.btn{box-shadow:var(--tblr-btn-active-shadow),var(--tblr-btn-focus-box-shadow)}.btn.disabled,.btn:disabled,fieldset:disabled .btn{background-color:var(--tblr-btn-disabled-bg);border-color:var(--tblr-btn-disabled-border-color);box-shadow:none;color:var(--tblr-btn-disabled-color);opacity:var(--tblr-btn-disabled-opacity);pointer-events:none}.btn-link{--tblr-btn-font-weight:400;--tblr-btn-color:var(--tblr-link-color);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-link-hover-color);--tblr-btn-hover-border-color:transparent;--tblr-btn-active-color:var(--tblr-link-hover-color);--tblr-btn-active-border-color:transparent;--tblr-btn-disabled-color:#49566c;--tblr-btn-disabled-border-color:transparent;--tblr-btn-box-shadow:0 0 0 #000;--tblr-btn-focus-shadow-rgb:42,132,215;text-decoration:none}.btn-link:focus-visible,.btn-link:hover{text-decoration:underline}.btn-link:focus-visible{color:var(--tblr-btn-color)}.btn-link:hover{color:var(--tblr-btn-hover-color)}.btn-group-lg>.btn,.btn-lg{--tblr-btn-padding-y:0.5rem;--tblr-btn-padding-x:0.75rem;--tblr-btn-font-size:1.25rem;--tblr-btn-border-radius:var(--tblr-border-radius-lg)}.btn-group-sm>.btn,.btn-sm{--tblr-btn-padding-y:0.125rem;--tblr-btn-padding-x:0.25rem;--tblr-btn-font-size:0.75rem;--tblr-btn-border-radius:var(--tblr-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{height:auto;transition:width .35s ease;width:0}@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{border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.4em;margin-right:.1em;transform:rotate(-45deg);vertical-align:.306em;width:.36em}.dropdown-menu{--tblr-dropdown-zindex:1000;--tblr-dropdown-min-width:11rem;--tblr-dropdown-padding-x:0;--tblr-dropdown-padding-y:0.25rem;--tblr-dropdown-spacer:1px;--tblr-dropdown-font-size:0.875rem;--tblr-dropdown-color:var(--tblr-body-color);--tblr-dropdown-bg:var(--tblr-bg-surface);--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-border-radius:var(--tblr-border-radius);--tblr-dropdown-border-width:var(--tblr-border-width);--tblr-dropdown-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-divider-margin-y:var(--tblr-spacer-2);--tblr-dropdown-box-shadow:var(--tblr-box-shadow-dropdown);--tblr-dropdown-link-color:inherit;--tblr-dropdown-link-hover-color:inherit;--tblr-dropdown-link-hover-bg:rgba(var(--tblr-secondary-rgb),0.08);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:var(--tblr-tertiary-color);--tblr-dropdown-item-padding-x:0.75rem;--tblr-dropdown-item-padding-y:0.5rem;--tblr-dropdown-header-color:#49566c;--tblr-dropdown-header-padding-x:0.75rem;--tblr-dropdown-header-padding-y:0.25rem;background-clip:padding-box;background-color:var(--tblr-dropdown-bg);border:var(--tblr-dropdown-border-width) solid var(--tblr-dropdown-border-color);border-radius:var(--tblr-dropdown-border-radius);box-shadow:var(--tblr-dropdown-box-shadow);color:var(--tblr-dropdown-color);display:none;font-size:var(--tblr-dropdown-font-size);list-style:none;margin:0;min-width:var(--tblr-dropdown-min-width);padding:var(--tblr-dropdown-padding-y) var(--tblr-dropdown-padding-x);position:absolute;text-align:left;z-index:var(--tblr-dropdown-zindex)}.dropdown-menu[data-bs-popper]{left:0;margin-top:var(--tblr-dropdown-spacer);top:100%}.dropdown-menu-start{--bs-position:start}.dropdown-menu-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-end{--bs-position:end}.dropdown-menu-end[data-bs-popper]{left:auto;right:0}@media(min-width:576px){.dropdown-menu-sm-start{--bs-position:start}.dropdown-menu-sm-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-sm-end{--bs-position:end}.dropdown-menu-sm-end[data-bs-popper]{left:auto;right:0}}@media(min-width:768px){.dropdown-menu-md-start{--bs-position:start}.dropdown-menu-md-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-md-end{--bs-position:end}.dropdown-menu-md-end[data-bs-popper]{left:auto;right:0}}@media(min-width:992px){.dropdown-menu-lg-start{--bs-position:start}.dropdown-menu-lg-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-lg-end{--bs-position:end}.dropdown-menu-lg-end[data-bs-popper]{left:auto;right:0}}@media(min-width:1200px){.dropdown-menu-xl-start{--bs-position:start}.dropdown-menu-xl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xl-end{--bs-position:end}.dropdown-menu-xl-end[data-bs-popper]{left:auto;right:0}}@media(min-width:1400px){.dropdown-menu-xxl-start{--bs-position:start}.dropdown-menu-xxl-start[data-bs-popper]{left:0;right:auto}.dropdown-menu-xxl-end{--bs-position:end}.dropdown-menu-xxl-end[data-bs-popper]{left:auto;right:0}}.dropup .dropdown-menu[data-bs-popper]{bottom:100%;margin-bottom:var(--tblr-dropdown-spacer);margin-top:0;top:auto}.dropup .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.4em;margin-right:.1em;transform:rotate(135deg);vertical-align:.306em;width:.36em}.dropend .dropdown-menu[data-bs-popper]{left:100%;margin-left:var(--tblr-dropdown-spacer);margin-top:0;right:auto;top:0}.dropend .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.4em;margin-right:.1em;transform:rotate(-135deg);vertical-align:.306em;vertical-align:0;width:.36em}.dropstart .dropdown-menu[data-bs-popper]{left:auto;margin-right:var(--tblr-dropdown-spacer);margin-top:0;right:100%;top:0}.dropstart .dropdown-toggle:after{border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.4em;margin-right:.1em;transform:rotate(45deg);vertical-align:.306em;width:.36em}.dropstart .dropdown-toggle:before{vertical-align:0}.dropdown-divider{border-top:1px solid var(--tblr-dropdown-divider-bg);height:0;margin:var(--tblr-dropdown-divider-margin-y) 0;opacity:1;overflow:hidden}.dropdown-item{background-color:transparent;border:0;border-radius:var(--tblr-dropdown-item-border-radius,0);clear:both;color:var(--tblr-dropdown-link-color);display:block;font-weight:400;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x);text-align:inherit;white-space:nowrap;width:100%}.dropdown-item:focus,.dropdown-item:hover{background-color:var(--tblr-dropdown-link-hover-bg);color:var(--tblr-dropdown-link-hover-color);text-decoration:none}.dropdown-item.active,.dropdown-item:active{background-color:var(--tblr-dropdown-link-active-bg);color:var(--tblr-dropdown-link-active-color);text-decoration:none}.dropdown-item.disabled,.dropdown-item:disabled{background-color:transparent;color:var(--tblr-dropdown-link-disabled-color);pointer-events:none}.dropdown-menu.show{display:block}.dropdown-header{color:var(--tblr-dropdown-header-color);display:block;font-size:.765625rem;margin-bottom:0;padding:var(--tblr-dropdown-header-padding-y) var(--tblr-dropdown-header-padding-x);white-space:nowrap}.dropdown-item-text{color:var(--tblr-dropdown-link-color);display:block;padding:var(--tblr-dropdown-item-padding-y) var(--tblr-dropdown-item-padding-x)}.dropdown-menu-dark{--tblr-dropdown-color:#b8c4d4;--tblr-dropdown-bg:#182433;--tblr-dropdown-border-color:var(--tblr-border-color-translucent);--tblr-dropdown-box-shadow: ;--tblr-dropdown-link-color:#b8c4d4;--tblr-dropdown-link-hover-color:#fff;--tblr-dropdown-divider-bg:var(--tblr-border-color-translucent);--tblr-dropdown-link-hover-bg:hsla(0,0%,100%,.15);--tblr-dropdown-link-active-color:var(--tblr-primary);--tblr-dropdown-link-active-bg:var(--tblr-active-bg);--tblr-dropdown-link-disabled-color:#6c7a91;--tblr-dropdown-header-color:#6c7a91}.btn-group,.btn-group-vertical{display:inline-flex;position:relative;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{flex:1 1 auto;position:relative}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:var(--tblr-border-radius)}.btn-group>.btn-group:not(:first-child),.btn-group>:not(.btn-check:first-child)+.btn{margin-left:calc(var(--tblr-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-bottom-right-radius:0;border-top-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-bottom-left-radius:0;border-top-left-radius:0}.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.dropdown-toggle-split:after,.dropend .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropstart .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-left:.1875rem;padding-right:.1875rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{align-items:flex-start;flex-direction:column;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(--tblr-border-width)*-1)}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-left-radius:0;border-bottom-right-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{--tblr-nav-link-padding-x:0.75rem;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-gray-500);--tblr-nav-link-hover-color:var(--tblr-link-hover-color);--tblr-nav-link-disabled-color:var(--tblr-disabled-color);display:flex;flex-wrap:wrap;list-style:none;margin-bottom:0;padding-left:0}.nav-link{background:none;border:0;color:var(--tblr-nav-link-color);display:block;font-size:var(--tblr-nav-link-font-size);font-weight:var(--tblr-nav-link-font-weight);padding:var(--tblr-nav-link-padding-y) var(--tblr-nav-link-padding-x);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}.nav-link:focus,.nav-link:hover{color:var(--tblr-nav-link-hover-color);text-decoration:none}.nav-link:focus-visible{box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.nav-link.disabled,.nav-link:disabled{color:var(--tblr-nav-link-disabled-color);cursor:default;pointer-events:none}.nav-tabs{--tblr-nav-tabs-border-width:var(--tblr-border-width);--tblr-nav-tabs-border-color:var(--tblr-border-color);--tblr-nav-tabs-border-radius:var(--tblr-border-radius);--tblr-nav-tabs-link-hover-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);--tblr-nav-tabs-link-active-color:var(--tblr-body-color);--tblr-nav-tabs-link-active-bg:var(--tblr-body-bg);--tblr-nav-tabs-link-active-border-color:var(--tblr-border-color) var(--tblr-border-color) var(--tblr-border-color);border-bottom:var(--tblr-nav-tabs-border-width) solid var(--tblr-nav-tabs-border-color)}.nav-tabs .nav-link{border:var(--tblr-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--tblr-nav-tabs-border-radius);border-top-right-radius:var(--tblr-nav-tabs-border-radius);margin-bottom:calc(var(--tblr-nav-tabs-border-width)*-1)}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:var(--tblr-nav-tabs-link-hover-border-color);isolation:isolate}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{background-color:var(--tblr-nav-tabs-link-active-bg);border-color:var(--tblr-nav-tabs-link-active-border-color);color:var(--tblr-nav-tabs-link-active-color)}.nav-tabs .dropdown-menu{border-top-left-radius:0;border-top-right-radius:0;margin-top:calc(var(--tblr-nav-tabs-border-width)*-1)}.nav-pills{--tblr-nav-pills-border-radius:var(--tblr-border-radius);--tblr-nav-pills-link-active-color:var(--tblr-primary);--tblr-nav-pills-link-active-bg:var(--tblr-active-bg)}.nav-pills .nav-link{border-radius:var(--tblr-nav-pills-border-radius)}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:var(--tblr-nav-pills-link-active-bg);color:var(--tblr-nav-pills-link-active-color)}.nav-underline{--tblr-nav-underline-gap:1rem;--tblr-nav-underline-border-width:0.125rem;--tblr-nav-underline-link-active-color:var(--tblr-emphasis-color);gap:var(--tblr-nav-underline-gap)}.nav-underline .nav-link{border-bottom:var(--tblr-nav-underline-border-width) solid transparent;padding-left:0;padding-right:0}.nav-underline .nav-link:focus,.nav-underline .nav-link:hover{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{border-bottom-color:currentcolor;color:var(--tblr-nav-underline-link-active-color);font-weight:600}.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{--tblr-navbar-padding-x:0;--tblr-navbar-padding-y:0.25rem;--tblr-navbar-hover-color:rgba(var(--tblr-emphasis-color-rgb),0.8);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:var(--tblr-body-color) color;--tblr-navbar-brand-padding-y:0.5rem;--tblr-navbar-brand-margin-end:1rem;--tblr-navbar-brand-font-size:1.25rem;--tblr-navbar-brand-color:var(--tblr-body-color);--tblr-navbar-brand-hover-color:var(--tblr-body-color) color;--tblr-navbar-nav-link-padding-x:0.75rem;--tblr-navbar-toggler-padding-y:0;--tblr-navbar-toggler-padding-x:0;--tblr-navbar-toggler-font-size:1rem;--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(24, 36, 51, 0.75)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E");--tblr-navbar-toggler-border-color:rgba(var(--tblr-emphasis-color-rgb),0.15);--tblr-navbar-toggler-border-radius:var(--tblr-border-radius);--tblr-navbar-toggler-focus-width:0;--tblr-navbar-toggler-transition:box-shadow 0.15s ease-in-out;align-items:center;display:flex;flex-wrap:wrap;justify-content:space-between;padding:var(--tblr-navbar-padding-y) var(--tblr-navbar-padding-x);position:relative}.navbar>.container,.navbar>.container-fluid,.navbar>.container-lg,.navbar>.container-md,.navbar>.container-sm,.navbar>.container-xl,.navbar>.container-xxl{align-items:center;display:flex;flex-wrap:inherit;justify-content:space-between}.navbar-brand{color:var(--tblr-navbar-brand-color);font-size:var(--tblr-navbar-brand-font-size);margin-right:var(--tblr-navbar-brand-margin-end);padding-bottom:var(--tblr-navbar-brand-padding-y);padding-top:var(--tblr-navbar-brand-padding-y);white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{color:var(--tblr-navbar-brand-hover-color);text-decoration:none}.navbar-nav{--tblr-nav-link-padding-x:0;--tblr-nav-link-padding-y:0.5rem;--tblr-nav-link-font-weight: ;--tblr-nav-link-color:var(--tblr-navbar-color);--tblr-nav-link-hover-color:var(--tblr-navbar-hover-color);--tblr-nav-link-disabled-color:var(--tblr-navbar-disabled-color);display:flex;flex-direction:column;list-style:none;margin-bottom:0;padding-left:0}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--tblr-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{color:var(--tblr-navbar-color);padding-bottom:.5rem;padding-top:.5rem}.navbar-text a,.navbar-text a:focus,.navbar-text a:hover{color:var(--tblr-navbar-active-color)}.navbar-collapse{align-items:center;flex-basis:100%;flex-grow:1}.navbar-toggler{background-color:transparent;border:var(--tblr-border-width) solid var(--tblr-navbar-toggler-border-color);border-radius:var(--tblr-navbar-toggler-border-radius);color:var(--tblr-navbar-color);font-size:var(--tblr-navbar-toggler-font-size);line-height:1;padding:var(--tblr-navbar-toggler-padding-y) var(--tblr-navbar-toggler-padding-x);transition:var(--tblr-navbar-toggler-transition)}@media(prefers-reduced-motion:reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{box-shadow:0 0 0 var(--tblr-navbar-toggler-focus-width);outline:0;text-decoration:none}.navbar-toggler-icon{background-image:var(--tblr-navbar-toggler-icon-bg);background-position:50%;background-repeat:no-repeat;background-size:100%;display:inline-block;height:1.5em;vertical-align:middle;width:1.5em}.navbar-nav-scroll{max-height:var(--tblr-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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}@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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}}.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-left:var(--tblr-navbar-nav-link-padding-x);padding-right:var(--tblr-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{background-color:transparent!important;border:0!important;box-shadow:none;flex-grow:1;height:auto!important;position:static;transform:none!important;transition:none;visibility:visible!important;width:auto!important;z-index:auto}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;flex-grow:0;overflow-y:visible;padding:0}.navbar-dark,.navbar[data-bs-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light]{--tblr-navbar-color:hsla(0,0%,100%,.7);--tblr-navbar-hover-color:hsla(0,0%,100%,.75);--tblr-navbar-disabled-color:var(--tblr-disabled-color);--tblr-navbar-active-color:#fff;--tblr-navbar-brand-color:#fff;--tblr-navbar-brand-hover-color:#fff;--tblr-navbar-toggler-border-color:hsla(0,0%,100%,.1)}.navbar-dark,.navbar[data-bs-theme=dark],[data-bs-theme=dark] .navbar-toggler-icon,body[data-bs-theme=dark] .navbar[data-bs-theme=light],body[data-bs-theme=dark] [data-bs-theme=light] .navbar-toggler-icon{--tblr-navbar-toggler-icon-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3E%3Cpath stroke='rgba(255, 255, 255, 0.7)' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.card{--tblr-card-spacer-y:1rem;--tblr-card-spacer-x:1.25rem;--tblr-card-title-spacer-y:1.25rem;--tblr-card-title-color: ;--tblr-card-subtitle-color: ;--tblr-card-border-width:var(--tblr-border-width);--tblr-card-border-color:var(--tblr-border-color-translucent);--tblr-card-border-radius:var(--tblr-border-radius);--tblr-card-box-shadow:var(--tblr-shadow-card);--tblr-card-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-card-cap-padding-y:1rem;--tblr-card-cap-padding-x:1.25rem;--tblr-card-cap-bg:var(--tblr-bg-surface-tertiary);--tblr-card-cap-color:inherit;--tblr-card-height: ;--tblr-card-color:inherit;--tblr-card-bg:var(--tblr-bg-surface);--tblr-card-img-overlay-padding:1rem;--tblr-card-group-margin:1.5rem;color:var(--tblr-body-color);display:flex;flex-direction:column;height:var(--tblr-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--tblr-card-bg);border:var(--tblr-card-border-width) solid var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius);box-shadow:var(--tblr-card-box-shadow)}.card>.hr,.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--tblr-card-inner-border-radius);border-bottom-right-radius:var(--tblr-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--tblr-card-color);flex:1 1 auto;padding:var(--tblr-card-spacer-y) var(--tblr-card-spacer-x)}.card-title{color:var(--tblr-card-title-color);margin-bottom:var(--tblr-card-title-spacer-y)}.card-subtitle{color:var(--tblr-card-subtitle-color);margin-top:calc(var(--tblr-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--tblr-card-spacer-x)}.card-header{background-color:var(--tblr-card-cap-bg);border-bottom:var(--tblr-card-border-width) solid var(--tblr-card-border-color);color:var(--tblr-card-cap-color);margin-bottom:0;padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x)}.card-header:first-child{border-radius:var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius) 0 0}.card-footer{background-color:var(--tblr-card-cap-bg);border-top:var(--tblr-card-border-width) solid var(--tblr-card-border-color);color:var(--tblr-card-cap-color);padding:var(--tblr-card-cap-padding-y) var(--tblr-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--tblr-card-inner-border-radius) var(--tblr-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--tblr-card-cap-padding-y)*-1);margin-left:calc(var(--tblr-card-cap-padding-x)*-.5);margin-right:calc(var(--tblr-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--tblr-card-bg);border-bottom-color:var(--tblr-card-bg)}.card-header-pills{margin-left:calc(var(--tblr-card-cap-padding-x)*-.5);margin-right:calc(var(--tblr-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--tblr-card-inner-border-radius);bottom:0;left:0;padding:var(--tblr-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--tblr-card-inner-border-radius);border-top-right-radius:var(--tblr-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--tblr-card-inner-border-radius);border-bottom-right-radius:var(--tblr-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--tblr-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{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-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-bottom-left-radius:0;border-top-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{--tblr-accordion-bg:transparent;--tblr-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;--tblr-accordion-border-color:var(--tblr-border-color-translucent);--tblr-accordion-border-width:var(--tblr-border-width);--tblr-accordion-border-radius:var(--tblr-border-radius);--tblr-accordion-inner-border-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));--tblr-accordion-btn-padding-x:1.25rem;--tblr-accordion-btn-padding-y:1rem;--tblr-accordion-btn-color:var(--tblr-body-color);--tblr-accordion-btn-bg:transparent;--tblr-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--tblr-accordion-btn-icon-width:1rem;--tblr-accordion-btn-icon-transform:rotate(-180deg);--tblr-accordion-btn-icon-transition:transform 0.2s ease-in-out;--tblr-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' stroke='%23022C53' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m2 5 6 6 6-6'/%3E%3C/svg%3E");--tblr-accordion-btn-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-accordion-body-padding-x:1.25rem;--tblr-accordion-body-padding-y:1rem;--tblr-accordion-active-color:inherit;--tblr-accordion-active-bg:transparent}.accordion-button{align-items:center;background-color:var(--tblr-accordion-btn-bg);border:0;border-radius:0;color:var(--tblr-accordion-btn-color);display:flex;font-size:.875rem;overflow-anchor:none;padding:var(--tblr-accordion-btn-padding-y) var(--tblr-accordion-btn-padding-x);position:relative;text-align:left;transition:var(--tblr-accordion-transition);width:100%}@media(prefers-reduced-motion:reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){background-color:var(--tblr-accordion-active-bg);box-shadow:inset 0 calc(var(--tblr-accordion-border-width)*-1) 0 var(--tblr-accordion-border-color);color:var(--tblr-accordion-active-color)}.accordion-button:not(.collapsed):after{background-image:var(--tblr-accordion-btn-active-icon);transform:var(--tblr-accordion-btn-icon-transform)}.accordion-button:after{background-image:var(--tblr-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--tblr-accordion-btn-icon-width);content:"";flex-shrink:0;height:var(--tblr-accordion-btn-icon-width);margin-left:auto;transition:var(--tblr-accordion-btn-icon-transition);width:var(--tblr-accordion-btn-icon-width)}@media(prefers-reduced-motion:reduce){.accordion-button:after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{box-shadow:var(--tblr-accordion-btn-focus-box-shadow);outline:0;z-index:3}.accordion-header{margin-bottom:0}.accordion-item{background-color:var(--tblr-accordion-bg);border:var(--tblr-accordion-border-width) solid var(--tblr-accordion-border-color);color:var(--tblr-accordion-color)}.accordion-item:first-of-type{border-top-left-radius:var(--tblr-accordion-border-radius);border-top-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:first-of-type>.accordion-header .accordion-button{border-top-left-radius:var(--tblr-accordion-inner-border-radius);border-top-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:var(--tblr-accordion-border-radius);border-bottom-right-radius:var(--tblr-accordion-border-radius)}.accordion-item:last-of-type>.accordion-header .accordion-button.collapsed{border-bottom-left-radius:var(--tblr-accordion-inner-border-radius);border-bottom-right-radius:var(--tblr-accordion-inner-border-radius)}.accordion-item:last-of-type>.accordion-collapse{border-bottom-left-radius:var(--tblr-accordion-border-radius);border-bottom-right-radius:var(--tblr-accordion-border-radius)}.accordion-body{padding:var(--tblr-accordion-body-padding-y) var(--tblr-accordion-body-padding-x)}.accordion-flush>.accordion-item{border-left:0;border-radius:0;border-right:0}.accordion-flush>.accordion-item:first-child{border-top:0}.accordion-flush>.accordion-item:last-child{border-bottom:0}.accordion-flush>.accordion-item>.accordion-collapse,.accordion-flush>.accordion-item>.accordion-header .accordion-button,.accordion-flush>.accordion-item>.accordion-header .accordion-button.collapsed{border-radius:0}[data-bs-theme=dark] .accordion-button:after{--tblr-accordion-btn-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2369A8E3' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E");--tblr-accordion-btn-active-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2369A8E3' viewBox='0 0 16 16'%3E%3Cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708'/%3E%3C/svg%3E")}.breadcrumb{--tblr-breadcrumb-padding-x:0;--tblr-breadcrumb-padding-y:0;--tblr-breadcrumb-margin-bottom:1rem;--tblr-breadcrumb-bg: ;--tblr-breadcrumb-border-radius: ;--tblr-breadcrumb-divider-color:var(--tblr-gray-500);--tblr-breadcrumb-item-padding-x:0.5rem;--tblr-breadcrumb-item-active-color:inherit;background-color:var(--tblr-breadcrumb-bg);border-radius:var(--tblr-breadcrumb-border-radius);display:flex;flex-wrap:wrap;font-size:var(--tblr-breadcrumb-font-size);list-style:none;margin-bottom:var(--tblr-breadcrumb-margin-bottom);padding:var(--tblr-breadcrumb-padding-y) var(--tblr-breadcrumb-padding-x)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item:before{color:var(--tblr-breadcrumb-divider-color);content:var(--tblr-breadcrumb-divider,"/");float:left;padding-right:var(--tblr-breadcrumb-item-padding-x)}.breadcrumb-item.active{color:var(--tblr-breadcrumb-item-active-color)}.pagination{--tblr-pagination-padding-x:0.25rem;--tblr-pagination-padding-y:0.25rem;--tblr-pagination-font-size:0.875rem;--tblr-pagination-color:var(--tblr-gray-500);--tblr-pagination-bg:transparent;--tblr-pagination-border-width:0;--tblr-pagination-border-color:var(--tblr-border-color);--tblr-pagination-border-radius:var(--tblr-border-radius);--tblr-pagination-hover-color:var(--tblr-link-hover-color);--tblr-pagination-hover-bg:var(--tblr-tertiary-bg);--tblr-pagination-hover-border-color:var(--tblr-border-color);--tblr-pagination-focus-color:var(--tblr-link-hover-color);--tblr-pagination-focus-bg:var(--tblr-secondary-bg);--tblr-pagination-focus-box-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-pagination-active-color:#fff;--tblr-pagination-active-bg:var(--tblr-primary);--tblr-pagination-active-border-color:var(--tblr-primary);--tblr-pagination-disabled-color:var(--tblr-disabled-color);--tblr-pagination-disabled-bg:transparent;--tblr-pagination-disabled-border-color:var(--tblr-border-color);display:flex;list-style:none;padding-left:0}.page-link{background-color:var(--tblr-pagination-bg);border:var(--tblr-pagination-border-width) solid var(--tblr-pagination-border-color);color:var(--tblr-pagination-color);display:block;font-size:var(--tblr-pagination-font-size);padding:var(--tblr-pagination-padding-y) var(--tblr-pagination-padding-x);position:relative;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{background-color:var(--tblr-pagination-hover-bg);border-color:var(--tblr-pagination-hover-border-color);color:var(--tblr-pagination-hover-color);text-decoration:none;z-index:2}.page-link:focus{background-color:var(--tblr-pagination-focus-bg);box-shadow:var(--tblr-pagination-focus-box-shadow);color:var(--tblr-pagination-focus-color);outline:0;z-index:3}.active>.page-link,.page-link.active{background-color:var(--tblr-pagination-active-bg);border-color:var(--tblr-pagination-active-border-color);color:var(--tblr-pagination-active-color);z-index:3}.disabled>.page-link,.page-link.disabled{background-color:var(--tblr-pagination-disabled-bg);border-color:var(--tblr-pagination-disabled-border-color);color:var(--tblr-pagination-disabled-color);pointer-events:none}.page-item:not(:first-child) .page-link{margin-left:0}.page-item:first-child .page-link{border-bottom-left-radius:var(--tblr-pagination-border-radius);border-top-left-radius:var(--tblr-pagination-border-radius)}.page-item:last-child .page-link{border-bottom-right-radius:var(--tblr-pagination-border-radius);border-top-right-radius:var(--tblr-pagination-border-radius)}.pagination-lg{--tblr-pagination-padding-x:1.5rem;--tblr-pagination-padding-y:0.75rem;--tblr-pagination-font-size:1.09375rem;--tblr-pagination-border-radius:var(--tblr-border-radius-lg)}.pagination-sm{--tblr-pagination-padding-x:0.5rem;--tblr-pagination-padding-y:0.25rem;--tblr-pagination-font-size:0.765625rem;--tblr-pagination-border-radius:var(--tblr-border-radius-sm)}.badge{--tblr-badge-padding-x:0.5em;--tblr-badge-padding-y:0.25em;--tblr-badge-font-size:85.714285%;--tblr-badge-font-weight:var(--tblr-font-weight-medium);--tblr-badge-color:var(--tblr-gray-500);--tblr-badge-border-radius:var(--tblr-border-radius);border-radius:var(--tblr-badge-border-radius);color:var(--tblr-badge-color);display:inline-block;font-size:var(--tblr-badge-font-size);font-weight:var(--tblr-badge-font-weight);line-height:1;padding:var(--tblr-badge-padding-y) var(--tblr-badge-padding-x);text-align:center;vertical-align:baseline;white-space:nowrap}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--tblr-alert-bg:transparent;--tblr-alert-padding-x:1rem;--tblr-alert-padding-y:0.75rem;--tblr-alert-margin-bottom:1rem;--tblr-alert-color:inherit;--tblr-alert-border-color:transparent;--tblr-alert-border:var(--tblr-border-width) solid var(--tblr-alert-border-color);--tblr-alert-border-radius:var(--tblr-border-radius);--tblr-alert-link-color:inherit;background-color:var(--tblr-alert-bg);border:var(--tblr-alert-border);border-radius:var(--tblr-alert-border-radius);color:var(--tblr-alert-color);margin-bottom:var(--tblr-alert-margin-bottom);padding:var(--tblr-alert-padding-y) var(--tblr-alert-padding-x);position:relative}.alert-heading{color:inherit}.alert-link{color:var(--tblr-alert-link-color);font-weight:var(--tblr-font-weight-bold)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{padding:.9375rem 1rem;position:absolute;right:0;top:0;z-index:2}.alert-primary{--tblr-alert-color:var(--tblr-primary-text-emphasis);--tblr-alert-bg:var(--tblr-primary-bg-subtle);--tblr-alert-border-color:var(--tblr-primary-border-subtle);--tblr-alert-link-color:var(--tblr-primary-text-emphasis)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary-text-emphasis);--tblr-alert-bg:var(--tblr-secondary-bg-subtle);--tblr-alert-border-color:var(--tblr-secondary-border-subtle);--tblr-alert-link-color:var(--tblr-secondary-text-emphasis)}.alert-success{--tblr-alert-color:var(--tblr-success-text-emphasis);--tblr-alert-bg:var(--tblr-success-bg-subtle);--tblr-alert-border-color:var(--tblr-success-border-subtle);--tblr-alert-link-color:var(--tblr-success-text-emphasis)}.alert-info{--tblr-alert-color:var(--tblr-info-text-emphasis);--tblr-alert-bg:var(--tblr-info-bg-subtle);--tblr-alert-border-color:var(--tblr-info-border-subtle);--tblr-alert-link-color:var(--tblr-info-text-emphasis)}.alert-warning{--tblr-alert-color:var(--tblr-warning-text-emphasis);--tblr-alert-bg:var(--tblr-warning-bg-subtle);--tblr-alert-border-color:var(--tblr-warning-border-subtle);--tblr-alert-link-color:var(--tblr-warning-text-emphasis)}.alert-danger{--tblr-alert-color:var(--tblr-danger-text-emphasis);--tblr-alert-bg:var(--tblr-danger-bg-subtle);--tblr-alert-border-color:var(--tblr-danger-border-subtle);--tblr-alert-link-color:var(--tblr-danger-text-emphasis)}.alert-light{--tblr-alert-color:var(--tblr-light-text-emphasis);--tblr-alert-bg:var(--tblr-light-bg-subtle);--tblr-alert-border-color:var(--tblr-light-border-subtle);--tblr-alert-link-color:var(--tblr-light-text-emphasis)}.alert-dark{--tblr-alert-color:var(--tblr-dark-text-emphasis);--tblr-alert-bg:var(--tblr-dark-bg-subtle);--tblr-alert-border-color:var(--tblr-dark-border-subtle);--tblr-alert-link-color:var(--tblr-dark-text-emphasis)}.alert-muted{--tblr-alert-color:var(--tblr-muted-text-emphasis);--tblr-alert-bg:var(--tblr-muted-bg-subtle);--tblr-alert-border-color:var(--tblr-muted-border-subtle);--tblr-alert-link-color:var(--tblr-muted-text-emphasis)}.alert-blue{--tblr-alert-color:var(--tblr-blue-text-emphasis);--tblr-alert-bg:var(--tblr-blue-bg-subtle);--tblr-alert-border-color:var(--tblr-blue-border-subtle);--tblr-alert-link-color:var(--tblr-blue-text-emphasis)}.alert-azure{--tblr-alert-color:var(--tblr-azure-text-emphasis);--tblr-alert-bg:var(--tblr-azure-bg-subtle);--tblr-alert-border-color:var(--tblr-azure-border-subtle);--tblr-alert-link-color:var(--tblr-azure-text-emphasis)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo-text-emphasis);--tblr-alert-bg:var(--tblr-indigo-bg-subtle);--tblr-alert-border-color:var(--tblr-indigo-border-subtle);--tblr-alert-link-color:var(--tblr-indigo-text-emphasis)}.alert-purple{--tblr-alert-color:var(--tblr-purple-text-emphasis);--tblr-alert-bg:var(--tblr-purple-bg-subtle);--tblr-alert-border-color:var(--tblr-purple-border-subtle);--tblr-alert-link-color:var(--tblr-purple-text-emphasis)}.alert-pink{--tblr-alert-color:var(--tblr-pink-text-emphasis);--tblr-alert-bg:var(--tblr-pink-bg-subtle);--tblr-alert-border-color:var(--tblr-pink-border-subtle);--tblr-alert-link-color:var(--tblr-pink-text-emphasis)}.alert-red{--tblr-alert-color:var(--tblr-red-text-emphasis);--tblr-alert-bg:var(--tblr-red-bg-subtle);--tblr-alert-border-color:var(--tblr-red-border-subtle);--tblr-alert-link-color:var(--tblr-red-text-emphasis)}.alert-orange{--tblr-alert-color:var(--tblr-orange-text-emphasis);--tblr-alert-bg:var(--tblr-orange-bg-subtle);--tblr-alert-border-color:var(--tblr-orange-border-subtle);--tblr-alert-link-color:var(--tblr-orange-text-emphasis)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow-text-emphasis);--tblr-alert-bg:var(--tblr-yellow-bg-subtle);--tblr-alert-border-color:var(--tblr-yellow-border-subtle);--tblr-alert-link-color:var(--tblr-yellow-text-emphasis)}.alert-lime{--tblr-alert-color:var(--tblr-lime-text-emphasis);--tblr-alert-bg:var(--tblr-lime-bg-subtle);--tblr-alert-border-color:var(--tblr-lime-border-subtle);--tblr-alert-link-color:var(--tblr-lime-text-emphasis)}.alert-green{--tblr-alert-color:var(--tblr-green-text-emphasis);--tblr-alert-bg:var(--tblr-green-bg-subtle);--tblr-alert-border-color:var(--tblr-green-border-subtle);--tblr-alert-link-color:var(--tblr-green-text-emphasis)}.alert-teal{--tblr-alert-color:var(--tblr-teal-text-emphasis);--tblr-alert-bg:var(--tblr-teal-bg-subtle);--tblr-alert-border-color:var(--tblr-teal-border-subtle);--tblr-alert-link-color:var(--tblr-teal-text-emphasis)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan-text-emphasis);--tblr-alert-bg:var(--tblr-cyan-bg-subtle);--tblr-alert-border-color:var(--tblr-cyan-border-subtle);--tblr-alert-link-color:var(--tblr-cyan-text-emphasis)}.alert-x{--tblr-alert-color:var(--tblr-x-text-emphasis);--tblr-alert-bg:var(--tblr-x-bg-subtle);--tblr-alert-border-color:var(--tblr-x-border-subtle);--tblr-alert-link-color:var(--tblr-x-text-emphasis)}.alert-facebook{--tblr-alert-color:var(--tblr-facebook-text-emphasis);--tblr-alert-bg:var(--tblr-facebook-bg-subtle);--tblr-alert-border-color:var(--tblr-facebook-border-subtle);--tblr-alert-link-color:var(--tblr-facebook-text-emphasis)}.alert-twitter{--tblr-alert-color:var(--tblr-twitter-text-emphasis);--tblr-alert-bg:var(--tblr-twitter-bg-subtle);--tblr-alert-border-color:var(--tblr-twitter-border-subtle);--tblr-alert-link-color:var(--tblr-twitter-text-emphasis)}.alert-linkedin{--tblr-alert-color:var(--tblr-linkedin-text-emphasis);--tblr-alert-bg:var(--tblr-linkedin-bg-subtle);--tblr-alert-border-color:var(--tblr-linkedin-border-subtle);--tblr-alert-link-color:var(--tblr-linkedin-text-emphasis)}.alert-google{--tblr-alert-color:var(--tblr-google-text-emphasis);--tblr-alert-bg:var(--tblr-google-bg-subtle);--tblr-alert-border-color:var(--tblr-google-border-subtle);--tblr-alert-link-color:var(--tblr-google-text-emphasis)}.alert-youtube{--tblr-alert-color:var(--tblr-youtube-text-emphasis);--tblr-alert-bg:var(--tblr-youtube-bg-subtle);--tblr-alert-border-color:var(--tblr-youtube-border-subtle);--tblr-alert-link-color:var(--tblr-youtube-text-emphasis)}.alert-vimeo{--tblr-alert-color:var(--tblr-vimeo-text-emphasis);--tblr-alert-bg:var(--tblr-vimeo-bg-subtle);--tblr-alert-border-color:var(--tblr-vimeo-border-subtle);--tblr-alert-link-color:var(--tblr-vimeo-text-emphasis)}.alert-dribbble{--tblr-alert-color:var(--tblr-dribbble-text-emphasis);--tblr-alert-bg:var(--tblr-dribbble-bg-subtle);--tblr-alert-border-color:var(--tblr-dribbble-border-subtle);--tblr-alert-link-color:var(--tblr-dribbble-text-emphasis)}.alert-github{--tblr-alert-color:var(--tblr-github-text-emphasis);--tblr-alert-bg:var(--tblr-github-bg-subtle);--tblr-alert-border-color:var(--tblr-github-border-subtle);--tblr-alert-link-color:var(--tblr-github-text-emphasis)}.alert-instagram{--tblr-alert-color:var(--tblr-instagram-text-emphasis);--tblr-alert-bg:var(--tblr-instagram-bg-subtle);--tblr-alert-border-color:var(--tblr-instagram-border-subtle);--tblr-alert-link-color:var(--tblr-instagram-text-emphasis)}.alert-pinterest{--tblr-alert-color:var(--tblr-pinterest-text-emphasis);--tblr-alert-bg:var(--tblr-pinterest-bg-subtle);--tblr-alert-border-color:var(--tblr-pinterest-border-subtle);--tblr-alert-link-color:var(--tblr-pinterest-text-emphasis)}.alert-vk{--tblr-alert-color:var(--tblr-vk-text-emphasis);--tblr-alert-bg:var(--tblr-vk-bg-subtle);--tblr-alert-border-color:var(--tblr-vk-border-subtle);--tblr-alert-link-color:var(--tblr-vk-text-emphasis)}.alert-rss{--tblr-alert-color:var(--tblr-rss-text-emphasis);--tblr-alert-bg:var(--tblr-rss-bg-subtle);--tblr-alert-border-color:var(--tblr-rss-border-subtle);--tblr-alert-link-color:var(--tblr-rss-text-emphasis)}.alert-flickr{--tblr-alert-color:var(--tblr-flickr-text-emphasis);--tblr-alert-bg:var(--tblr-flickr-bg-subtle);--tblr-alert-border-color:var(--tblr-flickr-border-subtle);--tblr-alert-link-color:var(--tblr-flickr-text-emphasis)}.alert-bitbucket{--tblr-alert-color:var(--tblr-bitbucket-text-emphasis);--tblr-alert-bg:var(--tblr-bitbucket-bg-subtle);--tblr-alert-border-color:var(--tblr-bitbucket-border-subtle);--tblr-alert-link-color:var(--tblr-bitbucket-text-emphasis)}.alert-tabler{--tblr-alert-color:var(--tblr-tabler-text-emphasis);--tblr-alert-bg:var(--tblr-tabler-bg-subtle);--tblr-alert-border-color:var(--tblr-tabler-border-subtle);--tblr-alert-link-color:var(--tblr-tabler-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--tblr-progress-height:0.5rem;--tblr-progress-font-size:0.65625rem;--tblr-progress-bg:var(--tblr-border-color);--tblr-progress-border-radius:var(--tblr-border-radius);--tblr-progress-box-shadow:var(--tblr-box-shadow-inset);--tblr-progress-bar-color:#fff;--tblr-progress-bar-bg:var(--tblr-primary);--tblr-progress-bar-transition:width 0.6s ease;background-color:var(--tblr-progress-bg);border-radius:var(--tblr-progress-border-radius);box-shadow:var(--tblr-progress-box-shadow);display:flex;font-size:var(--tblr-progress-font-size);height:var(--tblr-progress-height);overflow:hidden}.progress-bar{background-color:var(--tblr-progress-bar-bg);color:var(--tblr-progress-bar-color);display:flex;flex-direction:column;justify-content:center;overflow:hidden;text-align:center;transition:var(--tblr-progress-bar-transition);white-space:nowrap}@media(prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:var(--tblr-progress-height) var(--tblr-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:progress-bar-stripes 1s linear infinite}@media(prefers-reduced-motion:reduce){.progress-bar-animated{animation:none}}.list-group{--tblr-list-group-color:var(--tblr-body-color);--tblr-list-group-bg:inherit;--tblr-list-group-border-color:var(--tblr-border-color);--tblr-list-group-border-width:var(--tblr-border-width);--tblr-list-group-border-radius:var(--tblr-border-radius);--tblr-list-group-item-padding-x:1.25rem;--tblr-list-group-item-padding-y:1rem;--tblr-list-group-action-color:inherit;--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:rgba(var(--tblr-secondary-rgb),0.08);--tblr-list-group-action-active-color:var(--tblr-body-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-bg);--tblr-list-group-disabled-color:var(--tblr-secondary-color);--tblr-list-group-disabled-bg:inherit;--tblr-list-group-active-color:inherit;--tblr-list-group-active-bg:var(--tblr-active-bg);--tblr-list-group-active-border-color:var(--tblr-border-color);border-radius:var(--tblr-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:var(--tblr-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:var(--tblr-list-group-action-hover-bg);color:var(--tblr-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:active{background-color:var(--tblr-list-group-action-active-bg);color:var(--tblr-list-group-action-active-color)}.list-group-item{background-color:var(--tblr-list-group-bg);border:var(--tblr-list-group-border-width) solid var(--tblr-list-group-border-color);color:var(--tblr-list-group-color);display:block;padding:var(--tblr-list-group-item-padding-y) var(--tblr-list-group-item-padding-x);position:relative}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--tblr-list-group-disabled-bg);color:var(--tblr-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--tblr-list-group-active-bg);border-color:var(--tblr-list-group-active-border-color);color:var(--tblr-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--tblr-list-group-border-width);margin-top:calc(var(--tblr-list-group-border-width)*-1)}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--tblr-list-group-border-width);margin-left:calc(var(--tblr-list-group-border-width)*-1)}@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(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--tblr-list-group-border-width);margin-left:calc(var(--tblr-list-group-border-width)*-1)}}@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(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--tblr-list-group-border-width);margin-left:calc(var(--tblr-list-group-border-width)*-1)}}@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(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--tblr-list-group-border-width);margin-left:calc(var(--tblr-list-group-border-width)*-1)}}@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(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--tblr-list-group-border-width);margin-left:calc(var(--tblr-list-group-border-width)*-1)}}@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(--tblr-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-bottom-left-radius:0;border-top-right-radius:var(--tblr-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--tblr-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-left-width:var(--tblr-list-group-border-width);margin-left:calc(var(--tblr-list-group-border-width)*-1)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--tblr-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{--tblr-list-group-color:var(--tblr-primary-text-emphasis);--tblr-list-group-bg:var(--tblr-primary-bg-subtle);--tblr-list-group-border-color:var(--tblr-primary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-primary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-primary-border-subtle);--tblr-list-group-active-color:var(--tblr-primary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-primary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-primary-text-emphasis)}.list-group-item-secondary{--tblr-list-group-color:var(--tblr-secondary-text-emphasis);--tblr-list-group-bg:var(--tblr-secondary-bg-subtle);--tblr-list-group-border-color:var(--tblr-secondary-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-secondary-border-subtle);--tblr-list-group-active-color:var(--tblr-secondary-bg-subtle);--tblr-list-group-active-bg:var(--tblr-secondary-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-secondary-text-emphasis)}.list-group-item-success{--tblr-list-group-color:var(--tblr-success-text-emphasis);--tblr-list-group-bg:var(--tblr-success-bg-subtle);--tblr-list-group-border-color:var(--tblr-success-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-success-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-success-border-subtle);--tblr-list-group-active-color:var(--tblr-success-bg-subtle);--tblr-list-group-active-bg:var(--tblr-success-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-success-text-emphasis)}.list-group-item-info{--tblr-list-group-color:var(--tblr-info-text-emphasis);--tblr-list-group-bg:var(--tblr-info-bg-subtle);--tblr-list-group-border-color:var(--tblr-info-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-info-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-info-border-subtle);--tblr-list-group-active-color:var(--tblr-info-bg-subtle);--tblr-list-group-active-bg:var(--tblr-info-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-info-text-emphasis)}.list-group-item-warning{--tblr-list-group-color:var(--tblr-warning-text-emphasis);--tblr-list-group-bg:var(--tblr-warning-bg-subtle);--tblr-list-group-border-color:var(--tblr-warning-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-warning-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-warning-border-subtle);--tblr-list-group-active-color:var(--tblr-warning-bg-subtle);--tblr-list-group-active-bg:var(--tblr-warning-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-warning-text-emphasis)}.list-group-item-danger{--tblr-list-group-color:var(--tblr-danger-text-emphasis);--tblr-list-group-bg:var(--tblr-danger-bg-subtle);--tblr-list-group-border-color:var(--tblr-danger-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-danger-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-danger-border-subtle);--tblr-list-group-active-color:var(--tblr-danger-bg-subtle);--tblr-list-group-active-bg:var(--tblr-danger-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-danger-text-emphasis)}.list-group-item-light{--tblr-list-group-color:var(--tblr-light-text-emphasis);--tblr-list-group-bg:var(--tblr-light-bg-subtle);--tblr-list-group-border-color:var(--tblr-light-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-light-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-light-border-subtle);--tblr-list-group-active-color:var(--tblr-light-bg-subtle);--tblr-list-group-active-bg:var(--tblr-light-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-light-text-emphasis)}.list-group-item-dark{--tblr-list-group-color:var(--tblr-dark-text-emphasis);--tblr-list-group-bg:var(--tblr-dark-bg-subtle);--tblr-list-group-border-color:var(--tblr-dark-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dark-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dark-border-subtle);--tblr-list-group-active-color:var(--tblr-dark-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dark-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dark-text-emphasis)}.list-group-item-muted{--tblr-list-group-color:var(--tblr-muted-text-emphasis);--tblr-list-group-bg:var(--tblr-muted-bg-subtle);--tblr-list-group-border-color:var(--tblr-muted-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-muted-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-muted-border-subtle);--tblr-list-group-active-color:var(--tblr-muted-bg-subtle);--tblr-list-group-active-bg:var(--tblr-muted-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-muted-text-emphasis)}.list-group-item-blue{--tblr-list-group-color:var(--tblr-blue-text-emphasis);--tblr-list-group-bg:var(--tblr-blue-bg-subtle);--tblr-list-group-border-color:var(--tblr-blue-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-blue-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-blue-border-subtle);--tblr-list-group-active-color:var(--tblr-blue-bg-subtle);--tblr-list-group-active-bg:var(--tblr-blue-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-blue-text-emphasis)}.list-group-item-azure{--tblr-list-group-color:var(--tblr-azure-text-emphasis);--tblr-list-group-bg:var(--tblr-azure-bg-subtle);--tblr-list-group-border-color:var(--tblr-azure-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-azure-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-azure-border-subtle);--tblr-list-group-active-color:var(--tblr-azure-bg-subtle);--tblr-list-group-active-bg:var(--tblr-azure-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-azure-text-emphasis)}.list-group-item-indigo{--tblr-list-group-color:var(--tblr-indigo-text-emphasis);--tblr-list-group-bg:var(--tblr-indigo-bg-subtle);--tblr-list-group-border-color:var(--tblr-indigo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-indigo-border-subtle);--tblr-list-group-active-color:var(--tblr-indigo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-indigo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-indigo-text-emphasis)}.list-group-item-purple{--tblr-list-group-color:var(--tblr-purple-text-emphasis);--tblr-list-group-bg:var(--tblr-purple-bg-subtle);--tblr-list-group-border-color:var(--tblr-purple-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-purple-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-purple-border-subtle);--tblr-list-group-active-color:var(--tblr-purple-bg-subtle);--tblr-list-group-active-bg:var(--tblr-purple-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-purple-text-emphasis)}.list-group-item-pink{--tblr-list-group-color:var(--tblr-pink-text-emphasis);--tblr-list-group-bg:var(--tblr-pink-bg-subtle);--tblr-list-group-border-color:var(--tblr-pink-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pink-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pink-border-subtle);--tblr-list-group-active-color:var(--tblr-pink-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pink-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pink-text-emphasis)}.list-group-item-red{--tblr-list-group-color:var(--tblr-red-text-emphasis);--tblr-list-group-bg:var(--tblr-red-bg-subtle);--tblr-list-group-border-color:var(--tblr-red-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-red-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-red-border-subtle);--tblr-list-group-active-color:var(--tblr-red-bg-subtle);--tblr-list-group-active-bg:var(--tblr-red-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-red-text-emphasis)}.list-group-item-orange{--tblr-list-group-color:var(--tblr-orange-text-emphasis);--tblr-list-group-bg:var(--tblr-orange-bg-subtle);--tblr-list-group-border-color:var(--tblr-orange-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-orange-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-orange-border-subtle);--tblr-list-group-active-color:var(--tblr-orange-bg-subtle);--tblr-list-group-active-bg:var(--tblr-orange-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-orange-text-emphasis)}.list-group-item-yellow{--tblr-list-group-color:var(--tblr-yellow-text-emphasis);--tblr-list-group-bg:var(--tblr-yellow-bg-subtle);--tblr-list-group-border-color:var(--tblr-yellow-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-yellow-border-subtle);--tblr-list-group-active-color:var(--tblr-yellow-bg-subtle);--tblr-list-group-active-bg:var(--tblr-yellow-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-yellow-text-emphasis)}.list-group-item-lime{--tblr-list-group-color:var(--tblr-lime-text-emphasis);--tblr-list-group-bg:var(--tblr-lime-bg-subtle);--tblr-list-group-border-color:var(--tblr-lime-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-lime-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-lime-border-subtle);--tblr-list-group-active-color:var(--tblr-lime-bg-subtle);--tblr-list-group-active-bg:var(--tblr-lime-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-lime-text-emphasis)}.list-group-item-green{--tblr-list-group-color:var(--tblr-green-text-emphasis);--tblr-list-group-bg:var(--tblr-green-bg-subtle);--tblr-list-group-border-color:var(--tblr-green-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-green-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-green-border-subtle);--tblr-list-group-active-color:var(--tblr-green-bg-subtle);--tblr-list-group-active-bg:var(--tblr-green-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-green-text-emphasis)}.list-group-item-teal{--tblr-list-group-color:var(--tblr-teal-text-emphasis);--tblr-list-group-bg:var(--tblr-teal-bg-subtle);--tblr-list-group-border-color:var(--tblr-teal-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-teal-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-teal-border-subtle);--tblr-list-group-active-color:var(--tblr-teal-bg-subtle);--tblr-list-group-active-bg:var(--tblr-teal-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-teal-text-emphasis)}.list-group-item-cyan{--tblr-list-group-color:var(--tblr-cyan-text-emphasis);--tblr-list-group-bg:var(--tblr-cyan-bg-subtle);--tblr-list-group-border-color:var(--tblr-cyan-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-cyan-border-subtle);--tblr-list-group-active-color:var(--tblr-cyan-bg-subtle);--tblr-list-group-active-bg:var(--tblr-cyan-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-cyan-text-emphasis)}.list-group-item-x{--tblr-list-group-color:var(--tblr-x-text-emphasis);--tblr-list-group-bg:var(--tblr-x-bg-subtle);--tblr-list-group-border-color:var(--tblr-x-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-x-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-x-border-subtle);--tblr-list-group-active-color:var(--tblr-x-bg-subtle);--tblr-list-group-active-bg:var(--tblr-x-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-x-text-emphasis)}.list-group-item-facebook{--tblr-list-group-color:var(--tblr-facebook-text-emphasis);--tblr-list-group-bg:var(--tblr-facebook-bg-subtle);--tblr-list-group-border-color:var(--tblr-facebook-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-facebook-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-facebook-border-subtle);--tblr-list-group-active-color:var(--tblr-facebook-bg-subtle);--tblr-list-group-active-bg:var(--tblr-facebook-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-facebook-text-emphasis)}.list-group-item-twitter{--tblr-list-group-color:var(--tblr-twitter-text-emphasis);--tblr-list-group-bg:var(--tblr-twitter-bg-subtle);--tblr-list-group-border-color:var(--tblr-twitter-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-twitter-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-twitter-border-subtle);--tblr-list-group-active-color:var(--tblr-twitter-bg-subtle);--tblr-list-group-active-bg:var(--tblr-twitter-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-twitter-text-emphasis)}.list-group-item-linkedin{--tblr-list-group-color:var(--tblr-linkedin-text-emphasis);--tblr-list-group-bg:var(--tblr-linkedin-bg-subtle);--tblr-list-group-border-color:var(--tblr-linkedin-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-linkedin-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-linkedin-border-subtle);--tblr-list-group-active-color:var(--tblr-linkedin-bg-subtle);--tblr-list-group-active-bg:var(--tblr-linkedin-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-linkedin-text-emphasis)}.list-group-item-google{--tblr-list-group-color:var(--tblr-google-text-emphasis);--tblr-list-group-bg:var(--tblr-google-bg-subtle);--tblr-list-group-border-color:var(--tblr-google-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-google-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-google-border-subtle);--tblr-list-group-active-color:var(--tblr-google-bg-subtle);--tblr-list-group-active-bg:var(--tblr-google-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-google-text-emphasis)}.list-group-item-youtube{--tblr-list-group-color:var(--tblr-youtube-text-emphasis);--tblr-list-group-bg:var(--tblr-youtube-bg-subtle);--tblr-list-group-border-color:var(--tblr-youtube-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-youtube-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-youtube-border-subtle);--tblr-list-group-active-color:var(--tblr-youtube-bg-subtle);--tblr-list-group-active-bg:var(--tblr-youtube-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-youtube-text-emphasis)}.list-group-item-vimeo{--tblr-list-group-color:var(--tblr-vimeo-text-emphasis);--tblr-list-group-bg:var(--tblr-vimeo-bg-subtle);--tblr-list-group-border-color:var(--tblr-vimeo-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-vimeo-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-vimeo-border-subtle);--tblr-list-group-active-color:var(--tblr-vimeo-bg-subtle);--tblr-list-group-active-bg:var(--tblr-vimeo-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-vimeo-text-emphasis)}.list-group-item-dribbble{--tblr-list-group-color:var(--tblr-dribbble-text-emphasis);--tblr-list-group-bg:var(--tblr-dribbble-bg-subtle);--tblr-list-group-border-color:var(--tblr-dribbble-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-dribbble-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-dribbble-border-subtle);--tblr-list-group-active-color:var(--tblr-dribbble-bg-subtle);--tblr-list-group-active-bg:var(--tblr-dribbble-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-dribbble-text-emphasis)}.list-group-item-github{--tblr-list-group-color:var(--tblr-github-text-emphasis);--tblr-list-group-bg:var(--tblr-github-bg-subtle);--tblr-list-group-border-color:var(--tblr-github-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-github-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-github-border-subtle);--tblr-list-group-active-color:var(--tblr-github-bg-subtle);--tblr-list-group-active-bg:var(--tblr-github-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-github-text-emphasis)}.list-group-item-instagram{--tblr-list-group-color:var(--tblr-instagram-text-emphasis);--tblr-list-group-bg:var(--tblr-instagram-bg-subtle);--tblr-list-group-border-color:var(--tblr-instagram-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-instagram-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-instagram-border-subtle);--tblr-list-group-active-color:var(--tblr-instagram-bg-subtle);--tblr-list-group-active-bg:var(--tblr-instagram-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-instagram-text-emphasis)}.list-group-item-pinterest{--tblr-list-group-color:var(--tblr-pinterest-text-emphasis);--tblr-list-group-bg:var(--tblr-pinterest-bg-subtle);--tblr-list-group-border-color:var(--tblr-pinterest-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-pinterest-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-pinterest-border-subtle);--tblr-list-group-active-color:var(--tblr-pinterest-bg-subtle);--tblr-list-group-active-bg:var(--tblr-pinterest-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-pinterest-text-emphasis)}.list-group-item-vk{--tblr-list-group-color:var(--tblr-vk-text-emphasis);--tblr-list-group-bg:var(--tblr-vk-bg-subtle);--tblr-list-group-border-color:var(--tblr-vk-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-vk-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-vk-border-subtle);--tblr-list-group-active-color:var(--tblr-vk-bg-subtle);--tblr-list-group-active-bg:var(--tblr-vk-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-vk-text-emphasis)}.list-group-item-rss{--tblr-list-group-color:var(--tblr-rss-text-emphasis);--tblr-list-group-bg:var(--tblr-rss-bg-subtle);--tblr-list-group-border-color:var(--tblr-rss-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-rss-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-rss-border-subtle);--tblr-list-group-active-color:var(--tblr-rss-bg-subtle);--tblr-list-group-active-bg:var(--tblr-rss-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-rss-text-emphasis)}.list-group-item-flickr{--tblr-list-group-color:var(--tblr-flickr-text-emphasis);--tblr-list-group-bg:var(--tblr-flickr-bg-subtle);--tblr-list-group-border-color:var(--tblr-flickr-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-flickr-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-flickr-border-subtle);--tblr-list-group-active-color:var(--tblr-flickr-bg-subtle);--tblr-list-group-active-bg:var(--tblr-flickr-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-flickr-text-emphasis)}.list-group-item-bitbucket{--tblr-list-group-color:var(--tblr-bitbucket-text-emphasis);--tblr-list-group-bg:var(--tblr-bitbucket-bg-subtle);--tblr-list-group-border-color:var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-bitbucket-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-bitbucket-border-subtle);--tblr-list-group-active-color:var(--tblr-bitbucket-bg-subtle);--tblr-list-group-active-bg:var(--tblr-bitbucket-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-bitbucket-text-emphasis)}.list-group-item-tabler{--tblr-list-group-color:var(--tblr-tabler-text-emphasis);--tblr-list-group-bg:var(--tblr-tabler-bg-subtle);--tblr-list-group-border-color:var(--tblr-tabler-border-subtle);--tblr-list-group-action-hover-color:var(--tblr-emphasis-color);--tblr-list-group-action-hover-bg:var(--tblr-tabler-border-subtle);--tblr-list-group-action-active-color:var(--tblr-emphasis-color);--tblr-list-group-action-active-bg:var(--tblr-tabler-border-subtle);--tblr-list-group-active-color:var(--tblr-tabler-bg-subtle);--tblr-list-group-active-bg:var(--tblr-tabler-text-emphasis);--tblr-list-group-active-border-color:var(--tblr-tabler-text-emphasis)}.btn-close{--tblr-btn-close-color:#182433;--tblr-btn-close-bg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23182433' viewBox='0 0 16 16'%3E%3Cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414'/%3E%3C/svg%3E");--tblr-btn-close-opacity:0.4;--tblr-btn-close-hover-opacity:0.75;--tblr-btn-close-focus-shadow:0 0 0 0.25rem rgba(var(--tblr-primary-rgb),0.25);--tblr-btn-close-focus-opacity:1;--tblr-btn-close-disabled-opacity:0.25;--tblr-btn-close-white-filter:invert(1) grayscale(100%) brightness(200%);background:transparent var(--tblr-btn-close-bg) center/1em auto no-repeat;border:0;border-radius:4px;box-sizing:content-box;height:1em;opacity:var(--tblr-btn-close-opacity);padding:.25em;width:1em}.btn-close,.btn-close:hover{color:var(--tblr-btn-close-color)}.btn-close:hover{opacity:var(--tblr-btn-close-hover-opacity);text-decoration:none}.btn-close:focus{box-shadow:var(--tblr-btn-close-focus-shadow);opacity:var(--tblr-btn-close-focus-opacity);outline:0}.btn-close.disabled,.btn-close:disabled{opacity:var(--tblr-btn-close-disabled-opacity);pointer-events:none;user-select:none}.btn-close-white,[data-bs-theme=dark] .btn-close,body[data-bs-theme=dark] [data-bs-theme=light] .btn-close{filter:var(--tblr-btn-close-white-filter)}.toast{--tblr-toast-zindex:1090;--tblr-toast-padding-x:0.75rem;--tblr-toast-padding-y:0.5rem;--tblr-toast-spacing:calc(var(--tblr-page-padding)*2);--tblr-toast-max-width:350px;--tblr-toast-font-size:0.875rem;--tblr-toast-color: ;--tblr-toast-bg:rgba(var(--tblr-body-bg-rgb),0.85);--tblr-toast-border-width:var(--tblr-border-width);--tblr-toast-border-color:var(--tblr-border-color);--tblr-toast-border-radius:var(--tblr-border-radius);--tblr-toast-box-shadow:var(--tblr-box-shadow);--tblr-toast-header-color:var(--tblr-gray-500);--tblr-toast-header-bg:rgba(var(--tblr-body-bg-rgb),0.85);--tblr-toast-header-border-color:var(--tblr-border-color);background-clip:padding-box;background-color:var(--tblr-toast-bg);border:var(--tblr-toast-border-width) solid var(--tblr-toast-border-color);border-radius:var(--tblr-toast-border-radius);box-shadow:var(--tblr-toast-box-shadow);color:var(--tblr-toast-color);font-size:var(--tblr-toast-font-size);max-width:100%;pointer-events:auto;width:var(--tblr-toast-max-width)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--tblr-toast-zindex:1090;max-width:100%;pointer-events:none;position:absolute;width:max-content;z-index:var(--tblr-toast-zindex)}.toast-container>:not(:last-child){margin-bottom:var(--tblr-toast-spacing)}.toast-header{align-items:center;background-clip:padding-box;background-color:var(--tblr-toast-header-bg);border-bottom:var(--tblr-toast-border-width) solid var(--tblr-toast-header-border-color);border-top-left-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));border-top-right-radius:calc(var(--tblr-toast-border-radius) - var(--tblr-toast-border-width));color:var(--tblr-toast-header-color);display:flex;padding:var(--tblr-toast-padding-y) var(--tblr-toast-padding-x)}.toast-header .btn-close{margin-left:var(--tblr-toast-padding-x);margin-right:calc(var(--tblr-toast-padding-x)*-.5)}.toast-body{padding:var(--tblr-toast-padding-x);word-wrap:break-word}.modal{--tblr-modal-zindex:1055;--tblr-modal-width:540px;--tblr-modal-padding:1.5rem;--tblr-modal-margin:0.5rem;--tblr-modal-color: ;--tblr-modal-bg:var(--tblr-bg-surface);--tblr-modal-border-color:transparent;--tblr-modal-border-width:var(--tblr-border-width);--tblr-modal-border-radius:var(--tblr-border-radius-lg);--tblr-modal-box-shadow:var(--tblr-box-shadow-sm);--tblr-modal-inner-border-radius:calc(var(--tblr-modal-border-radius) - 1px);--tblr-modal-header-padding-x:1.5rem;--tblr-modal-header-padding-y:1.5rem;--tblr-modal-header-padding:1.5rem;--tblr-modal-header-border-color:var(--tblr-border-color);--tblr-modal-header-border-width:var(--tblr-border-width);--tblr-modal-title-line-height:1.4285714286;--tblr-modal-footer-gap:0.75rem;--tblr-modal-footer-bg:var(--tblr-bg-surface-tertiary);--tblr-modal-footer-border-color:var(--tblr-border-color);--tblr-modal-footer-border-width:var(--tblr-border-width);display:none;height:100%;left:0;outline:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;width:100%;z-index:var(--tblr-modal-zindex)}.modal-dialog{margin:var(--tblr-modal-margin);pointer-events:none;position:relative;width:auto}.modal.fade .modal-dialog{transform:translateY(-1rem);transition:transform .3s ease-out}@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(--tblr-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{align-items:center;display:flex;min-height:calc(100% - var(--tblr-modal-margin)*2)}.modal-content{background-clip:padding-box;background-color:var(--tblr-modal-bg);border:var(--tblr-modal-border-width) solid var(--tblr-modal-border-color);border-radius:var(--tblr-modal-border-radius);box-shadow:var(--tblr-modal-box-shadow);color:var(--tblr-modal-color);display:flex;flex-direction:column;outline:0;pointer-events:auto;position:relative;width:100%}.modal-backdrop{--tblr-backdrop-zindex:1050;--tblr-backdrop-bg:#182433;--tblr-backdrop-opacity:0.6;background-color:var(--tblr-backdrop-bg);height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:var(--tblr-backdrop-zindex)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--tblr-backdrop-opacity)}.modal-header{border-bottom:var(--tblr-modal-header-border-width) solid var(--tblr-modal-header-border-color);border-top-left-radius:var(--tblr-modal-inner-border-radius);border-top-right-radius:var(--tblr-modal-inner-border-radius);display:flex;flex-shrink:0;padding:var(--tblr-modal-header-padding)}.modal-header .btn-close{margin:calc(var(--tblr-modal-header-padding-y)*-.5) calc(var(--tblr-modal-header-padding-x)*-.5) calc(var(--tblr-modal-header-padding-y)*-.5) auto;padding:calc(var(--tblr-modal-header-padding-y)*.5) calc(var(--tblr-modal-header-padding-x)*.5)}.modal-title{line-height:var(--tblr-modal-title-line-height);margin-bottom:0}.modal-body{flex:1 1 auto;padding:var(--tblr-modal-padding);position:relative}.modal-footer{align-items:center;background-color:var(--tblr-modal-footer-bg);border-bottom-left-radius:var(--tblr-modal-inner-border-radius);border-bottom-right-radius:var(--tblr-modal-inner-border-radius);border-top:var(--tblr-modal-footer-border-width) solid var(--tblr-modal-footer-border-color);display:flex;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end;padding:calc(var(--tblr-modal-padding) - var(--tblr-modal-footer-gap)*.5)}.modal-footer>*{margin:calc(var(--tblr-modal-footer-gap)*.5)}@media(min-width:576px){.modal{--tblr-modal-margin:1.75rem;--tblr-modal-box-shadow:var(--tblr-box-shadow)}.modal-dialog{margin-left:auto;margin-right:auto;max-width:var(--tblr-modal-width)}.modal-sm{--tblr-modal-width:380px}}@media(min-width:992px){.modal-lg,.modal-xl{--tblr-modal-width:720px}}@media(min-width:1200px){.modal-xl{--tblr-modal-width:1140px}}.modal-fullscreen{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen .modal-footer,.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width:575.98px){.modal-fullscreen-sm-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-sm-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-sm-down .modal-footer,.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width:767.98px){.modal-fullscreen-md-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-md-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-md-down .modal-footer,.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width:991.98px){.modal-fullscreen-lg-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-lg-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-lg-down .modal-footer,.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width:1199.98px){.modal-fullscreen-xl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xl-down .modal-footer,.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width:1399.98px){.modal-fullscreen-xxl-down{height:100%;margin:0;max-width:none;width:100vw}.modal-fullscreen-xxl-down .modal-content{border:0;border-radius:0;height:100%}.modal-fullscreen-xxl-down .modal-footer,.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--tblr-tooltip-zindex:1080;--tblr-tooltip-max-width:200px;--tblr-tooltip-padding-x:var(--tblr-spacer-2);--tblr-tooltip-padding-y:var(--tblr-spacer-2);--tblr-tooltip-margin: ;--tblr-tooltip-font-size:0.765625rem;--tblr-tooltip-color:var(--tblr-light);--tblr-tooltip-bg:var(--tblr-bg-surface-dark);--tblr-tooltip-border-radius:var(--tblr-border-radius);--tblr-tooltip-opacity:0.9;--tblr-tooltip-arrow-width:0.8rem;--tblr-tooltip-arrow-height:0.4rem;display:block;font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-tooltip-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4285714286;margin:var(--tblr-tooltip-margin);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--tblr-tooltip-zindex);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--tblr-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;height:var(--tblr-tooltip-arrow-height);width:var(--tblr-tooltip-arrow-width)}.tooltip .tooltip-arrow:before{border-color:transparent;border-style:solid;content:"";position:absolute}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow,.bs-tooltip-top .tooltip-arrow{bottom:calc(var(--tblr-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow:before,.bs-tooltip-top .tooltip-arrow:before{border-top-color:var(--tblr-tooltip-bg);border-width:var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width)*.5) 0;top:-1px}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow,.bs-tooltip-end .tooltip-arrow{height:var(--tblr-tooltip-arrow-width);left:calc(var(--tblr-tooltip-arrow-height)*-1);width:var(--tblr-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow:before,.bs-tooltip-end .tooltip-arrow:before{border-right-color:var(--tblr-tooltip-bg);border-width:calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height) calc(var(--tblr-tooltip-arrow-width)*.5) 0;right:-1px}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow,.bs-tooltip-bottom .tooltip-arrow{top:calc(var(--tblr-tooltip-arrow-height)*-1)}.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow:before,.bs-tooltip-bottom .tooltip-arrow:before{border-bottom-color:var(--tblr-tooltip-bg);border-width:0 calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height);bottom:-1px}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow,.bs-tooltip-start .tooltip-arrow{height:var(--tblr-tooltip-arrow-width);right:calc(var(--tblr-tooltip-arrow-height)*-1);width:var(--tblr-tooltip-arrow-height)}.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow:before,.bs-tooltip-start .tooltip-arrow:before{border-left-color:var(--tblr-tooltip-bg);border-width:calc(var(--tblr-tooltip-arrow-width)*.5) 0 calc(var(--tblr-tooltip-arrow-width)*.5) var(--tblr-tooltip-arrow-height);left:-1px}.tooltip-inner{background-color:var(--tblr-tooltip-bg);border-radius:var(--tblr-tooltip-border-radius);color:var(--tblr-tooltip-color);max-width:var(--tblr-tooltip-max-width);padding:var(--tblr-tooltip-padding-y) var(--tblr-tooltip-padding-x);text-align:center}.popover{--tblr-popover-zindex:1070;--tblr-popover-max-width:276px;--tblr-popover-font-size:0.765625rem;--tblr-popover-bg:var(--tblr-bg-surface);--tblr-popover-border-width:var(--tblr-border-width);--tblr-popover-border-color:var(--tblr-border-color);--tblr-popover-border-radius:var(--tblr-border-radius-lg);--tblr-popover-inner-border-radius:calc(var(--tblr-border-radius-lg) - var(--tblr-border-width));--tblr-popover-box-shadow:var(--tblr-box-shadow);--tblr-popover-header-padding-x:1rem;--tblr-popover-header-padding-y:0.5rem;--tblr-popover-header-font-size:0.875rem;--tblr-popover-header-color:inherit;--tblr-popover-header-bg:transparent;--tblr-popover-body-padding-x:1rem;--tblr-popover-body-padding-y:1rem;--tblr-popover-body-color:inherit;--tblr-popover-arrow-width:1rem;--tblr-popover-arrow-height:0.5rem;--tblr-popover-arrow-border:var(--tblr-popover-border-color);display:block;font-family:var(--tblr-font-sans-serif);font-size:var(--tblr-popover-font-size);font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.4285714286;max-width:var(--tblr-popover-max-width);text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;z-index:var(--tblr-popover-zindex);word-wrap:break-word;background-clip:padding-box;background-color:var(--tblr-popover-bg);border:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-radius:var(--tblr-popover-border-radius);box-shadow:var(--tblr-popover-box-shadow)}.popover .popover-arrow{display:block;height:var(--tblr-popover-arrow-height);width:var(--tblr-popover-arrow-width)}.popover .popover-arrow:after,.popover .popover-arrow:before{border:0 solid transparent;content:"";display:block;position:absolute}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow,.bs-popover-top>.popover-arrow{bottom:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-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(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:before,.bs-popover-top>.popover-arrow:before{border-top-color:var(--tblr-popover-arrow-border);bottom:0}.bs-popover-auto[data-popper-placement^=top]>.popover-arrow:after,.bs-popover-top>.popover-arrow:after{border-top-color:var(--tblr-popover-bg);bottom:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow,.bs-popover-end>.popover-arrow{height:var(--tblr-popover-arrow-width);left:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height)}.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(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height) calc(var(--tblr-popover-arrow-width)*.5) 0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:before,.bs-popover-end>.popover-arrow:before{border-right-color:var(--tblr-popover-arrow-border);left:0}.bs-popover-auto[data-popper-placement^=right]>.popover-arrow:after,.bs-popover-end>.popover-arrow:after{border-right-color:var(--tblr-popover-bg);left:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow,.bs-popover-bottom>.popover-arrow{top:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-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(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:before,.bs-popover-bottom>.popover-arrow:before{border-bottom-color:var(--tblr-popover-arrow-border);top:0}.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow:after,.bs-popover-bottom>.popover-arrow:after{border-bottom-color:var(--tblr-popover-bg);top:var(--tblr-popover-border-width)}.bs-popover-auto[data-popper-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-header-bg);content:"";display:block;left:50%;margin-left:calc(var(--tblr-popover-arrow-width)*-.5);position:absolute;top:0;width:var(--tblr-popover-arrow-width)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow,.bs-popover-start>.popover-arrow{height:var(--tblr-popover-arrow-width);right:calc((var(--tblr-popover-arrow-height))*-1 - var(--tblr-popover-border-width));width:var(--tblr-popover-arrow-height)}.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(--tblr-popover-arrow-width)*.5) 0 calc(var(--tblr-popover-arrow-width)*.5) var(--tblr-popover-arrow-height)}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:before,.bs-popover-start>.popover-arrow:before{border-left-color:var(--tblr-popover-arrow-border);right:0}.bs-popover-auto[data-popper-placement^=left]>.popover-arrow:after,.bs-popover-start>.popover-arrow:after{border-left-color:var(--tblr-popover-bg);right:var(--tblr-popover-border-width)}.popover-header{background-color:var(--tblr-popover-header-bg);border-bottom:var(--tblr-popover-border-width) solid var(--tblr-popover-border-color);border-top-left-radius:var(--tblr-popover-inner-border-radius);border-top-right-radius:var(--tblr-popover-inner-border-radius);color:var(--tblr-popover-header-color);font-size:var(--tblr-popover-header-font-size);margin-bottom:0;padding:var(--tblr-popover-header-padding-y) var(--tblr-popover-header-padding-x)}.popover-header:empty{display:none}.popover-body{color:var(--tblr-popover-body-color);padding:var(--tblr-popover-body-padding-y) var(--tblr-popover-body-padding-x)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y}.carousel-inner{overflow:hidden;position:relative;width:100%}.carousel-inner:after{clear:both;content:"";display:block}.carousel-item{backface-visibility:hidden;display:none;float:left;margin-right:-100%;position:relative;transition:transform .6s ease-in-out;width:100%}@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;transform:none;transition-property:opacity}.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end,.carousel-fade .carousel-item.active{opacity:1;z-index:1}.carousel-fade .active.carousel-item-end,.carousel-fade .active.carousel-item-start{opacity:0;transition:opacity 0s .6s;z-index:0}@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{align-items:center;background:none;border:0;bottom:0;color:#fff;display:flex;justify-content:center;opacity:.5;padding:0;position:absolute;text-align:center;top:0;transition:opacity .15s ease;width:15%;z-index:1}@media(prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;opacity:.9;outline:0;text-decoration:none}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{background-position:50%;background-repeat:no-repeat;background-size:100% 100%;display:inline-block;height:1.5rem;width:1.5rem}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m15 18-6-6 6-6'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E")}.carousel-indicators{bottom:0;display:flex;justify-content:center;left:0;margin-bottom:1rem;margin-left:15%;margin-right:15%;padding:0;position:absolute;right:0;z-index:2}.carousel-indicators [data-bs-target]{background-clip:padding-box;background-color:#fff;border:0;border-bottom:10px solid transparent;border-top:10px solid transparent;box-sizing:content-box;cursor:pointer;flex:0 1 auto;height:3px;margin-left:3px;margin-right:3px;opacity:.5;padding:0;text-indent:-999px;transition:opacity .6s ease;width:30px}@media(prefers-reduced-motion:reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{bottom:1.25rem;color:#fff;left:15%;padding-bottom:1.25rem;padding-top:1.25rem;position:absolute;right:15%;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{animation:var(--tblr-spinner-animation-speed) linear infinite var(--tblr-spinner-animation-name);border-radius:50%;display:inline-block;height:var(--tblr-spinner-height);vertical-align:var(--tblr-spinner-vertical-align);width:var(--tblr-spinner-width)}@keyframes spinner-border{to{transform:rotate(1turn)}}.spinner-border{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-border-width:2px;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-border;border-right-color:currentcolor;border:var(--tblr-spinner-border-width) solid;border-right:var(--tblr-spinner-border-width) solid transparent}.spinner-border-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem;--tblr-spinner-border-width:1px}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--tblr-spinner-width:1.5rem;--tblr-spinner-height:1.5rem;--tblr-spinner-vertical-align:-0.125em;--tblr-spinner-animation-speed:0.75s;--tblr-spinner-animation-name:spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--tblr-spinner-width:1rem;--tblr-spinner-height:1rem}@media(prefers-reduced-motion:reduce){.spinner-border,.spinner-grow{--tblr-spinner-animation-speed:1.5s}}.offcanvas,.offcanvas-lg,.offcanvas-md,.offcanvas-sm,.offcanvas-xl,.offcanvas-xxl{--tblr-offcanvas-zindex:1045;--tblr-offcanvas-width:400px;--tblr-offcanvas-height:30vh;--tblr-offcanvas-padding-x:1.5rem;--tblr-offcanvas-padding-y:1.5rem;--tblr-offcanvas-color:var(--tblr-body-color);--tblr-offcanvas-bg:var(--tblr-bg-surface);--tblr-offcanvas-border-width:var(--tblr-border-width);--tblr-offcanvas-border-color:var(--tblr-border-color);--tblr-offcanvas-box-shadow:var(--tblr-box-shadow-sm);--tblr-offcanvas-transition:transform 0.3s ease-in-out;--tblr-offcanvas-title-line-height:1.4285714286}@media(max-width:575.98px){.offcanvas-sm{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media(max-width:575.98px)and (prefers-reduced-motion:reduce){.offcanvas-sm{transition:none}}@media(max-width:575.98px){.offcanvas-sm.offcanvas-start{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-sm.offcanvas-end{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-sm.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom,.offcanvas-sm.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-sm.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:767.98px){.offcanvas-md{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media(max-width:767.98px)and (prefers-reduced-motion:reduce){.offcanvas-md{transition:none}}@media(max-width:767.98px){.offcanvas-md.offcanvas-start{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-md.offcanvas-end{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-md.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom,.offcanvas-md.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-md.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:991.98px){.offcanvas-lg{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media(max-width:991.98px)and (prefers-reduced-motion:reduce){.offcanvas-lg{transition:none}}@media(max-width:991.98px){.offcanvas-lg.offcanvas-start{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-lg.offcanvas-end{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-lg.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom,.offcanvas-lg.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-lg.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:1199.98px){.offcanvas-xl{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media(max-width:1199.98px)and (prefers-reduced-motion:reduce){.offcanvas-xl{transition:none}}@media(max-width:1199.98px){.offcanvas-xl.offcanvas-start{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-xl.offcanvas-end{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-xl.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom,.offcanvas-xl.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xl.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}@media(max-width:1399.98px){.offcanvas-xxl{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}}@media(max-width:1399.98px)and (prefers-reduced-motion:reduce){.offcanvas-xxl{transition:none}}@media(max-width:1399.98px){.offcanvas-xxl.offcanvas-start{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas-xxl.offcanvas-end{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas-xxl.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom,.offcanvas-xxl.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas-xxl.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-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{--tblr-offcanvas-height:auto;--tblr-offcanvas-border-width:0;background-color:transparent!important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{background-color:transparent!important;display:flex;flex-grow:0;overflow-y:visible;padding:0}}.offcanvas{background-clip:padding-box;background-color:var(--tblr-offcanvas-bg);bottom:0;box-shadow:var(--tblr-offcanvas-box-shadow);color:var(--tblr-offcanvas-color);display:flex;flex-direction:column;max-width:100%;outline:0;position:fixed;transition:var(--tblr-offcanvas-transition);visibility:hidden;z-index:var(--tblr-offcanvas-zindex)}@media(prefers-reduced-motion:reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{border-right:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);left:0;top:0;transform:translateX(-100%);width:var(--tblr-offcanvas-width)}.offcanvas.offcanvas-end{border-left:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);right:0;top:0;transform:translateX(100%);width:var(--tblr-offcanvas-width)}.offcanvas.offcanvas-top{border-bottom:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);top:0;transform:translateY(-100%)}.offcanvas.offcanvas-bottom,.offcanvas.offcanvas-top{height:var(--tblr-offcanvas-height);left:0;max-height:100%;right:0}.offcanvas.offcanvas-bottom{border-top:var(--tblr-offcanvas-border-width) solid var(--tblr-offcanvas-border-color);transform:translateY(100%)}.offcanvas.show:not(.hiding),.offcanvas.showing{transform:none}.offcanvas.hiding,.offcanvas.show,.offcanvas.showing{visibility:visible}.offcanvas-backdrop{background-color:#182433;height:100vh;left:0;position:fixed;top:0;width:100vw;z-index:1040}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.6}.offcanvas-header{align-items:center;display:flex;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.offcanvas-header .btn-close{margin:calc(var(--tblr-offcanvas-padding-y)*-.5) calc(var(--tblr-offcanvas-padding-x)*-.5) calc(var(--tblr-offcanvas-padding-y)*-.5) auto;padding:calc(var(--tblr-offcanvas-padding-y)*.5) calc(var(--tblr-offcanvas-padding-x)*.5)}.offcanvas-title{line-height:var(--tblr-offcanvas-title-line-height);margin-bottom:0}.offcanvas-body{flex-grow:1;overflow-y:auto;padding:var(--tblr-offcanvas-padding-y) var(--tblr-offcanvas-padding-x)}.placeholder{background-color:currentcolor;cursor:wait;display:inline-block;min-height:1em;opacity:.2;vertical-align:middle}.placeholder.btn:before{content:"";display:inline-block}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.1}}.placeholder-wave{animation:placeholder-wave 2s linear infinite;mask-image:linear-gradient(130deg,#000 55%,rgba(0,0,0,.9) 75%,#000 95%);mask-size:200% 100%}@keyframes placeholder-wave{to{mask-position:-200% 0}}.clearfix:after{clear:both;content:"";display:block}.text-bg-primary{background-color:RGBA(var(--tblr-primary-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-secondary{background-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-success{background-color:RGBA(var(--tblr-success-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-info{background-color:RGBA(var(--tblr-info-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-warning{background-color:RGBA(var(--tblr-warning-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-danger{background-color:RGBA(var(--tblr-danger-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-light{background-color:RGBA(var(--tblr-light-rgb),var(--tblr-bg-opacity,1))!important;color:#182433!important}.text-bg-dark{background-color:RGBA(var(--tblr-dark-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-muted{background-color:RGBA(var(--tblr-muted-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-blue{background-color:RGBA(var(--tblr-blue-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-azure{background-color:RGBA(var(--tblr-azure-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-indigo{background-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-purple{background-color:RGBA(var(--tblr-purple-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-pink{background-color:RGBA(var(--tblr-pink-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-red{background-color:RGBA(var(--tblr-red-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-orange{background-color:RGBA(var(--tblr-orange-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-yellow{background-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-lime{background-color:RGBA(var(--tblr-lime-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-green{background-color:RGBA(var(--tblr-green-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-teal{background-color:RGBA(var(--tblr-teal-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-cyan{background-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-x{background-color:RGBA(var(--tblr-x-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-facebook{background-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-twitter{background-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-linkedin{background-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-google{background-color:RGBA(var(--tblr-google-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-youtube{background-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-vimeo{background-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-dribbble{background-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-github{background-color:RGBA(var(--tblr-github-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-instagram{background-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-pinterest{background-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-vk{background-color:RGBA(var(--tblr-vk-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-rss{background-color:RGBA(var(--tblr-rss-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-flickr{background-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-bitbucket{background-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.text-bg-tabler{background-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-bg-opacity,1))!important;color:#f6f8fb!important}.link-primary{color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity,1))!important}.link-primary:focus,.link-primary:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-secondary{color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity,1))!important}.link-secondary:focus,.link-secondary:hover{color:RGBA(86,98,116,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important}.link-success{color:RGBA(var(--tblr-success-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-success-rgb),var(--tblr-link-underline-opacity,1))!important}.link-success:focus,.link-success:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.link-info{color:RGBA(var(--tblr-info-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-info-rgb),var(--tblr-link-underline-opacity,1))!important}.link-info:focus,.link-info:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.link-warning{color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity,1))!important}.link-warning:focus,.link-warning:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.link-danger{color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity,1))!important}.link-danger:focus,.link-danger:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.link-light{color:RGBA(var(--tblr-light-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-light-rgb),var(--tblr-link-underline-opacity,1))!important}.link-light:focus,.link-light:hover{color:RGBA(248,249,252,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(248,249,252,var(--tblr-link-underline-opacity,1))!important}.link-dark{color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity,1))!important}.link-dark:focus,.link-dark:hover{color:RGBA(19,29,41,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(19,29,41,var(--tblr-link-underline-opacity,1))!important}.link-muted{color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity,1))!important}.link-muted:focus,.link-muted:hover{color:RGBA(86,98,116,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(86,98,116,var(--tblr-link-underline-opacity,1))!important}.link-blue{color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity,1))!important}.link-blue:focus,.link-blue:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-azure{color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity,1))!important}.link-azure:focus,.link-azure:hover{color:RGBA(53,122,180,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(53,122,180,var(--tblr-link-underline-opacity,1))!important}.link-indigo{color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity,1))!important}.link-indigo:focus,.link-indigo:hover{color:RGBA(53,79,188,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(53,79,188,var(--tblr-link-underline-opacity,1))!important}.link-purple{color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity,1))!important}.link-purple:focus,.link-purple:hover{color:RGBA(139,50,161,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(139,50,161,var(--tblr-link-underline-opacity,1))!important}.link-pink{color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity,1))!important}.link-pink:focus,.link-pink:hover{color:RGBA(171,41,86,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(171,41,86,var(--tblr-link-underline-opacity,1))!important}.link-red{color:RGBA(var(--tblr-red-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-red-rgb),var(--tblr-link-underline-opacity,1))!important}.link-red:focus,.link-red:hover{color:RGBA(171,46,46,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(171,46,46,var(--tblr-link-underline-opacity,1))!important}.link-orange{color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity,1))!important}.link-orange:focus,.link-orange:hover{color:RGBA(198,82,6,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(198,82,6,var(--tblr-link-underline-opacity,1))!important}.link-yellow{color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity,1))!important}.link-yellow:focus,.link-yellow:hover{color:RGBA(196,127,0,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(196,127,0,var(--tblr-link-underline-opacity,1))!important}.link-lime{color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity,1))!important}.link-lime:focus,.link-lime:hover{color:RGBA(93,147,18,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(93,147,18,var(--tblr-link-underline-opacity,1))!important}.link-green{color:RGBA(var(--tblr-green-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-green-rgb),var(--tblr-link-underline-opacity,1))!important}.link-green:focus,.link-green:hover{color:RGBA(38,143,54,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(38,143,54,var(--tblr-link-underline-opacity,1))!important}.link-teal{color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity,1))!important}.link-teal:focus,.link-teal:hover{color:RGBA(10,133,96,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(10,133,96,var(--tblr-link-underline-opacity,1))!important}.link-cyan{color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity,1))!important}.link-cyan:focus,.link-cyan:hover{color:RGBA(18,130,147,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(18,130,147,var(--tblr-link-underline-opacity,1))!important}.link-x{color:RGBA(var(--tblr-x-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-x-rgb),var(--tblr-link-underline-opacity,1))!important}.link-x:focus,.link-x:hover{color:RGBA(0,0,0,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(0,0,0,var(--tblr-link-underline-opacity,1))!important}.link-facebook{color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity,1))!important}.link-facebook:focus,.link-facebook:hover{color:RGBA(19,95,194,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(19,95,194,var(--tblr-link-underline-opacity,1))!important}.link-twitter{color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity,1))!important}.link-twitter:focus,.link-twitter:hover{color:RGBA(23,129,194,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(23,129,194,var(--tblr-link-underline-opacity,1))!important}.link-linkedin{color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity,1))!important}.link-linkedin:focus,.link-linkedin:hover{color:RGBA(8,82,155,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(8,82,155,var(--tblr-link-underline-opacity,1))!important}.link-google{color:RGBA(var(--tblr-google-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-google-rgb),var(--tblr-link-underline-opacity,1))!important}.link-google:focus,.link-google:hover{color:RGBA(176,62,52,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(176,62,52,var(--tblr-link-underline-opacity,1))!important}.link-youtube{color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity,1))!important}.link-youtube:focus,.link-youtube:hover{color:RGBA(204,0,0,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(204,0,0,var(--tblr-link-underline-opacity,1))!important}.link-vimeo{color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity,1))!important}.link-vimeo:focus,.link-vimeo:hover{color:RGBA(21,146,187,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(21,146,187,var(--tblr-link-underline-opacity,1))!important}.link-dribbble{color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity,1))!important}.link-dribbble:focus,.link-dribbble:hover{color:RGBA(187,61,110,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(187,61,110,var(--tblr-link-underline-opacity,1))!important}.link-github{color:RGBA(var(--tblr-github-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-github-rgb),var(--tblr-link-underline-opacity,1))!important}.link-github:focus,.link-github:hover{color:RGBA(19,18,18,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(19,18,18,var(--tblr-link-underline-opacity,1))!important}.link-instagram{color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity,1))!important}.link-instagram:focus,.link-instagram:hover{color:RGBA(182,51,76,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(182,51,76,var(--tblr-link-underline-opacity,1))!important}.link-pinterest{color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity,1))!important}.link-pinterest:focus,.link-pinterest:hover{color:RGBA(151,6,22,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(151,6,22,var(--tblr-link-underline-opacity,1))!important}.link-vk{color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity,1))!important}.link-vk:focus,.link-vk:hover{color:RGBA(79,105,134,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(79,105,134,var(--tblr-link-underline-opacity,1))!important}.link-rss{color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity,1))!important}.link-rss:focus,.link-rss:hover{color:RGBA(204,132,0,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(204,132,0,var(--tblr-link-underline-opacity,1))!important}.link-flickr{color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity,1))!important}.link-flickr:focus,.link-flickr:hover{color:RGBA(0,79,176,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(0,79,176,var(--tblr-link-underline-opacity,1))!important}.link-bitbucket{color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity,1))!important}.link-bitbucket:focus,.link-bitbucket:hover{color:RGBA(0,66,163,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(0,66,163,var(--tblr-link-underline-opacity,1))!important}.link-tabler{color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity,1))!important}.link-tabler:focus,.link-tabler:hover{color:RGBA(5,89,167,var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(5,89,167,var(--tblr-link-underline-opacity,1))!important}.link-body-emphasis{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,1))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-body-emphasis:focus,.link-body-emphasis:hover{color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-opacity,.75))!important;text-decoration-color:RGBA(var(--tblr-emphasis-color-rgb),var(--tblr-link-underline-opacity,.75))!important}.focus-ring:focus{box-shadow:var(--tblr-focus-ring-x,0) var(--tblr-focus-ring-y,0) var(--tblr-focus-ring-blur,0) var(--tblr-focus-ring-width) var(--tblr-focus-ring-color);outline:0}.icon-link{align-items:center;backface-visibility:hidden;display:inline-flex;gap:.375rem;text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-opacity,.5));text-underline-offset:.25em}.icon-link>.bi{flex-shrink:0;height:1em;width:1em;fill:currentcolor;transition:transform .2s ease-in-out}@media(prefers-reduced-motion:reduce){.icon-link>.bi{transition:none}}.icon-link-hover:focus-visible>.bi,.icon-link-hover:hover>.bi{transform:var(--tblr-icon-link-transform,translate3d(.25em,0,0))}.ratio{position:relative;width:100%}.ratio:before{content:"";display:block;padding-top:var(--tblr-aspect-ratio)}.ratio>*{height:100%;left:0;position:absolute;top:0;width:100%}.ratio-1x1{--tblr-aspect-ratio:100%}.ratio-2x1{--tblr-aspect-ratio:50%}.ratio-1x2{--tblr-aspect-ratio:200%}.ratio-3x1{--tblr-aspect-ratio:33.3333333333%}.ratio-1x3{--tblr-aspect-ratio:300%}.ratio-4x3{--tblr-aspect-ratio:75%}.ratio-3x4{--tblr-aspect-ratio:133.3333333333%}.ratio-16x9{--tblr-aspect-ratio:56.25%}.ratio-9x16{--tblr-aspect-ratio:177.7777777778%}.ratio-21x9{--tblr-aspect-ratio:42.8571428571%}.ratio-9x21{--tblr-aspect-ratio:233.3333333333%}.fixed-top{top:0}.fixed-bottom,.fixed-top{left:0;position:fixed;right:0;z-index:1030}.fixed-bottom{bottom:0}.sticky-top{top:0}.sticky-bottom,.sticky-top{position:sticky;z-index:1020}.sticky-bottom{bottom:0}@media(min-width:576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{bottom:0;position:sticky;z-index:1020}}@media(min-width:1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{bottom:0;position:sticky;z-index:1020}}.hstack{align-items:center;flex-direction:row}.hstack,.vstack{align-self:stretch;display:flex}.vstack{flex:1 1 auto;flex-direction:column}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;width:1px!important;clip:rect(0,0,0,0)!important;border:0!important;white-space:nowrap!important}.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption),.visually-hidden:not(caption){position:absolute!important}.stretched-link:after{bottom:0;content:"";left:0;position:absolute;right:0;top:0;z-index:1}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{align-self:stretch;background-color:currentcolor;display:inline-block;min-height:1em;opacity:.16;width:var(--tblr-border-width)}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.float-start{float:left!important}.float-end{float:right!important}.float-none{float:none!important}.object-fit-contain{object-fit:contain!important}.object-fit-cover{object-fit:cover!important}.object-fit-fill{object-fit:fill!important}.object-fit-scale{object-fit:scale-down!important}.object-fit-none{object-fit:none!important}.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(--tblr-box-shadow)!important}.shadow-sm{box-shadow:var(--tblr-box-shadow-sm)!important}.shadow-lg{box-shadow:var(--tblr-box-shadow-lg)!important}.shadow-none{box-shadow:none!important}.focus-ring-primary{--tblr-focus-ring-color:rgba(var(--tblr-primary-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-secondary{--tblr-focus-ring-color:rgba(var(--tblr-secondary-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-success{--tblr-focus-ring-color:rgba(var(--tblr-success-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-info{--tblr-focus-ring-color:rgba(var(--tblr-info-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-warning{--tblr-focus-ring-color:rgba(var(--tblr-warning-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-danger{--tblr-focus-ring-color:rgba(var(--tblr-danger-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-light{--tblr-focus-ring-color:rgba(var(--tblr-light-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-dark{--tblr-focus-ring-color:rgba(var(--tblr-dark-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-muted{--tblr-focus-ring-color:rgba(var(--tblr-muted-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-blue{--tblr-focus-ring-color:rgba(var(--tblr-blue-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-azure{--tblr-focus-ring-color:rgba(var(--tblr-azure-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-indigo{--tblr-focus-ring-color:rgba(var(--tblr-indigo-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-purple{--tblr-focus-ring-color:rgba(var(--tblr-purple-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-pink{--tblr-focus-ring-color:rgba(var(--tblr-pink-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-red{--tblr-focus-ring-color:rgba(var(--tblr-red-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-orange{--tblr-focus-ring-color:rgba(var(--tblr-orange-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-yellow{--tblr-focus-ring-color:rgba(var(--tblr-yellow-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-lime{--tblr-focus-ring-color:rgba(var(--tblr-lime-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-green{--tblr-focus-ring-color:rgba(var(--tblr-green-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-teal{--tblr-focus-ring-color:rgba(var(--tblr-teal-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-cyan{--tblr-focus-ring-color:rgba(var(--tblr-cyan-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-x{--tblr-focus-ring-color:rgba(var(--tblr-x-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-facebook{--tblr-focus-ring-color:rgba(var(--tblr-facebook-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-twitter{--tblr-focus-ring-color:rgba(var(--tblr-twitter-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-linkedin{--tblr-focus-ring-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-google{--tblr-focus-ring-color:rgba(var(--tblr-google-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-youtube{--tblr-focus-ring-color:rgba(var(--tblr-youtube-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-vimeo{--tblr-focus-ring-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-dribbble{--tblr-focus-ring-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-github{--tblr-focus-ring-color:rgba(var(--tblr-github-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-instagram{--tblr-focus-ring-color:rgba(var(--tblr-instagram-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-pinterest{--tblr-focus-ring-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-vk{--tblr-focus-ring-color:rgba(var(--tblr-vk-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-rss{--tblr-focus-ring-color:rgba(var(--tblr-rss-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-flickr{--tblr-focus-ring-color:rgba(var(--tblr-flickr-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-bitbucket{--tblr-focus-ring-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-focus-ring-opacity))}.focus-ring-tabler{--tblr-focus-ring-color:rgba(var(--tblr-tabler-rgb),var(--tblr-focus-ring-opacity))}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:sticky!important}.top-0{top:0!important}.top-50{top:50%!important}.top-100{top:100%!important}.bottom-0{bottom:0!important}.bottom-50{bottom:50%!important}.bottom-100{bottom:100%!important}.start-0{left:0!important}.start-50{left:50%!important}.start-100{left:100%!important}.end-0{right:0!important}.end-50{right:50%!important}.end-100{right:100%!important}.translate-middle{transform:translate(-50%,-50%)!important}.translate-middle-x{transform:translateX(-50%)!important}.translate-middle-y{transform:translateY(-50%)!important}.border{border:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-wide{border:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-0{border:0!important}.border-top{border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-top-wide{border-top:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-top-0{border-top:0!important}.border-end{border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-end-wide{border-right:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-end-0{border-right:0!important}.border-bottom{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-bottom-wide{border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-bottom-0{border-bottom:0!important}.border-start{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-start-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-start-0{border-left:0!important}.border-primary{--tblr-border-opacity:1;border-color:rgba(var(--tblr-primary-rgb),var(--tblr-border-opacity))!important}.border-secondary{--tblr-border-opacity:1;border-color:rgba(var(--tblr-secondary-rgb),var(--tblr-border-opacity))!important}.border-success{--tblr-border-opacity:1;border-color:rgba(var(--tblr-success-rgb),var(--tblr-border-opacity))!important}.border-info{--tblr-border-opacity:1;border-color:rgba(var(--tblr-info-rgb),var(--tblr-border-opacity))!important}.border-warning{--tblr-border-opacity:1;border-color:rgba(var(--tblr-warning-rgb),var(--tblr-border-opacity))!important}.border-danger{--tblr-border-opacity:1;border-color:rgba(var(--tblr-danger-rgb),var(--tblr-border-opacity))!important}.border-light{--tblr-border-opacity:1;border-color:rgba(var(--tblr-light-rgb),var(--tblr-border-opacity))!important}.border-dark{--tblr-border-opacity:1;border-color:rgba(var(--tblr-dark-rgb),var(--tblr-border-opacity))!important}.border-muted{--tblr-border-opacity:1;border-color:rgba(var(--tblr-muted-rgb),var(--tblr-border-opacity))!important}.border-blue{--tblr-border-opacity:1;border-color:rgba(var(--tblr-blue-rgb),var(--tblr-border-opacity))!important}.border-azure{--tblr-border-opacity:1;border-color:rgba(var(--tblr-azure-rgb),var(--tblr-border-opacity))!important}.border-indigo{--tblr-border-opacity:1;border-color:rgba(var(--tblr-indigo-rgb),var(--tblr-border-opacity))!important}.border-purple{--tblr-border-opacity:1;border-color:rgba(var(--tblr-purple-rgb),var(--tblr-border-opacity))!important}.border-pink{--tblr-border-opacity:1;border-color:rgba(var(--tblr-pink-rgb),var(--tblr-border-opacity))!important}.border-red{--tblr-border-opacity:1;border-color:rgba(var(--tblr-red-rgb),var(--tblr-border-opacity))!important}.border-orange{--tblr-border-opacity:1;border-color:rgba(var(--tblr-orange-rgb),var(--tblr-border-opacity))!important}.border-yellow{--tblr-border-opacity:1;border-color:rgba(var(--tblr-yellow-rgb),var(--tblr-border-opacity))!important}.border-lime{--tblr-border-opacity:1;border-color:rgba(var(--tblr-lime-rgb),var(--tblr-border-opacity))!important}.border-green{--tblr-border-opacity:1;border-color:rgba(var(--tblr-green-rgb),var(--tblr-border-opacity))!important}.border-teal{--tblr-border-opacity:1;border-color:rgba(var(--tblr-teal-rgb),var(--tblr-border-opacity))!important}.border-cyan{border-color:rgba(var(--tblr-cyan-rgb),var(--tblr-border-opacity))!important}.border-cyan,.border-x{--tblr-border-opacity:1}.border-x{border-color:rgba(var(--tblr-x-rgb),var(--tblr-border-opacity))!important}.border-facebook{--tblr-border-opacity:1;border-color:rgba(var(--tblr-facebook-rgb),var(--tblr-border-opacity))!important}.border-twitter{--tblr-border-opacity:1;border-color:rgba(var(--tblr-twitter-rgb),var(--tblr-border-opacity))!important}.border-linkedin{--tblr-border-opacity:1;border-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-border-opacity))!important}.border-google{--tblr-border-opacity:1;border-color:rgba(var(--tblr-google-rgb),var(--tblr-border-opacity))!important}.border-youtube{--tblr-border-opacity:1;border-color:rgba(var(--tblr-youtube-rgb),var(--tblr-border-opacity))!important}.border-vimeo{--tblr-border-opacity:1;border-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-border-opacity))!important}.border-dribbble{--tblr-border-opacity:1;border-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-border-opacity))!important}.border-github{--tblr-border-opacity:1;border-color:rgba(var(--tblr-github-rgb),var(--tblr-border-opacity))!important}.border-instagram{--tblr-border-opacity:1;border-color:rgba(var(--tblr-instagram-rgb),var(--tblr-border-opacity))!important}.border-pinterest{--tblr-border-opacity:1;border-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-border-opacity))!important}.border-vk{border-color:rgba(var(--tblr-vk-rgb),var(--tblr-border-opacity))!important}.border-rss,.border-vk{--tblr-border-opacity:1}.border-rss{border-color:rgba(var(--tblr-rss-rgb),var(--tblr-border-opacity))!important}.border-flickr{--tblr-border-opacity:1;border-color:rgba(var(--tblr-flickr-rgb),var(--tblr-border-opacity))!important}.border-bitbucket{--tblr-border-opacity:1;border-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-border-opacity))!important}.border-tabler{--tblr-border-opacity:1;border-color:rgba(var(--tblr-tabler-rgb),var(--tblr-border-opacity))!important}.border-black{--tblr-border-opacity:1;border-color:rgba(var(--tblr-black-rgb),var(--tblr-border-opacity))!important}.border-white{--tblr-border-opacity:1;border-color:rgba(var(--tblr-white-rgb),var(--tblr-border-opacity))!important}.border-primary-subtle{border-color:var(--tblr-primary-border-subtle)!important}.border-secondary-subtle{border-color:var(--tblr-secondary-border-subtle)!important}.border-success-subtle{border-color:var(--tblr-success-border-subtle)!important}.border-info-subtle{border-color:var(--tblr-info-border-subtle)!important}.border-warning-subtle{border-color:var(--tblr-warning-border-subtle)!important}.border-danger-subtle{border-color:var(--tblr-danger-border-subtle)!important}.border-light-subtle{border-color:var(--tblr-light-border-subtle)!important}.border-dark-subtle{border-color:var(--tblr-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{--tblr-border-opacity:0.1}.border-opacity-25{--tblr-border-opacity:0.25}.border-opacity-50{--tblr-border-opacity:0.5}.border-opacity-75{--tblr-border-opacity:0.75}.border-opacity-100{--tblr-border-opacity:1}.w-25{width:25%!important}.w-33{width:33.33333%!important}.w-50{width:50%!important}.w-66{width:66.66666%!important}.w-75{width:75%!important}.w-100{width:100%!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-33{height:33.33333%!important}.h-50{height:50%!important}.h-66{height:66.66666%!important}.h-75{height:75%!important}.h-100{height:100%!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:2rem!important}.m-6{margin:3rem!important}.m-7{margin:5rem!important}.m-8{margin:8rem!important}.m-auto{margin:auto!important}.mx-0{margin-left:0!important;margin-right:0!important}.mx-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-3{margin-left:1rem!important;margin-right:1rem!important}.mx-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-5{margin-left:2rem!important;margin-right:2rem!important}.mx-6{margin-left:3rem!important;margin-right:3rem!important}.mx-7{margin-left:5rem!important;margin-right:5rem!important}.mx-8{margin-left:8rem!important;margin-right:8rem!important}.mx-auto{margin-left:auto!important;margin-right:auto!important}.my-0{margin-bottom:0!important;margin-top:0!important}.my-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-6{margin-top:3rem!important}.mt-7{margin-top:5rem!important}.mt-8{margin-top:8rem!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:2rem!important}.me-6{margin-right:3rem!important}.me-7{margin-right:5rem!important}.me-8{margin-right:8rem!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:2rem!important}.mb-6{margin-bottom:3rem!important}.mb-7{margin-bottom:5rem!important}.mb-8{margin-bottom:8rem!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:2rem!important}.ms-6{margin-left:3rem!important}.ms-7{margin-left:5rem!important}.ms-8{margin-left:8rem!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:2rem!important}.p-6{padding:3rem!important}.p-7{padding:5rem!important}.p-8{padding:8rem!important}.px-0{padding-left:0!important;padding-right:0!important}.px-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-3{padding-left:1rem!important;padding-right:1rem!important}.px-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-5{padding-left:2rem!important;padding-right:2rem!important}.px-6{padding-left:3rem!important;padding-right:3rem!important}.px-7{padding-left:5rem!important;padding-right:5rem!important}.px-8{padding-left:8rem!important;padding-right:8rem!important}.py-0{padding-bottom:0!important;padding-top:0!important}.py-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-6{padding-top:3rem!important}.pt-7{padding-top:5rem!important}.pt-8{padding-top:8rem!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:2rem!important}.pe-6{padding-right:3rem!important}.pe-7{padding-right:5rem!important}.pe-8{padding-right:8rem!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:2rem!important}.pb-6{padding-bottom:3rem!important}.pb-7{padding-bottom:5rem!important}.pb-8{padding-bottom:8rem!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:2rem!important}.ps-6{padding-left:3rem!important}.ps-7{padding-left:5rem!important}.ps-8{padding-left:8rem!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:2rem!important}.gap-6{gap:3rem!important}.gap-7{gap:5rem!important}.gap-8{gap:8rem!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:2rem!important}.row-gap-6{row-gap:3rem!important}.row-gap-7{row-gap:5rem!important}.row-gap-8{row-gap:8rem!important}.column-gap-0{column-gap:0!important}.column-gap-1{column-gap:.25rem!important}.column-gap-2{column-gap:.5rem!important}.column-gap-3{column-gap:1rem!important}.column-gap-4{column-gap:1.5rem!important}.column-gap-5{column-gap:2rem!important}.column-gap-6{column-gap:3rem!important}.column-gap-7{column-gap:5rem!important}.column-gap-8{column-gap:8rem!important}.font-monospace{font-family:var(--tblr-font-monospace)!important}.fs-1{font-size:1.5rem!important}.fs-2{font-size:1.25rem!important}.fs-3{font-size:1rem!important}.fs-4{font-size:.875rem!important}.fs-5{font-size:.75rem!important}.fs-6{font-size:.625rem!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-bold,.fw-semibold{font-weight:600!important}.fw-bolder{font-weight:bolder!important}.lh-1{line-height:1!important}.lh-sm{line-height:1.1428571429!important}.lh-base{line-height:1.4285714286!important}.lh-lg{line-height:1.7142857143!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-muted{color:var(--tblr-secondary-color)!important}.text-black{--tblr-text-opacity:1;color:rgba(var(--tblr-black-rgb),var(--tblr-text-opacity))!important}.text-white{--tblr-text-opacity:1;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.text-body{--tblr-text-opacity:1;color:rgba(var(--tblr-body-color-rgb),var(--tblr-text-opacity))!important}.text-black-50{--tblr-text-opacity:1;color:rgba(0,0,0,.5)!important}.text-white-50{--tblr-text-opacity:1;color:hsla(0,0%,100%,.5)!important}.text-body-secondary{--tblr-text-opacity:1;color:var(--tblr-secondary-color)!important}.text-body-tertiary{--tblr-text-opacity:1;color:var(--tblr-tertiary-color)!important}.text-body-emphasis{--tblr-text-opacity:1;color:var(--tblr-emphasis-color)!important}.text-reset{--tblr-text-opacity:1;color:inherit!important}.text-opacity-25{--tblr-text-opacity:0.25}.text-opacity-50{--tblr-text-opacity:0.5}.text-opacity-75{--tblr-text-opacity:0.75}.text-opacity-100{--tblr-text-opacity:1}.text-primary-emphasis{color:var(--tblr-primary-text-emphasis)!important}.text-secondary-emphasis{color:var(--tblr-secondary-text-emphasis)!important}.text-success-emphasis{color:var(--tblr-success-text-emphasis)!important}.text-info-emphasis{color:var(--tblr-info-text-emphasis)!important}.text-warning-emphasis{color:var(--tblr-warning-text-emphasis)!important}.text-danger-emphasis{color:var(--tblr-danger-text-emphasis)!important}.text-light-emphasis{color:var(--tblr-light-text-emphasis)!important}.text-dark-emphasis{color:var(--tblr-dark-text-emphasis)!important}.link-opacity-10,.link-opacity-10-hover:hover{--tblr-link-opacity:0.1}.link-opacity-25,.link-opacity-25-hover:hover{--tblr-link-opacity:0.25}.link-opacity-50,.link-opacity-50-hover:hover{--tblr-link-opacity:0.5}.link-opacity-75,.link-opacity-75-hover:hover{--tblr-link-opacity:0.75}.link-opacity-100,.link-opacity-100-hover:hover{--tblr-link-opacity:1}.link-offset-1,.link-offset-1-hover:hover{text-underline-offset:.125em!important}.link-offset-2,.link-offset-2-hover:hover{text-underline-offset:.25em!important}.link-offset-3,.link-offset-3-hover:hover{text-underline-offset:.375em!important}.link-underline-primary{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-primary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-secondary{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-secondary-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-success{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-success-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-info{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-info-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-warning{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-warning-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-danger{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-danger-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-light{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-light-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dark{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-dark-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-muted{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-muted-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-blue{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-blue-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-azure{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-azure-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-indigo{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-indigo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-purple{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-purple-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pink{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-pink-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-red{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-red-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-orange{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-orange-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-yellow{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-yellow-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-lime{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-lime-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-green{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-green-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-teal{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-teal-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-cyan{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-cyan-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-x{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-x-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-facebook{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-facebook-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-twitter{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-twitter-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-linkedin{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-google{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-google-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-youtube{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-youtube-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vimeo{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-dribbble{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-github{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-github-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-instagram{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-instagram-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-pinterest{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-vk{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-vk-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-rss{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-rss-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-flickr{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-flickr-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-bitbucket{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-link-underline-opacity))!important}.link-underline-tabler{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-tabler-rgb),var(--tblr-link-underline-opacity))!important}.link-underline{--tblr-link-underline-opacity:1;text-decoration-color:rgba(var(--tblr-link-color-rgb),var(--tblr-link-underline-opacity,1))!important}.link-underline-opacity-0,.link-underline-opacity-0-hover:hover{--tblr-link-underline-opacity:0}.link-underline-opacity-10,.link-underline-opacity-10-hover:hover{--tblr-link-underline-opacity:0.1}.link-underline-opacity-25,.link-underline-opacity-25-hover:hover{--tblr-link-underline-opacity:0.25}.link-underline-opacity-50,.link-underline-opacity-50-hover:hover{--tblr-link-underline-opacity:0.5}.link-underline-opacity-75,.link-underline-opacity-75-hover:hover{--tblr-link-underline-opacity:0.75}.link-underline-opacity-100,.link-underline-opacity-100-hover:hover{--tblr-link-underline-opacity:1}.bg-black{background-color:rgba(var(--tblr-black-rgb),var(--tblr-bg-opacity))!important}.bg-black,.bg-body{--tblr-bg-opacity:1}.bg-body{background-color:rgba(var(--tblr-body-bg-rgb),var(--tblr-bg-opacity))!important}.bg-transparent{--tblr-bg-opacity:1;background-color:transparent!important}.bg-body-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-body-tertiary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tertiary-bg-rgb),var(--tblr-bg-opacity))!important}.bg-opacity-10{--tblr-bg-opacity:0.1}.bg-opacity-25{--tblr-bg-opacity:0.25}.bg-opacity-50{--tblr-bg-opacity:0.5}.bg-opacity-75{--tblr-bg-opacity:0.75}.bg-opacity-100{--tblr-bg-opacity:1}.bg-primary-subtle{background-color:var(--tblr-primary-bg-subtle)!important}.bg-secondary-subtle{background-color:var(--tblr-secondary-bg-subtle)!important}.bg-success-subtle{background-color:var(--tblr-success-bg-subtle)!important}.bg-info-subtle{background-color:var(--tblr-info-bg-subtle)!important}.bg-warning-subtle{background-color:var(--tblr-warning-bg-subtle)!important}.bg-danger-subtle{background-color:var(--tblr-danger-bg-subtle)!important}.bg-light-subtle{background-color:var(--tblr-light-bg-subtle)!important}.bg-dark-subtle{background-color:var(--tblr-dark-bg-subtle)!important}.bg-gradient{background-image:var(--tblr-gradient)!important}.user-select-all{user-select:all!important}.user-select-auto{user-select:auto!important}.user-select-none{user-select:none!important}.pe-none{pointer-events:none!important}.pe-auto{pointer-events:auto!important}.rounded{border-radius:var(--tblr-border-radius)!important}.rounded-0{border-radius:0!important}.rounded-1{border-radius:var(--tblr-border-radius-sm)!important}.rounded-2{border-radius:var(--tblr-border-radius)!important}.rounded-3{border-radius:var(--tblr-border-radius-lg)!important}.rounded-4{border-radius:var(--tblr-border-radius-xl)!important}.rounded-5{border-radius:var(--tblr-border-radius-xxl)!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:var(--tblr-border-radius-pill)!important}.rounded-top{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-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(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-top-2{border-top-left-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-top-3{border-top-left-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-top-4{border-top-left-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-top-5{border-top-left-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-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(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-border-radius-pill)!important}.rounded-end{border-bottom-right-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-end-0{border-bottom-right-radius:0!important;border-top-right-radius:0!important}.rounded-end-1{border-bottom-right-radius:var(--tblr-border-radius-sm)!important;border-top-right-radius:var(--tblr-border-radius-sm)!important}.rounded-end-2{border-bottom-right-radius:var(--tblr-border-radius)!important;border-top-right-radius:var(--tblr-border-radius)!important}.rounded-end-3{border-bottom-right-radius:var(--tblr-border-radius-lg)!important;border-top-right-radius:var(--tblr-border-radius-lg)!important}.rounded-end-4{border-bottom-right-radius:var(--tblr-border-radius-xl)!important;border-top-right-radius:var(--tblr-border-radius-xl)!important}.rounded-end-5{border-bottom-right-radius:var(--tblr-border-radius-xxl)!important;border-top-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-end-circle{border-bottom-right-radius:50%!important;border-top-right-radius:50%!important}.rounded-end-pill{border-bottom-right-radius:var(--tblr-border-radius-pill)!important;border-top-right-radius:var(--tblr-border-radius-pill)!important}.rounded-bottom{border-bottom-left-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-bottom-0{border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.rounded-bottom-1{border-bottom-left-radius:var(--tblr-border-radius-sm)!important;border-bottom-right-radius:var(--tblr-border-radius-sm)!important}.rounded-bottom-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-bottom-right-radius:var(--tblr-border-radius)!important}.rounded-bottom-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-bottom-right-radius:var(--tblr-border-radius-lg)!important}.rounded-bottom-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-bottom-right-radius:var(--tblr-border-radius-xl)!important}.rounded-bottom-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-bottom-right-radius:var(--tblr-border-radius-xxl)!important}.rounded-bottom-circle{border-bottom-left-radius:50%!important;border-bottom-right-radius:50%!important}.rounded-bottom-pill{border-bottom-left-radius:var(--tblr-border-radius-pill)!important;border-bottom-right-radius:var(--tblr-border-radius-pill)!important}.rounded-start{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-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(--tblr-border-radius-sm)!important;border-top-left-radius:var(--tblr-border-radius-sm)!important}.rounded-start-2{border-bottom-left-radius:var(--tblr-border-radius)!important;border-top-left-radius:var(--tblr-border-radius)!important}.rounded-start-3{border-bottom-left-radius:var(--tblr-border-radius-lg)!important;border-top-left-radius:var(--tblr-border-radius-lg)!important}.rounded-start-4{border-bottom-left-radius:var(--tblr-border-radius-xl)!important;border-top-left-radius:var(--tblr-border-radius-xl)!important}.rounded-start-5{border-bottom-left-radius:var(--tblr-border-radius-xxl)!important;border-top-left-radius:var(--tblr-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(--tblr-border-radius-pill)!important;border-top-left-radius:var(--tblr-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}.object-contain{object-fit:contain!important}.object-cover{object-fit:cover!important}.object-fill{object-fit:fill!important}.object-scale-down{object-fit:scale-down!important}.object-none{object-fit:none!important}.tracking-tight{letter-spacing:-.05em!important}.tracking-normal{letter-spacing:0!important}.tracking-wide{letter-spacing:.05em!important}.cursor-auto{cursor:auto!important}.cursor-pointer{cursor:pointer!important}.cursor-move{cursor:move!important}.cursor-not-allowed{cursor:not-allowed!important}.cursor-zoom-in{cursor:zoom-in!important}.cursor-zoom-out{cursor:zoom-out!important}.cursor-default{cursor:default!important}.cursor-none{cursor:none!important}.cursor-help{cursor:help!important}.cursor-progress{cursor:progress!important}.cursor-wait{cursor:wait!important}.cursor-text{cursor:text!important}.cursor-v-text{cursor:vertical-text!important}.cursor-grab{cursor:grab!important}.cursor-grabbing{cursor:grabbing!important}.border-x{border-left:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important;border-right:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-x-wide{border-left:2px var(--tblr-border-style) rgba(4,32,69,.1)!important;border-right:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-x-0{border-left:0!important;border-right:0!important}.border-y{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important;border-top:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-y-wide{border-bottom:2px var(--tblr-border-style) rgba(4,32,69,.1)!important;border-top:2px var(--tblr-border-style) rgba(4,32,69,.1)!important}.border-y-0{border-bottom:0!important;border-top:0!important}.columns-2{column-count:2!important}.columns-3{column-count:3!important}.columns-4{column-count:4!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{object-fit:contain!important}.object-fit-sm-cover{object-fit:cover!important}.object-fit-sm-fill{object-fit:fill!important}.object-fit-sm-scale{object-fit:scale-down!important}.object-fit-sm-none{object-fit:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-grid{display:grid!important}.d-sm-inline-grid{display:inline-grid!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:flex!important}.d-sm-inline-flex{display:inline-flex!important}.d-sm-none{display:none!important}.flex-sm-fill{flex: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:2rem!important}.m-sm-6{margin:3rem!important}.m-sm-7{margin:5rem!important}.m-sm-8{margin:8rem!important}.m-sm-auto{margin:auto!important}.mx-sm-0{margin-left:0!important;margin-right:0!important}.mx-sm-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-sm-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-sm-3{margin-left:1rem!important;margin-right:1rem!important}.mx-sm-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-sm-5{margin-left:2rem!important;margin-right:2rem!important}.mx-sm-6{margin-left:3rem!important;margin-right:3rem!important}.mx-sm-7{margin-left:5rem!important;margin-right:5rem!important}.mx-sm-8{margin-left:8rem!important;margin-right:8rem!important}.mx-sm-auto{margin-left:auto!important;margin-right:auto!important}.my-sm-0{margin-bottom:0!important;margin-top:0!important}.my-sm-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-sm-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-sm-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-sm-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-sm-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-sm-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-sm-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-sm-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-sm-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-sm-6{margin-top:3rem!important}.mt-sm-7{margin-top:5rem!important}.mt-sm-8{margin-top:8rem!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:2rem!important}.me-sm-6{margin-right:3rem!important}.me-sm-7{margin-right:5rem!important}.me-sm-8{margin-right:8rem!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:2rem!important}.mb-sm-6{margin-bottom:3rem!important}.mb-sm-7{margin-bottom:5rem!important}.mb-sm-8{margin-bottom:8rem!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:2rem!important}.ms-sm-6{margin-left:3rem!important}.ms-sm-7{margin-left:5rem!important}.ms-sm-8{margin-left:8rem!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:2rem!important}.p-sm-6{padding:3rem!important}.p-sm-7{padding:5rem!important}.p-sm-8{padding:8rem!important}.px-sm-0{padding-left:0!important;padding-right:0!important}.px-sm-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-sm-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-sm-3{padding-left:1rem!important;padding-right:1rem!important}.px-sm-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-sm-5{padding-left:2rem!important;padding-right:2rem!important}.px-sm-6{padding-left:3rem!important;padding-right:3rem!important}.px-sm-7{padding-left:5rem!important;padding-right:5rem!important}.px-sm-8{padding-left:8rem!important;padding-right:8rem!important}.py-sm-0{padding-bottom:0!important;padding-top:0!important}.py-sm-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-sm-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-sm-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-sm-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-sm-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-sm-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-sm-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-sm-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-sm-6{padding-top:3rem!important}.pt-sm-7{padding-top:5rem!important}.pt-sm-8{padding-top:8rem!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:2rem!important}.pe-sm-6{padding-right:3rem!important}.pe-sm-7{padding-right:5rem!important}.pe-sm-8{padding-right:8rem!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:2rem!important}.pb-sm-6{padding-bottom:3rem!important}.pb-sm-7{padding-bottom:5rem!important}.pb-sm-8{padding-bottom:8rem!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:2rem!important}.ps-sm-6{padding-left:3rem!important}.ps-sm-7{padding-left:5rem!important}.ps-sm-8{padding-left:8rem!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:2rem!important}.gap-sm-6{gap:3rem!important}.gap-sm-7{gap:5rem!important}.gap-sm-8{gap:8rem!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:2rem!important}.row-gap-sm-6{row-gap:3rem!important}.row-gap-sm-7{row-gap:5rem!important}.row-gap-sm-8{row-gap:8rem!important}.column-gap-sm-0{column-gap:0!important}.column-gap-sm-1{column-gap:.25rem!important}.column-gap-sm-2{column-gap:.5rem!important}.column-gap-sm-3{column-gap:1rem!important}.column-gap-sm-4{column-gap:1.5rem!important}.column-gap-sm-5{column-gap:2rem!important}.column-gap-sm-6{column-gap:3rem!important}.column-gap-sm-7{column-gap:5rem!important}.column-gap-sm-8{column-gap:8rem!important}.text-sm-start{text-align:left!important}.text-sm-end{text-align:right!important}.text-sm-center{text-align:center!important}.columns-sm-2{column-count:2!important}.columns-sm-3{column-count:3!important}.columns-sm-4{column-count:4!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{object-fit:contain!important}.object-fit-md-cover{object-fit:cover!important}.object-fit-md-fill{object-fit:fill!important}.object-fit-md-scale{object-fit:scale-down!important}.object-fit-md-none{object-fit:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-grid{display:grid!important}.d-md-inline-grid{display:inline-grid!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:flex!important}.d-md-inline-flex{display:inline-flex!important}.d-md-none{display:none!important}.flex-md-fill{flex: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:2rem!important}.m-md-6{margin:3rem!important}.m-md-7{margin:5rem!important}.m-md-8{margin:8rem!important}.m-md-auto{margin:auto!important}.mx-md-0{margin-left:0!important;margin-right:0!important}.mx-md-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-md-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-md-3{margin-left:1rem!important;margin-right:1rem!important}.mx-md-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-md-5{margin-left:2rem!important;margin-right:2rem!important}.mx-md-6{margin-left:3rem!important;margin-right:3rem!important}.mx-md-7{margin-left:5rem!important;margin-right:5rem!important}.mx-md-8{margin-left:8rem!important;margin-right:8rem!important}.mx-md-auto{margin-left:auto!important;margin-right:auto!important}.my-md-0{margin-bottom:0!important;margin-top:0!important}.my-md-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-md-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-md-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-md-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-md-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-md-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-md-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-md-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-md-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-md-6{margin-top:3rem!important}.mt-md-7{margin-top:5rem!important}.mt-md-8{margin-top:8rem!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:2rem!important}.me-md-6{margin-right:3rem!important}.me-md-7{margin-right:5rem!important}.me-md-8{margin-right:8rem!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:2rem!important}.mb-md-6{margin-bottom:3rem!important}.mb-md-7{margin-bottom:5rem!important}.mb-md-8{margin-bottom:8rem!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:2rem!important}.ms-md-6{margin-left:3rem!important}.ms-md-7{margin-left:5rem!important}.ms-md-8{margin-left:8rem!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:2rem!important}.p-md-6{padding:3rem!important}.p-md-7{padding:5rem!important}.p-md-8{padding:8rem!important}.px-md-0{padding-left:0!important;padding-right:0!important}.px-md-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-md-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-md-3{padding-left:1rem!important;padding-right:1rem!important}.px-md-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-md-5{padding-left:2rem!important;padding-right:2rem!important}.px-md-6{padding-left:3rem!important;padding-right:3rem!important}.px-md-7{padding-left:5rem!important;padding-right:5rem!important}.px-md-8{padding-left:8rem!important;padding-right:8rem!important}.py-md-0{padding-bottom:0!important;padding-top:0!important}.py-md-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-md-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-md-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-md-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-md-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-md-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-md-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-md-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-md-6{padding-top:3rem!important}.pt-md-7{padding-top:5rem!important}.pt-md-8{padding-top:8rem!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:2rem!important}.pe-md-6{padding-right:3rem!important}.pe-md-7{padding-right:5rem!important}.pe-md-8{padding-right:8rem!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:2rem!important}.pb-md-6{padding-bottom:3rem!important}.pb-md-7{padding-bottom:5rem!important}.pb-md-8{padding-bottom:8rem!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:2rem!important}.ps-md-6{padding-left:3rem!important}.ps-md-7{padding-left:5rem!important}.ps-md-8{padding-left:8rem!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:2rem!important}.gap-md-6{gap:3rem!important}.gap-md-7{gap:5rem!important}.gap-md-8{gap:8rem!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:2rem!important}.row-gap-md-6{row-gap:3rem!important}.row-gap-md-7{row-gap:5rem!important}.row-gap-md-8{row-gap:8rem!important}.column-gap-md-0{column-gap:0!important}.column-gap-md-1{column-gap:.25rem!important}.column-gap-md-2{column-gap:.5rem!important}.column-gap-md-3{column-gap:1rem!important}.column-gap-md-4{column-gap:1.5rem!important}.column-gap-md-5{column-gap:2rem!important}.column-gap-md-6{column-gap:3rem!important}.column-gap-md-7{column-gap:5rem!important}.column-gap-md-8{column-gap:8rem!important}.text-md-start{text-align:left!important}.text-md-end{text-align:right!important}.text-md-center{text-align:center!important}.columns-md-2{column-count:2!important}.columns-md-3{column-count:3!important}.columns-md-4{column-count:4!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{object-fit:contain!important}.object-fit-lg-cover{object-fit:cover!important}.object-fit-lg-fill{object-fit:fill!important}.object-fit-lg-scale{object-fit:scale-down!important}.object-fit-lg-none{object-fit:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-grid{display:grid!important}.d-lg-inline-grid{display:inline-grid!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:flex!important}.d-lg-inline-flex{display:inline-flex!important}.d-lg-none{display:none!important}.flex-lg-fill{flex: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:2rem!important}.m-lg-6{margin:3rem!important}.m-lg-7{margin:5rem!important}.m-lg-8{margin:8rem!important}.m-lg-auto{margin:auto!important}.mx-lg-0{margin-left:0!important;margin-right:0!important}.mx-lg-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-lg-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-lg-3{margin-left:1rem!important;margin-right:1rem!important}.mx-lg-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-lg-5{margin-left:2rem!important;margin-right:2rem!important}.mx-lg-6{margin-left:3rem!important;margin-right:3rem!important}.mx-lg-7{margin-left:5rem!important;margin-right:5rem!important}.mx-lg-8{margin-left:8rem!important;margin-right:8rem!important}.mx-lg-auto{margin-left:auto!important;margin-right:auto!important}.my-lg-0{margin-bottom:0!important;margin-top:0!important}.my-lg-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-lg-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-lg-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-lg-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-lg-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-lg-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-lg-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-lg-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-lg-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-lg-6{margin-top:3rem!important}.mt-lg-7{margin-top:5rem!important}.mt-lg-8{margin-top:8rem!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:2rem!important}.me-lg-6{margin-right:3rem!important}.me-lg-7{margin-right:5rem!important}.me-lg-8{margin-right:8rem!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:2rem!important}.mb-lg-6{margin-bottom:3rem!important}.mb-lg-7{margin-bottom:5rem!important}.mb-lg-8{margin-bottom:8rem!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:2rem!important}.ms-lg-6{margin-left:3rem!important}.ms-lg-7{margin-left:5rem!important}.ms-lg-8{margin-left:8rem!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:2rem!important}.p-lg-6{padding:3rem!important}.p-lg-7{padding:5rem!important}.p-lg-8{padding:8rem!important}.px-lg-0{padding-left:0!important;padding-right:0!important}.px-lg-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-lg-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-lg-3{padding-left:1rem!important;padding-right:1rem!important}.px-lg-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-lg-5{padding-left:2rem!important;padding-right:2rem!important}.px-lg-6{padding-left:3rem!important;padding-right:3rem!important}.px-lg-7{padding-left:5rem!important;padding-right:5rem!important}.px-lg-8{padding-left:8rem!important;padding-right:8rem!important}.py-lg-0{padding-bottom:0!important;padding-top:0!important}.py-lg-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-lg-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-lg-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-lg-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-lg-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-lg-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-lg-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-lg-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-lg-6{padding-top:3rem!important}.pt-lg-7{padding-top:5rem!important}.pt-lg-8{padding-top:8rem!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:2rem!important}.pe-lg-6{padding-right:3rem!important}.pe-lg-7{padding-right:5rem!important}.pe-lg-8{padding-right:8rem!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:2rem!important}.pb-lg-6{padding-bottom:3rem!important}.pb-lg-7{padding-bottom:5rem!important}.pb-lg-8{padding-bottom:8rem!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:2rem!important}.ps-lg-6{padding-left:3rem!important}.ps-lg-7{padding-left:5rem!important}.ps-lg-8{padding-left:8rem!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:2rem!important}.gap-lg-6{gap:3rem!important}.gap-lg-7{gap:5rem!important}.gap-lg-8{gap:8rem!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:2rem!important}.row-gap-lg-6{row-gap:3rem!important}.row-gap-lg-7{row-gap:5rem!important}.row-gap-lg-8{row-gap:8rem!important}.column-gap-lg-0{column-gap:0!important}.column-gap-lg-1{column-gap:.25rem!important}.column-gap-lg-2{column-gap:.5rem!important}.column-gap-lg-3{column-gap:1rem!important}.column-gap-lg-4{column-gap:1.5rem!important}.column-gap-lg-5{column-gap:2rem!important}.column-gap-lg-6{column-gap:3rem!important}.column-gap-lg-7{column-gap:5rem!important}.column-gap-lg-8{column-gap:8rem!important}.text-lg-start{text-align:left!important}.text-lg-end{text-align:right!important}.text-lg-center{text-align:center!important}.columns-lg-2{column-count:2!important}.columns-lg-3{column-count:3!important}.columns-lg-4{column-count:4!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{object-fit:contain!important}.object-fit-xl-cover{object-fit:cover!important}.object-fit-xl-fill{object-fit:fill!important}.object-fit-xl-scale{object-fit:scale-down!important}.object-fit-xl-none{object-fit:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-grid{display:grid!important}.d-xl-inline-grid{display:inline-grid!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:flex!important}.d-xl-inline-flex{display:inline-flex!important}.d-xl-none{display:none!important}.flex-xl-fill{flex: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:2rem!important}.m-xl-6{margin:3rem!important}.m-xl-7{margin:5rem!important}.m-xl-8{margin:8rem!important}.m-xl-auto{margin:auto!important}.mx-xl-0{margin-left:0!important;margin-right:0!important}.mx-xl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xl-5{margin-left:2rem!important;margin-right:2rem!important}.mx-xl-6{margin-left:3rem!important;margin-right:3rem!important}.mx-xl-7{margin-left:5rem!important;margin-right:5rem!important}.mx-xl-8{margin-left:8rem!important;margin-right:8rem!important}.mx-xl-auto{margin-left:auto!important;margin-right:auto!important}.my-xl-0{margin-bottom:0!important;margin-top:0!important}.my-xl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xl-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-xl-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-xl-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-xl-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-xl-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-xl-6{margin-top:3rem!important}.mt-xl-7{margin-top:5rem!important}.mt-xl-8{margin-top:8rem!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:2rem!important}.me-xl-6{margin-right:3rem!important}.me-xl-7{margin-right:5rem!important}.me-xl-8{margin-right:8rem!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:2rem!important}.mb-xl-6{margin-bottom:3rem!important}.mb-xl-7{margin-bottom:5rem!important}.mb-xl-8{margin-bottom:8rem!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:2rem!important}.ms-xl-6{margin-left:3rem!important}.ms-xl-7{margin-left:5rem!important}.ms-xl-8{margin-left:8rem!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:2rem!important}.p-xl-6{padding:3rem!important}.p-xl-7{padding:5rem!important}.p-xl-8{padding:8rem!important}.px-xl-0{padding-left:0!important;padding-right:0!important}.px-xl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xl-5{padding-left:2rem!important;padding-right:2rem!important}.px-xl-6{padding-left:3rem!important;padding-right:3rem!important}.px-xl-7{padding-left:5rem!important;padding-right:5rem!important}.px-xl-8{padding-left:8rem!important;padding-right:8rem!important}.py-xl-0{padding-bottom:0!important;padding-top:0!important}.py-xl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xl-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-xl-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-xl-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-xl-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-xl-6{padding-top:3rem!important}.pt-xl-7{padding-top:5rem!important}.pt-xl-8{padding-top:8rem!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:2rem!important}.pe-xl-6{padding-right:3rem!important}.pe-xl-7{padding-right:5rem!important}.pe-xl-8{padding-right:8rem!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:2rem!important}.pb-xl-6{padding-bottom:3rem!important}.pb-xl-7{padding-bottom:5rem!important}.pb-xl-8{padding-bottom:8rem!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:2rem!important}.ps-xl-6{padding-left:3rem!important}.ps-xl-7{padding-left:5rem!important}.ps-xl-8{padding-left:8rem!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:2rem!important}.gap-xl-6{gap:3rem!important}.gap-xl-7{gap:5rem!important}.gap-xl-8{gap:8rem!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:2rem!important}.row-gap-xl-6{row-gap:3rem!important}.row-gap-xl-7{row-gap:5rem!important}.row-gap-xl-8{row-gap:8rem!important}.column-gap-xl-0{column-gap:0!important}.column-gap-xl-1{column-gap:.25rem!important}.column-gap-xl-2{column-gap:.5rem!important}.column-gap-xl-3{column-gap:1rem!important}.column-gap-xl-4{column-gap:1.5rem!important}.column-gap-xl-5{column-gap:2rem!important}.column-gap-xl-6{column-gap:3rem!important}.column-gap-xl-7{column-gap:5rem!important}.column-gap-xl-8{column-gap:8rem!important}.text-xl-start{text-align:left!important}.text-xl-end{text-align:right!important}.text-xl-center{text-align:center!important}.columns-xl-2{column-count:2!important}.columns-xl-3{column-count:3!important}.columns-xl-4{column-count:4!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{object-fit:contain!important}.object-fit-xxl-cover{object-fit:cover!important}.object-fit-xxl-fill{object-fit:fill!important}.object-fit-xxl-scale{object-fit:scale-down!important}.object-fit-xxl-none{object-fit:none!important}.d-xxl-inline{display:inline!important}.d-xxl-inline-block{display:inline-block!important}.d-xxl-block{display:block!important}.d-xxl-grid{display:grid!important}.d-xxl-inline-grid{display:inline-grid!important}.d-xxl-table{display:table!important}.d-xxl-table-row{display:table-row!important}.d-xxl-table-cell{display:table-cell!important}.d-xxl-flex{display:flex!important}.d-xxl-inline-flex{display:inline-flex!important}.d-xxl-none{display:none!important}.flex-xxl-fill{flex: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:2rem!important}.m-xxl-6{margin:3rem!important}.m-xxl-7{margin:5rem!important}.m-xxl-8{margin:8rem!important}.m-xxl-auto{margin:auto!important}.mx-xxl-0{margin-left:0!important;margin-right:0!important}.mx-xxl-1{margin-left:.25rem!important;margin-right:.25rem!important}.mx-xxl-2{margin-left:.5rem!important;margin-right:.5rem!important}.mx-xxl-3{margin-left:1rem!important;margin-right:1rem!important}.mx-xxl-4{margin-left:1.5rem!important;margin-right:1.5rem!important}.mx-xxl-5{margin-left:2rem!important;margin-right:2rem!important}.mx-xxl-6{margin-left:3rem!important;margin-right:3rem!important}.mx-xxl-7{margin-left:5rem!important;margin-right:5rem!important}.mx-xxl-8{margin-left:8rem!important;margin-right:8rem!important}.mx-xxl-auto{margin-left:auto!important;margin-right:auto!important}.my-xxl-0{margin-bottom:0!important;margin-top:0!important}.my-xxl-1{margin-bottom:.25rem!important;margin-top:.25rem!important}.my-xxl-2{margin-bottom:.5rem!important;margin-top:.5rem!important}.my-xxl-3{margin-bottom:1rem!important;margin-top:1rem!important}.my-xxl-4{margin-bottom:1.5rem!important;margin-top:1.5rem!important}.my-xxl-5{margin-bottom:2rem!important;margin-top:2rem!important}.my-xxl-6{margin-bottom:3rem!important;margin-top:3rem!important}.my-xxl-7{margin-bottom:5rem!important;margin-top:5rem!important}.my-xxl-8{margin-bottom:8rem!important;margin-top:8rem!important}.my-xxl-auto{margin-bottom:auto!important;margin-top: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:2rem!important}.mt-xxl-6{margin-top:3rem!important}.mt-xxl-7{margin-top:5rem!important}.mt-xxl-8{margin-top:8rem!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:2rem!important}.me-xxl-6{margin-right:3rem!important}.me-xxl-7{margin-right:5rem!important}.me-xxl-8{margin-right:8rem!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:2rem!important}.mb-xxl-6{margin-bottom:3rem!important}.mb-xxl-7{margin-bottom:5rem!important}.mb-xxl-8{margin-bottom:8rem!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:2rem!important}.ms-xxl-6{margin-left:3rem!important}.ms-xxl-7{margin-left:5rem!important}.ms-xxl-8{margin-left:8rem!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:2rem!important}.p-xxl-6{padding:3rem!important}.p-xxl-7{padding:5rem!important}.p-xxl-8{padding:8rem!important}.px-xxl-0{padding-left:0!important;padding-right:0!important}.px-xxl-1{padding-left:.25rem!important;padding-right:.25rem!important}.px-xxl-2{padding-left:.5rem!important;padding-right:.5rem!important}.px-xxl-3{padding-left:1rem!important;padding-right:1rem!important}.px-xxl-4{padding-left:1.5rem!important;padding-right:1.5rem!important}.px-xxl-5{padding-left:2rem!important;padding-right:2rem!important}.px-xxl-6{padding-left:3rem!important;padding-right:3rem!important}.px-xxl-7{padding-left:5rem!important;padding-right:5rem!important}.px-xxl-8{padding-left:8rem!important;padding-right:8rem!important}.py-xxl-0{padding-bottom:0!important;padding-top:0!important}.py-xxl-1{padding-bottom:.25rem!important;padding-top:.25rem!important}.py-xxl-2{padding-bottom:.5rem!important;padding-top:.5rem!important}.py-xxl-3{padding-bottom:1rem!important;padding-top:1rem!important}.py-xxl-4{padding-bottom:1.5rem!important;padding-top:1.5rem!important}.py-xxl-5{padding-bottom:2rem!important;padding-top:2rem!important}.py-xxl-6{padding-bottom:3rem!important;padding-top:3rem!important}.py-xxl-7{padding-bottom:5rem!important;padding-top:5rem!important}.py-xxl-8{padding-bottom:8rem!important;padding-top:8rem!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:2rem!important}.pt-xxl-6{padding-top:3rem!important}.pt-xxl-7{padding-top:5rem!important}.pt-xxl-8{padding-top:8rem!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:2rem!important}.pe-xxl-6{padding-right:3rem!important}.pe-xxl-7{padding-right:5rem!important}.pe-xxl-8{padding-right:8rem!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:2rem!important}.pb-xxl-6{padding-bottom:3rem!important}.pb-xxl-7{padding-bottom:5rem!important}.pb-xxl-8{padding-bottom:8rem!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:2rem!important}.ps-xxl-6{padding-left:3rem!important}.ps-xxl-7{padding-left:5rem!important}.ps-xxl-8{padding-left:8rem!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:2rem!important}.gap-xxl-6{gap:3rem!important}.gap-xxl-7{gap:5rem!important}.gap-xxl-8{gap:8rem!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:2rem!important}.row-gap-xxl-6{row-gap:3rem!important}.row-gap-xxl-7{row-gap:5rem!important}.row-gap-xxl-8{row-gap:8rem!important}.column-gap-xxl-0{column-gap:0!important}.column-gap-xxl-1{column-gap:.25rem!important}.column-gap-xxl-2{column-gap:.5rem!important}.column-gap-xxl-3{column-gap:1rem!important}.column-gap-xxl-4{column-gap:1.5rem!important}.column-gap-xxl-5{column-gap:2rem!important}.column-gap-xxl-6{column-gap:3rem!important}.column-gap-xxl-7{column-gap:5rem!important}.column-gap-xxl-8{column-gap:8rem!important}.text-xxl-start{text-align:left!important}.text-xxl-end{text-align:right!important}.text-xxl-center{text-align:center!important}.columns-xxl-2{column-count:2!important}.columns-xxl-3{column-count:3!important}.columns-xxl-4{column-count:4!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}}:host,:root{font-size:16px;height:100%}:host,:root,[data-bs-theme=light]{--tblr-primary:#066fd1;--tblr-primary-rgb:6,111,209;--tblr-primary-fg:var(--tblr-light);--tblr-primary-darken:#0564bc;--tblr-primary-lt:#e6f1fa;--tblr-primary-lt-rgb:230,241,250;--tblr-secondary:#6c7a91;--tblr-secondary-rgb:108,122,145;--tblr-secondary-fg:var(--tblr-light);--tblr-secondary-darken:#616e83;--tblr-secondary-lt:#f0f2f4;--tblr-secondary-lt-rgb:240,242,244;--tblr-success:#2fb344;--tblr-success-rgb:47,179,68;--tblr-success-fg:var(--tblr-light);--tblr-success-darken:#2aa13d;--tblr-success-lt:#eaf7ec;--tblr-success-lt-rgb:234,247,236;--tblr-info:#4299e1;--tblr-info-rgb:66,153,225;--tblr-info-fg:var(--tblr-light);--tblr-info-darken:#3b8acb;--tblr-info-lt:#ecf5fc;--tblr-info-lt-rgb:236,245,252;--tblr-warning:#f76707;--tblr-warning-rgb:247,103,7;--tblr-warning-fg:var(--tblr-light);--tblr-warning-darken:#de5d06;--tblr-warning-lt:#fef0e6;--tblr-warning-lt-rgb:254,240,230;--tblr-danger:#d63939;--tblr-danger-rgb:214,57,57;--tblr-danger-fg:var(--tblr-light);--tblr-danger-darken:#c13333;--tblr-danger-lt:#fbebeb;--tblr-danger-lt-rgb:251,235,235;--tblr-light:#f6f8fb;--tblr-light-rgb:246,248,251;--tblr-light-fg:var(--tblr-dark);--tblr-light-darken:#dddfe2;--tblr-light-lt:#fefeff;--tblr-light-lt-rgb:254,254,255;--tblr-dark:#182433;--tblr-dark-rgb:24,36,51;--tblr-dark-fg:var(--tblr-light);--tblr-dark-darken:#16202e;--tblr-dark-lt:#e8e9eb;--tblr-dark-lt-rgb:232,233,235;--tblr-muted:#6c7a91;--tblr-muted-rgb:108,122,145;--tblr-muted-fg:var(--tblr-light);--tblr-muted-darken:#616e83;--tblr-muted-lt:#f0f2f4;--tblr-muted-lt-rgb:240,242,244;--tblr-blue:#066fd1;--tblr-blue-rgb:6,111,209;--tblr-blue-fg:var(--tblr-light);--tblr-blue-darken:#0564bc;--tblr-blue-lt:#e6f1fa;--tblr-blue-lt-rgb:230,241,250;--tblr-azure:#4299e1;--tblr-azure-rgb:66,153,225;--tblr-azure-fg:var(--tblr-light);--tblr-azure-darken:#3b8acb;--tblr-azure-lt:#ecf5fc;--tblr-azure-lt-rgb:236,245,252;--tblr-indigo:#4263eb;--tblr-indigo-rgb:66,99,235;--tblr-indigo-fg:var(--tblr-light);--tblr-indigo-darken:#3b59d4;--tblr-indigo-lt:#eceffd;--tblr-indigo-lt-rgb:236,239,253;--tblr-purple:#ae3ec9;--tblr-purple-rgb:174,62,201;--tblr-purple-fg:var(--tblr-light);--tblr-purple-darken:#9d38b5;--tblr-purple-lt:#f7ecfa;--tblr-purple-lt-rgb:247,236,250;--tblr-pink:#d6336c;--tblr-pink-rgb:214,51,108;--tblr-pink-fg:var(--tblr-light);--tblr-pink-darken:#c12e61;--tblr-pink-lt:#fbebf0;--tblr-pink-lt-rgb:251,235,240;--tblr-red:#d63939;--tblr-red-rgb:214,57,57;--tblr-red-fg:var(--tblr-light);--tblr-red-darken:#c13333;--tblr-red-lt:#fbebeb;--tblr-red-lt-rgb:251,235,235;--tblr-orange:#f76707;--tblr-orange-rgb:247,103,7;--tblr-orange-fg:var(--tblr-light);--tblr-orange-darken:#de5d06;--tblr-orange-lt:#fef0e6;--tblr-orange-lt-rgb:254,240,230;--tblr-yellow:#f59f00;--tblr-yellow-rgb:245,159,0;--tblr-yellow-fg:var(--tblr-light);--tblr-yellow-darken:#dd8f00;--tblr-yellow-lt:#fef5e6;--tblr-yellow-lt-rgb:254,245,230;--tblr-lime:#74b816;--tblr-lime-rgb:116,184,22;--tblr-lime-fg:var(--tblr-light);--tblr-lime-darken:#68a614;--tblr-lime-lt:#f1f8e8;--tblr-lime-lt-rgb:241,248,232;--tblr-green:#2fb344;--tblr-green-rgb:47,179,68;--tblr-green-fg:var(--tblr-light);--tblr-green-darken:#2aa13d;--tblr-green-lt:#eaf7ec;--tblr-green-lt-rgb:234,247,236;--tblr-teal:#0ca678;--tblr-teal-rgb:12,166,120;--tblr-teal-fg:var(--tblr-light);--tblr-teal-darken:#0b956c;--tblr-teal-lt:#e7f6f2;--tblr-teal-lt-rgb:231,246,242;--tblr-cyan:#17a2b8;--tblr-cyan-rgb:23,162,184;--tblr-cyan-fg:var(--tblr-light);--tblr-cyan-darken:#1592a6;--tblr-cyan-lt:#e8f6f8;--tblr-cyan-lt-rgb:232,246,248;--tblr-x:#000;--tblr-x-rgb:0,0,0;--tblr-x-fg:var(--tblr-light);--tblr-x-darken:#000;--tblr-x-lt:#e6e6e6;--tblr-x-lt-rgb:230,230,230;--tblr-facebook:#1877f2;--tblr-facebook-rgb:24,119,242;--tblr-facebook-fg:var(--tblr-light);--tblr-facebook-darken:#166bda;--tblr-facebook-lt:#e8f1fe;--tblr-facebook-lt-rgb:232,241,254;--tblr-twitter:#1da1f2;--tblr-twitter-rgb:29,161,242;--tblr-twitter-fg:var(--tblr-light);--tblr-twitter-darken:#1a91da;--tblr-twitter-lt:#e8f6fe;--tblr-twitter-lt-rgb:232,246,254;--tblr-linkedin:#0a66c2;--tblr-linkedin-rgb:10,102,194;--tblr-linkedin-fg:var(--tblr-light);--tblr-linkedin-darken:#095caf;--tblr-linkedin-lt:#e7f0f9;--tblr-linkedin-lt-rgb:231,240,249;--tblr-google:#dc4e41;--tblr-google-rgb:220,78,65;--tblr-google-fg:var(--tblr-light);--tblr-google-darken:#c6463b;--tblr-google-lt:#fcedec;--tblr-google-lt-rgb:252,237,236;--tblr-youtube:red;--tblr-youtube-rgb:255,0,0;--tblr-youtube-fg:var(--tblr-light);--tblr-youtube-darken:#e60000;--tblr-youtube-lt:#ffe6e6;--tblr-youtube-lt-rgb:255,230,230;--tblr-vimeo:#1ab7ea;--tblr-vimeo-rgb:26,183,234;--tblr-vimeo-fg:var(--tblr-light);--tblr-vimeo-darken:#17a5d3;--tblr-vimeo-lt:#e8f8fd;--tblr-vimeo-lt-rgb:232,248,253;--tblr-dribbble:#ea4c89;--tblr-dribbble-rgb:234,76,137;--tblr-dribbble-fg:var(--tblr-light);--tblr-dribbble-darken:#d3447b;--tblr-dribbble-lt:#fdedf3;--tblr-dribbble-lt-rgb:253,237,243;--tblr-github:#181717;--tblr-github-rgb:24,23,23;--tblr-github-fg:var(--tblr-light);--tblr-github-darken:#161515;--tblr-github-lt:#e8e8e8;--tblr-github-lt-rgb:232,232,232;--tblr-instagram:#e4405f;--tblr-instagram-rgb:228,64,95;--tblr-instagram-fg:var(--tblr-light);--tblr-instagram-darken:#cd3a56;--tblr-instagram-lt:#fcecef;--tblr-instagram-lt-rgb:252,236,239;--tblr-pinterest:#bd081c;--tblr-pinterest-rgb:189,8,28;--tblr-pinterest-fg:var(--tblr-light);--tblr-pinterest-darken:#aa0719;--tblr-pinterest-lt:#f8e6e8;--tblr-pinterest-lt-rgb:248,230,232;--tblr-vk:#6383a8;--tblr-vk-rgb:99,131,168;--tblr-vk-fg:var(--tblr-light);--tblr-vk-darken:#597697;--tblr-vk-lt:#eff3f6;--tblr-vk-lt-rgb:239,243,246;--tblr-rss:orange;--tblr-rss-rgb:255,165,0;--tblr-rss-fg:var(--tblr-light);--tblr-rss-darken:#e69500;--tblr-rss-lt:#fff6e6;--tblr-rss-lt-rgb:255,246,230;--tblr-flickr:#0063dc;--tblr-flickr-rgb:0,99,220;--tblr-flickr-fg:var(--tblr-light);--tblr-flickr-darken:#0059c6;--tblr-flickr-lt:#e6effc;--tblr-flickr-lt-rgb:230,239,252;--tblr-bitbucket:#0052cc;--tblr-bitbucket-rgb:0,82,204;--tblr-bitbucket-fg:var(--tblr-light);--tblr-bitbucket-darken:#004ab8;--tblr-bitbucket-lt:#e6eefa;--tblr-bitbucket-lt-rgb:230,238,250;--tblr-tabler:#066fd1;--tblr-tabler-rgb:6,111,209;--tblr-tabler-fg:var(--tblr-light);--tblr-tabler-darken:#0564bc;--tblr-tabler-lt:#e6f1fa;--tblr-tabler-lt-rgb:230,241,250;--tblr-gray-50:#f6f8fb;--tblr-gray-50-rgb:246,248,251;--tblr-gray-50-fg:var(--tblr-dark);--tblr-gray-50-darken:#dddfe2;--tblr-gray-50-lt:#fefeff;--tblr-gray-50-lt-rgb:254,254,255;--tblr-gray-100:#eef3f6;--tblr-gray-100-rgb:238,243,246;--tblr-gray-100-fg:var(--tblr-dark);--tblr-gray-100-darken:#d6dbdd;--tblr-gray-100-lt:#fdfefe;--tblr-gray-100-lt-rgb:253,254,254;--tblr-gray-200:#dce1e7;--tblr-gray-200-rgb:220,225,231;--tblr-gray-200-fg:var(--tblr-dark);--tblr-gray-200-darken:#c6cbd0;--tblr-gray-200-lt:#fcfcfd;--tblr-gray-200-lt-rgb:252,252,253;--tblr-gray-300:#b8c4d4;--tblr-gray-300-rgb:184,196,212;--tblr-gray-300-fg:var(--tblr-light);--tblr-gray-300-darken:#a6b0bf;--tblr-gray-300-lt:#f8f9fb;--tblr-gray-300-lt-rgb:248,249,251;--tblr-gray-400:#8a97ab;--tblr-gray-400-rgb:138,151,171;--tblr-gray-400-fg:var(--tblr-light);--tblr-gray-400-darken:#7c889a;--tblr-gray-400-lt:#f3f5f7;--tblr-gray-400-lt-rgb:243,245,247;--tblr-gray-500:#6c7a91;--tblr-gray-500-rgb:108,122,145;--tblr-gray-500-fg:var(--tblr-light);--tblr-gray-500-darken:#616e83;--tblr-gray-500-lt:#f0f2f4;--tblr-gray-500-lt-rgb:240,242,244;--tblr-gray-600:#49566c;--tblr-gray-600-rgb:73,86,108;--tblr-gray-600-fg:var(--tblr-light);--tblr-gray-600-darken:#424d61;--tblr-gray-600-lt:#edeef0;--tblr-gray-600-lt-rgb:237,238,240;--tblr-gray-700:#3a4859;--tblr-gray-700-rgb:58,72,89;--tblr-gray-700-fg:var(--tblr-light);--tblr-gray-700-darken:#344150;--tblr-gray-700-lt:#ebedee;--tblr-gray-700-lt-rgb:235,237,238;--tblr-gray-800:#182433;--tblr-gray-800-rgb:24,36,51;--tblr-gray-800-fg:var(--tblr-light);--tblr-gray-800-darken:#16202e;--tblr-gray-800-lt:#e8e9eb;--tblr-gray-800-lt-rgb:232,233,235;--tblr-gray-900:#040a11;--tblr-gray-900-rgb:4,10,17;--tblr-gray-900-fg:var(--tblr-light);--tblr-gray-900-darken:#04090f;--tblr-gray-900-lt:#e6e7e7;--tblr-gray-900-lt-rgb:230,231,231;--tblr-spacer-0:0;--tblr-spacer-1:0.25rem;--tblr-spacer-2:0.5rem;--tblr-spacer-3:1rem;--tblr-spacer-4:1.5rem;--tblr-spacer-5:2rem;--tblr-spacer-6:3rem;--tblr-spacer-7:5rem;--tblr-spacer-8:8rem;--tblr-spacer:1rem;--tblr-bg-surface:var(--tblr-white);--tblr-bg-surface-secondary:var(--tblr-gray-100);--tblr-bg-surface-tertiary:var(--tblr-gray-50);--tblr-bg-surface-dark:var(--tblr-dark);--tblr-bg-forms:var(--tblr-bg-surface);--tblr-border-color:#dce1e7;--tblr-border-color-translucent:rgba(4,32,69,.1);--tblr-border-dark-color:#8a97ab;--tblr-border-dark-color-translucent:rgba(4,32,69,.27);--tblr-border-active-color:#aab2bf;--tblr-icon-color:var(--tblr-gray-400);--tblr-active-bg:rgba(var(--tblr-primary-rgb),0.04);--tblr-disabled-bg:var(--tblr-bg-surface-secondary);--tblr-disabled-color:var(--tblr-gray-300);--tblr-code-color:var(--tblr-gray-600);--tblr-code-bg:var(--tblr-bg-surface-secondary);--tblr-dark-mode-border-color:#25384f;--tblr-dark-mode-border-color-translucent:rgba(72,110,149,.14);--tblr-dark-mode-border-active-color:#2c415d;--tblr-dark-mode-border-dark-color:#1f2e41;--tblr-page-padding:var(--tblr-spacer-3);--tblr-page-padding-y:var(--tblr-spacer-4);--tblr-font-weight-light:300;--tblr-font-weight-normal:400;--tblr-font-weight-medium:500;--tblr-font-weight-bold:600;--tblr-font-weight-headings:var(--tblr-font-weight-bold);--tblr-font-size-h1:1.5rem;--tblr-font-size-h2:1.25rem;--tblr-font-size-h3:1rem;--tblr-font-size-h4:0.875rem;--tblr-font-size-h5:0.75rem;--tblr-font-size-h6:0.625rem;--tblr-line-height-h1:2rem;--tblr-line-height-h2:1.75rem;--tblr-line-height-h3:1.5rem;--tblr-line-height-h4:1.25rem;--tblr-line-height-h5:1rem;--tblr-line-height-h6:1rem;--tblr-box-shadow:rgba(var(--tblr-body-color-rgb),0.04) 0 2px 4px 0;--tblr-box-shadow-border:inset 0 0 0 1px var(--tblr-border-color-translucent);--tblr-box-shadow-transparent:0 0 0 0 transparent;--tblr-box-shadow-input:0 1px 1px rgba(var(--tblr-body-color-rgb),0.06);--tblr-box-shadow-card:0 0 4px rgba(var(--tblr-body-color-rgb),0.04);--tblr-box-shadow-card-hover:rgba(var(--tblr-body-color-rgb),0.16) 0 2px 16px 0;--tblr-box-shadow-dropdown:0 16px 24px 2px rgba(0,0,0,.07),0 6px 30px 5px rgba(0,0,0,.06),0 8px 10px -5px rgba(0,0,0,.1)}@media(max-width:991.98px){:host,:root,[data-bs-theme=light]{--tblr-page-padding:var(--tblr-spacer-2)}}@keyframes pulse{0%{opacity:1;transform:scale3d(.8,.8,.8)}50%{opacity:1;transform:scaleX(1)}to{opacity:1;transform:scale3d(.8,.8,.8)}}@keyframes tada{0%{transform:scaleX(1)}10%,5%{transform:scale3d(.9,.9,.9) rotate(-5deg)}15%,25%,35%,45%{transform:scale3d(1.1,1.1,1.1) rotate(5deg)}20%,30%,40%{transform:scale3d(1.1,1.1,1.1) rotate(-5deg)}50%{transform:scaleX(1)}}@keyframes rotate-360{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes blink{0%{opacity:0}50%{opacity:1}to{opacity:0}}body{font-feature-settings:"liga" 0;height:100%;letter-spacing:0;min-height:100%;position:relative;text-rendering:optimizeLegibility;touch-action:manipulation;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media print{body{background:transparent}}*{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}::-webkit-scrollbar{height:1rem;transition:background .3s;width:1rem}@media(prefers-reduced-motion:reduce){::-webkit-scrollbar{transition:none}}::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}::-webkit-scrollbar-track{background:transparent}:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}::-webkit-scrollbar-corner{background:transparent}.layout-fluid .container,.layout-fluid [class*=" container-"],.layout-fluid [class^=container-]{max-width:100%}.layout-boxed{--tblr-theme-boxed-border-radius:0;--tblr-theme-boxed-width:1320px}@media(min-width:768px){.layout-boxed{background:#182433 linear-gradient(90deg,hsla(0,0%,100%,.1),transparent) fixed;padding:1rem;--tblr-theme-boxed-border-radius:4px}}.layout-boxed .page{border-radius:var(--tblr-theme-boxed-border-radius);color:var(--tblr-body-color);margin:0 auto;max-width:var(--tblr-theme-boxed-width)}@media(min-width:768px){.layout-boxed .page{background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}}.layout-boxed .page>.navbar:first-child{border-top-left-radius:var(--tblr-theme-boxed-border-radius);border-top-right-radius:var(--tblr-theme-boxed-border-radius)}.navbar{--tblr-navbar-bg:var(--tblr-bg-surface);--tblr-navbar-border-width:var(--tblr-border-width);--tblr-navbar-active-border-color:var(--tblr-primary);--tblr-navbar-active-bg:rgba(0,0,0,.06);--tblr-navbar-color:var(--tblr-body-color);--tblr-navbar-border-color:var(--tblr-border-color);align-items:stretch;background:var(--tblr-navbar-bg);box-shadow:inset 0 calc(var(--tblr-navbar-border-width)*-1) 0 0 var(--tblr-navbar-border-color);color:var(--tblr-navbar-color);min-height:3.5rem}.navbar-collapse .navbar{flex-grow:1}.navbar.collapsing{min-height:0}.navbar .dropdown-menu{position:absolute;z-index:1030}.navbar .navbar-nav{min-height:3rem}.navbar .navbar-nav .nav-link{border-radius:var(--tblr-border-radius);justify-content:center;min-height:2rem;min-width:2rem;position:relative}.navbar .navbar-nav .nav-link .badge{position:absolute;right:.375rem;top:.375rem;transform:translate(50%,-50%)}.navbar-nav{margin:0;padding:0}@media(max-width:575.98px){.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-expand-sm .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-sm .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:576px){.navbar-expand-sm .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-sm .nav-item.active{position:relative}.navbar-expand-sm .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-sm.navbar-vertical{box-shadow:inset calc(var(--tblr-navbar-border-width)*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical.navbar-right{box-shadow:inset calc(var(--tblr-navbar-border-width)*1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-sm.navbar-vertical~.navbar,.navbar-expand-sm.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-sm.navbar-vertical.navbar-right~.navbar,.navbar-expand-sm.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media(max-width:767.98px){.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-expand-md .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-md .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:768px){.navbar-expand-md .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-md .nav-item.active{position:relative}.navbar-expand-md .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-md.navbar-vertical{box-shadow:inset calc(var(--tblr-navbar-border-width)*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical.navbar-right{box-shadow:inset calc(var(--tblr-navbar-border-width)*1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-md.navbar-vertical~.navbar,.navbar-expand-md.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-md.navbar-vertical.navbar-right~.navbar,.navbar-expand-md.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media(max-width:991.98px){.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-expand-lg .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-lg .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:992px){.navbar-expand-lg .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-lg .nav-item.active{position:relative}.navbar-expand-lg .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-lg.navbar-vertical{box-shadow:inset calc(var(--tblr-navbar-border-width)*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical.navbar-right{box-shadow:inset calc(var(--tblr-navbar-border-width)*1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-lg.navbar-vertical~.navbar,.navbar-expand-lg.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-lg.navbar-vertical.navbar-right~.navbar,.navbar-expand-lg.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media(max-width:1199.98px){.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-expand-xl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:1200px){.navbar-expand-xl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xl .nav-item.active{position:relative}.navbar-expand-xl .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-xl.navbar-vertical{box-shadow:inset calc(var(--tblr-navbar-border-width)*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical.navbar-right{box-shadow:inset calc(var(--tblr-navbar-border-width)*1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xl.navbar-vertical~.navbar,.navbar-expand-xl.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-xl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xl.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}@media(max-width:1399.98px){.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-expand-xxl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand-xxl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:1400px){.navbar-expand-xxl .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand-xxl .nav-item.active{position:relative}.navbar-expand-xxl .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand-xxl.navbar-vertical{box-shadow:inset calc(var(--tblr-navbar-border-width)*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical.navbar-right{box-shadow:inset calc(var(--tblr-navbar-border-width)*1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand-xxl.navbar-vertical~.navbar,.navbar-expand-xxl.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand-xxl.navbar-vertical.navbar-right~.navbar,.navbar-expand-xxl.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}}.navbar-expand .navbar-collapse{flex-direction:column}.navbar-expand .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-expand .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-expand .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}.navbar-expand .navbar-collapse{flex:1 1 auto;width:auto}.navbar-expand .nav-item.active{position:relative}.navbar-expand .nav-item.active:after{border:0 var(--tblr-border-style) var(--tblr-navbar-active-border-color);border-bottom-width:2px;bottom:-.25rem;content:"";left:0;position:absolute;right:0}.navbar-expand.navbar-vertical{box-shadow:inset calc(var(--tblr-navbar-border-width)*-1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical.navbar-right{box-shadow:inset calc(var(--tblr-navbar-border-width)*1) 0 0 0 var(--tblr-navbar-border-color)}.navbar-expand.navbar-vertical~.navbar,.navbar-expand.navbar-vertical~.page-wrapper{margin-left:15rem}.navbar-expand.navbar-vertical.navbar-right~.navbar,.navbar-expand.navbar-vertical.navbar-right~.page-wrapper{margin-left:0;margin-right:15rem}.navbar-brand{align-items:center;display:inline-flex;font-weight:var(--tblr-font-weight-bold);gap:.5rem;line-height:1;margin:0}.navbar-brand-image{height:2rem;width:auto}.navbar-toggler{align-items:center;border:0;display:flex;height:2rem;justify-content:center;position:relative;width:2rem}.navbar-toggler-icon{background:currentColor;border-radius:10px;height:2px;position:relative;transition:top .2s .2s,bottom .2s .2s,transform .2s,opacity 0s .2s;width:1.25em}@media(prefers-reduced-motion:reduce){.navbar-toggler-icon{transition:none}}.navbar-toggler-icon:after,.navbar-toggler-icon:before{background:inherit;border-radius:inherit;content:"";display:block;height:inherit;left:0;position:absolute;transition:inherit;width:inherit}@media(prefers-reduced-motion:reduce){.navbar-toggler-icon:after,.navbar-toggler-icon:before{transition:none}}.navbar-toggler-icon:before{top:-.45em}.navbar-toggler-icon:after{bottom:-.45em}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transform:rotate(45deg);transition:top .3s,bottom .3s,transform .3s .3s,opacity 0s .3s}@media(prefers-reduced-motion:reduce){.navbar-toggler[aria-expanded=true] .navbar-toggler-icon{transition:none}}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:before{top:0;transform:rotate(-90deg)}.navbar-toggler[aria-expanded=true] .navbar-toggler-icon:after{bottom:0;opacity:0}.navbar-transparent{--tblr-navbar-border-color:transparent!important;background:transparent!important}.navbar-nav{align-items:stretch}.navbar-nav .nav-item{display:flex;flex-direction:column;justify-content:center}.navbar-side{align-items:center;display:flex;flex-direction:row;justify-content:space-around;margin:0}@media(min-width:576px){.navbar-vertical.navbar-expand-sm{align-items:flex-start;bottom:0;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media(min-width:576px)and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-sm{transition:none}}@media(min-width:576px){.navbar-vertical.navbar-expand-sm.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-sm .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-sm .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-sm .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-sm .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-sm>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-sm~.page{padding-left:15rem}.navbar-vertical.navbar-expand-sm~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-sm.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-sm .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-sm .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-sm .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-sm .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:768px){.navbar-vertical.navbar-expand-md{align-items:flex-start;bottom:0;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media(min-width:768px)and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-md{transition:none}}@media(min-width:768px){.navbar-vertical.navbar-expand-md.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-md .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-md .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-md .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-md .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-md>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-md~.page{padding-left:15rem}.navbar-vertical.navbar-expand-md~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-md.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-md .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-md .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-md .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-md .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:992px){.navbar-vertical.navbar-expand-lg{align-items:flex-start;bottom:0;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media(min-width:992px)and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-lg{transition:none}}@media(min-width:992px){.navbar-vertical.navbar-expand-lg.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-lg .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-lg .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-lg .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-lg .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-lg>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-lg~.page{padding-left:15rem}.navbar-vertical.navbar-expand-lg~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-lg.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-lg .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-lg .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-lg .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-lg .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:1200px){.navbar-vertical.navbar-expand-xl{align-items:flex-start;bottom:0;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media(min-width:1200px)and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xl{transition:none}}@media(min-width:1200px){.navbar-vertical.navbar-expand-xl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xl .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-xl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xl .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-xl>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-xl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-xl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}@media(min-width:1400px){.navbar-vertical.navbar-expand-xxl{align-items:flex-start;bottom:0;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;transition:transform .3s;width:15rem;z-index:1030}}@media(min-width:1400px)and (prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand-xxl{transition:none}}@media(min-width:1400px){.navbar-vertical.navbar-expand-xxl.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand-xxl .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand-xxl .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand-xxl .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand-xxl .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand-xxl>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand-xxl~.page{padding-left:15rem}.navbar-vertical.navbar-expand-xxl~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand-xxl.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand-xxl .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand-xxl .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand-xxl .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand-xxl .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}}.navbar-vertical.navbar-expand{align-items:flex-start;bottom:0;left:0;overflow-y:scroll;padding:0;position:fixed;top:0;transition:transform .3s;width:15rem;z-index:1030}@media(prefers-reduced-motion:reduce){.navbar-vertical.navbar-expand{transition:none}}.navbar-vertical.navbar-expand.navbar-right{left:auto;right:0}.navbar-vertical.navbar-expand .navbar-brand{justify-content:center;padding:.75rem 0}.navbar-vertical.navbar-expand .navbar-collapse{align-items:stretch}.navbar-vertical.navbar-expand .navbar-nav{flex-direction:column;flex-grow:1;min-height:auto}.navbar-vertical.navbar-expand .navbar-nav .nav-link{padding-bottom:.5rem;padding-top:.5rem}.navbar-vertical.navbar-expand>[class^=container]{align-items:stretch;flex-direction:column;justify-content:flex-start;min-height:100%;padding:0}.navbar-vertical.navbar-expand~.page{padding-left:15rem}.navbar-vertical.navbar-expand~.page [class^=container]{padding-left:1.5rem;padding-right:1.5rem}.navbar-vertical.navbar-expand.navbar-right~.page{padding-left:0;padding-right:15rem}.navbar-vertical.navbar-expand .navbar-collapse{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse [class^=container]{align-items:stretch;flex-direction:column;padding:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav{margin-left:0;margin-right:0}.navbar-vertical.navbar-expand .navbar-collapse .navbar-nav .nav-link{justify-content:flex-start;padding:.5rem calc(var(--tblr-page-padding)*2/2)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu-columns{flex-direction:column}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu{background:transparent;border:none;box-shadow:none;color:inherit;margin:0;min-width:0;padding:0;position:static}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item{color:inherit;display:flex;min-width:0;padding-left:calc(var(--tblr-page-padding)*2/2 + 1.75rem);width:auto}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.disabled{background-color:transparent;color:var(--tblr-gray-300);pointer-events:none}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item.active,.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-item:active{background:var(--tblr-navbar-active-bg)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 3.25rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-menu .dropdown-menu .dropdown-menu .dropdown-item{padding-left:calc(var(--tblr-page-padding)*2/2 + 4.75rem)}.navbar-vertical.navbar-expand .navbar-collapse .dropdown-toggle:after{margin-left:auto}.navbar-vertical.navbar-expand .navbar-collapse .nav-item.active:after{border-bottom-width:0;border-left-width:3px;bottom:0;right:auto;top:0}.navbar-overlap:after{background:inherit;box-shadow:inherit;content:"";height:9rem;left:0;position:absolute;right:0;top:100%;z-index:-1}.page{display:flex;flex-direction:column;min-height:100%;position:relative}.page-wrapper{display:flex;flex:1;flex-direction:column}@media print{.page-wrapper{margin:0!important}}.page-wrapper-full .page-body:first-child{border-top:0;margin:0}.page-body{display:flex;flex:1;flex-direction:column;margin-bottom:var(--tblr-page-padding-y);margin-top:var(--tblr-page-padding-y)}.page-body-card{background:var(--tblr-bg-surface);border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);flex:1;margin-bottom:0;padding:var(--tblr-page-padding) 0}.page-body~.page-body-card{margin-top:0}.page-cover{background:no-repeat 50%/cover;min-height:9rem}@media(min-width:768px){.page-cover{min-height:12rem}}@media(min-width:992px){.page-cover{min-height:15rem}}.page-cover-overlay{position:relative}.page-cover-overlay:after{background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.6));bottom:0;content:"";left:0;position:absolute;right:0;top:0}.page-header{display:flex;flex-direction:column;flex-wrap:wrap;justify-content:center;min-height:2.25rem}.page-wrapper .page-header{margin:var(--tblr-page-padding-y) 0 0}.page-header-border{background-color:var(--tblr-bg-surface);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin:0!important;padding:var(--tblr-page-padding-y) 0}.page-pretitle{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.page-title{align-items:center;color:inherit;display:flex;font-size:var(--tblr-font-size-h2);font-weight:var(--tblr-font-weight-headings);line-height:var(--tblr-line-height-h2);margin:0}.page-title svg{height:1.5rem;margin-right:.25rem;width:1.5rem}.page-title-lg{font-size:1.5rem;line-height:2rem}.page-subtitle{color:var(--tblr-secondary);margin-top:.25rem}.page-cover{--tblr-page-cover-blur:20px;--tblr-page-cover-padding:1rem;min-height:6rem;overflow:hidden;padding:var(--tblr-page-cover-padding) 0;position:relative}.page-cover-img{background-position:50%;background-size:cover;bottom:calc(var(--tblr-page-cover-blur, 0)*-2);filter:blur(var(--tblr-page-cover-blur));left:calc(var(--tblr-page-cover-blur, 0)*-2);object-fit:cover;pointer-events:none;position:absolute;right:calc(var(--tblr-page-cover-blur, 0)*-2);top:calc(var(--tblr-page-cover-blur, 0)*-2);z-index:-1}.page-tabs{margin-top:.5rem;position:relative}.page-header-tabs .nav-bordered{border:0}.page-header-tabs+.page-body-card{margin-top:0}.footer{background-color:#fff;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:var(--tblr-gray-500);margin-top:auto;padding:2rem 0}.footer-transparent{background-color:transparent;border-top:0}body.theme-dark .hide-theme-dark,body.theme-dark .img-light,body:not(.theme-dark):not([data-bs-theme=dark]) .hide-theme-light,body:not(.theme-dark):not([data-bs-theme=dark]) .img-dark,body[data-bs-theme=dark] .hide-theme-dark,body[data-bs-theme=dark] .img-light{display:none!important}[data-bs-theme=dark],body[data-bs-theme=dark] [data-bs-theme=light]{--tblr-body-color:#dce1e7;--tblr-body-color-rgb:220,225,231;--tblr-muted:#49566c;--tblr-body-bg:#151f2c;--tblr-body-bg-rgb:21,31,44;--tblr-emphasis-color:#fff;--tblr-emphasis-color-rgb:255,255,255;--tblr-bg-forms:#151f2c;--tblr-bg-surface:#182433;--tblr-bg-surface-dark:#151f2c;--tblr-bg-surface-secondary:#1b293a;--tblr-bg-surface-tertiary:#151f2c;--tblr-link-color:#0884f8;--tblr-link-hover-color:#066fd1;--tblr-active-bg:#1b293a;--tblr-disabled-color:var(--tblr-gray-700);--tblr-border-color:var(--tblr-dark-mode-border-color);--tblr-border-color-translucent:var( --tblr-dark-mode-border-color-translucent );--tblr-border-dark-color:var(--tblr-dark-mode-border-dark-color);--tblr-border-active-color:var( --tblr-dark-mode-border-active-color );--tblr-btn-color:#151f2c;--tblr-code-color:var(--tblr-body-color);--tblr-code-bg:#1f2e41;--tblr-primary-lt:#162c43;--tblr-primary-lt-rgb:22,44,67;--tblr-secondary-lt:#202d3c;--tblr-secondary-lt-rgb:32,45,60;--tblr-success-lt:#1a3235;--tblr-success-lt-rgb:26,50,53;--tblr-info-lt:#1c3044;--tblr-info-lt-rgb:28,48,68;--tblr-warning-lt:#2e2b2f;--tblr-warning-lt-rgb:46,43,47;--tblr-danger-lt:#2b2634;--tblr-danger-lt-rgb:43,38,52;--tblr-light-lt:#2e3947;--tblr-light-lt-rgb:46,57,71;--tblr-dark-lt:#182433;--tblr-dark-lt-rgb:24,36,51;--tblr-muted-lt:#202d3c;--tblr-muted-lt-rgb:32,45,60;--tblr-blue-lt:#162c43;--tblr-blue-lt-rgb:22,44,67;--tblr-azure-lt:#1c3044;--tblr-azure-lt-rgb:28,48,68;--tblr-indigo-lt:#1c2a45;--tblr-indigo-lt-rgb:28,42,69;--tblr-purple-lt:#272742;--tblr-purple-lt-rgb:39,39,66;--tblr-pink-lt:#2b2639;--tblr-pink-lt-rgb:43,38,57;--tblr-red-lt:#2b2634;--tblr-red-lt-rgb:43,38,52;--tblr-orange-lt:#2e2b2f;--tblr-orange-lt-rgb:46,43,47;--tblr-yellow-lt:#2e302e;--tblr-yellow-lt-rgb:46,48,46;--tblr-lime-lt:#213330;--tblr-lime-lt-rgb:33,51,48;--tblr-green-lt:#1a3235;--tblr-green-lt-rgb:26,50,53;--tblr-teal-lt:#17313a;--tblr-teal-lt-rgb:23,49,58;--tblr-cyan-lt:#183140;--tblr-cyan-lt-rgb:24,49,64;--tblr-x-lt:#16202e;--tblr-x-lt-rgb:22,32,46;--tblr-facebook-lt:#182c46;--tblr-facebook-lt-rgb:24,44,70;--tblr-twitter-lt:#193146;--tblr-twitter-lt-rgb:25,49,70;--tblr-linkedin-lt:#172b41;--tblr-linkedin-lt-rgb:23,43,65;--tblr-google-lt:#2c2834;--tblr-google-lt-rgb:44,40,52;--tblr-youtube-lt:#2f202e;--tblr-youtube-lt-rgb:47,32,46;--tblr-vimeo-lt:#183345;--tblr-vimeo-lt-rgb:24,51,69;--tblr-dribbble-lt:#2d283c;--tblr-dribbble-lt-rgb:45,40,60;--tblr-github-lt:#182330;--tblr-github-lt-rgb:24,35,48;--tblr-instagram-lt:#2c2737;--tblr-instagram-lt-rgb:44,39,55;--tblr-pinterest-lt:#292131;--tblr-pinterest-lt-rgb:41,33,49;--tblr-vk-lt:#202e3f;--tblr-vk-lt-rgb:32,46,63;--tblr-rss-lt:#2f312e;--tblr-rss-lt-rgb:47,49,46;--tblr-flickr-lt:#162a44;--tblr-flickr-lt-rgb:22,42,68;--tblr-bitbucket-lt:#162942;--tblr-bitbucket-lt-rgb:22,41,66;--tblr-tabler-lt:#162c43;--tblr-tabler-lt-rgb:22,44,67}[data-bs-theme=dark] .navbar-brand-autodark .navbar-brand-image{filter:brightness(0) invert(1)}.accordion{--tblr-accordion-color:var(--tblr-body-color)}.accordion-button:focus:not(:focus-visible){box-shadow:none;outline:none}.accordion-button:after{opacity:.7}.accordion-button:not(.collapsed){border-bottom-color:transparent;box-shadow:none;font-weight:var(--tblr-font-weight-bold)}.accordion-button:not(.collapsed):after{opacity:1}.alert{--tblr-alert-color:var(--tblr-secondary);--tblr-alert-bg:var(--tblr-bg-surface);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-left:.25rem var(--tblr-border-style) var(--tblr-alert-color);box-shadow:0 2px 4px 0 rgba(24,36,51,.04)}.alert>:last-child{margin-bottom:0}.alert-important{background:var(--tblr-alert-color);border-color:transparent;color:#fff}.alert-important .alert-icon,.alert-important .alert-link,.alert-important .alert-link:hover,.alert-important .alert-title{color:inherit}.alert-important .btn-close{filter:var(--tblr-btn-close-white-filter)}.alert-link,.alert-link:hover{color:var(--tblr-alert-color)}.alert-primary{--tblr-alert-color:var(--tblr-primary)}.alert-secondary{--tblr-alert-color:var(--tblr-secondary)}.alert-success{--tblr-alert-color:var(--tblr-success)}.alert-info{--tblr-alert-color:var(--tblr-info)}.alert-warning{--tblr-alert-color:var(--tblr-warning)}.alert-danger{--tblr-alert-color:var(--tblr-danger)}.alert-light{--tblr-alert-color:var(--tblr-light)}.alert-dark{--tblr-alert-color:var(--tblr-dark)}.alert-muted{--tblr-alert-color:var(--tblr-muted)}.alert-blue{--tblr-alert-color:var(--tblr-blue)}.alert-azure{--tblr-alert-color:var(--tblr-azure)}.alert-indigo{--tblr-alert-color:var(--tblr-indigo)}.alert-purple{--tblr-alert-color:var(--tblr-purple)}.alert-pink{--tblr-alert-color:var(--tblr-pink)}.alert-red{--tblr-alert-color:var(--tblr-red)}.alert-orange{--tblr-alert-color:var(--tblr-orange)}.alert-yellow{--tblr-alert-color:var(--tblr-yellow)}.alert-lime{--tblr-alert-color:var(--tblr-lime)}.alert-green{--tblr-alert-color:var(--tblr-green)}.alert-teal{--tblr-alert-color:var(--tblr-teal)}.alert-cyan{--tblr-alert-color:var(--tblr-cyan)}.alert-x{--tblr-alert-color:var(--tblr-x)}.alert-facebook{--tblr-alert-color:var(--tblr-facebook)}.alert-twitter{--tblr-alert-color:var(--tblr-twitter)}.alert-linkedin{--tblr-alert-color:var(--tblr-linkedin)}.alert-google{--tblr-alert-color:var(--tblr-google)}.alert-youtube{--tblr-alert-color:var(--tblr-youtube)}.alert-vimeo{--tblr-alert-color:var(--tblr-vimeo)}.alert-dribbble{--tblr-alert-color:var(--tblr-dribbble)}.alert-github{--tblr-alert-color:var(--tblr-github)}.alert-instagram{--tblr-alert-color:var(--tblr-instagram)}.alert-pinterest{--tblr-alert-color:var(--tblr-pinterest)}.alert-vk{--tblr-alert-color:var(--tblr-vk)}.alert-rss{--tblr-alert-color:var(--tblr-rss)}.alert-flickr{--tblr-alert-color:var(--tblr-flickr)}.alert-bitbucket{--tblr-alert-color:var(--tblr-bitbucket)}.alert-tabler{--tblr-alert-color:var(--tblr-tabler)}.alert-icon{height:1.5rem!important;margin:-.125rem 1rem -.125rem 0;width:1.5rem!important}.alert-icon,.alert-title{color:var(--tblr-alert-color)}.alert-title{font-size:.875rem;font-weight:var(--tblr-font-weight-bold);line-height:1.25rem;margin-bottom:.25rem}.avatar{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-bg:var(--tblr-bg-surface-secondary);--tblr-avatar-box-shadow:var(--tblr-box-shadow-border);--tblr-avatar-font-size:1rem;--tblr-avatar-icon-size:1.5rem;align-items:center;background:var(--tblr-avatar-bg) no-repeat center/cover;border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-avatar-box-shadow);color:var(--tblr-secondary);display:inline-flex;font-size:var(--tblr-avatar-font-size);font-weight:var(--tblr-font-weight-medium);height:var(--tblr-avatar-size);justify-content:center;line-height:1;position:relative;text-align:center;text-transform:uppercase;user-select:none;vertical-align:bottom;width:var(--tblr-avatar-size)}.avatar .icon{height:var(--tblr-avatar-icon-size);width:var(--tblr-avatar-icon-size)}.avatar .badge{border-radius:100rem;bottom:0;box-shadow:0 0 0 calc(var(--tblr-avatar-status-size)/4) var(--tblr-bg-surface);position:absolute;right:0}a.avatar{cursor:pointer}.avatar-rounded{border-radius:100rem}.avatar-xxs{--tblr-avatar-size:1rem;--tblr-avatar-status-size:0.25rem;--tblr-avatar-font-size:0.5rem;--tblr-avatar-icon-size:0.75rem}.avatar-xxs .badge:empty{height:.25rem;width:.25rem}.avatar-xs{--tblr-avatar-size:1.25rem;--tblr-avatar-status-size:0.375rem;--tblr-avatar-font-size:0.625rem;--tblr-avatar-icon-size:1rem}.avatar-xs .badge:empty{height:.375rem;width:.375rem}.avatar-sm{--tblr-avatar-size:2rem;--tblr-avatar-status-size:0.5rem;--tblr-avatar-font-size:0.75rem;--tblr-avatar-icon-size:1.25rem}.avatar-sm .badge:empty{height:.5rem;width:.5rem}.avatar-md{--tblr-avatar-size:2.5rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:0.875rem;--tblr-avatar-icon-size:1.5rem}.avatar-md .badge:empty{height:.75rem;width:.75rem}.avatar-lg{--tblr-avatar-size:3rem;--tblr-avatar-status-size:0.75rem;--tblr-avatar-font-size:1.25rem;--tblr-avatar-icon-size:2rem}.avatar-lg .badge:empty{height:.75rem;width:.75rem}.avatar-xl{--tblr-avatar-size:5rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:2rem;--tblr-avatar-icon-size:3rem}.avatar-xl .badge:empty{height:1rem;width:1rem}.avatar-2xl{--tblr-avatar-size:7rem;--tblr-avatar-status-size:1rem;--tblr-avatar-font-size:3rem;--tblr-avatar-icon-size:5rem}.avatar-2xl .badge:empty{height:1rem;width:1rem}.avatar-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.avatar-list a.avatar:hover{z-index:1}.avatar-list-stacked{display:block;--tblr-list-gap:0}.avatar-list-stacked .avatar{box-shadow:var(--tblr-avatar-box-shadow),0 0 0 2px var(--tblr-card-cap-bg,var(--tblr-card-bg,var(--tblr-bg-surface)));margin-right:calc(var(--tblr-avatar-size)*-.5)!important}.avatar-upload{background:var(--tblr-bg-forms);border:var(--tblr-border-width) dashed var(--tblr-border-color);flex-direction:column;height:4rem;transition:color .3s,background-color .3s;width:4rem}@media(prefers-reduced-motion:reduce){.avatar-upload{transition:none}}.avatar-upload svg{height:1.5rem;width:1.5rem;stroke-width:1}.avatar-upload:hover{border-color:var(--tblr-primary);color:var(--tblr-primary);text-decoration:none}.avatar-upload-text{font-size:.625rem;line-height:1;margin-top:.25rem}.avatar-cover{box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-body-bg));margin-top:calc(var(--tblr-avatar-size)*-.5)}.badge{align-items:center;background:var(--tblr-bg-surface-secondary);border:var(--tblr-border-width) var(--tblr-border-style) transparent;font-weight:var(--tblr-font-weight-bold);justify-content:center;letter-spacing:.04em;min-width:1.35714285em;overflow:hidden;user-select:none;vertical-align:bottom}a.badge{color:var(--tblr-bg-surface)}.badge .avatar{box-sizing:content-box;height:1.25rem;margin:0 .5rem 0 -.5rem;width:1.25rem}.badge .icon{font-size:1rem;height:1em;width:1em;stroke-width:2}.badge-empty,.badge:empty{border-radius:100rem;display:inline-block;height:.5rem;min-height:auto;min-width:0;padding:0;vertical-align:baseline;width:.5rem}.badge-outline{background-color:transparent;border:var(--tblr-border-width) var(--tblr-border-style) currentColor}.badge-pill{border-radius:100rem}.badges-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.badge-notification{position:absolute!important;right:0!important;top:0!important;transform:translate(50%,-50%);z-index:1}.badge-blink{animation:blink 2s infinite}.breadcrumb{--tblr-breadcrumb-item-active-font-weight:var(--tblr-font-weight-bold);--tblr-breadcrumb-item-disabled-color:var(--tblr-disabled-color);--tblr-breadcrumb-link-color:var(--tblr-link-color);background:transparent;margin:0;padding:0}.breadcrumb a{color:var(--tblr-breadcrumb-link-color)}.breadcrumb a:hover{text-decoration:underline}.breadcrumb-muted{--tblr-breadcrumb-link-color:var(--tblr-secondary)}.breadcrumb-item.active{font-weight:var(--tblr-breadcrumb-item-active-font-weight)}.breadcrumb-item.active a{color:inherit;pointer-events:none}.breadcrumb-item.disabled{color:var(--tblr-breadcrumb-item-disabled-color)}.breadcrumb-item.disabled:before{color:inherit}.breadcrumb-item.disabled a{color:inherit;pointer-events:none}.breadcrumb-dots{--tblr-breadcrumb-divider:"·"}.breadcrumb-arrows{--tblr-breadcrumb-divider:"›"}.breadcrumb-bullets{--tblr-breadcrumb-divider:"•"}.btn{--tblr-btn-icon-size:1.25rem;--tblr-btn-bg:var(--tblr-bg-surface);--tblr-btn-color:var(--tblr-body-color);--tblr-btn-border-color:var(--tblr-border-color);--tblr-btn-hover-bg:var(--tblr-btn-bg);--tblr-btn-hover-border-color:var(--tblr-border-active-color);--tblr-btn-box-shadow:var(--tblr-box-shadow-input);--tblr-btn-active-color:var(--tblr-primary);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb),0.04);--tblr-btn-active-border-color:var(--tblr-primary);align-items:center;box-shadow:var(--tblr-btn-box-shadow);display:inline-flex;justify-content:center;white-space:nowrap}.btn .icon{color:inherit;min-width:var(--tblr-btn-icon-size);vertical-align:bottom}.btn .avatar,.btn .icon{height:var(--tblr-btn-icon-size);margin:0 calc(var(--tblr-btn-padding-x)/2) 0 calc(var(--tblr-btn-padding-x)/-4);width:var(--tblr-btn-icon-size)}.btn .icon-right{margin:0 calc(var(--tblr-btn-padding-x)/-4) 0 calc(var(--tblr-btn-padding-x)/2)}.btn .badge{top:auto}.btn-check+.btn:hover{background-color:var(--tblr-btn-hover-bg);border-color:var(--tblr-btn-hover-border-color);color:var(--tblr-btn-hover-color)}.btn-link{background-color:transparent;border-color:transparent;box-shadow:none;color:#077cea}.btn-link .icon{color:inherit}.btn-link:hover{border-color:transparent;color:#0559a7}.btn-primary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-primary-fg);--tblr-btn-bg:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-primary-rgb),.8);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:rgba(var(--tblr-primary-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-primary);--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-border-color:var(--tblr-primary)}.btn-secondary{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-secondary-fg);--tblr-btn-bg:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:rgba(var(--tblr-secondary-rgb),.8);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:rgba(var(--tblr-secondary-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-secondary);--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-border-color:var(--tblr-secondary)}.btn-success{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-success-fg);--tblr-btn-bg:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:rgba(var(--tblr-success-rgb),.8);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:rgba(var(--tblr-success-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-success);--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-border-color:var(--tblr-success)}.btn-info{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-info-fg);--tblr-btn-bg:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:rgba(var(--tblr-info-rgb),.8);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:rgba(var(--tblr-info-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-info);--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-border-color:var(--tblr-info)}.btn-warning{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-warning-fg);--tblr-btn-bg:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:rgba(var(--tblr-warning-rgb),.8);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:rgba(var(--tblr-warning-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-warning);--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-border-color:var(--tblr-warning)}.btn-danger{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-danger-fg);--tblr-btn-bg:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:rgba(var(--tblr-danger-rgb),.8);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:rgba(var(--tblr-danger-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-danger);--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-border-color:var(--tblr-danger)}.btn-light{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-light-fg);--tblr-btn-bg:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:rgba(var(--tblr-light-rgb),.8);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:rgba(var(--tblr-light-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-light);--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-border-color:var(--tblr-light)}.btn-dark{--tblr-btn-border-color:var(--tblr-dark-mode-border-color);--tblr-btn-hover-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-active-border-color:var(--tblr-dark-mode-border-active-color);--tblr-btn-color:var(--tblr-dark-fg);--tblr-btn-bg:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dark-rgb),.8);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:rgba(var(--tblr-dark-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dark);--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-border-color:var(--tblr-dark)}.btn-muted{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-muted-fg);--tblr-btn-bg:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:rgba(var(--tblr-muted-rgb),.8);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:rgba(var(--tblr-muted-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-muted);--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-border-color:var(--tblr-muted)}.btn-blue{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-blue-fg);--tblr-btn-bg:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:rgba(var(--tblr-blue-rgb),.8);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:rgba(var(--tblr-blue-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-blue);--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-border-color:var(--tblr-blue)}.btn-azure{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-azure-fg);--tblr-btn-bg:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:rgba(var(--tblr-azure-rgb),.8);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:rgba(var(--tblr-azure-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-azure);--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-border-color:var(--tblr-azure)}.btn-indigo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-indigo-fg);--tblr-btn-bg:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-indigo-rgb),.8);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:rgba(var(--tblr-indigo-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-indigo);--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-border-color:var(--tblr-indigo)}.btn-purple{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-purple-fg);--tblr-btn-bg:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:rgba(var(--tblr-purple-rgb),.8);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:rgba(var(--tblr-purple-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-purple);--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-border-color:var(--tblr-purple)}.btn-pink{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pink-fg);--tblr-btn-bg:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pink-rgb),.8);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:rgba(var(--tblr-pink-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pink);--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-border-color:var(--tblr-pink)}.btn-red{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-red-fg);--tblr-btn-bg:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:rgba(var(--tblr-red-rgb),.8);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:rgba(var(--tblr-red-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-red);--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-border-color:var(--tblr-red)}.btn-orange{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-orange-fg);--tblr-btn-bg:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:rgba(var(--tblr-orange-rgb),.8);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:rgba(var(--tblr-orange-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-orange);--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-border-color:var(--tblr-orange)}.btn-yellow{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-yellow-fg);--tblr-btn-bg:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:rgba(var(--tblr-yellow-rgb),.8);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:rgba(var(--tblr-yellow-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-yellow);--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-border-color:var(--tblr-yellow)}.btn-lime{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-lime-fg);--tblr-btn-bg:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:rgba(var(--tblr-lime-rgb),.8);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:rgba(var(--tblr-lime-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-lime);--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-border-color:var(--tblr-lime)}.btn-green{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-green-fg);--tblr-btn-bg:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:rgba(var(--tblr-green-rgb),.8);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:rgba(var(--tblr-green-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-green);--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-border-color:var(--tblr-green)}.btn-teal{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-teal-fg);--tblr-btn-bg:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:rgba(var(--tblr-teal-rgb),.8);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:rgba(var(--tblr-teal-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-teal);--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-border-color:var(--tblr-teal)}.btn-cyan{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-cyan-fg);--tblr-btn-bg:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:rgba(var(--tblr-cyan-rgb),.8);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:rgba(var(--tblr-cyan-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-cyan);--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-border-color:var(--tblr-cyan)}.btn-x{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-x-fg);--tblr-btn-bg:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:rgba(var(--tblr-x-rgb),.8);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:rgba(var(--tblr-x-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-x);--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-border-color:var(--tblr-x)}.btn-facebook{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-facebook-fg);--tblr-btn-bg:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:rgba(var(--tblr-facebook-rgb),.8);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:rgba(var(--tblr-facebook-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-facebook);--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-border-color:var(--tblr-facebook)}.btn-twitter{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-twitter-fg);--tblr-btn-bg:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:rgba(var(--tblr-twitter-rgb),.8);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:rgba(var(--tblr-twitter-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-twitter);--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-border-color:var(--tblr-twitter)}.btn-linkedin{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-linkedin-fg);--tblr-btn-bg:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:rgba(var(--tblr-linkedin-rgb),.8);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:rgba(var(--tblr-linkedin-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-linkedin);--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-border-color:var(--tblr-linkedin)}.btn-google{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-google-fg);--tblr-btn-bg:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:rgba(var(--tblr-google-rgb),.8);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:rgba(var(--tblr-google-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-google);--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-border-color:var(--tblr-google)}.btn-youtube{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-youtube-fg);--tblr-btn-bg:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:rgba(var(--tblr-youtube-rgb),.8);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:rgba(var(--tblr-youtube-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-youtube);--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-border-color:var(--tblr-youtube)}.btn-vimeo{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vimeo-fg);--tblr-btn-bg:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vimeo-rgb),.8);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:rgba(var(--tblr-vimeo-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vimeo);--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-border-color:var(--tblr-vimeo)}.btn-dribbble{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-dribbble-fg);--tblr-btn-bg:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:rgba(var(--tblr-dribbble-rgb),.8);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:rgba(var(--tblr-dribbble-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-dribbble);--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-border-color:var(--tblr-dribbble)}.btn-github{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-github-fg);--tblr-btn-bg:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:rgba(var(--tblr-github-rgb),.8);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:rgba(var(--tblr-github-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-github);--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-border-color:var(--tblr-github)}.btn-instagram{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-instagram-fg);--tblr-btn-bg:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:rgba(var(--tblr-instagram-rgb),.8);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:rgba(var(--tblr-instagram-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-instagram);--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-border-color:var(--tblr-instagram)}.btn-pinterest{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-pinterest-fg);--tblr-btn-bg:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:rgba(var(--tblr-pinterest-rgb),.8);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:rgba(var(--tblr-pinterest-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-pinterest);--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-border-color:var(--tblr-pinterest)}.btn-vk{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-vk-fg);--tblr-btn-bg:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:rgba(var(--tblr-vk-rgb),.8);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:rgba(var(--tblr-vk-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-vk);--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-border-color:var(--tblr-vk)}.btn-rss{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-rss-fg);--tblr-btn-bg:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:rgba(var(--tblr-rss-rgb),.8);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:rgba(var(--tblr-rss-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-rss);--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-border-color:var(--tblr-rss)}.btn-flickr{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-flickr-fg);--tblr-btn-bg:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:rgba(var(--tblr-flickr-rgb),.8);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:rgba(var(--tblr-flickr-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-flickr);--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-border-color:var(--tblr-flickr)}.btn-bitbucket{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-bitbucket-fg);--tblr-btn-bg:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:rgba(var(--tblr-bitbucket-rgb),.8);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:rgba(var(--tblr-bitbucket-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-bitbucket);--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-border-color:var(--tblr-bitbucket)}.btn-tabler{--tblr-btn-border-color:transparent;--tblr-btn-hover-border-color:transparent;--tblr-btn-active-border-color:transparent;--tblr-btn-color:var(--tblr-tabler-fg);--tblr-btn-bg:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:rgba(var(--tblr-tabler-rgb),.8);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:rgba(var(--tblr-tabler-rgb),.8);--tblr-btn-disabled-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler-fg);--tblr-btn-box-shadow:var(--tblr-box-shadow-input)}.btn-outline-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:var(--tblr-tabler);--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-border-color:transparent;--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-border-color:var(--tblr-tabler)}.btn-ghost-primary{--tblr-btn-color:var(--tblr-primary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-primary-fg);--tblr-btn-hover-bg:var(--tblr-primary);--tblr-btn-hover-border-color:var(--tblr-primary);--tblr-btn-active-color:var(--tblr-primary-fg);--tblr-btn-active-bg:var(--tblr-primary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-primary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-secondary{--tblr-btn-color:var(--tblr-secondary);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-secondary-fg);--tblr-btn-hover-bg:var(--tblr-secondary);--tblr-btn-hover-border-color:var(--tblr-secondary);--tblr-btn-active-color:var(--tblr-secondary-fg);--tblr-btn-active-bg:var(--tblr-secondary);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-secondary);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-success{--tblr-btn-color:var(--tblr-success);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-success-fg);--tblr-btn-hover-bg:var(--tblr-success);--tblr-btn-hover-border-color:var(--tblr-success);--tblr-btn-active-color:var(--tblr-success-fg);--tblr-btn-active-bg:var(--tblr-success);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-success);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-info{--tblr-btn-color:var(--tblr-info);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-info-fg);--tblr-btn-hover-bg:var(--tblr-info);--tblr-btn-hover-border-color:var(--tblr-info);--tblr-btn-active-color:var(--tblr-info-fg);--tblr-btn-active-bg:var(--tblr-info);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-info);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-warning{--tblr-btn-color:var(--tblr-warning);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-warning-fg);--tblr-btn-hover-bg:var(--tblr-warning);--tblr-btn-hover-border-color:var(--tblr-warning);--tblr-btn-active-color:var(--tblr-warning-fg);--tblr-btn-active-bg:var(--tblr-warning);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-warning);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-danger{--tblr-btn-color:var(--tblr-danger);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-danger-fg);--tblr-btn-hover-bg:var(--tblr-danger);--tblr-btn-hover-border-color:var(--tblr-danger);--tblr-btn-active-color:var(--tblr-danger-fg);--tblr-btn-active-bg:var(--tblr-danger);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-danger);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-light{--tblr-btn-color:var(--tblr-light);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-light-fg);--tblr-btn-hover-bg:var(--tblr-light);--tblr-btn-hover-border-color:var(--tblr-light);--tblr-btn-active-color:var(--tblr-light-fg);--tblr-btn-active-bg:var(--tblr-light);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-light);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-dark{--tblr-btn-color:var(--tblr-dark);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dark-fg);--tblr-btn-hover-bg:var(--tblr-dark);--tblr-btn-hover-border-color:var(--tblr-dark);--tblr-btn-active-color:var(--tblr-dark-fg);--tblr-btn-active-bg:var(--tblr-dark);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-dark);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-muted{--tblr-btn-color:var(--tblr-muted);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-muted-fg);--tblr-btn-hover-bg:var(--tblr-muted);--tblr-btn-hover-border-color:var(--tblr-muted);--tblr-btn-active-color:var(--tblr-muted-fg);--tblr-btn-active-bg:var(--tblr-muted);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-muted);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-blue{--tblr-btn-color:var(--tblr-blue);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-blue-fg);--tblr-btn-hover-bg:var(--tblr-blue);--tblr-btn-hover-border-color:var(--tblr-blue);--tblr-btn-active-color:var(--tblr-blue-fg);--tblr-btn-active-bg:var(--tblr-blue);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-blue);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-azure{--tblr-btn-color:var(--tblr-azure);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-azure-fg);--tblr-btn-hover-bg:var(--tblr-azure);--tblr-btn-hover-border-color:var(--tblr-azure);--tblr-btn-active-color:var(--tblr-azure-fg);--tblr-btn-active-bg:var(--tblr-azure);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-azure);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-indigo{--tblr-btn-color:var(--tblr-indigo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-indigo-fg);--tblr-btn-hover-bg:var(--tblr-indigo);--tblr-btn-hover-border-color:var(--tblr-indigo);--tblr-btn-active-color:var(--tblr-indigo-fg);--tblr-btn-active-bg:var(--tblr-indigo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-indigo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-purple{--tblr-btn-color:var(--tblr-purple);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-purple-fg);--tblr-btn-hover-bg:var(--tblr-purple);--tblr-btn-hover-border-color:var(--tblr-purple);--tblr-btn-active-color:var(--tblr-purple-fg);--tblr-btn-active-bg:var(--tblr-purple);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-purple);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-pink{--tblr-btn-color:var(--tblr-pink);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pink-fg);--tblr-btn-hover-bg:var(--tblr-pink);--tblr-btn-hover-border-color:var(--tblr-pink);--tblr-btn-active-color:var(--tblr-pink-fg);--tblr-btn-active-bg:var(--tblr-pink);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-pink);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-red{--tblr-btn-color:var(--tblr-red);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-red-fg);--tblr-btn-hover-bg:var(--tblr-red);--tblr-btn-hover-border-color:var(--tblr-red);--tblr-btn-active-color:var(--tblr-red-fg);--tblr-btn-active-bg:var(--tblr-red);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-red);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-orange{--tblr-btn-color:var(--tblr-orange);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-orange-fg);--tblr-btn-hover-bg:var(--tblr-orange);--tblr-btn-hover-border-color:var(--tblr-orange);--tblr-btn-active-color:var(--tblr-orange-fg);--tblr-btn-active-bg:var(--tblr-orange);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-orange);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-yellow{--tblr-btn-color:var(--tblr-yellow);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-yellow-fg);--tblr-btn-hover-bg:var(--tblr-yellow);--tblr-btn-hover-border-color:var(--tblr-yellow);--tblr-btn-active-color:var(--tblr-yellow-fg);--tblr-btn-active-bg:var(--tblr-yellow);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-yellow);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-lime{--tblr-btn-color:var(--tblr-lime);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-lime-fg);--tblr-btn-hover-bg:var(--tblr-lime);--tblr-btn-hover-border-color:var(--tblr-lime);--tblr-btn-active-color:var(--tblr-lime-fg);--tblr-btn-active-bg:var(--tblr-lime);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-lime);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-green{--tblr-btn-color:var(--tblr-green);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-green-fg);--tblr-btn-hover-bg:var(--tblr-green);--tblr-btn-hover-border-color:var(--tblr-green);--tblr-btn-active-color:var(--tblr-green-fg);--tblr-btn-active-bg:var(--tblr-green);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-green);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-teal{--tblr-btn-color:var(--tblr-teal);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-teal-fg);--tblr-btn-hover-bg:var(--tblr-teal);--tblr-btn-hover-border-color:var(--tblr-teal);--tblr-btn-active-color:var(--tblr-teal-fg);--tblr-btn-active-bg:var(--tblr-teal);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-teal);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-cyan{--tblr-btn-color:var(--tblr-cyan);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-cyan-fg);--tblr-btn-hover-bg:var(--tblr-cyan);--tblr-btn-hover-border-color:var(--tblr-cyan);--tblr-btn-active-color:var(--tblr-cyan-fg);--tblr-btn-active-bg:var(--tblr-cyan);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-cyan);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-x{--tblr-btn-color:var(--tblr-x);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-x-fg);--tblr-btn-hover-bg:var(--tblr-x);--tblr-btn-hover-border-color:var(--tblr-x);--tblr-btn-active-color:var(--tblr-x-fg);--tblr-btn-active-bg:var(--tblr-x);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-x);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-facebook{--tblr-btn-color:var(--tblr-facebook);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-facebook-fg);--tblr-btn-hover-bg:var(--tblr-facebook);--tblr-btn-hover-border-color:var(--tblr-facebook);--tblr-btn-active-color:var(--tblr-facebook-fg);--tblr-btn-active-bg:var(--tblr-facebook);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-facebook);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-twitter{--tblr-btn-color:var(--tblr-twitter);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-twitter-fg);--tblr-btn-hover-bg:var(--tblr-twitter);--tblr-btn-hover-border-color:var(--tblr-twitter);--tblr-btn-active-color:var(--tblr-twitter-fg);--tblr-btn-active-bg:var(--tblr-twitter);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-twitter);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-linkedin{--tblr-btn-color:var(--tblr-linkedin);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-linkedin-fg);--tblr-btn-hover-bg:var(--tblr-linkedin);--tblr-btn-hover-border-color:var(--tblr-linkedin);--tblr-btn-active-color:var(--tblr-linkedin-fg);--tblr-btn-active-bg:var(--tblr-linkedin);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-linkedin);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-google{--tblr-btn-color:var(--tblr-google);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-google-fg);--tblr-btn-hover-bg:var(--tblr-google);--tblr-btn-hover-border-color:var(--tblr-google);--tblr-btn-active-color:var(--tblr-google-fg);--tblr-btn-active-bg:var(--tblr-google);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-google);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-youtube{--tblr-btn-color:var(--tblr-youtube);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-youtube-fg);--tblr-btn-hover-bg:var(--tblr-youtube);--tblr-btn-hover-border-color:var(--tblr-youtube);--tblr-btn-active-color:var(--tblr-youtube-fg);--tblr-btn-active-bg:var(--tblr-youtube);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-youtube);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-vimeo{--tblr-btn-color:var(--tblr-vimeo);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vimeo-fg);--tblr-btn-hover-bg:var(--tblr-vimeo);--tblr-btn-hover-border-color:var(--tblr-vimeo);--tblr-btn-active-color:var(--tblr-vimeo-fg);--tblr-btn-active-bg:var(--tblr-vimeo);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-vimeo);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-dribbble{--tblr-btn-color:var(--tblr-dribbble);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-dribbble-fg);--tblr-btn-hover-bg:var(--tblr-dribbble);--tblr-btn-hover-border-color:var(--tblr-dribbble);--tblr-btn-active-color:var(--tblr-dribbble-fg);--tblr-btn-active-bg:var(--tblr-dribbble);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-dribbble);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-github{--tblr-btn-color:var(--tblr-github);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-github-fg);--tblr-btn-hover-bg:var(--tblr-github);--tblr-btn-hover-border-color:var(--tblr-github);--tblr-btn-active-color:var(--tblr-github-fg);--tblr-btn-active-bg:var(--tblr-github);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-github);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-instagram{--tblr-btn-color:var(--tblr-instagram);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-instagram-fg);--tblr-btn-hover-bg:var(--tblr-instagram);--tblr-btn-hover-border-color:var(--tblr-instagram);--tblr-btn-active-color:var(--tblr-instagram-fg);--tblr-btn-active-bg:var(--tblr-instagram);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-instagram);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-pinterest{--tblr-btn-color:var(--tblr-pinterest);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-pinterest-fg);--tblr-btn-hover-bg:var(--tblr-pinterest);--tblr-btn-hover-border-color:var(--tblr-pinterest);--tblr-btn-active-color:var(--tblr-pinterest-fg);--tblr-btn-active-bg:var(--tblr-pinterest);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-pinterest);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-vk{--tblr-btn-color:var(--tblr-vk);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-vk-fg);--tblr-btn-hover-bg:var(--tblr-vk);--tblr-btn-hover-border-color:var(--tblr-vk);--tblr-btn-active-color:var(--tblr-vk-fg);--tblr-btn-active-bg:var(--tblr-vk);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-vk);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-rss{--tblr-btn-color:var(--tblr-rss);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-rss-fg);--tblr-btn-hover-bg:var(--tblr-rss);--tblr-btn-hover-border-color:var(--tblr-rss);--tblr-btn-active-color:var(--tblr-rss-fg);--tblr-btn-active-bg:var(--tblr-rss);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-rss);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-flickr{--tblr-btn-color:var(--tblr-flickr);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-flickr-fg);--tblr-btn-hover-bg:var(--tblr-flickr);--tblr-btn-hover-border-color:var(--tblr-flickr);--tblr-btn-active-color:var(--tblr-flickr-fg);--tblr-btn-active-bg:var(--tblr-flickr);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-flickr);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-bitbucket{--tblr-btn-color:var(--tblr-bitbucket);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-bitbucket-fg);--tblr-btn-hover-bg:var(--tblr-bitbucket);--tblr-btn-hover-border-color:var(--tblr-bitbucket);--tblr-btn-active-color:var(--tblr-bitbucket-fg);--tblr-btn-active-bg:var(--tblr-bitbucket);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-bitbucket);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-ghost-tabler{--tblr-btn-color:var(--tblr-tabler);--tblr-btn-bg:transparent;--tblr-btn-border-color:transparent;--tblr-btn-hover-color:var(--tblr-tabler-fg);--tblr-btn-hover-bg:var(--tblr-tabler);--tblr-btn-hover-border-color:var(--tblr-tabler);--tblr-btn-active-color:var(--tblr-tabler-fg);--tblr-btn-active-bg:var(--tblr-tabler);--tblr-btn-active-border-color:transparent;--tblr-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,.125);--tblr-btn-disabled-color:var(--tblr-tabler);--tblr-btn-disabled-bg:transparent;--tblr-btn-disabled-border-color:transparent;--tblr-gradient:none;--tblr-btn-box-shadow:none}.btn-group-sm>.btn,.btn-sm{--tblr-btn-line-height:1.5;--tblr-btn-icon-size:.75rem}.btn-group-lg>.btn,.btn-lg{--tblr-btn-line-height:1.5;--tblr-btn-icon-size:2rem}.btn-pill{border-radius:10rem;padding-left:1.5em;padding-right:1.5em}.btn-pill[class*=btn-icon]{padding:.375rem 15px}.btn-square{border-radius:0}.btn-icon{min-height:calc(var(--tblr-btn-line-height)*var(--tblr-btn-font-size) + var(--tblr-btn-padding-y)*2 + var(--tblr-btn-border-width)*2);min-width:calc(var(--tblr-btn-line-height)*var(--tblr-btn-font-size) + var(--tblr-btn-padding-y)*2 + var(--tblr-btn-border-width)*2);padding-left:0;padding-right:0}.btn-icon .icon{margin:calc(var(--tblr-btn-padding-x)*-1)}.btn-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.btn-floating{border-radius:100rem;bottom:1.5rem;position:fixed;right:1.5rem;z-index:1030}.btn-loading{color:transparent!important;pointer-events:none;position:relative;text-shadow:none!important}.btn-loading>*{opacity:0}.btn-loading:after{animation:spinner-border .75s linear infinite;border-right-color:currentcolor;border:2px var(--tblr-border-style);border-radius:100rem;border-right:2px var(--tblr-border-style) transparent;color:var(--tblr-btn-color);content:"";display:inline-block;height:var(--tblr-btn-icon-size);left:calc(50% - var(--tblr-btn-icon-size)/2);position:absolute;top:calc(50% - var(--tblr-btn-icon-size)/2);vertical-align:text-bottom;width:var(--tblr-btn-icon-size)}.btn-action{align-items:center;background:transparent;border:0;border-radius:var(--tblr-border-radius);color:var(--tblr-secondary);display:inline-flex;height:2rem;justify-content:center;padding:0;width:2rem}.btn-action:after{content:none}.btn-action:focus{box-shadow:none;outline:none}.btn-action.show,.btn-action:hover{background:var(--tblr-active-bg);color:var(--tblr-body-color)}.btn-action.show{color:var(--tblr-primary)}.btn-action .icon{font-size:1.25rem;height:1.25rem;margin:0;width:1.25rem;stroke-width:1}.btn-actions{display:flex}.btn-group,.btn-group-vertical{box-shadow:var(--tblr-box-shadow-input)}.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group>.btn-check:checked+.btn,.btn-group>.btn.active,.btn-group>.btn:active{z-index:5}.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.calendar{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);display:block;font-size:.765625rem}.calendar-nav{align-items:center;display:flex}.calendar-title{flex:1;text-align:center}.calendar-body,.calendar-header{display:flex;flex-wrap:wrap;justify-content:flex-start;padding:.5rem 0}.calendar-header{color:var(--tblr-secondary)}.calendar-date{border:0;flex:0 0 14.2857142857%;max-width:14.2857142857%;padding:.2rem;text-align:center}.calendar-date.next-month,.calendar-date.prev-month{opacity:.25}.calendar-date .date-item{background:0 0;border:var(--tblr-border-width) var(--tblr-border-style) transparent;border-radius:100rem;color:#66758c;cursor:pointer;display:inline-block;height:1.4rem;line-height:1.4rem;outline:0;position:relative;text-align:center;text-decoration:none;transition:background .3s,border .3s,box-shadow .32s,color .3s;vertical-align:middle;white-space:nowrap;width:1.4rem}@media(prefers-reduced-motion:reduce){.calendar-date .date-item{transition:none}}.calendar-date .date-item:hover{background:#fefeff;text-decoration:none}.calendar-date .date-item:hover,.calendar-date .date-today{border-color:var(--tblr-border-color);color:var(--tblr-primary)}.calendar-range{position:relative}.calendar-range:before{background:rgba(var(--tblr-primary-rgb),.1);content:"";height:1.4rem;left:0;position:absolute;right:0;top:50%;transform:translateY(-50%)}.calendar-range.range-end .date-item,.calendar-range.range-start .date-item{background:var(--tblr-primary);border-color:var(--tblr-primary);color:#fff}.calendar-range.range-start:before{left:50%}.calendar-range.range-end:before{right:50%}.carousel-indicators-vertical{flex-direction:column;left:auto;margin:0 1rem 0 0;top:0}.carousel-indicators-vertical [data-bs-target]{border:0;border-left:10px var(--tblr-border-style) transparent;border-right:10px var(--tblr-border-style) transparent;height:30px;margin:3px 0;width:3px}.carousel-indicators-dot [data-bs-target]{border:10px var(--tblr-border-style) transparent;border-radius:100rem;height:.5rem;margin:0;width:.5rem}.carousel-indicators-thumb [data-bs-target]{background:no-repeat 50%/cover;border:0;border-radius:var(--tblr-border-radius);box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0;height:auto;margin:0 3px;opacity:.75;width:2rem}@media(min-width:992px){.carousel-indicators-thumb [data-bs-target]{width:4rem}}.carousel-indicators-thumb [data-bs-target]:before{content:"";display:block;padding-top:var(--tblr-aspect-ratio,100%)}.carousel-indicators-thumb.carousel-indicators-vertical [data-bs-target]{margin:3px 0}.carousel-caption-background{background:red;background:linear-gradient(0deg,rgba(24,36,51,.9),rgba(24,36,51,0));bottom:0;height:90%;left:0;position:absolute;right:0}.card{transition:transform .3s ease-out,opacity .3s ease-out,box-shadow .3s ease-out}@media(prefers-reduced-motion:reduce){.card{transition:none}}@media print{.card{border:none;box-shadow:none}}a.card{color:inherit}a.card:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.16) 0 2px 16px 0;text-decoration:none}.card .card{box-shadow:none}.card-borderless,.card-borderless .card-footer,.card-borderless .card-header{border-color:transparent}.card-stamp{--tblr-stamp-size:7rem;border-top-right-radius:4px;height:calc(var(--tblr-stamp-size)*1);max-height:100%;opacity:.2;overflow:hidden;pointer-events:none;position:absolute;right:0;top:0;width:calc(var(--tblr-stamp-size)*1)}.card-stamp-lg{--tblr-stamp-size:13rem}.card-stamp-icon{align-items:center;background:var(--tblr-secondary);border-radius:100rem;color:var(--tblr-card-bg,var(--tblr-bg-surface));display:flex;font-size:calc(var(--tblr-stamp-size)*.75);height:calc(var(--tblr-stamp-size)*1);justify-content:center;position:relative;right:calc(var(--tblr-stamp-size)*-.25);top:calc(var(--tblr-stamp-size)*-.25);transform:rotate(10deg);width:calc(var(--tblr-stamp-size)*1)}.card-stamp-icon .icon{stroke-width:2;height:calc(var(--tblr-stamp-size)*.75);width:calc(var(--tblr-stamp-size)*.75)}.card-img,.card-img-start{border-bottom-left-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));border-top-left-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width))}.card-img,.card-img-end{border-bottom-right-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width));border-top-right-radius:calc(var(--tblr-border-radius) - var(--tblr-border-width))}.card-img-overlay{display:flex;flex-direction:column;justify-content:flex-end}.card-img-overlay-dark{background-image:linear-gradient(180deg,transparent,rgba(0,0,0,.6))}.card-inactive{box-shadow:none;pointer-events:none}.card-inactive .card-body{opacity:.64}.card-active{--tblr-card-border-color:var(--tblr-primary);--tblr-card-bg:var(--tblr-active-bg)}.card-btn{align-items:center;border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:inherit;display:flex;flex:1;font-weight:var(--tblr-font-weight-medium);justify-content:center;padding:1rem 1.25rem;text-align:center;transition:background .3s}@media(prefers-reduced-motion:reduce){.card-btn{transition:none}}.card-btn:hover{background:rgba(var(--tblr-primary-rgb),.04);text-decoration:none}.card-btn+.card-btn{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-stacked{--tblr-card-stacked-offset:.25rem;position:relative}.card-stacked:after{background:var(--tblr-card-bg,var(--tblr-bg-surface));border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-card-border-color);border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;content:"";height:var(--tblr-card-stacked-offset);left:var(--tblr-card-stacked-offset);position:absolute;right:var(--tblr-card-stacked-offset);top:calc(var(--tblr-card-stacked-offset)*-1)}.card-cover{background:#666 no-repeat 50%/cover;padding:1rem 1.25rem;position:relative}.card-cover:before{background:rgba(24,36,51,.48);bottom:0;content:"";left:0;position:absolute;right:0;top:0}.card-cover:first-child,.card-cover:first-child:before{border-radius:4px 4px 0 0}.card-cover-blurred:before{backdrop-filter:blur(2px)}.card-actions{margin:-.5rem -.5rem -.5rem auto;padding-left:.5rem}.card-actions a{text-decoration:none}.card-header{align-items:center;background:transparent;color:inherit;display:flex}.card-header:first-child{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0}.card-header-light{border-bottom-color:transparent}.card-header-light,.card-header-tabs{background:var(--tblr-bg-surface-tertiary)}.card-header-tabs{flex:1;margin:calc(var(--tblr-card-cap-padding-y)*-1) calc(var(--tblr-card-cap-padding-x)*-1) calc(var(--tblr-card-cap-padding-y)*-1);padding:calc(var(--tblr-card-cap-padding-y)*.5) calc(var(--tblr-card-cap-padding-x)*.5) 0}.card-header-pills{flex:1;margin-bottom:-.5rem;margin-top:-.5rem}.card-rotate-left{transform:rotate(-1.5deg)}.card-rotate-right{transform:rotate(1.5deg)}.card-link{color:inherit}.card-link:hover{box-shadow:0 1px 6px 0 rgba(0,0,0,.08);color:inherit;text-decoration:none}.card-link-rotate:hover{opacity:1;transform:rotate(1.5deg)}.card-link-pop:hover{opacity:1;transform:translateY(-2px)}.card-footer{margin-top:auto}.card-footer:last-child{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius)}.card-footer-transparent{background:transparent;border-color:transparent;padding-top:0}.card-footer-borderless{border-top:none}.card-progress{height:.25rem}.card-progress:last-child{border-radius:0 0 2px 2px}.card-progress:first-child{border-radius:2px 2px 0 0}.card-meta{color:var(--tblr-secondary)}.card-title{display:block;font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem;margin:0 0 1rem}.card-title,a.card-title:hover{color:inherit}.card-header .card-title{margin:0}.card-subtitle{color:var(--tblr-secondary);font-weight:400;margin-bottom:1.25rem}.card-header .card-subtitle{margin:0}.card-title .card-subtitle{font-size:.875rem;margin:0 0 0 .25rem}.card-body{position:relative}.card-body>:last-child{margin-bottom:0}.card-sm>.card-body{padding:1rem}@media(min-width:768px){.card-md>.card-body{padding:2.5rem}.card-lg>.card-body{padding:2rem}}@media(min-width:992px){.card-lg>.card-body{padding:4rem}}@media print{.card-body{padding:0}}.card-body+.card-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-body-scrollable{overflow:auto}.card-options{display:flex;margin-left:auto;right:.75rem;top:1.5rem}.card-options-link{color:var(--tblr-secondary);display:inline-block;margin-left:.25rem;min-width:1rem}.card-status-top{border-radius:var(--tblr-card-border-radius) var(--tblr-card-border-radius) 0 0;height:2px;left:0;position:absolute;right:0;top:0}.card-status-start{border-radius:var(--tblr-card-border-radius) 0 0 var(--tblr-card-border-radius);bottom:0;height:100%;position:absolute;right:auto;width:2px}.card-status-bottom{border-radius:0 0 var(--tblr-card-border-radius) var(--tblr-card-border-radius);bottom:0;height:2px;position:absolute;top:auto;width:100%}.card-table{margin-bottom:0!important}.card-table tr td:first-child,.card-table tr th:first-child{border-left:0;padding-left:1.25rem}.card-table tr td:last-child,.card-table tr th:last-child{border-right:0;padding-right:1.25rem}.card-table tbody tr:first-child,.card-table tbody tr:first-child td,.card-table tbody tr:first-child th,.card-table tfoot tr:first-child,.card-table tfoot tr:first-child td,.card-table tfoot tr:first-child th,.card-table thead tr:first-child,.card-table thead tr:first-child td,.card-table thead tr:first-child th{border-top:0}.card-body+.card-table{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-table-border-color)}.card-code{padding:0}.card-code .highlight{border:0;margin:0}.card-code pre{border:0!important;margin:0!important}.card-chart{height:3.5rem;position:relative;z-index:1}.card-avatar{box-shadow:0 0 0 .25rem var(--tblr-card-bg,var(--tblr-bg-surface));margin-left:auto;margin-right:auto;margin-top:calc(var(--tblr-avatar-size)*-1*.5)}.card-body+.card-list-group{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.card-list-group .list-group-item{border-left:0;border-radius:0;border-right:0;padding-left:1.25rem;padding-right:1.25rem}.card-list-group .list-group-item:last-child{border-bottom:0}.card-list-group .list-group-item:first-child{border-top:0}.card-tabs .nav-tabs{border-bottom:0;position:relative;z-index:1000}.card-tabs .nav-tabs .nav-link{background:var(--tblr-bg-surface-tertiary);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.card-tabs .nav-tabs .nav-link.active,.card-tabs .nav-tabs .nav-link:active,.card-tabs .nav-tabs .nav-link:hover{border-color:var(--tblr-border-color-translucent);color:var(--tblr-body-color)}.card-tabs .nav-tabs .nav-link.active{background:var(--tblr-card-bg,var(--tblr-bg-surface));border-bottom-color:transparent;color:inherit}.card-tabs .nav-tabs .nav-item:not(:first-child) .nav-link{border-top-left-radius:0}.card-tabs .nav-tabs .nav-item:not(:last-child) .nav-link{border-top-right-radius:0}.card-tabs .nav-tabs .nav-item+.nav-item{margin-left:calc(var(--tblr-border-width)*-1)}.card-tabs .nav-tabs-bottom,.card-tabs .nav-tabs-bottom .nav-link{margin-bottom:0}.card-tabs .nav-tabs-bottom .nav-link.active{border-top-color:transparent}.card-tabs .nav-tabs-bottom .nav-item{margin-bottom:0;margin-top:calc(var(--tblr-border-width)*-1)}.card-tabs .nav-tabs-bottom .nav-item .nav-link{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:0 0 var(--tblr-border-radius) var(--tblr-border-radius)}.card-tabs .nav-tabs-bottom .nav-item:not(:first-child) .nav-link{border-bottom-left-radius:0}.card-tabs .nav-tabs-bottom .nav-item:not(:last-child) .nav-link{border-bottom-right-radius:0}.card-tabs .card{border-bottom-left-radius:0}.card-tabs .nav-tabs+.tab-content .card{border-bottom-left-radius:var(--tblr-card-border-radius);border-top-left-radius:0}.card-note{--tblr-card-bg:#fff7dd;--tblr-card-border-color:#fff1c9}.btn-close{cursor:pointer}.btn-close:focus{outline:none}.dropdown-menu{user-select:none}.dropdown-menu.card{display:none;min-width:25rem;padding:0}.dropdown-menu.card.show{display:flex}.dropdown-item{align-items:center;display:flex;line-height:1.4285714286;margin:0;min-width:11rem}.dropdown-item-icon{color:var(--tblr-secondary);height:1.25rem!important;margin-right:.5rem;opacity:.7;text-align:center;width:1.25rem!important}.dropdown-item-indicator{align-items:center;display:inline-flex;height:1.25rem;line-height:1;margin-left:-.25rem;margin-right:.5rem;vertical-align:bottom}.dropdown-header{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;padding-bottom:.25rem;pointer-events:none;text-transform:uppercase}.dropdown-menu-scrollable{height:auto;max-height:13rem;overflow-x:hidden}.dropdown-menu-column{min-width:11rem}.dropdown-menu-column .dropdown-item{min-width:0}.dropdown-menu-columns{display:flex;flex:0 .25rem}.dropdown-menu-arrow:before{background:inherit;border:1px solid;border-color:inherit;content:"";display:block;height:14px;left:.75rem;position:absolute;top:-.25rem;transform:rotate(45deg);transform-origin:center;width:14px;z-index:-1;clip:rect(0,9px,9px,0)}.dropdown-menu-arrow.dropdown-menu-end:before{left:auto;right:.75rem}.dropend>.dropdown-menu{margin-left:-.25rem;margin-top:calc(-.25rem - 1px)}.dropend .dropdown-toggle:after{margin-left:auto}.dropdown-menu-card{padding:0}.dropdown-menu-card>.card{border:0;box-shadow:none;margin:0}.datagrid{--tblr-datagrid-padding:1.5rem;--tblr-datagrid-item-width:15rem;display:grid;grid-gap:var(--tblr-datagrid-padding);grid-template-columns:repeat(auto-fit,minmax(var(--tblr-datagrid-item-width),1fr))}.datagrid-title{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;margin-bottom:.25rem;text-transform:uppercase}.empty{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;padding:1rem;text-align:center}@media(min-width:768px){.empty{padding:3rem}}.empty-icon{color:var(--tblr-secondary);height:3rem;line-height:1;margin:0 0 1rem;width:3rem}.empty-icon svg{height:100%;width:100%}.empty-img{line-height:1;margin:0 0 2rem}.empty-header{color:var(--tblr-secondary);font-size:4rem;font-weight:var(--tblr-font-weight-light);line-height:1;margin:0 0 1rem}.empty-title{font-size:1.25rem;font-weight:var(--tblr-font-weight-bold);line-height:1.75rem}.empty-subtitle,.empty-title{margin:0 0 .5rem}.empty-action{margin-top:1.5rem}.empty-bordered{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius)}.row>*{min-width:0}.col-separator{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.container-slim{max-width:16rem}.container-slim,.container-tight{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.container-tight{max-width:30rem}.container-narrow{--tblr-gutter-x:calc(var(--tblr-page-padding)*2);--tblr-gutter-y:0;margin-left:auto;margin-right:auto;max-width:45rem;padding-left:calc(var(--tblr-gutter-x)*.5);padding-right:calc(var(--tblr-gutter-x)*.5);width:100%}.row-0{margin-left:0;margin-right:0}.row-0>.col,.row-0>[class*=col-]{padding-left:0;padding-right:0}.row-0 .card{margin-bottom:0}.row-sm{margin-left:-.375rem;margin-right:-.375rem}.row-sm>.col,.row-sm>[class*=col-]{padding-left:.375rem;padding-right:.375rem}.row-sm .card{margin-bottom:.75rem}.row-md{margin-left:-1.5rem;margin-right:-1.5rem}.row-md>.col,.row-md>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.row-md .card{margin-bottom:3rem}.row-lg{margin-left:-3rem;margin-right:-3rem}.row-lg>.col,.row-lg>[class*=col-]{padding-left:3rem;padding-right:3rem}.row-lg .card{margin-bottom:6rem}.row-deck>.col,.row-deck>[class*=col-]{align-items:stretch;display:flex}.row-deck>.col .card,.row-deck>[class*=col-] .card{flex:1 1 auto}.row-cards{--tblr-gutter-x:var(--tblr-page-padding);--tblr-gutter-y:var(--tblr-page-padding);min-width:0}.row-cards .row-cards{flex:1}.space-y{flex-direction:column}.space-x,.space-y{display:flex;gap:1rem}.space-y-0{flex-direction:column}.space-x-0,.space-y-0{display:flex;gap:0}.space-y-1{flex-direction:column}.space-x-1,.space-y-1{display:flex;gap:.25rem}.space-y-2{flex-direction:column}.space-x-2,.space-y-2{display:flex;gap:.5rem}.space-y-3{flex-direction:column}.space-x-3,.space-y-3{display:flex;gap:1rem}.space-y-4{flex-direction:column}.space-x-4,.space-y-4{display:flex;gap:1.5rem}.space-y-5{flex-direction:column}.space-x-5,.space-y-5{display:flex;gap:2rem}.space-y-6{flex-direction:column}.space-x-6,.space-y-6{display:flex;gap:3rem}.space-y-7{flex-direction:column}.space-x-7,.space-y-7{display:flex;gap:5rem}.space-y-8{flex-direction:column}.space-x-8,.space-y-8{display:flex;gap:8rem}.divide-y>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y>:not(template):not(:first-child){padding-top:1rem!important}.divide-y>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x>:not(template):not(:first-child){padding-left:1rem!important}.divide-x>:not(template):not(:last-child){padding-right:1rem!important}.divide-y-0>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-0>:not(template):not(:first-child){padding-top:0!important}.divide-y-0>:not(template):not(:last-child){padding-bottom:0!important}.divide-x-0>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-0>:not(template):not(:first-child){padding-left:0!important}.divide-x-0>:not(template):not(:last-child){padding-right:0!important}.divide-y-1>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-1>:not(template):not(:first-child){padding-top:.25rem!important}.divide-y-1>:not(template):not(:last-child){padding-bottom:.25rem!important}.divide-x-1>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-1>:not(template):not(:first-child){padding-left:.25rem!important}.divide-x-1>:not(template):not(:last-child){padding-right:.25rem!important}.divide-y-2>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-2>:not(template):not(:first-child){padding-top:.5rem!important}.divide-y-2>:not(template):not(:last-child){padding-bottom:.5rem!important}.divide-x-2>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-2>:not(template):not(:first-child){padding-left:.5rem!important}.divide-x-2>:not(template):not(:last-child){padding-right:.5rem!important}.divide-y-3>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-3>:not(template):not(:first-child){padding-top:1rem!important}.divide-y-3>:not(template):not(:last-child){padding-bottom:1rem!important}.divide-x-3>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-3>:not(template):not(:first-child){padding-left:1rem!important}.divide-x-3>:not(template):not(:last-child){padding-right:1rem!important}.divide-y-4>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-4>:not(template):not(:first-child){padding-top:1.5rem!important}.divide-y-4>:not(template):not(:last-child){padding-bottom:1.5rem!important}.divide-x-4>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-4>:not(template):not(:first-child){padding-left:1.5rem!important}.divide-x-4>:not(template):not(:last-child){padding-right:1.5rem!important}.divide-y-5>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-5>:not(template):not(:first-child){padding-top:2rem!important}.divide-y-5>:not(template):not(:last-child){padding-bottom:2rem!important}.divide-x-5>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-5>:not(template):not(:first-child){padding-left:2rem!important}.divide-x-5>:not(template):not(:last-child){padding-right:2rem!important}.divide-y-6>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-6>:not(template):not(:first-child){padding-top:3rem!important}.divide-y-6>:not(template):not(:last-child){padding-bottom:3rem!important}.divide-x-6>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-6>:not(template):not(:first-child){padding-left:3rem!important}.divide-x-6>:not(template):not(:last-child){padding-right:3rem!important}.divide-y-7>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-7>:not(template):not(:first-child){padding-top:5rem!important}.divide-y-7>:not(template):not(:last-child){padding-bottom:5rem!important}.divide-x-7>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-7>:not(template):not(:first-child){padding-left:5rem!important}.divide-x-7>:not(template):not(:last-child){padding-right:5rem!important}.divide-y-8>:not(template)~:not(template){border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-y-8>:not(template):not(:first-child){padding-top:8rem!important}.divide-y-8>:not(template):not(:last-child){padding-bottom:8rem!important}.divide-x-8>:not(template)~:not(template){border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)!important}.divide-x-8>:not(template):not(:first-child){padding-left:8rem!important}.divide-x-8>:not(template):not(:last-child){padding-right:8rem!important}.divide-y-fill{display:flex;flex-direction:column;height:100%}.divide-y-fill>:not(template){display:flex;flex:1;flex-direction:column;justify-content:center}.icon{--tblr-icon-size:1.25rem;font-size:var(--tblr-icon-size);height:var(--tblr-icon-size);vertical-align:bottom;width:var(--tblr-icon-size);stroke-width:1.5}.icon:hover{text-decoration:none}.icon-inline{--tblr-icon-size:1rem;vertical-align:-.2rem}.icon-filled{fill:currentColor}.icon-sm{--tblr-icon-size:1rem;stroke-width:1}.icon-md{--tblr-icon-size:2.5rem;stroke-width:1}.icon-lg{--tblr-icon-size:3.5rem;stroke-width:1}.icon-pulse{animation:pulse 2s ease infinite;animation-fill-mode:both}.icon-pulse,.icon-tada{transition:all .15s ease 0s}.icon-tada{animation:tada 3s ease infinite;animation-fill-mode:both}.icon-rotate{animation:rotate-360 3s linear infinite;animation-fill-mode:both;transition:all .15s ease 0s}.img-responsive{--tblr-img-responsive-ratio:75%;background:no-repeat 50%/cover;padding-top:var(--tblr-img-responsive-ratio)}.img-responsive-grid{padding-top:calc(var(--tblr-img-responsive-ratio) - var(--tblr-gutter-y)/2)}.img-responsive-1x1{--tblr-img-responsive-ratio:100%}.img-responsive-2x1{--tblr-img-responsive-ratio:50%}.img-responsive-1x2{--tblr-img-responsive-ratio:200%}.img-responsive-3x1{--tblr-img-responsive-ratio:33.3333333333%}.img-responsive-1x3{--tblr-img-responsive-ratio:300%}.img-responsive-4x3{--tblr-img-responsive-ratio:75%}.img-responsive-3x4{--tblr-img-responsive-ratio:133.3333333333%}.img-responsive-16x9{--tblr-img-responsive-ratio:56.25%}.img-responsive-9x16{--tblr-img-responsive-ratio:177.7777777778%}.img-responsive-21x9{--tblr-img-responsive-ratio:42.8571428571%}.img-responsive-9x21{--tblr-img-responsive-ratio:233.3333333333%}textarea[cols]{height:auto}.col-form-label,.form-label{display:block;font-weight:var(--tblr-font-weight-medium)}.col-form-label.required:after,.form-label.required:after{color:#d63939;content:"*";margin-left:.25rem}.form-label-description{color:var(--tblr-gray-500);float:right;font-weight:var(--tblr-font-weight-normal)}.form-hint{color:var(--tblr-gray-500);display:block}.form-hint:last-child{margin-bottom:0}.form-hint+.form-control{margin-top:.25rem}.form-label+.form-hint{margin-top:-.25rem}.form-control+.form-hint,.form-select+.form-hint,.input-group+.form-hint{color:var(--tblr-gray-500);margin-top:.5rem}.form-select:-moz-focusring{color:var(--tblr-body-color)}.form-control:-webkit-autofill{box-shadow:0 0 0 1000px var(--tblr-body-bg) inset;color:var(--tblr-body-color);-webkit-text-fill-color:var(--tblr-body-color)}.form-control.disabled,.form-control:disabled{color:var(--tblr-gray-500);user-select:none}.form-control[size]{width:auto}.form-control-light{background-color:var(--tblr-gray-100);border-color:transparent}.form-control-dark{background-color:rgba(0,0,0,.1);border-color:transparent;color:#fff}.form-control-dark:focus{background-color:rgba(0,0,0,.1);border-color:hsla(0,0%,100%,.24);box-shadow:none}.form-control-dark::placeholder{color:hsla(0,0%,100%,.6)}.form-control-rounded{border-radius:10rem}.form-control-flush{background:none!important;border-color:transparent!important;box-shadow:none!important;line-height:inherit;padding:0;resize:none}.form-footer{margin-top:2rem}.form-fieldset{background:var(--tblr-body-bg);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);margin-bottom:1rem;padding:1rem}.form-help{align-items:center;background:var(--tblr-gray-100);border-radius:100rem;color:var(--tblr-gray-500);cursor:pointer;display:inline-flex;font-size:.75rem;font-weight:var(--tblr-font-weight-bold);height:1.125rem;justify-content:center;text-align:center;text-decoration:none;transition:background-color .3s,color .3s;user-select:none;width:1.125rem}@media(prefers-reduced-motion:reduce){.form-help{transition:none}}.form-help:hover,.form-help[aria-describedby]{background:var(--tblr-primary);color:#fff}.input-group{border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input)}.input-group .btn,.input-group .form-control{box-shadow:none}.input-group-link{font-size:.75rem}.input-group-flat:focus-within{border-radius:var(--tblr-border-radius);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.input-group-flat:focus-within .form-control,.input-group-flat:focus-within .input-group-text{border-color:#83b7e8!important}.input-group-flat .form-control:focus{border-color:var(--tblr-border-color);box-shadow:none}.input-group-flat .form-control:not(:last-child){border-right:0}.input-group-flat .form-control:not(:first-child){border-left:0}.input-group-flat .input-group-text{background:var(--tblr-bg-forms);transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.input-group-flat .input-group-text{transition:none}}.input-group-flat .input-group-text:first-child{padding-right:0}.input-group-flat .input-group-text:last-child{padding-left:0}.form-file-button{border-left:0;margin-left:0}.input-icon{position:relative}.input-icon .form-control:not(:last-child),.input-icon .form-select:not(:last-child){padding-right:2.5rem}.input-icon .form-control:not(:first-child),.input-icon .form-select:not(:last-child){padding-left:2.5rem}.input-icon-addon{align-items:center;bottom:0;color:var(--tblr-icon-color);display:flex;font-size:1.2em;justify-content:center;left:0;min-width:2.5rem;pointer-events:none;position:absolute;top:0}.input-icon-addon:last-child{left:auto;right:0}.form-colorinput{cursor:pointer;display:inline-block;line-height:1;margin:0;position:relative}.form-colorinput-input{opacity:0;position:absolute;z-index:-1}.form-colorinput-color{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);border-radius:3px;box-shadow:0 1px 2px 0 rgba(0,0,0,.05);color:#fff;display:block;height:1.5rem;width:1.5rem}.form-colorinput-color:before{background:no-repeat 50%/1.25rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E");content:"";height:100%;left:0;opacity:0;position:absolute;top:0;transition:opacity .3s;width:100%}@media(prefers-reduced-motion:reduce){.form-colorinput-color:before{transition:none}}.form-colorinput-input:checked~.form-colorinput-color:before{opacity:1}.form-colorinput-input:focus~.form-colorinput-color{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-colorinput-light .form-colorinput-color:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23182433' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-imagecheck{cursor:pointer;margin:0;position:relative}.form-imagecheck-input{opacity:0;position:absolute;z-index:-1}.form-imagecheck-figure{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px;display:block;margin:0;position:relative;user-select:none}.form-imagecheck-input:focus~.form-imagecheck-figure{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25)}.form-imagecheck-input:checked~.form-imagecheck-figure{border-color:var(--tblr-primary)}.form-imagecheck-figure:before{background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);color:#fff;content:"";display:block;height:1.25rem;left:.25rem;pointer-events:none;position:absolute;top:.25rem;transition:opacity .3s;user-select:none;width:1.25rem;z-index:1}@media(prefers-reduced-motion:reduce){.form-imagecheck-figure:before{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure:before{background-color:var(--tblr-primary);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E");background-position:50%;background-repeat:repeat;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-imagecheck-input[type=radio]~.form-imagecheck-figure:before{border-radius:50%}.form-imagecheck-input[type=radio]:checked~.form-imagecheck-figure:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-imagecheck-image{display:block;max-width:100%;opacity:.64;transition:opacity .3s}@media(prefers-reduced-motion:reduce){.form-imagecheck-image{transition:none}}.form-imagecheck-image:first-child{border-top-left-radius:2px;border-top-right-radius:2px}.form-imagecheck-image:last-child{border-bottom-left-radius:2px;border-bottom-right-radius:2px}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-image,.form-imagecheck:hover .form-imagecheck-image{opacity:1}.form-imagecheck-caption{color:var(--tblr-secondary);font-size:.765625rem;padding:.25rem;text-align:center;transition:color .3s}@media(prefers-reduced-motion:reduce){.form-imagecheck-caption{transition:none}}.form-imagecheck-input:checked~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck-input:focus~.form-imagecheck-figure .form-imagecheck-caption,.form-imagecheck:hover .form-imagecheck-caption{color:var(--tblr-body-color)}.form-selectgroup{display:inline-flex;flex-wrap:wrap;margin:0 -.5rem -.5rem 0}.form-selectgroup .form-selectgroup-item{margin:0 .5rem .5rem 0}.form-selectgroup-vertical{flex-direction:column}.form-selectgroup-item{display:block;position:relative}.form-selectgroup-input{left:0;opacity:0;position:absolute;top:0;z-index:-1}.form-selectgroup-label{background:var(--tblr-bg-forms);border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:3px;box-shadow:var(--tblr-box-shadow-input);color:var(--tblr-secondary);cursor:pointer;display:block;font-size:.875rem;line-height:1.4285714286;margin:0;min-width:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2);padding:.5625rem .75rem;position:relative;text-align:center;transition:border-color .3s,background .3s,color .3s;user-select:none}@media(prefers-reduced-motion:reduce){.form-selectgroup-label{transition:none}}.form-selectgroup-label .icon:only-child{margin:0 -.25rem}.form-selectgroup-label:hover{color:var(--tblr-body-color)}.form-selectgroup-check{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:var(--tblr-box-shadow-input);display:inline-block;height:1.25rem;vertical-align:middle;width:1.25rem}.form-selectgroup-input[type=checkbox]+.form-selectgroup-label .form-selectgroup-check{border-radius:var(--tblr-border-radius)}.form-selectgroup-input[type=radio]+.form-selectgroup-label .form-selectgroup-check{border-radius:50%}.form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-check{background-color:var(--tblr-primary);background-position:50%;background-repeat:repeat;background-size:1.25rem;border-color:var(--tblr-border-color-translucent)}.form-selectgroup-input[type=checkbox]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8.5 6.5 11 12 5.5'/%3E%3C/svg%3E")}.form-selectgroup-input[type=radio]:checked+.form-selectgroup-label .form-selectgroup-check{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='3' fill='%23fff'/%3E%3C/svg%3E")}.form-selectgroup-check-floated{position:absolute;right:.5625rem;top:.5625rem}.form-selectgroup-input:checked+.form-selectgroup-label{background:rgba(var(--tblr-primary-rgb),.04);border-color:var(--tblr-primary);color:var(--tblr-primary);z-index:1}.form-selectgroup-input:focus+.form-selectgroup-label{border-color:var(--tblr-primary);box-shadow:0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);color:var(--tblr-primary);z-index:2}.form-selectgroup-boxes .form-selectgroup-label{color:inherit;padding:1.25rem 1rem;text-align:left}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label{color:inherit}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-title{color:var(--tblr-primary)}.form-selectgroup-boxes .form-selectgroup-input:checked+.form-selectgroup-label .form-selectgroup-label-content{opacity:1}.form-selectgroup-pills{align-items:flex-start;flex-wrap:wrap}.form-selectgroup-pills .form-selectgroup-item{flex-grow:0}.form-selectgroup-pills .form-selectgroup-label{border-radius:50px}.form-control-color::-webkit-color-swatch{border:none}[type=search]::-webkit-search-cancel-button{-webkit-appearance:none}.form-control::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-tertiary-bg))}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:var(--tblr-btn-color,var(--tblr-secondary-bg))}.form-check{user-select:none}.form-check .form-check-label-off,.form-check.form-check-highlight .form-check-input:not(:checked)~.form-check-label{color:var(--tblr-secondary)}.form-check .form-check-input:checked~.form-check-label-off,.form-check .form-check-input:not(:checked)~.form-check-label-on{display:none}.form-check-input{background-size:1.25rem;box-shadow:var(--tblr-box-shadow-input);margin-top:0}.form-switch .form-check-input{transition:background-color .3s,background-position .3s}@media(prefers-reduced-motion:reduce){.form-switch .form-check-input{transition:none}}.form-check-label{display:block}.form-check-label.required:after{color:#d63939;content:"*";margin-left:.25rem}.form-check-description{color:var(--tblr-secondary);display:block;font-size:.75rem;margin-top:.25rem}.form-check-single,.form-check-single .form-check-input{margin:0}.form-switch .form-check-input{height:1.25rem;margin-top:0}.form-switch-lg{min-height:1.5rem;padding-left:3.5rem}.form-switch-lg .form-check-input{background-size:1.5rem;height:1.5rem;margin-left:-3.5rem;width:2.75rem}.form-switch-lg .form-check-label{padding-top:.125rem}.form-check-input:checked{border:none}.form-control.is-invalid-lite,.form-control.is-valid-lite,.form-select.is-invalid-lite,.form-select.is-valid-lite{border-color:var(--tblr-border-color)!important}.legend{--tblr-legend-size:0.75em;background:var(--tblr-border-color);border:1px solid var(--tblr-border-color-translucent);border-radius:var(--tblr-border-radius-sm);display:inline-block;height:var(--tblr-legend-size);width:var(--tblr-legend-size)}.list-group{margin-left:0;margin-right:0}.list-group-header{background:var(--tblr-bg-surface-tertiary);border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);color:var(--tblr-gray-500);font-size:.75rem;font-weight:var(--tblr-font-weight-medium);line-height:1;padding:.5rem 1.25rem;text-transform:uppercase}.list-group-flush>.list-group-header:last-child{border-bottom-width:0}.list-group-item{background-color:inherit}.list-group-item.active{border-left-color:#066fd1;border-left-width:2px}.list-group-item.active,.list-group-item.disabled,.list-group-item:active,.list-group-item:disabled,.list-group-item:focus,.list-group-item:hover{background-color:rgba(var(--tblr-secondary-rgb),.08)}.list-group-item.disabled,.list-group-item:disabled{color:#6c7a91}.list-bordered .list-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-top:-1px}.list-bordered .list-item:first-child{border-top:none}.list-group-hoverable .list-group-item-actions{opacity:0;transition:opacity .3s}@media(prefers-reduced-motion:reduce){.list-group-hoverable .list-group-item-actions{transition:none}}.list-group-hoverable .list-group-item-actions.show,.list-group-hoverable .list-group-item:hover .list-group-item-actions{opacity:1}.list-group-transparent{--tblr-list-group-border-radius:0;margin:0 -1.25rem}.list-group-transparent .list-group-item{background:none;border:0}.list-group-transparent .list-group-item .icon{color:var(--tblr-secondary)}.list-group-transparent .list-group-item.active{background:var(--tblr-active-bg);color:inherit;font-weight:var(--tblr-font-weight-bold)}.list-group-transparent .list-group-item.active .icon{color:inherit}.list-separated-item{padding:1rem 0}.list-separated-item:first-child{padding-top:0}.list-separated-item:last-child{padding-bottom:0}.list-separated-item+.list-separated-item{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.list-inline-item:not(:last-child){margin-right:auto;margin-inline-end:.5rem}.list-inline-dots .list-inline-item+.list-inline-item:before{content:" · ";margin-inline-end:.5rem}.loader{color:#066fd1;display:block;height:2.5rem;position:relative;vertical-align:middle;width:2.5rem}.loader:after{animation:rotate-360 .6s linear;animation-iteration-count:infinite;border:1px var(--tblr-border-style);border-color:currentColor transparent transparent currentColor;border-radius:100rem;content:"";height:100%;left:0;position:absolute;top:0;width:100%}.dimmer{position:relative}.dimmer .loader{display:none;left:0;margin:0 auto;position:absolute;right:0;top:50%;transform:translateY(-50%)}.dimmer.active .loader{display:block}.dimmer.active .dimmer-content{opacity:.1;pointer-events:none}@keyframes animated-dots{0%{transform:translateX(-100%)}}.animated-dots{display:inline-block;overflow:hidden;vertical-align:bottom}.animated-dots:after{animation:animated-dots 1.2s steps(4,jump-none) infinite;content:"...";display:inline-block}.modal-content>.btn-close,.modal-header>.btn-close{height:3.5rem;margin:0;padding:0;position:absolute;right:0;top:0;width:3.5rem;z-index:10}.modal-body{scrollbar-color:rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.modal-body::-webkit-scrollbar{height:1rem;transition:background .3s;width:1rem}@media(prefers-reduced-motion:reduce){.modal-body::-webkit-scrollbar{transition:none}}.modal-body::-webkit-scrollbar-thumb{border:5px solid transparent;border-radius:1rem;box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.16)}.modal-body::-webkit-scrollbar-track{background:transparent}.modal-body:hover::-webkit-scrollbar-thumb{box-shadow:inset 0 0 0 1rem rgba(var(--tblr-scrollbar-color,var(--tblr-body-color-rgb)),.32)}.modal-body::-webkit-scrollbar-corner{background:transparent}.modal-body .modal-title{margin-bottom:1rem}.modal-body+.modal-body{border-top:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.modal-status{background:var(--tblr-secondary);border-radius:var(--tblr-border-radius-lg) var(--tblr-border-radius-lg) 0 0;height:2px;left:0;position:absolute;right:0;top:0}.modal-header{align-items:center;background:transparent;min-height:3.5rem;padding:0 3.5rem 0 1.5rem}.modal-title{color:inherit;font-size:1rem;font-weight:var(--tblr-font-weight-bold);line-height:1.4285714286}.modal-footer{padding-bottom:.75rem;padding-top:.75rem}.modal-blur{backdrop-filter:blur(4px)}.modal-full-width{margin:0 .5rem;max-width:none}.nav-vertical,.nav-vertical .nav{flex-direction:column;flex-wrap:nowrap}.nav-vertical .nav{border-left:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);margin-left:1.25rem;padding-left:.5rem}.nav-vertical .nav-item.show .nav-link,.nav-vertical .nav-link.active{font-weight:var(--tblr-font-weight-bold)}.nav-vertical.nav-pills{margin:0 -.75rem}.nav-bordered{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)}.nav-bordered .nav-item+.nav-item{margin-left:1.25rem}.nav-bordered .nav-link{border:0;border-bottom:2px var(--tblr-border-style) transparent;color:var(--tblr-secondary);margin:0 0 -var(--tblr-border-width);padding-left:0;padding-right:0}.nav-bordered .nav-item.show .nav-link,.nav-bordered .nav-link.active{border-color:var(--tblr-primary);color:var(--tblr-primary)}.nav-link{align-items:center;display:flex;transition:color .3s}@media(prefers-reduced-motion:reduce){.nav-link{transition:none}}.nav-link-toggle{margin-left:auto;padding:0 .25rem;transition:transform .3s}@media(prefers-reduced-motion:reduce){.nav-link-toggle{transition:none}}.nav-link-toggle:after{border-bottom:1px var(--tblr-border-style);border-left:1px var(--tblr-border-style);content:"";display:inline-block;height:.36em;margin-left:.4em;margin-right:.1em;margin:0;transform:rotate(-45deg);vertical-align:.306em;width:.36em}.nav-link[aria-expanded=true] .nav-link-toggle{transform:rotate(180deg)}.nav-link-icon{color:var(--tblr-icon-color);height:1.25rem;margin-right:.5rem;width:1.25rem}.nav-link-icon svg{display:block;height:100%}.nav-fill .nav-item .nav-link{justify-content:center}.stars{color:#8a97ab;display:inline-flex;font-size:.75rem}.stars .star:not(:first-child){margin-left:.25rem}.pagination{user-select:none}.page-link{border-radius:var(--tblr-border-radius);min-width:1.75rem}.page-item{text-align:center}.page-item:not(.active) .page-link:hover{background:transparent}.page-item.page-next,.page-item.page-prev{flex:0 0 50%;text-align:left}.page-item.page-next{margin-left:auto;text-align:right}.page-item-subtitle{color:var(--tblr-secondary);font-size:12px;margin-bottom:2px;text-transform:uppercase}.page-item.disabled .page-item-subtitle{color:var(--tblr-disabled-color)}.page-item-title{color:var(--tblr-body-color);font-size:1rem;font-weight:var(--tblr-font-weight-normal)}.page-link:hover .page-item-title{color:#066fd1}.page-item.disabled .page-item-title{color:var(--tblr-disabled-color)}@keyframes progress-indeterminate{0%{left:-35%;right:100%}60%,to{left:100%;right:-90%}}.progress{appearance:none;line-height:.5rem;position:relative;width:100%}.progress::-webkit-progress-bar{background:var(--tblr-progress-bg)}.progress::-webkit-progress-value{background-color:var(--tblr-primary)}.progress::-moz-progress-bar{background-color:var(--tblr-primary)}.progress::-ms-fill{background-color:var(--tblr-primary);border:none}.progress-sm{height:.25rem}.progress-bar{height:100%}.progress-bar-indeterminate:after,.progress-bar-indeterminate:before{background-color:inherit;bottom:0;content:"";left:0;position:absolute;top:0;will-change:left,right}.progress-bar-indeterminate:before{animation:progress-indeterminate 1.5s cubic-bezier(.65,.815,.735,.395) infinite}.progress-separated .progress-bar{box-shadow:0 0 0 2px var(--tblr-card-bg,var(--tblr-bg-surface))}.progressbg{display:flex;padding:.25rem .5rem;position:relative}.progressbg-text{overflow:hidden;position:relative;text-overflow:ellipsis;white-space:nowrap;z-index:1}.progressbg-progress{background:transparent;bottom:0;height:100%;left:0;pointer-events:none;position:absolute;right:0;top:0;z-index:0}.progressbg-value{font-weight:var(--tblr-font-weight-medium);margin-left:auto;padding-left:2rem}.ribbon{--tblr-ribbon-margin:0.25rem;--tblr-ribbon-border-radius:var(--tblr-border-radius);align-items:center;background:var(--tblr-primary);border-color:var(--tblr-primary);border-radius:var(--tblr-ribbon-border-radius) 0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);color:#fff;display:inline-flex;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);justify-content:center;line-height:1;min-height:2rem;min-width:2rem;padding:.25rem .75rem;position:absolute;right:calc(var(--tblr-ribbon-margin)*-1);text-align:center;text-transform:uppercase;top:.75rem;z-index:1}.ribbon:before{border:calc(var(--tblr-ribbon-margin)*.5) var(--tblr-border-style);border-color:inherit;border-right-color:transparent;border-top-color:transparent;bottom:100%;content:"";filter:brightness(70%);height:0;position:absolute;right:0;width:0}.ribbon.bg-blue{border-color:var(--tblr-blue)}.ribbon.bg-blue-lt{border-color:rgba(var(--tblr-blue-rgb),.1)!important}.ribbon.bg-azure{border-color:var(--tblr-azure)}.ribbon.bg-azure-lt{border-color:rgba(var(--tblr-azure-rgb),.1)!important}.ribbon.bg-indigo{border-color:var(--tblr-indigo)}.ribbon.bg-indigo-lt{border-color:rgba(var(--tblr-indigo-rgb),.1)!important}.ribbon.bg-purple{border-color:var(--tblr-purple)}.ribbon.bg-purple-lt{border-color:rgba(var(--tblr-purple-rgb),.1)!important}.ribbon.bg-pink{border-color:var(--tblr-pink)}.ribbon.bg-pink-lt{border-color:rgba(var(--tblr-pink-rgb),.1)!important}.ribbon.bg-red{border-color:var(--tblr-red)}.ribbon.bg-red-lt{border-color:rgba(var(--tblr-red-rgb),.1)!important}.ribbon.bg-orange{border-color:var(--tblr-orange)}.ribbon.bg-orange-lt{border-color:rgba(var(--tblr-orange-rgb),.1)!important}.ribbon.bg-yellow{border-color:var(--tblr-yellow)}.ribbon.bg-yellow-lt{border-color:rgba(var(--tblr-yellow-rgb),.1)!important}.ribbon.bg-lime{border-color:var(--tblr-lime)}.ribbon.bg-lime-lt{border-color:rgba(var(--tblr-lime-rgb),.1)!important}.ribbon.bg-green{border-color:var(--tblr-green)}.ribbon.bg-green-lt{border-color:rgba(var(--tblr-green-rgb),.1)!important}.ribbon.bg-teal{border-color:var(--tblr-teal)}.ribbon.bg-teal-lt{border-color:rgba(var(--tblr-teal-rgb),.1)!important}.ribbon.bg-cyan{border-color:var(--tblr-cyan)}.ribbon.bg-cyan-lt{border-color:rgba(var(--tblr-cyan-rgb),.1)!important}.ribbon .icon{font-size:1.25rem;height:1.25rem;width:1.25rem}.ribbon-top{border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);padding:.5rem 0;right:.75rem;top:calc(var(--tblr-ribbon-margin)*-1);width:2rem}.ribbon-top:before{border-color:inherit;border-left-color:transparent;border-top-color:transparent;bottom:auto;right:100%;top:0}.ribbon-top.ribbon-start{left:.75rem;right:auto}.ribbon-top.ribbon-start:before{left:auto;right:100%;top:0}.ribbon-start{border-radius:0 var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius) var(--tblr-ribbon-border-radius);left:calc(var(--tblr-ribbon-margin)*-1);right:auto}.ribbon-start:before{border-color:inherit;border-left-color:transparent;border-top-color:transparent;bottom:100%;left:0;top:auto}.ribbon-bottom{bottom:.75rem;top:auto}.ribbon-bookmark{border-radius:0 0 var(--tblr-ribbon-border-radius) 0;padding-left:.25rem}.ribbon-bookmark:after{border:1rem var(--tblr-border-style);border-color:inherit;border-left-color:transparent;border-left-width:.5rem;border-right-width:0;content:"";display:block;height:0;position:absolute;right:100%;top:0;width:0}.ribbon-bookmark.ribbon-left{padding-right:.5rem}.ribbon-bookmark.ribbon-left:after{border-left-width:0;border-right-color:transparent;border-right-width:.5rem;left:100%;right:auto}.ribbon-bookmark.ribbon-top{border-radius:0 var(--tblr-ribbon-border-radius) 0 0;padding-bottom:.25rem;padding-left:0;padding-right:0}.ribbon-bookmark.ribbon-top:after{border-color:inherit;border-bottom-color:transparent;border-width:0 1rem .5rem;left:0;right:0;top:100%}.markdown{line-height:1.7142857143}.markdown>:first-child{margin-top:0}.markdown>:last-child,.markdown>:last-child .highlight{margin-bottom:0}@media(min-width:768px){.markdown>.hr,.markdown>hr{margin-bottom:3em;margin-top:3em}}.markdown>.h1,.markdown>.h2,.markdown>.h3,.markdown>.h4,.markdown>.h5,.markdown>.h6,.markdown>h1,.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{font-weight:var(--tblr-font-weight-bold)}.markdown>blockquote{font-size:1rem;margin:1.5rem 0;padding:.5rem 1.5rem}.markdown>img{border-radius:var(--tblr-border-radius)}.placeholder:not(.btn):not([class*=bg-]){background-color:currentColor!important}.placeholder:not(.avatar):not([class*=card-img-]){border-radius:var(--tblr-border-radius)}.steps{--tblr-steps-color:var(--tblr-primary);--tblr-steps-inactive-color:var(--tblr-border-color);--tblr-steps-dot-size:.5rem;--tblr-steps-border-width:2px;display:flex;flex-wrap:nowrap;list-style:none;margin:0;padding:0;width:100%}.steps-blue{--tblr-steps-color:var(--tblr-blue)}.steps-azure{--tblr-steps-color:var(--tblr-azure)}.steps-indigo{--tblr-steps-color:var(--tblr-indigo)}.steps-purple{--tblr-steps-color:var(--tblr-purple)}.steps-pink{--tblr-steps-color:var(--tblr-pink)}.steps-red{--tblr-steps-color:var(--tblr-red)}.steps-orange{--tblr-steps-color:var(--tblr-orange)}.steps-yellow{--tblr-steps-color:var(--tblr-yellow)}.steps-lime{--tblr-steps-color:var(--tblr-lime)}.steps-green{--tblr-steps-color:var(--tblr-green)}.steps-teal{--tblr-steps-color:var(--tblr-teal)}.steps-cyan{--tblr-steps-color:var(--tblr-cyan)}.step-item{color:inherit;cursor:default;flex:1 1 0;margin-top:0;min-height:1rem;padding-top:calc(var(--tblr-steps-dot-size));position:relative;text-align:center}a.step-item{cursor:pointer}a.step-item:hover{color:inherit}.step-item:after,.step-item:before{background:var(--tblr-steps-color)}.step-item:not(:last-child):after{content:"";left:50%;position:absolute;transform:translateY(-50%);width:100%}.step-item:after{height:var(--tblr-steps-border-width);top:calc(var(--tblr-steps-dot-size)*.5)}.step-item:before{align-items:center;border-radius:100rem;box-sizing:content-box;color:var(--tblr-white);content:"";display:flex;height:var(--tblr-steps-dot-size);justify-content:center;left:50%;position:absolute;top:0;transform:translateX(-50%);width:var(--tblr-steps-dot-size);z-index:1}.step-item.active{font-weight:var(--tblr-font-weight-bold)}.step-item.active:after{background:var(--tblr-steps-inactive-color)}.step-item.active~.step-item{color:var(--tblr-disabled-color)}.step-item.active~.step-item:after,.step-item.active~.step-item:before{background:var(--tblr-steps-inactive-color)}.steps-counter{--tblr-steps-dot-size:1.5rem;counter-reset:steps}.steps-counter .step-item{counter-increment:steps}.steps-counter .step-item:before{content:counter(steps)}.steps-vertical{--tblr-steps-dot-offset:6px;flex-direction:column}.steps-vertical.steps-counter{--tblr-steps-dot-offset:-2px}.steps-vertical .step-item{min-height:auto;padding-left:calc(var(--tblr-steps-dot-size) + 1rem);padding-top:0;text-align:left}.steps-vertical .step-item:not(:first-child){margin-top:1rem}.steps-vertical .step-item:before{left:0;top:var(--tblr-steps-dot-offset);transform:translate(0)}.steps-vertical .step-item:not(:last-child):after{content:"";height:calc(100% + 1rem);left:calc(var(--tblr-steps-dot-size)*.5);position:absolute;top:var(--tblr-steps-dot-offset);transform:translateX(-50%);width:var(--tblr-steps-border-width)}@keyframes status-pulsate-main{40%{transform:scale(1.25)}60%{transform:scale(1.25)}}@keyframes status-pulsate-secondary{10%{transform:scale(1)}30%{transform:scale(3)}80%{transform:scale(3)}to{transform:scale(1)}}@keyframes status-pulsate-tertiary{25%{transform:scale(1)}80%{opacity:0;transform:scale(3)}to{opacity:0;transform:scale(3)}}.status{--tblr-status-height:1.5rem;--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145;align-items:center;background:rgba(var(--tblr-status-color-rgb),.1);border-radius:100rem;color:var(--tblr-status-color);display:inline-flex;font-size:.875rem;font-weight:var(--tblr-font-weight-medium);gap:.5rem;height:var(--tblr-status-height);letter-spacing:normal;line-height:1;margin:0;padding:.25rem .75rem;text-transform:none}.status .status-dot{background:var(--tblr-status-color)}.status .icon{font-size:1.25rem}.status-lite{background:transparent!important;border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color)!important;color:var(--tblr-body-color)!important}.status-primary{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-secondary{--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145}.status-success{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-info{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-warning{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-danger{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-light{--tblr-status-color:#f6f8fb;--tblr-status-color-rgb:246,248,251}.status-dark{--tblr-status-color:#182433;--tblr-status-color-rgb:24,36,51}.status-muted{--tblr-status-color:#6c7a91;--tblr-status-color-rgb:108,122,145}.status-blue{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-azure{--tblr-status-color:#4299e1;--tblr-status-color-rgb:66,153,225}.status-indigo{--tblr-status-color:#4263eb;--tblr-status-color-rgb:66,99,235}.status-purple{--tblr-status-color:#ae3ec9;--tblr-status-color-rgb:174,62,201}.status-pink{--tblr-status-color:#d6336c;--tblr-status-color-rgb:214,51,108}.status-red{--tblr-status-color:#d63939;--tblr-status-color-rgb:214,57,57}.status-orange{--tblr-status-color:#f76707;--tblr-status-color-rgb:247,103,7}.status-yellow{--tblr-status-color:#f59f00;--tblr-status-color-rgb:245,159,0}.status-lime{--tblr-status-color:#74b816;--tblr-status-color-rgb:116,184,22}.status-green{--tblr-status-color:#2fb344;--tblr-status-color-rgb:47,179,68}.status-teal{--tblr-status-color:#0ca678;--tblr-status-color-rgb:12,166,120}.status-cyan{--tblr-status-color:#17a2b8;--tblr-status-color-rgb:23,162,184}.status-x{--tblr-status-color:#000;--tblr-status-color-rgb:0,0,0}.status-facebook{--tblr-status-color:#1877f2;--tblr-status-color-rgb:24,119,242}.status-twitter{--tblr-status-color:#1da1f2;--tblr-status-color-rgb:29,161,242}.status-linkedin{--tblr-status-color:#0a66c2;--tblr-status-color-rgb:10,102,194}.status-google{--tblr-status-color:#dc4e41;--tblr-status-color-rgb:220,78,65}.status-youtube{--tblr-status-color:red;--tblr-status-color-rgb:255,0,0}.status-vimeo{--tblr-status-color:#1ab7ea;--tblr-status-color-rgb:26,183,234}.status-dribbble{--tblr-status-color:#ea4c89;--tblr-status-color-rgb:234,76,137}.status-github{--tblr-status-color:#181717;--tblr-status-color-rgb:24,23,23}.status-instagram{--tblr-status-color:#e4405f;--tblr-status-color-rgb:228,64,95}.status-pinterest{--tblr-status-color:#bd081c;--tblr-status-color-rgb:189,8,28}.status-vk{--tblr-status-color:#6383a8;--tblr-status-color-rgb:99,131,168}.status-rss{--tblr-status-color:orange;--tblr-status-color-rgb:255,165,0}.status-flickr{--tblr-status-color:#0063dc;--tblr-status-color-rgb:0,99,220}.status-bitbucket{--tblr-status-color:#0052cc;--tblr-status-color-rgb:0,82,204}.status-tabler{--tblr-status-color:#066fd1;--tblr-status-color-rgb:6,111,209}.status-dot{--tblr-status-dot-color:var(--tblr-status-color,#6c7a91);--tblr-status-size:0.5rem;background:var(--tblr-status-dot-color);border-radius:100rem;display:inline-block;height:var(--tblr-status-size);position:relative;width:var(--tblr-status-size)}.status-dot-animated:before{animation:status-pulsate-tertiary 1s linear 2s infinite backwards;background:inherit;border-radius:inherit;content:"";inset:0;opacity:.6;position:absolute;z-index:0}.status-indicator{--tblr-status-indicator-size:2.5rem;--tblr-status-indicator-color:var(--tblr-status-color,#6c7a91);display:block;height:var(--tblr-status-indicator-size);position:relative;width:var(--tblr-status-indicator-size)}.status-indicator-circle{--tblr-status-circle-size:.75rem;background:var(--tblr-status-color);border-radius:100rem;height:var(--tblr-status-circle-size);left:50%;margin:calc(var(--tblr-status-circle-size)/-2) 0 0 calc(var(--tblr-status-circle-size)/-2);position:absolute;top:50%;width:var(--tblr-status-circle-size)}.status-indicator-circle:first-child{z-index:3}.status-indicator-circle:nth-child(2){opacity:.1;z-index:2}.status-indicator-circle:nth-child(3){opacity:.3;z-index:1}.status-indicator-animated .status-indicator-circle:first-child{animation:status-pulsate-main 2s linear 1s infinite backwards}.status-indicator-animated .status-indicator-circle:nth-child(2){animation:status-pulsate-secondary 2s linear 1s infinite backwards}.status-indicator-animated .status-indicator-circle:nth-child(3){animation:status-pulsate-tertiary 2s linear 1s infinite backwards}.switch-icon{background:transparent;border:0;cursor:pointer;display:inline-block;height:1.25rem;line-height:1;padding:0;position:relative;vertical-align:bottom;width:1.25rem}.switch-icon.disabled{opacity:.4;pointer-events:none}.switch-icon:focus{outline:none}.switch-icon .switch-icon-a,.switch-icon .switch-icon-b,.switch-icon svg{display:block;height:100%;width:100%}.switch-icon .switch-icon-a{opacity:1}.switch-icon .switch-icon-b{left:0;opacity:0;position:absolute;top:0}.switch-icon.active .switch-icon-a{opacity:0}.switch-icon.active .switch-icon-b{opacity:1}.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:opacity .5s}@media(prefers-reduced-motion:reduce){.switch-icon-fade .switch-icon-a,.switch-icon-fade .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:opacity .5s,transform 0s .5s}@media(prefers-reduced-motion:reduce){.switch-icon-scale .switch-icon-a,.switch-icon-scale .switch-icon-b{transition:none}}.switch-icon-scale .switch-icon-b{transform:scale(1.5)}.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:opacity 0s,transform .5s}@media(prefers-reduced-motion:reduce){.switch-icon-scale.active .switch-icon-a,.switch-icon-scale.active .switch-icon-b{transition:none}}.switch-icon-scale.active .switch-icon-b{transform:scale(1)}.switch-icon-flip{perspective:10em}.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{backface-visibility:hidden;transform-style:preserve-3d;transition:opacity 0s .2s,transform .4s ease-in-out}@media(prefers-reduced-motion:reduce){.switch-icon-flip .switch-icon-a,.switch-icon-flip .switch-icon-b{transition:none}}.switch-icon-flip .switch-icon-a{opacity:1;transform:rotateY(0deg)}.switch-icon-flip .switch-icon-b{opacity:1;transform:rotateY(-180deg)}.switch-icon-flip.active .switch-icon-a{opacity:1;transform:rotateY(180deg)}.switch-icon-flip.active .switch-icon-b{opacity:1;transform:rotateY(0deg)}.switch-icon-slide-down,.switch-icon-slide-left,.switch-icon-slide-right,.switch-icon-slide-up{overflow:hidden}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:opacity .3s,transform .3s}@media(prefers-reduced-motion:reduce){.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-a,.switch-icon-slide-up .switch-icon-b{transition:none}}.switch-icon-slide-down .switch-icon-a,.switch-icon-slide-left .switch-icon-a,.switch-icon-slide-right .switch-icon-a,.switch-icon-slide-up .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b,.switch-icon-slide-left .switch-icon-b,.switch-icon-slide-right .switch-icon-b,.switch-icon-slide-up .switch-icon-b{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-a,.switch-icon-slide-left.active .switch-icon-a,.switch-icon-slide-right.active .switch-icon-a,.switch-icon-slide-up.active .switch-icon-a{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-b,.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right.active .switch-icon-b,.switch-icon-slide-up.active .switch-icon-b{transform:translateY(0)}.switch-icon-slide-left .switch-icon-a{transform:translateX(0)}.switch-icon-slide-left .switch-icon-b{transform:translateX(100%)}.switch-icon-slide-left.active .switch-icon-a{transform:translateX(-100%)}.switch-icon-slide-left.active .switch-icon-b,.switch-icon-slide-right .switch-icon-a{transform:translateX(0)}.switch-icon-slide-right .switch-icon-b{transform:translateX(-100%)}.switch-icon-slide-right.active .switch-icon-a{transform:translateX(100%)}.switch-icon-slide-right.active .switch-icon-b{transform:translateX(0)}.switch-icon-slide-down .switch-icon-a{transform:translateY(0)}.switch-icon-slide-down .switch-icon-b{transform:translateY(-100%)}.switch-icon-slide-down.active .switch-icon-a{transform:translateY(100%)}.switch-icon-slide-down.active .switch-icon-b{transform:translateY(0)}.markdown>table thead th,.table thead th{background:var(--tblr-bg-surface-tertiary);color:var(--tblr-gray-500);color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;padding-bottom:.5rem;padding-top:.5rem;text-transform:uppercase;white-space:nowrap}@media print{.markdown>table thead th,.table thead th{background:transparent}}.table-responsive .markdown>table,.table-responsive .table{margin-bottom:0}.table-responsive+.card-footer{border-top:0}.table-transparent thead th{background:transparent}.table-nowrap>:not(caption)>*>*{white-space:nowrap}.table-vcenter>:not(caption)>*>*{vertical-align:middle}.table-center>:not(caption)>*>*{text-align:center}.td-truncate{max-width:1px;width:100%}.table-mobile{display:block}.table-mobile thead{display:none}.table-mobile tbody,.table-mobile tr{display:flex;flex-direction:column}.table-mobile td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile .btn{display:block}@media(max-width:575.98px){.table-mobile-sm{display:block}.table-mobile-sm thead{display:none}.table-mobile-sm tbody,.table-mobile-sm tr{display:flex;flex-direction:column}.table-mobile-sm td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-sm td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-sm tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-sm .btn{display:block}}@media(max-width:767.98px){.table-mobile-md{display:block}.table-mobile-md thead{display:none}.table-mobile-md tbody,.table-mobile-md tr{display:flex;flex-direction:column}.table-mobile-md td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-md td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-md tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-md .btn{display:block}}@media(max-width:991.98px){.table-mobile-lg{display:block}.table-mobile-lg thead{display:none}.table-mobile-lg tbody,.table-mobile-lg tr{display:flex;flex-direction:column}.table-mobile-lg td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-lg td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-lg tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-lg .btn{display:block}}@media(max-width:1199.98px){.table-mobile-xl{display:block}.table-mobile-xl thead{display:none}.table-mobile-xl tbody,.table-mobile-xl tr{display:flex;flex-direction:column}.table-mobile-xl td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-xl td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-xl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xl .btn{display:block}}@media(max-width:1399.98px){.table-mobile-xxl{display:block}.table-mobile-xxl thead{display:none}.table-mobile-xxl tbody,.table-mobile-xxl tr{display:flex;flex-direction:column}.table-mobile-xxl td{border:none;color:var(--tblr-body-color)!important;display:block;padding:.75rem!important}.table-mobile-xxl td[data-label]:before{color:var(--tblr-secondary);content:attr(data-label);display:block;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.table-mobile-xxl tr{border-bottom:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent)}.table-mobile-xxl .btn{display:block}}.table-sort{background:inherit;border:0;color:inherit;display:block;font:inherit;letter-spacing:inherit;margin:-.5rem -.75rem;padding:.5rem .75rem;text-align:inherit;text-transform:inherit;transition:color .3s;width:100%}@media(prefers-reduced-motion:reduce){.table-sort{transition:none}}.table-sort.asc,.table-sort.desc,.table-sort:hover{color:var(--tblr-body-color)}.table-sort:after{background:currentColor;content:"";display:inline-flex;height:1rem;margin-left:.25rem;mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' viewBox='0 0 16 16'%3E%3Cpath d='m5 7 3-3 3 3M5 10l3 3 3-3'/%3E%3C/svg%3E");vertical-align:bottom;width:1rem}.table-sort.asc:after{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 10 3-3 3 3'/%3E%3C/svg%3E")}.table-sort.desc:after{mask-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' d='m5 7 3 3 3-3'/%3E%3C/svg%3E")}.table-borderless thead th{background:transparent}.tag{--tblr-tag-height:1.5rem;align-items:center;background:var(--tblr-bg-surface);border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:var(--tblr-box-shadow-input);display:inline-flex;gap:.5rem;height:var(--tblr-tag-height);padding:0 .5rem}.tag .btn-close{font-size:.5rem;height:1rem;margin-left:-.125rem;margin-right:-.25rem;padding:0;width:1rem}.tag-badge{--tblr-badge-font-size:0.625rem;--tblr-badge-padding-x:.25rem;--tblr-badge-padding-y:.125rem;margin-right:-.25rem}.tag-avatar,.tag-check,.tag-flag,.tag-icon,.tag-payment{margin-left:-.25rem}.tag-icon{color:var(--tblr-secondary);margin-right:-.125rem}.tag-check,.tag-icon{height:1rem;width:1rem}.tag-check{background-size:1rem}.tags-list{--tblr-list-gap:0.5rem;display:flex;flex-wrap:wrap;gap:var(--tblr-list-gap)}.toast{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color-translucent);box-shadow:0 2px 4px 0 rgba(24,36,51,.04)}.toast .toast-header{user-select:none}.toast button[data-bs-dismiss=toast]{outline:none}.toast-primary{--tblr-toast-color:#066fd1}.toast-secondary{--tblr-toast-color:#6c7a91}.toast-success{--tblr-toast-color:#2fb344}.toast-info{--tblr-toast-color:#4299e1}.toast-warning{--tblr-toast-color:#f76707}.toast-danger{--tblr-toast-color:#d63939}.toast-light{--tblr-toast-color:#f6f8fb}.toast-dark{--tblr-toast-color:#182433}.toast-muted{--tblr-toast-color:#6c7a91}.toast-blue{--tblr-toast-color:#066fd1}.toast-azure{--tblr-toast-color:#4299e1}.toast-indigo{--tblr-toast-color:#4263eb}.toast-purple{--tblr-toast-color:#ae3ec9}.toast-pink{--tblr-toast-color:#d6336c}.toast-red{--tblr-toast-color:#d63939}.toast-orange{--tblr-toast-color:#f76707}.toast-yellow{--tblr-toast-color:#f59f00}.toast-lime{--tblr-toast-color:#74b816}.toast-green{--tblr-toast-color:#2fb344}.toast-teal{--tblr-toast-color:#0ca678}.toast-cyan{--tblr-toast-color:#17a2b8}.toast-x{--tblr-toast-color:#000}.toast-facebook{--tblr-toast-color:#1877f2}.toast-twitter{--tblr-toast-color:#1da1f2}.toast-linkedin{--tblr-toast-color:#0a66c2}.toast-google{--tblr-toast-color:#dc4e41}.toast-youtube{--tblr-toast-color:red}.toast-vimeo{--tblr-toast-color:#1ab7ea}.toast-dribbble{--tblr-toast-color:#ea4c89}.toast-github{--tblr-toast-color:#181717}.toast-instagram{--tblr-toast-color:#e4405f}.toast-pinterest{--tblr-toast-color:#bd081c}.toast-vk{--tblr-toast-color:#6383a8}.toast-rss{--tblr-toast-color:orange}.toast-flickr{--tblr-toast-color:#0063dc}.toast-bitbucket{--tblr-toast-color:#0052cc}.toast-tabler{--tblr-toast-color:#066fd1}.toolbar{display:flex;flex-shrink:0;flex-wrap:nowrap;margin:0 -.5rem}.toolbar>*{margin:0 .5rem}.tracking{--tblr-tracking-height:1.5rem;--tblr-tracking-gap-width:0.125rem;--tblr-tracking-block-border-radius:var(--tblr-border-radius);display:flex;gap:var(--tblr-tracking-gap-width)}.tracking-squares{--tblr-tracking-block-border-radius:var(--tblr-border-radius-sm)}.tracking-squares .tracking-block{height:auto}.tracking-squares .tracking-block:before{content:"";display:block;padding-top:100%}.tracking-block{background:var(--tblr-border-color);border-radius:var(--tblr-tracking-block-border-radius);flex:1;height:var(--tblr-tracking-height);min-width:.25rem}.timeline{--tblr-timeline-icon-size:2.5rem;list-style:none;padding:0}.timeline,.timeline-event{position:relative}.timeline-event:not(:last-child){margin-bottom:var(--tblr-page-padding)}.timeline-event:not(:last-child):before{background-color:var(--tblr-border-color);border-radius:var(--tblr-border-radius);bottom:calc(var(--tblr-page-padding)*-1);content:"";left:calc(var(--tblr-timeline-icon-size)/2);position:absolute;top:var(--tblr-timeline-icon-size);width:var(--tblr-border-width)}.timeline-event-icon{align-items:center;background:var(--tblr-gray-200);border-radius:var(--tblr-border-radius);color:var(--tblr-secondary);display:flex;height:var(--tblr-timeline-icon-size,2.5rem);justify-content:center;position:absolute;width:var(--tblr-timeline-icon-size,2.5rem);z-index:5}.timeline-event-card{margin-left:calc(var(--tblr-timeline-icon-size, 2.5rem) + var(--tblr-page-padding))}.timeline-simple .timeline-event-icon{display:none}.timeline-simple .timeline-event-card{margin-left:0}.hr-text{align-items:center;color:var(--tblr-secondary);display:flex;font-size:.625rem;font-weight:var(--tblr-font-weight-bold);height:1px;letter-spacing:.04em;line-height:1rem;margin:2rem 0;text-transform:uppercase}.hr-text:after,.hr-text:before{background-color:var(--tblr-border-color);flex:1 1 auto;height:1px}.hr-text:before{content:"";margin-right:.5rem}.hr-text:after{content:"";margin-left:.5rem}.hr-text>:first-child{color:var(--tblr-secondary);padding-left:0;padding-right:.5rem}.hr-text.hr-text-left:before{content:none}.hr-text.hr-text-left>:first-child{padding-left:.5rem;padding-right:.5rem}.hr-text.hr-text-right:before{content:""}.hr-text.hr-text-right:after{content:none}.hr-text.hr-text-right>:first-child{padding-left:.5rem;padding-right:0}.card>.hr-text{margin:0}.hr-text-spaceless{margin:-.5rem 0}.lead{line-height:1.4}a{text-decoration-skip-ink:auto}.h1 a,.h1 a:hover,.h2 a,.h2 a:hover,.h3 a,.h3 a:hover,.h4 a,.h4 a:hover,.h5 a,.h5 a:hover,.h6 a,.h6 a:hover,h1 a,h1 a:hover,h2 a,h2 a:hover,h3 a,h3 a:hover,h4 a,h4 a:hover,h5 a,h5 a:hover,h6 a,h6 a:hover{color:inherit}.h1,h1{font-size:var(--tblr-font-size-h1);line-height:var(--tblr-line-height-h1)}.h2,h2{font-size:var(--tblr-font-size-h2);line-height:var(--tblr-line-height-h2)}.h3,h3{font-size:var(--tblr-font-size-h3);line-height:var(--tblr-line-height-h3)}.h4,h4{font-size:var(--tblr-font-size-h4);line-height:var(--tblr-line-height-h4)}.h5,h5{font-size:var(--tblr-font-size-h5);line-height:var(--tblr-line-height-h5)}.h6,h6{font-size:var(--tblr-font-size-h6);line-height:var(--tblr-line-height-h6)}.strong,b,strong{font-weight:var(--tblr-font-weight-bold)}blockquote{border-left:2px var(--tblr-border-style) var(--tblr-border-color);padding-left:1rem}blockquote p{margin-bottom:1rem}blockquote cite{display:block;text-align:right}blockquote cite:before{content:"— "}ol,ul{padding-left:1.5rem}.hr,hr{margin:2rem 0}dl dd:last-child{margin-bottom:0}pre{background:var(--tblr-bg-surface-dark);border-radius:var(--tblr-border-radius);color:var(--tblr-light);padding:1rem}pre code{background:transparent}code{background:var(--tblr-code-bg);border-radius:var(--tblr-border-radius);padding:2px 4px}.kbd,kbd{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-sizing:border-box;display:inline-block;font-size:var(--tblr-font-size-h5);font-weight:var(--tblr-font-weight-medium);line-height:1;max-width:100%;vertical-align:baseline}img,svg{height:auto;max-width:100%}.list-unstyled{margin-left:0}::selection{background-color:rgba(var(--tblr-primary-rgb),.16)}[class*=" link-"].disabled,[class^=link-].disabled{color:var(--tblr-disabled-color)!important;pointer-events:none}.subheader{color:var(--tblr-secondary);font-size:.625rem;font-weight:var(--tblr-font-weight-bold);letter-spacing:.04em;line-height:1rem;text-transform:uppercase}.chart{display:block;min-height:10rem}.chart text{font-family:inherit}.chart-sm{height:2.5rem}.chart-lg{height:15rem}.chart-square{height:5.75rem}.chart-sparkline{height:2.5rem;line-height:1;min-height:0!important;position:relative;width:4rem}.chart-sparkline-sm{height:1.5rem}.chart-sparkline-square{width:2.5rem}.chart-sparkline-wide{width:6rem}.chart-sparkline-label{align-items:center;bottom:0;display:flex;font-size:.625rem;justify-content:center;left:0;position:absolute;right:0;top:0}.chart-sparkline-label .icon{font-size:1rem;height:1rem;width:1rem}.offcanvas-header{border-bottom:var(--tblr-border-width) var(--tblr-border-style) rgba(4,32,69,.1)}.offcanvas-footer{padding:1.5rem}.offcanvas-title{font-size:1rem;font-weight:var(--tblr-font-weight-medium);line-height:1.5rem}.offcanvas-narrow{width:20rem}.chat-bubbles{display:flex;flex-direction:column;gap:1rem}.chat-bubble{background:var(--tblr-bg-surface-secondary);border-radius:var(--tblr-border-radius-lg);padding:1rem;position:relative}.chat-bubble-me{background-color:var(--tblr-primary-lt);box-shadow:none}.chat-bubble-title{margin-bottom:.25rem}.chat-bubble-author{font-weight:600}.chat-bubble-date{color:var(--tblr-secondary)}.chat-bubble-body>:last-child{margin-bottom:0}.bg-white-overlay{background-color:rgba(246,248,251,.24);color:#fff}.bg-dark-overlay{background-color:rgba(24,36,51,.24);color:#fff}.bg-cover{background-position:50%;background-repeat:no-repeat;background-size:cover}.bg-primary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-primary-rgb),var(--tblr-bg-opacity))!important}.bg-primary-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-primary-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.border-primary{border-color:#066fd1!important}.bg-secondary{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-secondary-rgb),var(--tblr-bg-opacity))!important}.bg-secondary-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-secondary-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.border-secondary{border-color:#6c7a91!important}.bg-success{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-success-rgb),var(--tblr-bg-opacity))!important}.bg-success-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-success-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.border-success{border-color:#2fb344!important}.bg-info{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-info-rgb),var(--tblr-bg-opacity))!important}.bg-info-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-info-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.border-info{border-color:#4299e1!important}.bg-warning{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-warning-rgb),var(--tblr-bg-opacity))!important}.bg-warning-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-warning-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.border-warning{border-color:#f76707!important}.bg-danger{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-danger-rgb),var(--tblr-bg-opacity))!important}.bg-danger-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-danger-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.border-danger{border-color:#d63939!important}.bg-light{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-light-rgb),var(--tblr-bg-opacity))!important}.bg-light-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-light-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.border-light{border-color:#f6f8fb!important}.bg-dark{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-dark-rgb),var(--tblr-bg-opacity))!important}.bg-dark-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-dark-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.border-dark{border-color:#182433!important}.bg-muted{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-muted-rgb),var(--tblr-bg-opacity))!important}.bg-muted-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-muted-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important}.border-muted{border-color:#6c7a91!important}.bg-blue{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-blue-rgb),var(--tblr-bg-opacity))!important}.bg-blue-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-blue-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.border-blue{border-color:#066fd1!important}.bg-azure{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-azure-rgb),var(--tblr-bg-opacity))!important}.bg-azure-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-azure-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.border-azure{border-color:#4299e1!important}.bg-indigo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-indigo-rgb),var(--tblr-bg-opacity))!important}.bg-indigo-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-indigo-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.border-indigo{border-color:#4263eb!important}.bg-purple{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-purple-rgb),var(--tblr-bg-opacity))!important}.bg-purple-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-purple-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.border-purple{border-color:#ae3ec9!important}.bg-pink{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-pink-rgb),var(--tblr-bg-opacity))!important}.bg-pink-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-pink-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.border-pink{border-color:#d6336c!important}.bg-red{background-color:rgba(var(--tblr-red-rgb),var(--tblr-bg-opacity))!important}.bg-red,.bg-red-lt{--tblr-bg-opacity:1}.bg-red-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-red-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.border-red{border-color:#d63939!important}.bg-orange{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-orange-rgb),var(--tblr-bg-opacity))!important}.bg-orange-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-orange-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.border-orange{border-color:#f76707!important}.bg-yellow{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-yellow-rgb),var(--tblr-bg-opacity))!important}.bg-yellow-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-yellow-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.border-yellow{border-color:#f59f00!important}.bg-lime{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-lime-rgb),var(--tblr-bg-opacity))!important}.bg-lime-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-lime-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.border-lime{border-color:#74b816!important}.bg-green{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-green-rgb),var(--tblr-bg-opacity))!important}.bg-green-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-green-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.border-green{border-color:#2fb344!important}.bg-teal{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-teal-rgb),var(--tblr-bg-opacity))!important}.bg-teal-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-teal-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.border-teal{border-color:#0ca678!important}.bg-cyan{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-cyan-rgb),var(--tblr-bg-opacity))!important}.bg-cyan-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-cyan-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.border-cyan{border-color:#17a2b8!important}.bg-x{background-color:rgba(var(--tblr-x-rgb),var(--tblr-bg-opacity))!important}.bg-x,.bg-x-lt{--tblr-bg-opacity:1}.bg-x-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-x-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-x-rgb),var(--tblr-text-opacity))!important}.border-x{border-color:#000!important}.bg-facebook{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-facebook-rgb),var(--tblr-bg-opacity))!important}.bg-facebook-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-facebook-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important}.border-facebook{border-color:#1877f2!important}.bg-twitter{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-twitter-rgb),var(--tblr-bg-opacity))!important}.bg-twitter-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-twitter-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important}.border-twitter{border-color:#1da1f2!important}.bg-linkedin{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-linkedin-rgb),var(--tblr-bg-opacity))!important}.bg-linkedin-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-linkedin-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important}.border-linkedin{border-color:#0a66c2!important}.bg-google{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-google-rgb),var(--tblr-bg-opacity))!important}.bg-google-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-google-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important}.border-google{border-color:#dc4e41!important}.bg-youtube{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-youtube-rgb),var(--tblr-bg-opacity))!important}.bg-youtube-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-youtube-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important}.border-youtube{border-color:red!important}.bg-vimeo{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-vimeo-rgb),var(--tblr-bg-opacity))!important}.bg-vimeo-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-vimeo-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important}.border-vimeo{border-color:#1ab7ea!important}.bg-dribbble{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-dribbble-rgb),var(--tblr-bg-opacity))!important}.bg-dribbble-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-dribbble-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important}.border-dribbble{border-color:#ea4c89!important}.bg-github{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-github-rgb),var(--tblr-bg-opacity))!important}.bg-github-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-github-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important}.border-github{border-color:#181717!important}.bg-instagram{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-instagram-rgb),var(--tblr-bg-opacity))!important}.bg-instagram-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-instagram-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important}.border-instagram{border-color:#e4405f!important}.bg-pinterest{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-pinterest-rgb),var(--tblr-bg-opacity))!important}.bg-pinterest-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-pinterest-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important}.border-pinterest{border-color:#bd081c!important}.bg-vk{background-color:rgba(var(--tblr-vk-rgb),var(--tblr-bg-opacity))!important}.bg-vk,.bg-vk-lt{--tblr-bg-opacity:1}.bg-vk-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-vk-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important}.border-vk{border-color:#6383a8!important}.bg-rss{background-color:rgba(var(--tblr-rss-rgb),var(--tblr-bg-opacity))!important}.bg-rss,.bg-rss-lt{--tblr-bg-opacity:1}.bg-rss-lt{--tblr-text-opacity:1;background-color:rgba(var(--tblr-rss-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important}.border-rss{border-color:orange!important}.bg-flickr{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-flickr-rgb),var(--tblr-bg-opacity))!important}.bg-flickr-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-flickr-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important}.border-flickr{border-color:#0063dc!important}.bg-bitbucket{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-bg-opacity))!important}.bg-bitbucket-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-bitbucket-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important}.border-bitbucket{border-color:#0052cc!important}.bg-tabler{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-tabler-rgb),var(--tblr-bg-opacity))!important}.bg-tabler-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-tabler-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important}.border-tabler{border-color:#066fd1!important}.bg-white{--tblr-bg-opacity:1;background-color:rgba(var(--tblr-white-rgb),var(--tblr-bg-opacity))!important}.bg-white-lt{--tblr-bg-opacity:1;--tblr-text-opacity:1;background-color:rgba(var(--tblr-white-lt-rgb),var(--tblr-bg-opacity))!important;color:rgba(var(--tblr-white-rgb),var(--tblr-text-opacity))!important}.border-white{border-color:#fff!important}.text-primary{--tblr-text-opacity:1;color:rgba(var(--tblr-primary-rgb),var(--tblr-text-opacity))!important}.text-primary-fg{color:var(--tblr-primary-fg)!important}.text-secondary{--tblr-text-opacity:1;color:rgba(var(--tblr-secondary-rgb),var(--tblr-text-opacity))!important}.text-secondary-fg{color:var(--tblr-secondary-fg)!important}.text-success{--tblr-text-opacity:1;color:rgba(var(--tblr-success-rgb),var(--tblr-text-opacity))!important}.text-success-fg{color:var(--tblr-success-fg)!important}.text-info{--tblr-text-opacity:1;color:rgba(var(--tblr-info-rgb),var(--tblr-text-opacity))!important}.text-info-fg{color:var(--tblr-info-fg)!important}.text-warning{--tblr-text-opacity:1;color:rgba(var(--tblr-warning-rgb),var(--tblr-text-opacity))!important}.text-warning-fg{color:var(--tblr-warning-fg)!important}.text-danger{--tblr-text-opacity:1;color:rgba(var(--tblr-danger-rgb),var(--tblr-text-opacity))!important}.text-danger-fg{color:var(--tblr-danger-fg)!important}.text-light{--tblr-text-opacity:1;color:rgba(var(--tblr-light-rgb),var(--tblr-text-opacity))!important}.text-light-fg{color:var(--tblr-light-fg)!important}.text-dark{--tblr-text-opacity:1;color:rgba(var(--tblr-dark-rgb),var(--tblr-text-opacity))!important}.text-dark-fg{color:var(--tblr-dark-fg)!important}.text-muted{--tblr-text-opacity:1;color:rgba(var(--tblr-muted-rgb),var(--tblr-text-opacity))!important}.text-muted-fg{color:var(--tblr-muted-fg)!important}.text-blue{--tblr-text-opacity:1;color:rgba(var(--tblr-blue-rgb),var(--tblr-text-opacity))!important}.text-blue-fg{color:var(--tblr-blue-fg)!important}.text-azure{--tblr-text-opacity:1;color:rgba(var(--tblr-azure-rgb),var(--tblr-text-opacity))!important}.text-azure-fg{color:var(--tblr-azure-fg)!important}.text-indigo{--tblr-text-opacity:1;color:rgba(var(--tblr-indigo-rgb),var(--tblr-text-opacity))!important}.text-indigo-fg{color:var(--tblr-indigo-fg)!important}.text-purple{--tblr-text-opacity:1;color:rgba(var(--tblr-purple-rgb),var(--tblr-text-opacity))!important}.text-purple-fg{color:var(--tblr-purple-fg)!important}.text-pink{--tblr-text-opacity:1;color:rgba(var(--tblr-pink-rgb),var(--tblr-text-opacity))!important}.text-pink-fg{color:var(--tblr-pink-fg)!important}.text-red{--tblr-text-opacity:1;color:rgba(var(--tblr-red-rgb),var(--tblr-text-opacity))!important}.text-red-fg{color:var(--tblr-red-fg)!important}.text-orange{--tblr-text-opacity:1;color:rgba(var(--tblr-orange-rgb),var(--tblr-text-opacity))!important}.text-orange-fg{color:var(--tblr-orange-fg)!important}.text-yellow{--tblr-text-opacity:1;color:rgba(var(--tblr-yellow-rgb),var(--tblr-text-opacity))!important}.text-yellow-fg{color:var(--tblr-yellow-fg)!important}.text-lime{--tblr-text-opacity:1;color:rgba(var(--tblr-lime-rgb),var(--tblr-text-opacity))!important}.text-lime-fg{color:var(--tblr-lime-fg)!important}.text-green{--tblr-text-opacity:1;color:rgba(var(--tblr-green-rgb),var(--tblr-text-opacity))!important}.text-green-fg{color:var(--tblr-green-fg)!important}.text-teal{--tblr-text-opacity:1;color:rgba(var(--tblr-teal-rgb),var(--tblr-text-opacity))!important}.text-teal-fg{color:var(--tblr-teal-fg)!important}.text-cyan{--tblr-text-opacity:1;color:rgba(var(--tblr-cyan-rgb),var(--tblr-text-opacity))!important}.text-cyan-fg{color:var(--tblr-cyan-fg)!important}.text-x{--tblr-text-opacity:1;color:rgba(var(--tblr-x-rgb),var(--tblr-text-opacity))!important}.text-x-fg{color:var(--tblr-x-fg)!important}.text-facebook{--tblr-text-opacity:1;color:rgba(var(--tblr-facebook-rgb),var(--tblr-text-opacity))!important}.text-facebook-fg{color:var(--tblr-facebook-fg)!important}.text-twitter{--tblr-text-opacity:1;color:rgba(var(--tblr-twitter-rgb),var(--tblr-text-opacity))!important}.text-twitter-fg{color:var(--tblr-twitter-fg)!important}.text-linkedin{--tblr-text-opacity:1;color:rgba(var(--tblr-linkedin-rgb),var(--tblr-text-opacity))!important}.text-linkedin-fg{color:var(--tblr-linkedin-fg)!important}.text-google{--tblr-text-opacity:1;color:rgba(var(--tblr-google-rgb),var(--tblr-text-opacity))!important}.text-google-fg{color:var(--tblr-google-fg)!important}.text-youtube{--tblr-text-opacity:1;color:rgba(var(--tblr-youtube-rgb),var(--tblr-text-opacity))!important}.text-youtube-fg{color:var(--tblr-youtube-fg)!important}.text-vimeo{--tblr-text-opacity:1;color:rgba(var(--tblr-vimeo-rgb),var(--tblr-text-opacity))!important}.text-vimeo-fg{color:var(--tblr-vimeo-fg)!important}.text-dribbble{--tblr-text-opacity:1;color:rgba(var(--tblr-dribbble-rgb),var(--tblr-text-opacity))!important}.text-dribbble-fg{color:var(--tblr-dribbble-fg)!important}.text-github{--tblr-text-opacity:1;color:rgba(var(--tblr-github-rgb),var(--tblr-text-opacity))!important}.text-github-fg{color:var(--tblr-github-fg)!important}.text-instagram{--tblr-text-opacity:1;color:rgba(var(--tblr-instagram-rgb),var(--tblr-text-opacity))!important}.text-instagram-fg{color:var(--tblr-instagram-fg)!important}.text-pinterest{--tblr-text-opacity:1;color:rgba(var(--tblr-pinterest-rgb),var(--tblr-text-opacity))!important}.text-pinterest-fg{color:var(--tblr-pinterest-fg)!important}.text-vk{--tblr-text-opacity:1;color:rgba(var(--tblr-vk-rgb),var(--tblr-text-opacity))!important}.text-vk-fg{color:var(--tblr-vk-fg)!important}.text-rss{--tblr-text-opacity:1;color:rgba(var(--tblr-rss-rgb),var(--tblr-text-opacity))!important}.text-rss-fg{color:var(--tblr-rss-fg)!important}.text-flickr{--tblr-text-opacity:1;color:rgba(var(--tblr-flickr-rgb),var(--tblr-text-opacity))!important}.text-flickr-fg{color:var(--tblr-flickr-fg)!important}.text-bitbucket{--tblr-text-opacity:1;color:rgba(var(--tblr-bitbucket-rgb),var(--tblr-text-opacity))!important}.text-bitbucket-fg{color:var(--tblr-bitbucket-fg)!important}.text-tabler{--tblr-text-opacity:1;color:rgba(var(--tblr-tabler-rgb),var(--tblr-text-opacity))!important}.text-tabler-fg{color:var(--tblr-tabler-fg)!important}.bg-gray-50{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-50-rgb),var(--tblr-bg-opacity))!important}.text-gray-50-fg{color:#182433!important}.bg-gray-100{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-100-rgb),var(--tblr-bg-opacity))!important}.text-gray-100-fg{color:#182433!important}.bg-gray-200{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-200-rgb),var(--tblr-bg-opacity))!important}.text-gray-200-fg{color:#182433!important}.bg-gray-300{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-300-rgb),var(--tblr-bg-opacity))!important}.text-gray-300-fg{color:#f6f8fb!important}.bg-gray-400{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-400-rgb),var(--tblr-bg-opacity))!important}.text-gray-400-fg{color:#f6f8fb!important}.bg-gray-500{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-500-rgb),var(--tblr-bg-opacity))!important}.text-gray-500-fg{color:#f6f8fb!important}.bg-gray-600{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-600-rgb),var(--tblr-bg-opacity))!important}.text-gray-600-fg{color:#f6f8fb!important}.bg-gray-700{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-700-rgb),var(--tblr-bg-opacity))!important}.text-gray-700-fg{color:#f6f8fb!important}.bg-gray-800{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-800-rgb),var(--tblr-bg-opacity))!important}.text-gray-800-fg{color:#f6f8fb!important}.bg-gray-900{--tblr-bg-opacity:.1;background-color:rgba(var(--tblr-gray-900-rgb),var(--tblr-bg-opacity))!important}.text-gray-900-fg{color:#f6f8fb!important}.scrollable{overflow-x:hidden;overflow-y:auto;-webkit-overflow-scrolling:touch}.scrollable.hover{overflow-y:hidden}.scrollable.hover>*{margin-top:-1px}.scrollable.hover:active,.scrollable.hover:focus,.scrollable.hover:hover{overflow:visible;overflow-y:auto}.touch .scrollable{overflow-y:auto!important}.scroll-x,.scroll-y{overflow:hidden;-webkit-overflow-scrolling:touch}.scroll-y{overflow-y:auto}.scroll-x{overflow-x:auto}.no-scroll{overflow:hidden}.w-0{width:0!important}.h-0{height:0!important}.w-1{width:.25rem!important}.h-1{height:.25rem!important}.w-2{width:.5rem!important}.h-2{height:.5rem!important}.w-3{width:1rem!important}.h-3{height:1rem!important}.w-4{width:1.5rem!important}.h-4{height:1.5rem!important}.w-5{width:2rem!important}.h-5{height:2rem!important}.w-6{width:3rem!important}.h-6{height:3rem!important}.w-7{width:5rem!important}.h-7{height:5rem!important}.w-8{width:8rem!important}.h-8{height:8rem!important}.w-auto{width:auto!important}.h-auto{height:auto!important}.w-px{width:1px!important}.h-px{height:1px!important}.w-full{width:100%!important}.h-full{height:100%!important}.opacity-0{opacity:0!important}.opacity-5{opacity:.05!important}.opacity-10{opacity:.1!important}.opacity-15{opacity:.15!important}.opacity-20{opacity:.2!important}.opacity-25{opacity:.25!important}.opacity-30{opacity:.3!important}.opacity-35{opacity:.35!important}.opacity-40{opacity:.4!important}.opacity-45{opacity:.45!important}.opacity-50{opacity:.5!important}.opacity-55{opacity:.55!important}.opacity-60{opacity:.6!important}.opacity-65{opacity:.65!important}.opacity-70{opacity:.7!important}.opacity-75{opacity:.75!important}.opacity-80{opacity:.8!important}.opacity-85{opacity:.85!important}.opacity-90{opacity:.9!important}.opacity-95{opacity:.95!important}.opacity-100{opacity:1!important}.hover-shadow-sm:hover{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.hover-shadow:hover{box-shadow:rgba(var(--tblr-body-color-rgb),.04) 0 2px 4px 0!important}.hover-shadow-lg:hover{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.hover-shadow-none:hover{box-shadow:none!important}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.subpixel-antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}.litepicker{--litepicker-month-weekday-color:var(--tblr-secondary);--litepicker-button-prev-month-color:var(--tblr-secondary);--litepicker-button-next-month-color:var(--tblr-secondary);--litepicker-button-prev-month-color-hover:var(--tblr-primary);--litepicker-button-next-month-color-hover:var(--tblr-primary);--litepicker-day-color:var(--tblr-body-color);--litepicker-day-color-hover:var(--tblr-primary);--litepicker-is-end-color-bg:var(--tblr-primary);--litepicker-is-today-color:var(--tblr-primary);--litepicker-month-header-color:var(--tblr-body-color);--litepicker-container-months-color-bg:var(--tblr-bg-surface);font:inherit;user-select:none}.litepicker svg{fill:none!important}.litepicker .container__main{border:var(--tblr-border-width) var(--tblr-border-style) var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:none}.litepicker .container__months .month-item-name,.litepicker .container__months .month-item-year{font-weight:var(--tblr-font-weight-medium)!important}.litepicker .container__months .button-next-month,.litepicker .container__months .button-previous-month{cursor:pointer!important}.litepicker .container__months .month-item-weekdays-row>div{font-size:.75rem;padding:.5rem 0!important}.litepicker .container__days .day-item{cursor:pointer!important;padding:.5rem 0!important;transition:color .3s,background-color .3s,border-color .3s}@media(prefers-reduced-motion:reduce){.litepicker .container__days .day-item{transition:none}}.datepicker-inline .litepicker{box-shadow:var(--tblr-box-shadow-input)}.datepicker-inline .litepicker .container__months{background-color:var(--tblr-bg-forms);box-shadow:none}.ts-control{border:1px solid var(--tblr-border-color);border-radius:var(--tblr-border-radius);box-shadow:none;box-sizing:border-box;flex-wrap:wrap;overflow:hidden;padding:.5625rem .75rem;position:relative;width:100%;z-index:1}.ts-wrapper.multi.has-items .ts-control{padding:calc(.5625rem - 1px) .75rem calc(.5625rem - 4px)}.full .ts-control{background-color:var(--tblr-bg-forms)}.disabled .ts-control,.disabled .ts-control *{cursor:default!important}.focus .ts-control{box-shadow:none}.ts-control>*{display:inline-block;vertical-align:baseline}.ts-wrapper.multi .ts-control>div{background:#efefef;border:0 solid #dce1e7;color:#182433;cursor:pointer;margin:0 3px 3px 0;padding:1px 5px}.ts-wrapper.multi .ts-control>div.active{background:#066fd1;border:0 solid transparent;color:#fff}.ts-wrapper.multi.disabled .ts-control>div,.ts-wrapper.multi.disabled .ts-control>div.active{background:#fff;border:0 solid #fff;color:#727272}.ts-control>input{background:none!important;border:0!important;box-shadow:none!important;display:inline-block!important;flex:1 1 auto;line-height:inherit!important;margin:0!important;max-height:none!important;max-width:100%!important;min-height:0!important;min-width:7rem;padding:0!important;text-indent:0!important;user-select:auto!important}.ts-control>input::-ms-clear{display:none}.ts-control>input:focus{outline:none!important}.has-items .ts-control>input{margin:0 4px!important}.ts-control.rtl{text-align:right}.ts-control.rtl.single .ts-control:after{left:calc(.75rem + 5px);right:auto}.ts-control.rtl .ts-control>input{margin:0 4px 0 -2px!important}.disabled .ts-control{background-color:var(--tblr-bg-surface-secondary);opacity:.5}.input-hidden .ts-control>input{left:-10000px;opacity:0;position:absolute}.ts-dropdown{background:#fff;border:1px solid #d0d0d0;border-radius:0 0 var(--tblr-border-radius) var(--tblr-border-radius);border-top:0;box-shadow:0 1px 3px rgba(0,0,0,.1);box-sizing:border-box;left:0;margin:.25rem 0 0;position:absolute;top:100%;width:100%;z-index:10}.ts-dropdown [data-selectable]{cursor:pointer;overflow:hidden}.ts-dropdown [data-selectable] .highlight{background:rgba(255,237,40,.4);border-radius:1px}.ts-dropdown .create,.ts-dropdown .no-results,.ts-dropdown .optgroup-header,.ts-dropdown .option{padding:3px .75rem}.ts-dropdown .option,.ts-dropdown [data-disabled],.ts-dropdown [data-disabled] [data-selectable].option{cursor:inherit;opacity:.5}.ts-dropdown [data-selectable].option{cursor:pointer;opacity:1}.ts-dropdown .optgroup:first-child .optgroup-header{border-top:0}.ts-dropdown .optgroup-header{background:var(--tblr-bg-surface);color:#49566c;cursor:default}.ts-dropdown .active{background-color:rgba(var(--tblr-secondary-rgb),.08);color:inherit}.ts-dropdown .active.create{color:inherit}.ts-dropdown .create{color:rgba(24,36,51,.5)}.ts-dropdown .spinner{display:inline-block;height:30px;margin:3px .75rem;width:30px}.ts-dropdown .spinner:after{animation:lds-dual-ring 1.2s linear infinite;border-color:#d0d0d0 transparent;border-radius:50%;border-style:solid;border-width:5px;content:" ";display:block;height:24px;margin:3px;width:24px}@keyframes lds-dual-ring{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.ts-dropdown-content{max-height:200px;overflow:hidden auto;scroll-behavior:smooth}.ts-wrapper.plugin-drag_drop .ts-dragging{color:transparent!important}.ts-wrapper.plugin-drag_drop .ts-dragging>*{visibility:hidden!important}.plugin-checkbox_options:not(.rtl) .option input{margin-right:.5rem}.plugin-checkbox_options.rtl .option input{margin-left:.5rem}.plugin-clear_button{--ts-pr-clear-button:1em}.plugin-clear_button .clear-button{background:transparent!important;cursor:pointer;margin-right:0!important;opacity:0;position:absolute;right:calc(.75rem - 5px);top:50%;transform:translateY(-50%);transition:opacity .5s}.plugin-clear_button.form-select .clear-button,.plugin-clear_button.single .clear-button{right:max(var(--ts-pr-caret),.75rem)}.plugin-clear_button.focus.has-items .clear-button,.plugin-clear_button:not(.disabled):hover.has-items .clear-button{opacity:1}.ts-wrapper .dropdown-header{background:color-mix(#fff,#d0d0d0,85%);border-bottom:1px solid #d0d0d0;border-radius:var(--tblr-border-radius) var(--tblr-border-radius) 0 0;padding:6px .75rem;position:relative}.ts-wrapper .dropdown-header-close{color:#182433;font-size:20px!important;line-height:20px;margin-top:-12px;opacity:.4;position:absolute;right:.75rem;top:50%}.ts-wrapper .dropdown-header-close:hover{color:#000}.plugin-dropdown_input.focus.dropdown-active .ts-control{border:1px solid var(--tblr-border-color);box-shadow:none;box-shadow:var(--tblr-box-shadow-input)}.plugin-dropdown_input .dropdown-input{background:transparent;border:solid #d0d0d0;border-width:0 0 1px;box-shadow:none;display:block;padding:.5625rem .75rem;width:100%}.plugin-dropdown_input.focus .ts-dropdown .dropdown-input{border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.plugin-dropdown_input .items-placeholder{border:0!important;box-shadow:none!important;width:100%}.plugin-dropdown_input.dropdown-active .items-placeholder,.plugin-dropdown_input.has-items .items-placeholder{display:none!important}.ts-wrapper.plugin-input_autogrow.has-items .ts-control>input{min-width:0}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input{flex:none;min-width:4px}.ts-wrapper.plugin-input_autogrow.has-items.focus .ts-control>input::placeholder{color:transparent}.ts-dropdown.plugin-optgroup_columns .ts-dropdown-content{display:flex}.ts-dropdown.plugin-optgroup_columns .optgroup{border-right:1px solid #f2f2f2;border-top:0;flex-basis:0;flex-grow:1;min-width:0}.ts-dropdown.plugin-optgroup_columns .optgroup:last-child{border-right:0}.ts-dropdown.plugin-optgroup_columns .optgroup:before{display:none}.ts-dropdown.plugin-optgroup_columns .optgroup-header{border-top:0}.ts-wrapper.plugin-remove_button .item{align-items:center;display:inline-flex}.ts-wrapper.plugin-remove_button .item .remove{border-radius:0 2px 2px 0;box-sizing:border-box;color:inherit;display:inline-block;padding:0 5px;text-decoration:none;vertical-align:middle}.ts-wrapper.plugin-remove_button .item .remove:hover{background:rgba(0,0,0,.05)}.ts-wrapper.plugin-remove_button.disabled .item .remove:hover{background:none}.ts-wrapper.plugin-remove_button .remove-single{font-size:23px;position:absolute;right:0;top:0}.ts-wrapper.plugin-remove_button:not(.rtl) .item{padding-right:0!important}.ts-wrapper.plugin-remove_button:not(.rtl) .item .remove{border-left:1px solid #dce1e7;margin-left:5px}.ts-wrapper.plugin-remove_button:not(.rtl) .item.active .remove{border-left-color:transparent}.ts-wrapper.plugin-remove_button:not(.rtl).disabled .item .remove{border-left-color:#fff}.ts-wrapper.plugin-remove_button.rtl .item{padding-left:0!important}.ts-wrapper.plugin-remove_button.rtl .item .remove{border-right:1px solid #dce1e7;margin-right:5px}.ts-wrapper.plugin-remove_button.rtl .item.active .remove{border-right-color:transparent}.ts-wrapper.plugin-remove_button.rtl.disabled .item .remove{border-right-color:#fff}:root{--ts-pr-clear-button:0;--ts-pr-caret:0;--ts-pr-min:.75rem}.ts-wrapper.single .ts-control,.ts-wrapper.single .ts-control input{cursor:pointer}.ts-control:not(.rtl){padding-right:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-control.rtl{padding-left:max(var(--ts-pr-min),var(--ts-pr-clear-button) + var(--ts-pr-caret))!important}.ts-wrapper{position:relative}.ts-control,.ts-control input,.ts-dropdown{color:#182433;font-family:inherit;font-size:inherit;line-height:1.4285714286}.ts-control,.ts-wrapper.single.input-active .ts-control{background:var(--tblr-bg-forms);cursor:text}.ts-hidden-accessible{border:0!important;clip:rect(0 0 0 0)!important;clip-path:inset(50%)!important;overflow:hidden!important;padding:0!important;position:absolute!important;white-space:nowrap!important;width:1px!important}.ts-dropdown,.ts-dropdown.form-control,.ts-dropdown.form-select{background:#fff;border:1px solid var(--tblr-border-color-translucent);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);height:auto;padding:0;z-index:1000}.ts-dropdown .optgroup-header{font-size:.765625rem;line-height:1.4285714286}.ts-dropdown .optgroup:first-child:before{display:none}.ts-dropdown .optgroup:before{border-top:1px solid var(--tblr-border-color-translucent);content:" ";display:block;height:0;margin:var(--tblr-spacer-2) 0;margin-left:-.75rem;margin-right:-.75rem;overflow:hidden}.ts-dropdown .create{padding-left:.75rem}.ts-dropdown-content{padding:5px 0}.ts-control{align-items:center;box-shadow:var(--tblr-box-shadow-input);display:flex;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion:reduce){.ts-control{transition:none}}.focus .ts-control{border-color:#83b7e8;box-shadow:var(--tblr-box-shadow-input),0 0 0 .25rem rgba(var(--tblr-primary-rgb),.25);outline:0}.ts-control .item{align-items:center;display:flex}.ts-wrapper.is-invalid,.was-validated .invalid,.was-validated :invalid+.ts-wrapper{border-color:var(--tblr-form-invalid-color)}.ts-wrapper.is-invalid:not(.single),.was-validated .invalid:not(.single),.was-validated :invalid+.ts-wrapper:not(.single){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:right calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-invalid.single,.was-validated .invalid.single,.was-validated :invalid+.ts-wrapper.single{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%23d63939' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M18 6 6 18M6 6l12 12'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-repeat:no-repeat;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-invalid.focus .ts-control,.was-validated .invalid.focus .ts-control,.was-validated :invalid+.ts-wrapper.focus .ts-control{border-color:var(--tblr-form-invalid-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-form-invalid-color),.25)}.ts-wrapper.is-valid,.was-validated .valid,.was-validated :valid+.ts-wrapper{border-color:var(--tblr-form-valid-color)}.ts-wrapper.is-valid:not(.single),.was-validated .valid:not(.single),.was-validated :valid+.ts-wrapper:not(.single){background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:right calc(.35714em + .28125rem) center;background-repeat:no-repeat;background-size:calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-valid.single,.was-validated .valid.single,.was-validated :valid+.ts-wrapper.single{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E"),url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' fill='none' stroke='%232fb344' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' viewBox='0 0 24 24'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");background-position:right .75rem center,center right 2.25rem;background-repeat:no-repeat;background-size:16px 12px,calc(.71429em + .5625rem) calc(.71429em + .5625rem)}.ts-wrapper.is-valid.focus .ts-control,.was-validated .valid.focus .ts-control,.was-validated :valid+.ts-wrapper.focus .ts-control{border-color:var(--tblr-form-valid-color);box-shadow:0 0 0 .25rem rgba(var(--tblr-form-valid-color),.25)}.ts-wrapper{display:flex;min-height:calc(1.42857em + 1.125rem + var(--tblr-border-width)*2)}.input-group-sm>.ts-wrapper,.ts-wrapper.form-control-sm,.ts-wrapper.form-select-sm{min-height:calc(1.42857em + .25rem + var(--tblr-border-width)*2)}.input-group-sm>.ts-wrapper .ts-control,.ts-wrapper.form-control-sm .ts-control,.ts-wrapper.form-select-sm .ts-control{border-radius:var(--tblr-border-radius-sm);font-size:.75rem}.input-group-sm>.ts-wrapper.has-items .ts-control,.ts-wrapper.form-control-sm.has-items .ts-control,.ts-wrapper.form-select-sm.has-items .ts-control{font-size:.75rem;padding-bottom:0}.input-group-sm>.ts-wrapper.multi.has-items .ts-control,.ts-wrapper.form-control-sm.multi.has-items .ts-control,.ts-wrapper.form-select-sm.multi.has-items .ts-control{padding-top:calc(.71429em - .41071rem + var(--tblr-border-width)*2/2 - 2px)!important}.ts-wrapper.multi.has-items .ts-control{padding-left:calc(.75rem - 5px);--ts-pr-min:calc(0.75rem - 5px)}.ts-wrapper.multi .ts-control>div{border-radius:calc(var(--tblr-border-radius) - 1px)}.input-group-lg>.ts-wrapper,.ts-wrapper.form-control-lg,.ts-wrapper.form-select-lg{min-height:calc(1.42857em + 1rem + var(--tblr-border-width)*2)}.input-group-lg>.ts-wrapper .ts-control,.ts-wrapper.form-control-lg .ts-control,.ts-wrapper.form-select-lg .ts-control{border-radius:var(--tblr-border-radius-lg);font-size:1.25rem}.ts-wrapper:not(.form-control,.form-select){background:none;border:none;box-shadow:none;height:auto;padding:0}.ts-wrapper:not(.form-control,.form-select).single .ts-control{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='none' stroke='%238a97ab' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3E%3C/svg%3E");background-position:right .75rem center;background-repeat:no-repeat;background-size:16px 12px}.ts-wrapper.form-select,.ts-wrapper.single{--ts-pr-caret:2.25rem}.ts-wrapper.form-control,.ts-wrapper.form-select{box-shadow:none;display:flex;height:auto;padding:0!important}.ts-wrapper.form-control .ts-control,.ts-wrapper.form-control.single.input-active .ts-control,.ts-wrapper.form-select .ts-control,.ts-wrapper.form-select.single.input-active .ts-control{border:none!important}.ts-wrapper.form-control:not(.disabled) .ts-control,.ts-wrapper.form-control:not(.disabled).single.input-active .ts-control,.ts-wrapper.form-select:not(.disabled) .ts-control,.ts-wrapper.form-select:not(.disabled).single.input-active .ts-control{background:transparent!important}.input-group>.ts-wrapper{flex-grow:1;width:1%}.input-group>.ts-wrapper:not(:nth-child(2))>.ts-control{border-bottom-left-radius:0;border-top-left-radius:0}.input-group>.ts-wrapper:not(:last-child)>.ts-control{border-bottom-right-radius:0;border-top-right-radius:0}:root{--ts-pr-clear-button:0rem;--ts-pr-caret:0rem}.ts-control,.ts-input{color:inherit}.ts-control .dropdown-menu{height:auto;width:100%}.ts-wrapper .form-control,.ts-wrapper .form-select,.ts-wrapper.form-control,.ts-wrapper.form-select{box-shadow:var(--tblr-box-shadow-input)}.ts-wrapper.is-invalid .ts-control,.ts-wrapper.is-valid .ts-control{--ts-pr-clear-button:1.5rem}.ts-dropdown{background:var(--tblr-bg-surface);box-shadow:var(--tblr-box-shadow-dropdown);color:var(--tblr-body-color)}.ts-dropdown .option{padding:.5rem .75rem}.ts-control,.ts-control input{color:var(--tblr-body-color)}.ts-control input::placeholder{color:#8a97ab}.ts-wrapper.multi .ts-control>div{background:var(--tblr-bg-surface-secondary);border:1px solid var(--tblr-border-color);color:var(--tblr-body-color)}.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:Font Awesome\ 6 Free}.fa-brands,.fab{font-family:Font Awesome\ 6 Brands}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.0833333337em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.0714285718em;vertical-align:.0535714295em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.0416666682em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);line-height:inherit;position:absolute;text-align:center;width:var(--fa-li-width,2em)}.fa-border{border-color:var(--fa-border-color,#eee);border-radius:var(--fa-border-radius,.1em);border-style:var(--fa-border-style,solid);border-width:var(--fa-border-width,.08em);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-bounce;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-beat-fade;animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-flip;animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-shake;animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-name:fa-spin;animation-timing-function:var(--fa-animation-timing,steps(8))}@media(prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}24%,8%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}.fa-0{--fa:"\30 ";--fa--fa:"\30 \30 "}.fa-1{--fa:"\31 ";--fa--fa:"\31 \31 "}.fa-2{--fa:"\32 ";--fa--fa:"\32 \32 "}.fa-3{--fa:"\33 ";--fa--fa:"\33 \33 "}.fa-4{--fa:"\34 ";--fa--fa:"\34 \34 "}.fa-5{--fa:"\35 ";--fa--fa:"\35 \35 "}.fa-6{--fa:"\36 ";--fa--fa:"\36 \36 "}.fa-7{--fa:"\37 ";--fa--fa:"\37 \37 "}.fa-8{--fa:"\38 ";--fa--fa:"\38 \38 "}.fa-9{--fa:"\39 ";--fa--fa:"\39 \39 "}.fa-fill-drip{--fa:"";--fa--fa:""}.fa-arrows-to-circle{--fa:"";--fa--fa:""}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:"";--fa--fa:""}.fa-at{--fa:"\@";--fa--fa:"\@\@"}.fa-trash-alt,.fa-trash-can{--fa:"";--fa--fa:""}.fa-text-height{--fa:"";--fa--fa:""}.fa-user-times,.fa-user-xmark{--fa:"";--fa--fa:""}.fa-stethoscope{--fa:"";--fa--fa:""}.fa-comment-alt,.fa-message{--fa:"";--fa--fa:""}.fa-info{--fa:"";--fa--fa:""}.fa-compress-alt,.fa-down-left-and-up-right-to-center{--fa:"";--fa--fa:""}.fa-explosion{--fa:"";--fa--fa:""}.fa-file-alt,.fa-file-lines,.fa-file-text{--fa:"";--fa--fa:""}.fa-wave-square{--fa:"";--fa--fa:""}.fa-ring{--fa:"";--fa--fa:""}.fa-building-un{--fa:"";--fa--fa:""}.fa-dice-three{--fa:"";--fa--fa:""}.fa-calendar-alt,.fa-calendar-days{--fa:"";--fa--fa:""}.fa-anchor-circle-check{--fa:"";--fa--fa:""}.fa-building-circle-arrow-right{--fa:"";--fa--fa:""}.fa-volleyball,.fa-volleyball-ball{--fa:"";--fa--fa:""}.fa-arrows-up-to-line{--fa:"";--fa--fa:""}.fa-sort-desc,.fa-sort-down{--fa:"";--fa--fa:""}.fa-circle-minus,.fa-minus-circle{--fa:"";--fa--fa:""}.fa-door-open{--fa:"";--fa--fa:""}.fa-right-from-bracket,.fa-sign-out-alt{--fa:"";--fa--fa:""}.fa-atom{--fa:"";--fa--fa:""}.fa-soap{--fa:"";--fa--fa:""}.fa-heart-music-camera-bolt,.fa-icons{--fa:"";--fa--fa:""}.fa-microphone-alt-slash,.fa-microphone-lines-slash{--fa:"";--fa--fa:""}.fa-bridge-circle-check{--fa:"";--fa--fa:""}.fa-pump-medical{--fa:"";--fa--fa:""}.fa-fingerprint{--fa:"";--fa--fa:""}.fa-hand-point-right{--fa:"";--fa--fa:""}.fa-magnifying-glass-location,.fa-search-location{--fa:"";--fa--fa:""}.fa-forward-step,.fa-step-forward{--fa:"";--fa--fa:""}.fa-face-smile-beam,.fa-smile-beam{--fa:"";--fa--fa:""}.fa-flag-checkered{--fa:"";--fa--fa:""}.fa-football,.fa-football-ball{--fa:"";--fa--fa:""}.fa-school-circle-exclamation{--fa:"";--fa--fa:""}.fa-crop{--fa:"";--fa--fa:""}.fa-angle-double-down,.fa-angles-down{--fa:"";--fa--fa:""}.fa-users-rectangle{--fa:"";--fa--fa:""}.fa-people-roof{--fa:"";--fa--fa:""}.fa-people-line{--fa:"";--fa--fa:""}.fa-beer,.fa-beer-mug-empty{--fa:"";--fa--fa:""}.fa-diagram-predecessor{--fa:"";--fa--fa:""}.fa-arrow-up-long,.fa-long-arrow-up{--fa:"";--fa--fa:""}.fa-burn,.fa-fire-flame-simple{--fa:"";--fa--fa:""}.fa-male,.fa-person{--fa:"";--fa--fa:""}.fa-laptop{--fa:"";--fa--fa:""}.fa-file-csv{--fa:"";--fa--fa:""}.fa-menorah{--fa:"";--fa--fa:""}.fa-truck-plane{--fa:"";--fa--fa:""}.fa-record-vinyl{--fa:"";--fa--fa:""}.fa-face-grin-stars,.fa-grin-stars{--fa:"";--fa--fa:""}.fa-bong{--fa:"";--fa--fa:""}.fa-pastafarianism,.fa-spaghetti-monster-flying{--fa:"";--fa--fa:""}.fa-arrow-down-up-across-line{--fa:"";--fa--fa:""}.fa-spoon,.fa-utensil-spoon{--fa:"";--fa--fa:""}.fa-jar-wheat{--fa:"";--fa--fa:""}.fa-envelopes-bulk,.fa-mail-bulk{--fa:"";--fa--fa:""}.fa-file-circle-exclamation{--fa:"";--fa--fa:""}.fa-circle-h,.fa-hospital-symbol{--fa:"";--fa--fa:""}.fa-pager{--fa:"";--fa--fa:""}.fa-address-book,.fa-contact-book{--fa:"";--fa--fa:""}.fa-strikethrough{--fa:"";--fa--fa:""}.fa-k{--fa:"K";--fa--fa:"KK"}.fa-landmark-flag{--fa:"";--fa--fa:""}.fa-pencil,.fa-pencil-alt{--fa:"";--fa--fa:""}.fa-backward{--fa:"";--fa--fa:""}.fa-caret-right{--fa:"";--fa--fa:""}.fa-comments{--fa:"";--fa--fa:""}.fa-file-clipboard,.fa-paste{--fa:"";--fa--fa:""}.fa-code-pull-request{--fa:"";--fa--fa:""}.fa-clipboard-list{--fa:"";--fa--fa:""}.fa-truck-loading,.fa-truck-ramp-box{--fa:"";--fa--fa:""}.fa-user-check{--fa:"";--fa--fa:""}.fa-vial-virus{--fa:"";--fa--fa:""}.fa-sheet-plastic{--fa:"";--fa--fa:""}.fa-blog{--fa:"";--fa--fa:""}.fa-user-ninja{--fa:"";--fa--fa:""}.fa-person-arrow-up-from-line{--fa:"";--fa--fa:""}.fa-scroll-torah,.fa-torah{--fa:"";--fa--fa:""}.fa-broom-ball,.fa-quidditch,.fa-quidditch-broom-ball{--fa:"";--fa--fa:""}.fa-toggle-off{--fa:"";--fa--fa:""}.fa-archive,.fa-box-archive{--fa:"";--fa--fa:""}.fa-person-drowning{--fa:"";--fa--fa:""}.fa-arrow-down-9-1,.fa-sort-numeric-desc,.fa-sort-numeric-down-alt{--fa:"";--fa--fa:""}.fa-face-grin-tongue-squint,.fa-grin-tongue-squint{--fa:"";--fa--fa:""}.fa-spray-can{--fa:"";--fa--fa:""}.fa-truck-monster{--fa:"";--fa--fa:""}.fa-w{--fa:"W";--fa--fa:"WW"}.fa-earth-africa,.fa-globe-africa{--fa:"";--fa--fa:""}.fa-rainbow{--fa:"";--fa--fa:""}.fa-circle-notch{--fa:"";--fa--fa:""}.fa-tablet-alt,.fa-tablet-screen-button{--fa:"";--fa--fa:""}.fa-paw{--fa:"";--fa--fa:""}.fa-cloud{--fa:"";--fa--fa:""}.fa-trowel-bricks{--fa:"";--fa--fa:""}.fa-face-flushed,.fa-flushed{--fa:"";--fa--fa:""}.fa-hospital-user{--fa:"";--fa--fa:""}.fa-tent-arrow-left-right{--fa:"";--fa--fa:""}.fa-gavel,.fa-legal{--fa:"";--fa--fa:""}.fa-binoculars{--fa:"";--fa--fa:""}.fa-microphone-slash{--fa:"";--fa--fa:""}.fa-box-tissue{--fa:"";--fa--fa:""}.fa-motorcycle{--fa:"";--fa--fa:""}.fa-bell-concierge,.fa-concierge-bell{--fa:"";--fa--fa:""}.fa-pen-ruler,.fa-pencil-ruler{--fa:"";--fa--fa:""}.fa-people-arrows,.fa-people-arrows-left-right{--fa:"";--fa--fa:""}.fa-mars-and-venus-burst{--fa:"";--fa--fa:""}.fa-caret-square-right,.fa-square-caret-right{--fa:"";--fa--fa:""}.fa-cut,.fa-scissors{--fa:"";--fa--fa:""}.fa-sun-plant-wilt{--fa:"";--fa--fa:""}.fa-toilets-portable{--fa:"";--fa--fa:""}.fa-hockey-puck{--fa:"";--fa--fa:""}.fa-table{--fa:"";--fa--fa:""}.fa-magnifying-glass-arrow-right{--fa:"";--fa--fa:""}.fa-digital-tachograph,.fa-tachograph-digital{--fa:"";--fa--fa:""}.fa-users-slash{--fa:"";--fa--fa:""}.fa-clover{--fa:"";--fa--fa:""}.fa-mail-reply,.fa-reply{--fa:"";--fa--fa:""}.fa-star-and-crescent{--fa:"";--fa--fa:""}.fa-house-fire{--fa:"";--fa--fa:""}.fa-minus-square,.fa-square-minus{--fa:"";--fa--fa:""}.fa-helicopter{--fa:"";--fa--fa:""}.fa-compass{--fa:"";--fa--fa:""}.fa-caret-square-down,.fa-square-caret-down{--fa:"";--fa--fa:""}.fa-file-circle-question{--fa:"";--fa--fa:""}.fa-laptop-code{--fa:"";--fa--fa:""}.fa-swatchbook{--fa:"";--fa--fa:""}.fa-prescription-bottle{--fa:"";--fa--fa:""}.fa-bars,.fa-navicon{--fa:"";--fa--fa:""}.fa-people-group{--fa:"";--fa--fa:""}.fa-hourglass-3,.fa-hourglass-end{--fa:"";--fa--fa:""}.fa-heart-broken,.fa-heart-crack{--fa:"";--fa--fa:""}.fa-external-link-square-alt,.fa-square-up-right{--fa:"";--fa--fa:""}.fa-face-kiss-beam,.fa-kiss-beam{--fa:"";--fa--fa:""}.fa-film{--fa:"";--fa--fa:""}.fa-ruler-horizontal{--fa:"";--fa--fa:""}.fa-people-robbery{--fa:"";--fa--fa:""}.fa-lightbulb{--fa:"";--fa--fa:""}.fa-caret-left{--fa:"";--fa--fa:""}.fa-circle-exclamation,.fa-exclamation-circle{--fa:"";--fa--fa:""}.fa-school-circle-xmark{--fa:"";--fa--fa:""}.fa-arrow-right-from-bracket,.fa-sign-out{--fa:"";--fa--fa:""}.fa-chevron-circle-down,.fa-circle-chevron-down{--fa:"";--fa--fa:""}.fa-unlock-alt,.fa-unlock-keyhole{--fa:"";--fa--fa:""}.fa-cloud-showers-heavy{--fa:"";--fa--fa:""}.fa-headphones-alt,.fa-headphones-simple{--fa:"";--fa--fa:""}.fa-sitemap{--fa:"";--fa--fa:""}.fa-circle-dollar-to-slot,.fa-donate{--fa:"";--fa--fa:""}.fa-memory{--fa:"";--fa--fa:""}.fa-road-spikes{--fa:"";--fa--fa:""}.fa-fire-burner{--fa:"";--fa--fa:""}.fa-flag{--fa:"";--fa--fa:""}.fa-hanukiah{--fa:"";--fa--fa:""}.fa-feather{--fa:"";--fa--fa:""}.fa-volume-down,.fa-volume-low{--fa:"";--fa--fa:""}.fa-comment-slash{--fa:"";--fa--fa:""}.fa-cloud-sun-rain{--fa:"";--fa--fa:""}.fa-compress{--fa:"";--fa--fa:""}.fa-wheat-alt,.fa-wheat-awn{--fa:"";--fa--fa:""}.fa-ankh{--fa:"";--fa--fa:""}.fa-hands-holding-child{--fa:"";--fa--fa:""}.fa-asterisk{--fa:"\*";--fa--fa:"\*\*"}.fa-check-square,.fa-square-check{--fa:"";--fa--fa:""}.fa-peseta-sign{--fa:"";--fa--fa:""}.fa-header,.fa-heading{--fa:"";--fa--fa:""}.fa-ghost{--fa:"";--fa--fa:""}.fa-list,.fa-list-squares{--fa:"";--fa--fa:""}.fa-phone-square-alt,.fa-square-phone-flip{--fa:"";--fa--fa:""}.fa-cart-plus{--fa:"";--fa--fa:""}.fa-gamepad{--fa:"";--fa--fa:""}.fa-circle-dot,.fa-dot-circle{--fa:"";--fa--fa:""}.fa-dizzy,.fa-face-dizzy{--fa:"";--fa--fa:""}.fa-egg{--fa:"";--fa--fa:""}.fa-house-medical-circle-xmark{--fa:"";--fa--fa:""}.fa-campground{--fa:"";--fa--fa:""}.fa-folder-plus{--fa:"";--fa--fa:""}.fa-futbol,.fa-futbol-ball,.fa-soccer-ball{--fa:"";--fa--fa:""}.fa-paint-brush,.fa-paintbrush{--fa:"";--fa--fa:""}.fa-lock{--fa:"";--fa--fa:""}.fa-gas-pump{--fa:"";--fa--fa:""}.fa-hot-tub,.fa-hot-tub-person{--fa:"";--fa--fa:""}.fa-map-location,.fa-map-marked{--fa:"";--fa--fa:""}.fa-house-flood-water{--fa:"";--fa--fa:""}.fa-tree{--fa:"";--fa--fa:""}.fa-bridge-lock{--fa:"";--fa--fa:""}.fa-sack-dollar{--fa:"";--fa--fa:""}.fa-edit,.fa-pen-to-square{--fa:"";--fa--fa:""}.fa-car-side{--fa:"";--fa--fa:""}.fa-share-alt,.fa-share-nodes{--fa:"";--fa--fa:""}.fa-heart-circle-minus{--fa:"";--fa--fa:""}.fa-hourglass-2,.fa-hourglass-half{--fa:"";--fa--fa:""}.fa-microscope{--fa:"";--fa--fa:""}.fa-sink{--fa:"";--fa--fa:""}.fa-bag-shopping,.fa-shopping-bag{--fa:"";--fa--fa:""}.fa-arrow-down-z-a,.fa-sort-alpha-desc,.fa-sort-alpha-down-alt{--fa:"";--fa--fa:""}.fa-mitten{--fa:"";--fa--fa:""}.fa-person-rays{--fa:"";--fa--fa:""}.fa-users{--fa:"";--fa--fa:""}.fa-eye-slash{--fa:"";--fa--fa:""}.fa-flask-vial{--fa:"";--fa--fa:""}.fa-hand,.fa-hand-paper{--fa:"";--fa--fa:""}.fa-om{--fa:"";--fa--fa:""}.fa-worm{--fa:"";--fa--fa:""}.fa-house-circle-xmark{--fa:"";--fa--fa:""}.fa-plug{--fa:"";--fa--fa:""}.fa-chevron-up{--fa:"";--fa--fa:""}.fa-hand-spock{--fa:"";--fa--fa:""}.fa-stopwatch{--fa:"";--fa--fa:""}.fa-face-kiss,.fa-kiss{--fa:"";--fa--fa:""}.fa-bridge-circle-xmark{--fa:"";--fa--fa:""}.fa-face-grin-tongue,.fa-grin-tongue{--fa:"";--fa--fa:""}.fa-chess-bishop{--fa:"";--fa--fa:""}.fa-face-grin-wink,.fa-grin-wink{--fa:"";--fa--fa:""}.fa-deaf,.fa-deafness,.fa-ear-deaf,.fa-hard-of-hearing{--fa:"";--fa--fa:""}.fa-road-circle-check{--fa:"";--fa--fa:""}.fa-dice-five{--fa:"";--fa--fa:""}.fa-rss-square,.fa-square-rss{--fa:"";--fa--fa:""}.fa-land-mine-on{--fa:"";--fa--fa:""}.fa-i-cursor{--fa:"";--fa--fa:""}.fa-stamp{--fa:"";--fa--fa:""}.fa-stairs{--fa:"";--fa--fa:""}.fa-i{--fa:"I";--fa--fa:"II"}.fa-hryvnia,.fa-hryvnia-sign{--fa:"";--fa--fa:""}.fa-pills{--fa:"";--fa--fa:""}.fa-face-grin-wide,.fa-grin-alt{--fa:"";--fa--fa:""}.fa-tooth{--fa:"";--fa--fa:""}.fa-v{--fa:"V";--fa--fa:"VV"}.fa-bangladeshi-taka-sign{--fa:"";--fa--fa:""}.fa-bicycle{--fa:"";--fa--fa:""}.fa-rod-asclepius,.fa-rod-snake,.fa-staff-aesculapius,.fa-staff-snake{--fa:"";--fa--fa:""}.fa-head-side-cough-slash{--fa:"";--fa--fa:""}.fa-ambulance,.fa-truck-medical{--fa:"";--fa--fa:""}.fa-wheat-awn-circle-exclamation{--fa:"";--fa--fa:""}.fa-snowman{--fa:"";--fa--fa:""}.fa-mortar-pestle{--fa:"";--fa--fa:""}.fa-road-barrier{--fa:"";--fa--fa:""}.fa-school{--fa:"";--fa--fa:""}.fa-igloo{--fa:"";--fa--fa:""}.fa-joint{--fa:"";--fa--fa:""}.fa-angle-right{--fa:"";--fa--fa:""}.fa-horse{--fa:"";--fa--fa:""}.fa-q{--fa:"Q";--fa--fa:"QQ"}.fa-g{--fa:"G";--fa--fa:"GG"}.fa-notes-medical{--fa:"";--fa--fa:""}.fa-temperature-2,.fa-temperature-half,.fa-thermometer-2,.fa-thermometer-half{--fa:"";--fa--fa:""}.fa-dong-sign{--fa:"";--fa--fa:""}.fa-capsules{--fa:"";--fa--fa:""}.fa-poo-bolt,.fa-poo-storm{--fa:"";--fa--fa:""}.fa-face-frown-open,.fa-frown-open{--fa:"";--fa--fa:""}.fa-hand-point-up{--fa:"";--fa--fa:""}.fa-money-bill{--fa:"";--fa--fa:""}.fa-bookmark{--fa:"";--fa--fa:""}.fa-align-justify{--fa:"";--fa--fa:""}.fa-umbrella-beach{--fa:"";--fa--fa:""}.fa-helmet-un{--fa:"";--fa--fa:""}.fa-bullseye{--fa:"";--fa--fa:""}.fa-bacon{--fa:"";--fa--fa:""}.fa-hand-point-down{--fa:"";--fa--fa:""}.fa-arrow-up-from-bracket{--fa:"";--fa--fa:""}.fa-folder,.fa-folder-blank{--fa:"";--fa--fa:""}.fa-file-medical-alt,.fa-file-waveform{--fa:"";--fa--fa:""}.fa-radiation{--fa:"";--fa--fa:""}.fa-chart-simple{--fa:"";--fa--fa:""}.fa-mars-stroke{--fa:"";--fa--fa:""}.fa-vial{--fa:"";--fa--fa:""}.fa-dashboard,.fa-gauge,.fa-gauge-med,.fa-tachometer-alt-average{--fa:"";--fa--fa:""}.fa-magic-wand-sparkles,.fa-wand-magic-sparkles{--fa:"";--fa--fa:""}.fa-e{--fa:"E";--fa--fa:"EE"}.fa-pen-alt,.fa-pen-clip{--fa:"";--fa--fa:""}.fa-bridge-circle-exclamation{--fa:"";--fa--fa:""}.fa-user{--fa:"";--fa--fa:""}.fa-school-circle-check{--fa:"";--fa--fa:""}.fa-dumpster{--fa:"";--fa--fa:""}.fa-shuttle-van,.fa-van-shuttle{--fa:"";--fa--fa:""}.fa-building-user{--fa:"";--fa--fa:""}.fa-caret-square-left,.fa-square-caret-left{--fa:"";--fa--fa:""}.fa-highlighter{--fa:"";--fa--fa:""}.fa-key{--fa:"";--fa--fa:""}.fa-bullhorn{--fa:"";--fa--fa:""}.fa-globe{--fa:"";--fa--fa:""}.fa-synagogue{--fa:"";--fa--fa:""}.fa-person-half-dress{--fa:"";--fa--fa:""}.fa-road-bridge{--fa:"";--fa--fa:""}.fa-location-arrow{--fa:"";--fa--fa:""}.fa-c{--fa:"C";--fa--fa:"CC"}.fa-tablet-button{--fa:"";--fa--fa:""}.fa-building-lock{--fa:"";--fa--fa:""}.fa-pizza-slice{--fa:"";--fa--fa:""}.fa-money-bill-wave{--fa:"";--fa--fa:""}.fa-area-chart,.fa-chart-area{--fa:"";--fa--fa:""}.fa-house-flag{--fa:"";--fa--fa:""}.fa-person-circle-minus{--fa:"";--fa--fa:""}.fa-ban,.fa-cancel{--fa:"";--fa--fa:""}.fa-camera-rotate{--fa:"";--fa--fa:""}.fa-air-freshener,.fa-spray-can-sparkles{--fa:"";--fa--fa:""}.fa-star{--fa:"";--fa--fa:""}.fa-repeat{--fa:"";--fa--fa:""}.fa-cross{--fa:"";--fa--fa:""}.fa-box{--fa:"";--fa--fa:""}.fa-venus-mars{--fa:"";--fa--fa:""}.fa-arrow-pointer,.fa-mouse-pointer{--fa:"";--fa--fa:""}.fa-expand-arrows-alt,.fa-maximize{--fa:"";--fa--fa:""}.fa-charging-station{--fa:"";--fa--fa:""}.fa-shapes,.fa-triangle-circle-square{--fa:"";--fa--fa:""}.fa-random,.fa-shuffle{--fa:"";--fa--fa:""}.fa-person-running,.fa-running{--fa:"";--fa--fa:""}.fa-mobile-retro{--fa:"";--fa--fa:""}.fa-grip-lines-vertical{--fa:"";--fa--fa:""}.fa-spider{--fa:"";--fa--fa:""}.fa-hands-bound{--fa:"";--fa--fa:""}.fa-file-invoice-dollar{--fa:"";--fa--fa:""}.fa-plane-circle-exclamation{--fa:"";--fa--fa:""}.fa-x-ray{--fa:"";--fa--fa:""}.fa-spell-check{--fa:"";--fa--fa:""}.fa-slash{--fa:"";--fa--fa:""}.fa-computer-mouse,.fa-mouse{--fa:"";--fa--fa:""}.fa-arrow-right-to-bracket,.fa-sign-in{--fa:"";--fa--fa:""}.fa-shop-slash,.fa-store-alt-slash{--fa:"";--fa--fa:""}.fa-server{--fa:"";--fa--fa:""}.fa-virus-covid-slash{--fa:"";--fa--fa:""}.fa-shop-lock{--fa:"";--fa--fa:""}.fa-hourglass-1,.fa-hourglass-start{--fa:"";--fa--fa:""}.fa-blender-phone{--fa:"";--fa--fa:""}.fa-building-wheat{--fa:"";--fa--fa:""}.fa-person-breastfeeding{--fa:"";--fa--fa:""}.fa-right-to-bracket,.fa-sign-in-alt{--fa:"";--fa--fa:""}.fa-venus{--fa:"";--fa--fa:""}.fa-passport{--fa:"";--fa--fa:""}.fa-thumb-tack-slash,.fa-thumbtack-slash{--fa:"";--fa--fa:""}.fa-heart-pulse,.fa-heartbeat{--fa:"";--fa--fa:""}.fa-people-carry,.fa-people-carry-box{--fa:"";--fa--fa:""}.fa-temperature-high{--fa:"";--fa--fa:""}.fa-microchip{--fa:"";--fa--fa:""}.fa-crown{--fa:"";--fa--fa:""}.fa-weight-hanging{--fa:"";--fa--fa:""}.fa-xmarks-lines{--fa:"";--fa--fa:""}.fa-file-prescription{--fa:"";--fa--fa:""}.fa-weight,.fa-weight-scale{--fa:"";--fa--fa:""}.fa-user-friends,.fa-user-group{--fa:"";--fa--fa:""}.fa-arrow-up-a-z,.fa-sort-alpha-up{--fa:"";--fa--fa:""}.fa-chess-knight{--fa:"";--fa--fa:""}.fa-face-laugh-squint,.fa-laugh-squint{--fa:"";--fa--fa:""}.fa-wheelchair{--fa:"";--fa--fa:""}.fa-arrow-circle-up,.fa-circle-arrow-up{--fa:"";--fa--fa:""}.fa-toggle-on{--fa:"";--fa--fa:""}.fa-person-walking,.fa-walking{--fa:"";--fa--fa:""}.fa-l{--fa:"L";--fa--fa:"LL"}.fa-fire{--fa:"";--fa--fa:""}.fa-bed-pulse,.fa-procedures{--fa:"";--fa--fa:""}.fa-shuttle-space,.fa-space-shuttle{--fa:"";--fa--fa:""}.fa-face-laugh,.fa-laugh{--fa:"";--fa--fa:""}.fa-folder-open{--fa:"";--fa--fa:""}.fa-heart-circle-plus{--fa:"";--fa--fa:""}.fa-code-fork{--fa:"";--fa--fa:""}.fa-city{--fa:"";--fa--fa:""}.fa-microphone-alt,.fa-microphone-lines{--fa:"";--fa--fa:""}.fa-pepper-hot{--fa:"";--fa--fa:""}.fa-unlock{--fa:"";--fa--fa:""}.fa-colon-sign{--fa:"";--fa--fa:""}.fa-headset{--fa:"";--fa--fa:""}.fa-store-slash{--fa:"";--fa--fa:""}.fa-road-circle-xmark{--fa:"";--fa--fa:""}.fa-user-minus{--fa:"";--fa--fa:""}.fa-mars-stroke-up,.fa-mars-stroke-v{--fa:"";--fa--fa:""}.fa-champagne-glasses,.fa-glass-cheers{--fa:"";--fa--fa:""}.fa-clipboard{--fa:"";--fa--fa:""}.fa-house-circle-exclamation{--fa:"";--fa--fa:""}.fa-file-arrow-up,.fa-file-upload{--fa:"";--fa--fa:""}.fa-wifi,.fa-wifi-3,.fa-wifi-strong{--fa:"";--fa--fa:""}.fa-bath,.fa-bathtub{--fa:"";--fa--fa:""}.fa-underline{--fa:"";--fa--fa:""}.fa-user-edit,.fa-user-pen{--fa:"";--fa--fa:""}.fa-signature{--fa:"";--fa--fa:""}.fa-stroopwafel{--fa:"";--fa--fa:""}.fa-bold{--fa:"";--fa--fa:""}.fa-anchor-lock{--fa:"";--fa--fa:""}.fa-building-ngo{--fa:"";--fa--fa:""}.fa-manat-sign{--fa:"";--fa--fa:""}.fa-not-equal{--fa:"";--fa--fa:""}.fa-border-style,.fa-border-top-left{--fa:"";--fa--fa:""}.fa-map-location-dot,.fa-map-marked-alt{--fa:"";--fa--fa:""}.fa-jedi{--fa:"";--fa--fa:""}.fa-poll,.fa-square-poll-vertical{--fa:"";--fa--fa:""}.fa-mug-hot{--fa:"";--fa--fa:""}.fa-battery-car,.fa-car-battery{--fa:"";--fa--fa:""}.fa-gift{--fa:"";--fa--fa:""}.fa-dice-two{--fa:"";--fa--fa:""}.fa-chess-queen{--fa:"";--fa--fa:""}.fa-glasses{--fa:"";--fa--fa:""}.fa-chess-board{--fa:"";--fa--fa:""}.fa-building-circle-check{--fa:"";--fa--fa:""}.fa-person-chalkboard{--fa:"";--fa--fa:""}.fa-mars-stroke-h,.fa-mars-stroke-right{--fa:"";--fa--fa:""}.fa-hand-back-fist,.fa-hand-rock{--fa:"";--fa--fa:""}.fa-caret-square-up,.fa-square-caret-up{--fa:"";--fa--fa:""}.fa-cloud-showers-water{--fa:"";--fa--fa:""}.fa-bar-chart,.fa-chart-bar{--fa:"";--fa--fa:""}.fa-hands-bubbles,.fa-hands-wash{--fa:"";--fa--fa:""}.fa-less-than-equal{--fa:"";--fa--fa:""}.fa-train{--fa:"";--fa--fa:""}.fa-eye-low-vision,.fa-low-vision{--fa:"";--fa--fa:""}.fa-crow{--fa:"";--fa--fa:""}.fa-sailboat{--fa:"";--fa--fa:""}.fa-window-restore{--fa:"";--fa--fa:""}.fa-plus-square,.fa-square-plus{--fa:"";--fa--fa:""}.fa-torii-gate{--fa:"";--fa--fa:""}.fa-frog{--fa:"";--fa--fa:""}.fa-bucket{--fa:"";--fa--fa:""}.fa-image{--fa:"";--fa--fa:""}.fa-microphone{--fa:"";--fa--fa:""}.fa-cow{--fa:"";--fa--fa:""}.fa-caret-up{--fa:"";--fa--fa:""}.fa-screwdriver{--fa:"";--fa--fa:""}.fa-folder-closed{--fa:"";--fa--fa:""}.fa-house-tsunami{--fa:"";--fa--fa:""}.fa-square-nfi{--fa:"";--fa--fa:""}.fa-arrow-up-from-ground-water{--fa:"";--fa--fa:""}.fa-glass-martini-alt,.fa-martini-glass{--fa:"";--fa--fa:""}.fa-square-binary{--fa:"";--fa--fa:""}.fa-rotate-back,.fa-rotate-backward,.fa-rotate-left,.fa-undo-alt{--fa:"";--fa--fa:""}.fa-columns,.fa-table-columns{--fa:"";--fa--fa:""}.fa-lemon{--fa:"";--fa--fa:""}.fa-head-side-mask{--fa:"";--fa--fa:""}.fa-handshake{--fa:"";--fa--fa:""}.fa-gem{--fa:"";--fa--fa:""}.fa-dolly,.fa-dolly-box{--fa:"";--fa--fa:""}.fa-smoking{--fa:"";--fa--fa:""}.fa-compress-arrows-alt,.fa-minimize{--fa:"";--fa--fa:""}.fa-monument{--fa:"";--fa--fa:""}.fa-snowplow{--fa:"";--fa--fa:""}.fa-angle-double-right,.fa-angles-right{--fa:"";--fa--fa:""}.fa-cannabis{--fa:"";--fa--fa:""}.fa-circle-play,.fa-play-circle{--fa:"";--fa--fa:""}.fa-tablets{--fa:"";--fa--fa:""}.fa-ethernet{--fa:"";--fa--fa:""}.fa-eur,.fa-euro,.fa-euro-sign{--fa:"";--fa--fa:""}.fa-chair{--fa:"";--fa--fa:""}.fa-check-circle,.fa-circle-check{--fa:"";--fa--fa:""}.fa-circle-stop,.fa-stop-circle{--fa:"";--fa--fa:""}.fa-compass-drafting,.fa-drafting-compass{--fa:"";--fa--fa:""}.fa-plate-wheat{--fa:"";--fa--fa:""}.fa-icicles{--fa:"";--fa--fa:""}.fa-person-shelter{--fa:"";--fa--fa:""}.fa-neuter{--fa:"";--fa--fa:""}.fa-id-badge{--fa:"";--fa--fa:""}.fa-marker{--fa:"";--fa--fa:""}.fa-face-laugh-beam,.fa-laugh-beam{--fa:"";--fa--fa:""}.fa-helicopter-symbol{--fa:"";--fa--fa:""}.fa-universal-access{--fa:"";--fa--fa:""}.fa-chevron-circle-up,.fa-circle-chevron-up{--fa:"";--fa--fa:""}.fa-lari-sign{--fa:"";--fa--fa:""}.fa-volcano{--fa:"";--fa--fa:""}.fa-person-walking-dashed-line-arrow-right{--fa:"";--fa--fa:""}.fa-gbp,.fa-pound-sign,.fa-sterling-sign{--fa:"";--fa--fa:""}.fa-viruses{--fa:"";--fa--fa:""}.fa-square-person-confined{--fa:"";--fa--fa:""}.fa-user-tie{--fa:"";--fa--fa:""}.fa-arrow-down-long,.fa-long-arrow-down{--fa:"";--fa--fa:""}.fa-tent-arrow-down-to-line{--fa:"";--fa--fa:""}.fa-certificate{--fa:"";--fa--fa:""}.fa-mail-reply-all,.fa-reply-all{--fa:"";--fa--fa:""}.fa-suitcase{--fa:"";--fa--fa:""}.fa-person-skating,.fa-skating{--fa:"";--fa--fa:""}.fa-filter-circle-dollar,.fa-funnel-dollar{--fa:"";--fa--fa:""}.fa-camera-retro{--fa:"";--fa--fa:""}.fa-arrow-circle-down,.fa-circle-arrow-down{--fa:"";--fa--fa:""}.fa-arrow-right-to-file,.fa-file-import{--fa:"";--fa--fa:""}.fa-external-link-square,.fa-square-arrow-up-right{--fa:"";--fa--fa:""}.fa-box-open{--fa:"";--fa--fa:""}.fa-scroll{--fa:"";--fa--fa:""}.fa-spa{--fa:"";--fa--fa:""}.fa-location-pin-lock{--fa:"";--fa--fa:""}.fa-pause{--fa:"";--fa--fa:""}.fa-hill-avalanche{--fa:"";--fa--fa:""}.fa-temperature-0,.fa-temperature-empty,.fa-thermometer-0,.fa-thermometer-empty{--fa:"";--fa--fa:""}.fa-bomb{--fa:"";--fa--fa:""}.fa-registered{--fa:"";--fa--fa:""}.fa-address-card,.fa-contact-card,.fa-vcard{--fa:"";--fa--fa:""}.fa-balance-scale-right,.fa-scale-unbalanced-flip{--fa:"";--fa--fa:""}.fa-subscript{--fa:"";--fa--fa:""}.fa-diamond-turn-right,.fa-directions{--fa:"";--fa--fa:""}.fa-burst{--fa:"";--fa--fa:""}.fa-house-laptop,.fa-laptop-house{--fa:"";--fa--fa:""}.fa-face-tired,.fa-tired{--fa:"";--fa--fa:""}.fa-money-bills{--fa:"";--fa--fa:""}.fa-smog{--fa:"";--fa--fa:""}.fa-crutch{--fa:"";--fa--fa:""}.fa-cloud-arrow-up,.fa-cloud-upload,.fa-cloud-upload-alt{--fa:"";--fa--fa:""}.fa-palette{--fa:"";--fa--fa:""}.fa-arrows-turn-right{--fa:"";--fa--fa:""}.fa-vest{--fa:"";--fa--fa:""}.fa-ferry{--fa:"";--fa--fa:""}.fa-arrows-down-to-people{--fa:"";--fa--fa:""}.fa-seedling,.fa-sprout{--fa:"";--fa--fa:""}.fa-arrows-alt-h,.fa-left-right{--fa:"";--fa--fa:""}.fa-boxes-packing{--fa:"";--fa--fa:""}.fa-arrow-circle-left,.fa-circle-arrow-left{--fa:"";--fa--fa:""}.fa-group-arrows-rotate{--fa:"";--fa--fa:""}.fa-bowl-food{--fa:"";--fa--fa:""}.fa-candy-cane{--fa:"";--fa--fa:""}.fa-arrow-down-wide-short,.fa-sort-amount-asc,.fa-sort-amount-down{--fa:"";--fa--fa:""}.fa-cloud-bolt,.fa-thunderstorm{--fa:"";--fa--fa:""}.fa-remove-format,.fa-text-slash{--fa:"";--fa--fa:""}.fa-face-smile-wink,.fa-smile-wink{--fa:"";--fa--fa:""}.fa-file-word{--fa:"";--fa--fa:""}.fa-file-powerpoint{--fa:"";--fa--fa:""}.fa-arrows-h,.fa-arrows-left-right{--fa:"";--fa--fa:""}.fa-house-lock{--fa:"";--fa--fa:""}.fa-cloud-arrow-down,.fa-cloud-download,.fa-cloud-download-alt{--fa:"";--fa--fa:""}.fa-children{--fa:"";--fa--fa:""}.fa-blackboard,.fa-chalkboard{--fa:"";--fa--fa:""}.fa-user-alt-slash,.fa-user-large-slash{--fa:"";--fa--fa:""}.fa-envelope-open{--fa:"";--fa--fa:""}.fa-handshake-alt-slash,.fa-handshake-simple-slash{--fa:"";--fa--fa:""}.fa-mattress-pillow{--fa:"";--fa--fa:""}.fa-guarani-sign{--fa:"";--fa--fa:""}.fa-arrows-rotate,.fa-refresh,.fa-sync{--fa:"";--fa--fa:""}.fa-fire-extinguisher{--fa:"";--fa--fa:""}.fa-cruzeiro-sign{--fa:"";--fa--fa:""}.fa-greater-than-equal{--fa:"";--fa--fa:""}.fa-shield-alt,.fa-shield-halved{--fa:"";--fa--fa:""}.fa-atlas,.fa-book-atlas{--fa:"";--fa--fa:""}.fa-virus{--fa:"";--fa--fa:""}.fa-envelope-circle-check{--fa:"";--fa--fa:""}.fa-layer-group{--fa:"";--fa--fa:""}.fa-arrows-to-dot{--fa:"";--fa--fa:""}.fa-archway{--fa:"";--fa--fa:""}.fa-heart-circle-check{--fa:"";--fa--fa:""}.fa-house-chimney-crack,.fa-house-damage{--fa:"";--fa--fa:""}.fa-file-archive,.fa-file-zipper{--fa:"";--fa--fa:""}.fa-square{--fa:"";--fa--fa:""}.fa-glass-martini,.fa-martini-glass-empty{--fa:"";--fa--fa:""}.fa-couch{--fa:"";--fa--fa:""}.fa-cedi-sign{--fa:"";--fa--fa:""}.fa-italic{--fa:"";--fa--fa:""}.fa-table-cells-column-lock{--fa:"";--fa--fa:""}.fa-church{--fa:"";--fa--fa:""}.fa-comments-dollar{--fa:"";--fa--fa:""}.fa-democrat{--fa:"";--fa--fa:""}.fa-z{--fa:"Z";--fa--fa:"ZZ"}.fa-person-skiing,.fa-skiing{--fa:"";--fa--fa:""}.fa-road-lock{--fa:"";--fa--fa:""}.fa-a{--fa:"A";--fa--fa:"AA"}.fa-temperature-arrow-down,.fa-temperature-down{--fa:"";--fa--fa:""}.fa-feather-alt,.fa-feather-pointed{--fa:"";--fa--fa:""}.fa-p{--fa:"P";--fa--fa:"PP"}.fa-snowflake{--fa:"";--fa--fa:""}.fa-newspaper{--fa:"";--fa--fa:""}.fa-ad,.fa-rectangle-ad{--fa:"";--fa--fa:""}.fa-arrow-circle-right,.fa-circle-arrow-right{--fa:"";--fa--fa:""}.fa-filter-circle-xmark{--fa:"";--fa--fa:""}.fa-locust{--fa:"";--fa--fa:""}.fa-sort,.fa-unsorted{--fa:"";--fa--fa:""}.fa-list-1-2,.fa-list-numeric,.fa-list-ol{--fa:"";--fa--fa:""}.fa-person-dress-burst{--fa:"";--fa--fa:""}.fa-money-check-alt,.fa-money-check-dollar{--fa:"";--fa--fa:""}.fa-vector-square{--fa:"";--fa--fa:""}.fa-bread-slice{--fa:"";--fa--fa:""}.fa-language{--fa:"";--fa--fa:""}.fa-face-kiss-wink-heart,.fa-kiss-wink-heart{--fa:"";--fa--fa:""}.fa-filter{--fa:"";--fa--fa:""}.fa-question{--fa:"\?";--fa--fa:"\?\?"}.fa-file-signature{--fa:"";--fa--fa:""}.fa-arrows-alt,.fa-up-down-left-right{--fa:"";--fa--fa:""}.fa-house-chimney-user{--fa:"";--fa--fa:""}.fa-hand-holding-heart{--fa:"";--fa--fa:""}.fa-puzzle-piece{--fa:"";--fa--fa:""}.fa-money-check{--fa:"";--fa--fa:""}.fa-star-half-alt,.fa-star-half-stroke{--fa:"";--fa--fa:""}.fa-code{--fa:"";--fa--fa:""}.fa-glass-whiskey,.fa-whiskey-glass{--fa:"";--fa--fa:""}.fa-building-circle-exclamation{--fa:"";--fa--fa:""}.fa-magnifying-glass-chart{--fa:"";--fa--fa:""}.fa-arrow-up-right-from-square,.fa-external-link{--fa:"";--fa--fa:""}.fa-cubes-stacked{--fa:"";--fa--fa:""}.fa-krw,.fa-won,.fa-won-sign{--fa:"";--fa--fa:""}.fa-virus-covid{--fa:"";--fa--fa:""}.fa-austral-sign{--fa:"";--fa--fa:""}.fa-f{--fa:"F";--fa--fa:"FF"}.fa-leaf{--fa:"";--fa--fa:""}.fa-road{--fa:"";--fa--fa:""}.fa-cab,.fa-taxi{--fa:"";--fa--fa:""}.fa-person-circle-plus{--fa:"";--fa--fa:""}.fa-chart-pie,.fa-pie-chart{--fa:"";--fa--fa:""}.fa-bolt-lightning{--fa:"";--fa--fa:""}.fa-sack-xmark{--fa:"";--fa--fa:""}.fa-file-excel{--fa:"";--fa--fa:""}.fa-file-contract{--fa:"";--fa--fa:""}.fa-fish-fins{--fa:"";--fa--fa:""}.fa-building-flag{--fa:"";--fa--fa:""}.fa-face-grin-beam,.fa-grin-beam{--fa:"";--fa--fa:""}.fa-object-ungroup{--fa:"";--fa--fa:""}.fa-poop{--fa:"";--fa--fa:""}.fa-location-pin,.fa-map-marker{--fa:"";--fa--fa:""}.fa-kaaba{--fa:"";--fa--fa:""}.fa-toilet-paper{--fa:"";--fa--fa:""}.fa-hard-hat,.fa-hat-hard,.fa-helmet-safety{--fa:"";--fa--fa:""}.fa-eject{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-right,.fa-circle-right{--fa:"";--fa--fa:""}.fa-plane-circle-check{--fa:"";--fa--fa:""}.fa-face-rolling-eyes,.fa-meh-rolling-eyes{--fa:"";--fa--fa:""}.fa-object-group{--fa:"";--fa--fa:""}.fa-chart-line,.fa-line-chart{--fa:"";--fa--fa:""}.fa-mask-ventilator{--fa:"";--fa--fa:""}.fa-arrow-right{--fa:"";--fa--fa:""}.fa-map-signs,.fa-signs-post{--fa:"";--fa--fa:""}.fa-cash-register{--fa:"";--fa--fa:""}.fa-person-circle-question{--fa:"";--fa--fa:""}.fa-h{--fa:"H";--fa--fa:"HH"}.fa-tarp{--fa:"";--fa--fa:""}.fa-screwdriver-wrench,.fa-tools{--fa:"";--fa--fa:""}.fa-arrows-to-eye{--fa:"";--fa--fa:""}.fa-plug-circle-bolt{--fa:"";--fa--fa:""}.fa-heart{--fa:"";--fa--fa:""}.fa-mars-and-venus{--fa:"";--fa--fa:""}.fa-home-user,.fa-house-user{--fa:"";--fa--fa:""}.fa-dumpster-fire{--fa:"";--fa--fa:""}.fa-house-crack{--fa:"";--fa--fa:""}.fa-cocktail,.fa-martini-glass-citrus{--fa:"";--fa--fa:""}.fa-face-surprise,.fa-surprise{--fa:"";--fa--fa:""}.fa-bottle-water{--fa:"";--fa--fa:""}.fa-circle-pause,.fa-pause-circle{--fa:"";--fa--fa:""}.fa-toilet-paper-slash{--fa:"";--fa--fa:""}.fa-apple-alt,.fa-apple-whole{--fa:"";--fa--fa:""}.fa-kitchen-set{--fa:"";--fa--fa:""}.fa-r{--fa:"R";--fa--fa:"RR"}.fa-temperature-1,.fa-temperature-quarter,.fa-thermometer-1,.fa-thermometer-quarter{--fa:"";--fa--fa:""}.fa-cube{--fa:"";--fa--fa:""}.fa-bitcoin-sign{--fa:"";--fa--fa:""}.fa-shield-dog{--fa:"";--fa--fa:""}.fa-solar-panel{--fa:"";--fa--fa:""}.fa-lock-open{--fa:"";--fa--fa:""}.fa-elevator{--fa:"";--fa--fa:""}.fa-money-bill-transfer{--fa:"";--fa--fa:""}.fa-money-bill-trend-up{--fa:"";--fa--fa:""}.fa-house-flood-water-circle-arrow-right{--fa:"";--fa--fa:""}.fa-poll-h,.fa-square-poll-horizontal{--fa:"";--fa--fa:""}.fa-circle{--fa:"";--fa--fa:""}.fa-backward-fast,.fa-fast-backward{--fa:"";--fa--fa:""}.fa-recycle{--fa:"";--fa--fa:""}.fa-user-astronaut{--fa:"";--fa--fa:""}.fa-plane-slash{--fa:"";--fa--fa:""}.fa-trademark{--fa:"";--fa--fa:""}.fa-basketball,.fa-basketball-ball{--fa:"";--fa--fa:""}.fa-satellite-dish{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-up,.fa-circle-up{--fa:"";--fa--fa:""}.fa-mobile-alt,.fa-mobile-screen-button{--fa:"";--fa--fa:""}.fa-volume-high,.fa-volume-up{--fa:"";--fa--fa:""}.fa-users-rays{--fa:"";--fa--fa:""}.fa-wallet{--fa:"";--fa--fa:""}.fa-clipboard-check{--fa:"";--fa--fa:""}.fa-file-audio{--fa:"";--fa--fa:""}.fa-burger,.fa-hamburger{--fa:"";--fa--fa:""}.fa-wrench{--fa:"";--fa--fa:""}.fa-bugs{--fa:"";--fa--fa:""}.fa-rupee,.fa-rupee-sign{--fa:"";--fa--fa:""}.fa-file-image{--fa:"";--fa--fa:""}.fa-circle-question,.fa-question-circle{--fa:"";--fa--fa:""}.fa-plane-departure{--fa:"";--fa--fa:""}.fa-handshake-slash{--fa:"";--fa--fa:""}.fa-book-bookmark{--fa:"";--fa--fa:""}.fa-code-branch{--fa:"";--fa--fa:""}.fa-hat-cowboy{--fa:"";--fa--fa:""}.fa-bridge{--fa:"";--fa--fa:""}.fa-phone-alt,.fa-phone-flip{--fa:"";--fa--fa:""}.fa-truck-front{--fa:"";--fa--fa:""}.fa-cat{--fa:"";--fa--fa:""}.fa-anchor-circle-exclamation{--fa:"";--fa--fa:""}.fa-truck-field{--fa:"";--fa--fa:""}.fa-route{--fa:"";--fa--fa:""}.fa-clipboard-question{--fa:"";--fa--fa:""}.fa-panorama{--fa:"";--fa--fa:""}.fa-comment-medical{--fa:"";--fa--fa:""}.fa-teeth-open{--fa:"";--fa--fa:""}.fa-file-circle-minus{--fa:"";--fa--fa:""}.fa-tags{--fa:"";--fa--fa:""}.fa-wine-glass{--fa:"";--fa--fa:""}.fa-fast-forward,.fa-forward-fast{--fa:"";--fa--fa:""}.fa-face-meh-blank,.fa-meh-blank{--fa:"";--fa--fa:""}.fa-parking,.fa-square-parking{--fa:"";--fa--fa:""}.fa-house-signal{--fa:"";--fa--fa:""}.fa-bars-progress,.fa-tasks-alt{--fa:"";--fa--fa:""}.fa-faucet-drip{--fa:"";--fa--fa:""}.fa-cart-flatbed,.fa-dolly-flatbed{--fa:"";--fa--fa:""}.fa-ban-smoking,.fa-smoking-ban{--fa:"";--fa--fa:""}.fa-terminal{--fa:"";--fa--fa:""}.fa-mobile-button{--fa:"";--fa--fa:""}.fa-house-medical-flag{--fa:"";--fa--fa:""}.fa-basket-shopping,.fa-shopping-basket{--fa:"";--fa--fa:""}.fa-tape{--fa:"";--fa--fa:""}.fa-bus-alt,.fa-bus-simple{--fa:"";--fa--fa:""}.fa-eye{--fa:"";--fa--fa:""}.fa-face-sad-cry,.fa-sad-cry{--fa:"";--fa--fa:""}.fa-audio-description{--fa:"";--fa--fa:""}.fa-person-military-to-person{--fa:"";--fa--fa:""}.fa-file-shield{--fa:"";--fa--fa:""}.fa-user-slash{--fa:"";--fa--fa:""}.fa-pen{--fa:"";--fa--fa:""}.fa-tower-observation{--fa:"";--fa--fa:""}.fa-file-code{--fa:"";--fa--fa:""}.fa-signal,.fa-signal-5,.fa-signal-perfect{--fa:"";--fa--fa:""}.fa-bus{--fa:"";--fa--fa:""}.fa-heart-circle-xmark{--fa:"";--fa--fa:""}.fa-home-lg,.fa-house-chimney{--fa:"";--fa--fa:""}.fa-window-maximize{--fa:"";--fa--fa:""}.fa-face-frown,.fa-frown{--fa:"";--fa--fa:""}.fa-prescription{--fa:"";--fa--fa:""}.fa-shop,.fa-store-alt{--fa:"";--fa--fa:""}.fa-floppy-disk,.fa-save{--fa:"";--fa--fa:""}.fa-vihara{--fa:"";--fa--fa:""}.fa-balance-scale-left,.fa-scale-unbalanced{--fa:"";--fa--fa:""}.fa-sort-asc,.fa-sort-up{--fa:"";--fa--fa:""}.fa-comment-dots,.fa-commenting{--fa:"";--fa--fa:""}.fa-plant-wilt{--fa:"";--fa--fa:""}.fa-diamond{--fa:"";--fa--fa:""}.fa-face-grin-squint,.fa-grin-squint{--fa:"";--fa--fa:""}.fa-hand-holding-dollar,.fa-hand-holding-usd{--fa:"";--fa--fa:""}.fa-chart-diagram{--fa:"";--fa--fa:""}.fa-bacterium{--fa:"";--fa--fa:""}.fa-hand-pointer{--fa:"";--fa--fa:""}.fa-drum-steelpan{--fa:"";--fa--fa:""}.fa-hand-scissors{--fa:"";--fa--fa:""}.fa-hands-praying,.fa-praying-hands{--fa:"";--fa--fa:""}.fa-arrow-right-rotate,.fa-arrow-rotate-forward,.fa-arrow-rotate-right,.fa-redo{--fa:"";--fa--fa:""}.fa-biohazard{--fa:"";--fa--fa:""}.fa-location,.fa-location-crosshairs{--fa:"";--fa--fa:""}.fa-mars-double{--fa:"";--fa--fa:""}.fa-child-dress{--fa:"";--fa--fa:""}.fa-users-between-lines{--fa:"";--fa--fa:""}.fa-lungs-virus{--fa:"";--fa--fa:""}.fa-face-grin-tears,.fa-grin-tears{--fa:"";--fa--fa:""}.fa-phone{--fa:"";--fa--fa:""}.fa-calendar-times,.fa-calendar-xmark{--fa:"";--fa--fa:""}.fa-child-reaching{--fa:"";--fa--fa:""}.fa-head-side-virus{--fa:"";--fa--fa:""}.fa-user-cog,.fa-user-gear{--fa:"";--fa--fa:""}.fa-arrow-up-1-9,.fa-sort-numeric-up{--fa:"";--fa--fa:""}.fa-door-closed{--fa:"";--fa--fa:""}.fa-shield-virus{--fa:"";--fa--fa:""}.fa-dice-six{--fa:"";--fa--fa:""}.fa-mosquito-net{--fa:"";--fa--fa:""}.fa-file-fragment{--fa:"";--fa--fa:""}.fa-bridge-water{--fa:"";--fa--fa:""}.fa-person-booth{--fa:"";--fa--fa:""}.fa-text-width{--fa:"";--fa--fa:""}.fa-hat-wizard{--fa:"";--fa--fa:""}.fa-pen-fancy{--fa:"";--fa--fa:""}.fa-digging,.fa-person-digging{--fa:"";--fa--fa:""}.fa-trash{--fa:"";--fa--fa:""}.fa-gauge-simple,.fa-gauge-simple-med,.fa-tachometer-average{--fa:"";--fa--fa:""}.fa-book-medical{--fa:"";--fa--fa:""}.fa-poo{--fa:"";--fa--fa:""}.fa-quote-right,.fa-quote-right-alt{--fa:"";--fa--fa:""}.fa-shirt,.fa-t-shirt,.fa-tshirt{--fa:"";--fa--fa:""}.fa-cubes{--fa:"";--fa--fa:""}.fa-divide{--fa:"";--fa--fa:""}.fa-tenge,.fa-tenge-sign{--fa:"";--fa--fa:""}.fa-headphones{--fa:"";--fa--fa:""}.fa-hands-holding{--fa:"";--fa--fa:""}.fa-hands-clapping{--fa:"";--fa--fa:""}.fa-republican{--fa:"";--fa--fa:""}.fa-arrow-left{--fa:"";--fa--fa:""}.fa-person-circle-xmark{--fa:"";--fa--fa:""}.fa-ruler{--fa:"";--fa--fa:""}.fa-align-left{--fa:"";--fa--fa:""}.fa-dice-d6{--fa:"";--fa--fa:""}.fa-restroom{--fa:"";--fa--fa:""}.fa-j{--fa:"J";--fa--fa:"JJ"}.fa-users-viewfinder{--fa:"";--fa--fa:""}.fa-file-video{--fa:"";--fa--fa:""}.fa-external-link-alt,.fa-up-right-from-square{--fa:"";--fa--fa:""}.fa-table-cells,.fa-th{--fa:"";--fa--fa:""}.fa-file-pdf{--fa:"";--fa--fa:""}.fa-bible,.fa-book-bible{--fa:"";--fa--fa:""}.fa-o{--fa:"O";--fa--fa:"OO"}.fa-medkit,.fa-suitcase-medical{--fa:"";--fa--fa:""}.fa-user-secret{--fa:"";--fa--fa:""}.fa-otter{--fa:"";--fa--fa:""}.fa-female,.fa-person-dress{--fa:"";--fa--fa:""}.fa-comment-dollar{--fa:"";--fa--fa:""}.fa-briefcase-clock,.fa-business-time{--fa:"";--fa--fa:""}.fa-table-cells-large,.fa-th-large{--fa:"";--fa--fa:""}.fa-book-tanakh,.fa-tanakh{--fa:"";--fa--fa:""}.fa-phone-volume,.fa-volume-control-phone{--fa:"";--fa--fa:""}.fa-hat-cowboy-side{--fa:"";--fa--fa:""}.fa-clipboard-user{--fa:"";--fa--fa:""}.fa-child{--fa:"";--fa--fa:""}.fa-lira-sign{--fa:"";--fa--fa:""}.fa-satellite{--fa:"";--fa--fa:""}.fa-plane-lock{--fa:"";--fa--fa:""}.fa-tag{--fa:"";--fa--fa:""}.fa-comment{--fa:"";--fa--fa:""}.fa-birthday-cake,.fa-cake,.fa-cake-candles{--fa:"";--fa--fa:""}.fa-envelope{--fa:"";--fa--fa:""}.fa-angle-double-up,.fa-angles-up{--fa:"";--fa--fa:""}.fa-paperclip{--fa:"";--fa--fa:""}.fa-arrow-right-to-city{--fa:"";--fa--fa:""}.fa-ribbon{--fa:"";--fa--fa:""}.fa-lungs{--fa:"";--fa--fa:""}.fa-arrow-up-9-1,.fa-sort-numeric-up-alt{--fa:"";--fa--fa:""}.fa-litecoin-sign{--fa:"";--fa--fa:""}.fa-border-none{--fa:"";--fa--fa:""}.fa-circle-nodes{--fa:"";--fa--fa:""}.fa-parachute-box{--fa:"";--fa--fa:""}.fa-indent{--fa:"";--fa--fa:""}.fa-truck-field-un{--fa:"";--fa--fa:""}.fa-hourglass,.fa-hourglass-empty{--fa:"";--fa--fa:""}.fa-mountain{--fa:"";--fa--fa:""}.fa-user-doctor,.fa-user-md{--fa:"";--fa--fa:""}.fa-circle-info,.fa-info-circle{--fa:"";--fa--fa:""}.fa-cloud-meatball{--fa:"";--fa--fa:""}.fa-camera,.fa-camera-alt{--fa:"";--fa--fa:""}.fa-square-virus{--fa:"";--fa--fa:""}.fa-meteor{--fa:"";--fa--fa:""}.fa-car-on{--fa:"";--fa--fa:""}.fa-sleigh{--fa:"";--fa--fa:""}.fa-arrow-down-1-9,.fa-sort-numeric-asc,.fa-sort-numeric-down{--fa:"";--fa--fa:""}.fa-hand-holding-droplet,.fa-hand-holding-water{--fa:"";--fa--fa:""}.fa-water{--fa:"";--fa--fa:""}.fa-calendar-check{--fa:"";--fa--fa:""}.fa-braille{--fa:"";--fa--fa:""}.fa-prescription-bottle-alt,.fa-prescription-bottle-medical{--fa:"";--fa--fa:""}.fa-landmark{--fa:"";--fa--fa:""}.fa-truck{--fa:"";--fa--fa:""}.fa-crosshairs{--fa:"";--fa--fa:""}.fa-person-cane{--fa:"";--fa--fa:""}.fa-tent{--fa:"";--fa--fa:""}.fa-vest-patches{--fa:"";--fa--fa:""}.fa-check-double{--fa:"";--fa--fa:""}.fa-arrow-down-a-z,.fa-sort-alpha-asc,.fa-sort-alpha-down{--fa:"";--fa--fa:""}.fa-money-bill-wheat{--fa:"";--fa--fa:""}.fa-cookie{--fa:"";--fa--fa:""}.fa-arrow-left-rotate,.fa-arrow-rotate-back,.fa-arrow-rotate-backward,.fa-arrow-rotate-left,.fa-undo{--fa:"";--fa--fa:""}.fa-hard-drive,.fa-hdd{--fa:"";--fa--fa:""}.fa-face-grin-squint-tears,.fa-grin-squint-tears{--fa:"";--fa--fa:""}.fa-dumbbell{--fa:"";--fa--fa:""}.fa-list-alt,.fa-rectangle-list{--fa:"";--fa--fa:""}.fa-tarp-droplet{--fa:"";--fa--fa:""}.fa-house-medical-circle-check{--fa:"";--fa--fa:""}.fa-person-skiing-nordic,.fa-skiing-nordic{--fa:"";--fa--fa:""}.fa-calendar-plus{--fa:"";--fa--fa:""}.fa-plane-arrival{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-left,.fa-circle-left{--fa:"";--fa--fa:""}.fa-subway,.fa-train-subway{--fa:"";--fa--fa:""}.fa-chart-gantt{--fa:"";--fa--fa:""}.fa-indian-rupee,.fa-indian-rupee-sign,.fa-inr{--fa:"";--fa--fa:""}.fa-crop-alt,.fa-crop-simple{--fa:"";--fa--fa:""}.fa-money-bill-1,.fa-money-bill-alt{--fa:"";--fa--fa:""}.fa-left-long,.fa-long-arrow-alt-left{--fa:"";--fa--fa:""}.fa-dna{--fa:"";--fa--fa:""}.fa-virus-slash{--fa:"";--fa--fa:""}.fa-minus,.fa-subtract{--fa:"";--fa--fa:""}.fa-chess{--fa:"";--fa--fa:""}.fa-arrow-left-long,.fa-long-arrow-left{--fa:"";--fa--fa:""}.fa-plug-circle-check{--fa:"";--fa--fa:""}.fa-street-view{--fa:"";--fa--fa:""}.fa-franc-sign{--fa:"";--fa--fa:""}.fa-volume-off{--fa:"";--fa--fa:""}.fa-american-sign-language-interpreting,.fa-asl-interpreting,.fa-hands-american-sign-language-interpreting,.fa-hands-asl-interpreting{--fa:"";--fa--fa:""}.fa-cog,.fa-gear{--fa:"";--fa--fa:""}.fa-droplet-slash,.fa-tint-slash{--fa:"";--fa--fa:""}.fa-mosque{--fa:"";--fa--fa:""}.fa-mosquito{--fa:"";--fa--fa:""}.fa-star-of-david{--fa:"";--fa--fa:""}.fa-person-military-rifle{--fa:"";--fa--fa:""}.fa-cart-shopping,.fa-shopping-cart{--fa:"";--fa--fa:""}.fa-vials{--fa:"";--fa--fa:""}.fa-plug-circle-plus{--fa:"";--fa--fa:""}.fa-place-of-worship{--fa:"";--fa--fa:""}.fa-grip-vertical{--fa:"";--fa--fa:""}.fa-hexagon-nodes{--fa:"";--fa--fa:""}.fa-arrow-turn-up,.fa-level-up{--fa:"";--fa--fa:""}.fa-u{--fa:"U";--fa--fa:"UU"}.fa-square-root-alt,.fa-square-root-variable{--fa:"";--fa--fa:""}.fa-clock,.fa-clock-four{--fa:"";--fa--fa:""}.fa-backward-step,.fa-step-backward{--fa:"";--fa--fa:""}.fa-pallet{--fa:"";--fa--fa:""}.fa-faucet{--fa:"";--fa--fa:""}.fa-baseball-bat-ball{--fa:"";--fa--fa:""}.fa-s{--fa:"S";--fa--fa:"SS"}.fa-timeline{--fa:"";--fa--fa:""}.fa-keyboard{--fa:"";--fa--fa:""}.fa-caret-down{--fa:"";--fa--fa:""}.fa-clinic-medical,.fa-house-chimney-medical{--fa:"";--fa--fa:""}.fa-temperature-3,.fa-temperature-three-quarters,.fa-thermometer-3,.fa-thermometer-three-quarters{--fa:"";--fa--fa:""}.fa-mobile-android-alt,.fa-mobile-screen{--fa:"";--fa--fa:""}.fa-plane-up{--fa:"";--fa--fa:""}.fa-piggy-bank{--fa:"";--fa--fa:""}.fa-battery-3,.fa-battery-half{--fa:"";--fa--fa:""}.fa-mountain-city{--fa:"";--fa--fa:""}.fa-coins{--fa:"";--fa--fa:""}.fa-khanda{--fa:"";--fa--fa:""}.fa-sliders,.fa-sliders-h{--fa:"";--fa--fa:""}.fa-folder-tree{--fa:"";--fa--fa:""}.fa-network-wired{--fa:"";--fa--fa:""}.fa-map-pin{--fa:"";--fa--fa:""}.fa-hamsa{--fa:"";--fa--fa:""}.fa-cent-sign{--fa:"";--fa--fa:""}.fa-flask{--fa:"";--fa--fa:""}.fa-person-pregnant{--fa:"";--fa--fa:""}.fa-wand-sparkles{--fa:"";--fa--fa:""}.fa-ellipsis-v,.fa-ellipsis-vertical{--fa:"";--fa--fa:""}.fa-ticket{--fa:"";--fa--fa:""}.fa-power-off{--fa:"";--fa--fa:""}.fa-long-arrow-alt-right,.fa-right-long{--fa:"";--fa--fa:""}.fa-flag-usa{--fa:"";--fa--fa:""}.fa-laptop-file{--fa:"";--fa--fa:""}.fa-teletype,.fa-tty{--fa:"";--fa--fa:""}.fa-diagram-next{--fa:"";--fa--fa:""}.fa-person-rifle{--fa:"";--fa--fa:""}.fa-house-medical-circle-exclamation{--fa:"";--fa--fa:""}.fa-closed-captioning{--fa:"";--fa--fa:""}.fa-hiking,.fa-person-hiking{--fa:"";--fa--fa:""}.fa-venus-double{--fa:"";--fa--fa:""}.fa-images{--fa:"";--fa--fa:""}.fa-calculator{--fa:"";--fa--fa:""}.fa-people-pulling{--fa:"";--fa--fa:""}.fa-n{--fa:"N";--fa--fa:"NN"}.fa-cable-car,.fa-tram{--fa:"";--fa--fa:""}.fa-cloud-rain{--fa:"";--fa--fa:""}.fa-building-circle-xmark{--fa:"";--fa--fa:""}.fa-ship{--fa:"";--fa--fa:""}.fa-arrows-down-to-line{--fa:"";--fa--fa:""}.fa-download{--fa:"";--fa--fa:""}.fa-face-grin,.fa-grin{--fa:"";--fa--fa:""}.fa-backspace,.fa-delete-left{--fa:"";--fa--fa:""}.fa-eye-dropper,.fa-eye-dropper-empty,.fa-eyedropper{--fa:"";--fa--fa:""}.fa-file-circle-check{--fa:"";--fa--fa:""}.fa-forward{--fa:"";--fa--fa:""}.fa-mobile,.fa-mobile-android,.fa-mobile-phone{--fa:"";--fa--fa:""}.fa-face-meh,.fa-meh{--fa:"";--fa--fa:""}.fa-align-center{--fa:"";--fa--fa:""}.fa-book-dead,.fa-book-skull{--fa:"";--fa--fa:""}.fa-drivers-license,.fa-id-card{--fa:"";--fa--fa:""}.fa-dedent,.fa-outdent{--fa:"";--fa--fa:""}.fa-heart-circle-exclamation{--fa:"";--fa--fa:""}.fa-home,.fa-home-alt,.fa-home-lg-alt,.fa-house{--fa:"";--fa--fa:""}.fa-calendar-week{--fa:"";--fa--fa:""}.fa-laptop-medical{--fa:"";--fa--fa:""}.fa-b{--fa:"B";--fa--fa:"BB"}.fa-file-medical{--fa:"";--fa--fa:""}.fa-dice-one{--fa:"";--fa--fa:""}.fa-kiwi-bird{--fa:"";--fa--fa:""}.fa-arrow-right-arrow-left,.fa-exchange{--fa:"";--fa--fa:""}.fa-redo-alt,.fa-rotate-forward,.fa-rotate-right{--fa:"";--fa--fa:""}.fa-cutlery,.fa-utensils{--fa:"";--fa--fa:""}.fa-arrow-up-wide-short,.fa-sort-amount-up{--fa:"";--fa--fa:""}.fa-mill-sign{--fa:"";--fa--fa:""}.fa-bowl-rice{--fa:"";--fa--fa:""}.fa-skull{--fa:"";--fa--fa:""}.fa-broadcast-tower,.fa-tower-broadcast{--fa:"";--fa--fa:""}.fa-truck-pickup{--fa:"";--fa--fa:""}.fa-long-arrow-alt-up,.fa-up-long{--fa:"";--fa--fa:""}.fa-stop{--fa:"";--fa--fa:""}.fa-code-merge{--fa:"";--fa--fa:""}.fa-upload{--fa:"";--fa--fa:""}.fa-hurricane{--fa:"";--fa--fa:""}.fa-mound{--fa:"";--fa--fa:""}.fa-toilet-portable{--fa:"";--fa--fa:""}.fa-compact-disc{--fa:"";--fa--fa:""}.fa-file-arrow-down,.fa-file-download{--fa:"";--fa--fa:""}.fa-caravan{--fa:"";--fa--fa:""}.fa-shield-cat{--fa:"";--fa--fa:""}.fa-bolt,.fa-zap{--fa:"";--fa--fa:""}.fa-glass-water{--fa:"";--fa--fa:""}.fa-oil-well{--fa:"";--fa--fa:""}.fa-vault{--fa:"";--fa--fa:""}.fa-mars{--fa:"";--fa--fa:""}.fa-toilet{--fa:"";--fa--fa:""}.fa-plane-circle-xmark{--fa:"";--fa--fa:""}.fa-cny,.fa-jpy,.fa-rmb,.fa-yen,.fa-yen-sign{--fa:"";--fa--fa:""}.fa-rouble,.fa-rub,.fa-ruble,.fa-ruble-sign{--fa:"";--fa--fa:""}.fa-sun{--fa:"";--fa--fa:""}.fa-guitar{--fa:"";--fa--fa:""}.fa-face-laugh-wink,.fa-laugh-wink{--fa:"";--fa--fa:""}.fa-horse-head{--fa:"";--fa--fa:""}.fa-bore-hole{--fa:"";--fa--fa:""}.fa-industry{--fa:"";--fa--fa:""}.fa-arrow-alt-circle-down,.fa-circle-down{--fa:"";--fa--fa:""}.fa-arrows-turn-to-dots{--fa:"";--fa--fa:""}.fa-florin-sign{--fa:"";--fa--fa:""}.fa-arrow-down-short-wide,.fa-sort-amount-desc,.fa-sort-amount-down-alt{--fa:"";--fa--fa:""}.fa-less-than{--fa:"\<";--fa--fa:"\<\<"}.fa-angle-down{--fa:"";--fa--fa:""}.fa-car-tunnel{--fa:"";--fa--fa:""}.fa-head-side-cough{--fa:"";--fa--fa:""}.fa-grip-lines{--fa:"";--fa--fa:""}.fa-thumbs-down{--fa:"";--fa--fa:""}.fa-user-lock{--fa:"";--fa--fa:""}.fa-arrow-right-long,.fa-long-arrow-right{--fa:"";--fa--fa:""}.fa-anchor-circle-xmark{--fa:"";--fa--fa:""}.fa-ellipsis,.fa-ellipsis-h{--fa:"";--fa--fa:""}.fa-chess-pawn{--fa:"";--fa--fa:""}.fa-first-aid,.fa-kit-medical{--fa:"";--fa--fa:""}.fa-person-through-window{--fa:"";--fa--fa:""}.fa-toolbox{--fa:"";--fa--fa:""}.fa-hands-holding-circle{--fa:"";--fa--fa:""}.fa-bug{--fa:"";--fa--fa:""}.fa-credit-card,.fa-credit-card-alt{--fa:"";--fa--fa:""}.fa-automobile,.fa-car{--fa:"";--fa--fa:""}.fa-hand-holding-hand{--fa:"";--fa--fa:""}.fa-book-open-reader,.fa-book-reader{--fa:"";--fa--fa:""}.fa-mountain-sun{--fa:"";--fa--fa:""}.fa-arrows-left-right-to-line{--fa:"";--fa--fa:""}.fa-dice-d20{--fa:"";--fa--fa:""}.fa-truck-droplet{--fa:"";--fa--fa:""}.fa-file-circle-xmark{--fa:"";--fa--fa:""}.fa-temperature-arrow-up,.fa-temperature-up{--fa:"";--fa--fa:""}.fa-medal{--fa:"";--fa--fa:""}.fa-bed{--fa:"";--fa--fa:""}.fa-h-square,.fa-square-h{--fa:"";--fa--fa:""}.fa-podcast{--fa:"";--fa--fa:""}.fa-temperature-4,.fa-temperature-full,.fa-thermometer-4,.fa-thermometer-full{--fa:"";--fa--fa:""}.fa-bell{--fa:"";--fa--fa:""}.fa-superscript{--fa:"";--fa--fa:""}.fa-plug-circle-xmark{--fa:"";--fa--fa:""}.fa-star-of-life{--fa:"";--fa--fa:""}.fa-phone-slash{--fa:"";--fa--fa:""}.fa-paint-roller{--fa:"";--fa--fa:""}.fa-hands-helping,.fa-handshake-angle{--fa:"";--fa--fa:""}.fa-location-dot,.fa-map-marker-alt{--fa:"";--fa--fa:""}.fa-file{--fa:"";--fa--fa:""}.fa-greater-than{--fa:"\>";--fa--fa:"\>\>"}.fa-person-swimming,.fa-swimmer{--fa:"";--fa--fa:""}.fa-arrow-down{--fa:"";--fa--fa:""}.fa-droplet,.fa-tint{--fa:"";--fa--fa:""}.fa-eraser{--fa:"";--fa--fa:""}.fa-earth,.fa-earth-america,.fa-earth-americas,.fa-globe-americas{--fa:"";--fa--fa:""}.fa-person-burst{--fa:"";--fa--fa:""}.fa-dove{--fa:"";--fa--fa:""}.fa-battery-0,.fa-battery-empty{--fa:"";--fa--fa:""}.fa-socks{--fa:"";--fa--fa:""}.fa-inbox{--fa:"";--fa--fa:""}.fa-section{--fa:"";--fa--fa:""}.fa-gauge-high,.fa-tachometer-alt,.fa-tachometer-alt-fast{--fa:"";--fa--fa:""}.fa-envelope-open-text{--fa:"";--fa--fa:""}.fa-hospital,.fa-hospital-alt,.fa-hospital-wide{--fa:"";--fa--fa:""}.fa-wine-bottle{--fa:"";--fa--fa:""}.fa-chess-rook{--fa:"";--fa--fa:""}.fa-bars-staggered,.fa-reorder,.fa-stream{--fa:"";--fa--fa:""}.fa-dharmachakra{--fa:"";--fa--fa:""}.fa-hotdog{--fa:"";--fa--fa:""}.fa-blind,.fa-person-walking-with-cane{--fa:"";--fa--fa:""}.fa-drum{--fa:"";--fa--fa:""}.fa-ice-cream{--fa:"";--fa--fa:""}.fa-heart-circle-bolt{--fa:"";--fa--fa:""}.fa-fax{--fa:"";--fa--fa:""}.fa-paragraph{--fa:"";--fa--fa:""}.fa-check-to-slot,.fa-vote-yea{--fa:"";--fa--fa:""}.fa-star-half{--fa:"";--fa--fa:""}.fa-boxes,.fa-boxes-alt,.fa-boxes-stacked{--fa:"";--fa--fa:""}.fa-chain,.fa-link{--fa:"";--fa--fa:""}.fa-assistive-listening-systems,.fa-ear-listen{--fa:"";--fa--fa:""}.fa-tree-city{--fa:"";--fa--fa:""}.fa-play{--fa:"";--fa--fa:""}.fa-font{--fa:"";--fa--fa:""}.fa-table-cells-row-lock{--fa:"";--fa--fa:""}.fa-rupiah-sign{--fa:"";--fa--fa:""}.fa-magnifying-glass,.fa-search{--fa:"";--fa--fa:""}.fa-ping-pong-paddle-ball,.fa-table-tennis,.fa-table-tennis-paddle-ball{--fa:"";--fa--fa:""}.fa-diagnoses,.fa-person-dots-from-line{--fa:"";--fa--fa:""}.fa-trash-can-arrow-up,.fa-trash-restore-alt{--fa:"";--fa--fa:""}.fa-naira-sign{--fa:"";--fa--fa:""}.fa-cart-arrow-down{--fa:"";--fa--fa:""}.fa-walkie-talkie{--fa:"";--fa--fa:""}.fa-file-edit,.fa-file-pen{--fa:"";--fa--fa:""}.fa-receipt{--fa:"";--fa--fa:""}.fa-pen-square,.fa-pencil-square,.fa-square-pen{--fa:"";--fa--fa:""}.fa-suitcase-rolling{--fa:"";--fa--fa:""}.fa-person-circle-exclamation{--fa:"";--fa--fa:""}.fa-chevron-down{--fa:"";--fa--fa:""}.fa-battery,.fa-battery-5,.fa-battery-full{--fa:"";--fa--fa:""}.fa-skull-crossbones{--fa:"";--fa--fa:""}.fa-code-compare{--fa:"";--fa--fa:""}.fa-list-dots,.fa-list-ul{--fa:"";--fa--fa:""}.fa-school-lock{--fa:"";--fa--fa:""}.fa-tower-cell{--fa:"";--fa--fa:""}.fa-down-long,.fa-long-arrow-alt-down{--fa:"";--fa--fa:""}.fa-ranking-star{--fa:"";--fa--fa:""}.fa-chess-king{--fa:"";--fa--fa:""}.fa-person-harassing{--fa:"";--fa--fa:""}.fa-brazilian-real-sign{--fa:"";--fa--fa:""}.fa-landmark-alt,.fa-landmark-dome{--fa:"";--fa--fa:""}.fa-arrow-up{--fa:"";--fa--fa:""}.fa-television,.fa-tv,.fa-tv-alt{--fa:"";--fa--fa:""}.fa-shrimp{--fa:"";--fa--fa:""}.fa-list-check,.fa-tasks{--fa:"";--fa--fa:""}.fa-jug-detergent{--fa:"";--fa--fa:""}.fa-circle-user,.fa-user-circle{--fa:"";--fa--fa:""}.fa-user-shield{--fa:"";--fa--fa:""}.fa-wind{--fa:"";--fa--fa:""}.fa-car-burst,.fa-car-crash{--fa:"";--fa--fa:""}.fa-y{--fa:"Y";--fa--fa:"YY"}.fa-person-snowboarding,.fa-snowboarding{--fa:"";--fa--fa:""}.fa-shipping-fast,.fa-truck-fast{--fa:"";--fa--fa:""}.fa-fish{--fa:"";--fa--fa:""}.fa-user-graduate{--fa:"";--fa--fa:""}.fa-adjust,.fa-circle-half-stroke{--fa:"";--fa--fa:""}.fa-clapperboard{--fa:"";--fa--fa:""}.fa-circle-radiation,.fa-radiation-alt{--fa:"";--fa--fa:""}.fa-baseball,.fa-baseball-ball{--fa:"";--fa--fa:""}.fa-jet-fighter-up{--fa:"";--fa--fa:""}.fa-diagram-project,.fa-project-diagram{--fa:"";--fa--fa:""}.fa-copy{--fa:"";--fa--fa:""}.fa-volume-mute,.fa-volume-times,.fa-volume-xmark{--fa:"";--fa--fa:""}.fa-hand-sparkles{--fa:"";--fa--fa:""}.fa-grip,.fa-grip-horizontal{--fa:"";--fa--fa:""}.fa-share-from-square,.fa-share-square{--fa:"";--fa--fa:""}.fa-child-combatant,.fa-child-rifle{--fa:"";--fa--fa:""}.fa-gun{--fa:"";--fa--fa:""}.fa-phone-square,.fa-square-phone{--fa:"";--fa--fa:""}.fa-add,.fa-plus{--fa:"\+";--fa--fa:"\+\+"}.fa-expand{--fa:"";--fa--fa:""}.fa-computer{--fa:"";--fa--fa:""}.fa-close,.fa-multiply,.fa-remove,.fa-times,.fa-xmark{--fa:"";--fa--fa:""}.fa-arrows,.fa-arrows-up-down-left-right{--fa:"";--fa--fa:""}.fa-chalkboard-teacher,.fa-chalkboard-user{--fa:"";--fa--fa:""}.fa-peso-sign{--fa:"";--fa--fa:""}.fa-building-shield{--fa:"";--fa--fa:""}.fa-baby{--fa:"";--fa--fa:""}.fa-users-line{--fa:"";--fa--fa:""}.fa-quote-left,.fa-quote-left-alt{--fa:"";--fa--fa:""}.fa-tractor{--fa:"";--fa--fa:""}.fa-trash-arrow-up,.fa-trash-restore{--fa:"";--fa--fa:""}.fa-arrow-down-up-lock{--fa:"";--fa--fa:""}.fa-lines-leaning{--fa:"";--fa--fa:""}.fa-ruler-combined{--fa:"";--fa--fa:""}.fa-copyright{--fa:"";--fa--fa:""}.fa-equals{--fa:"\=";--fa--fa:"\=\="}.fa-blender{--fa:"";--fa--fa:""}.fa-teeth{--fa:"";--fa--fa:""}.fa-ils,.fa-shekel,.fa-shekel-sign,.fa-sheqel,.fa-sheqel-sign{--fa:"";--fa--fa:""}.fa-map{--fa:"";--fa--fa:""}.fa-rocket{--fa:"";--fa--fa:""}.fa-photo-film,.fa-photo-video{--fa:"";--fa--fa:""}.fa-folder-minus{--fa:"";--fa--fa:""}.fa-hexagon-nodes-bolt{--fa:"";--fa--fa:""}.fa-store{--fa:"";--fa--fa:""}.fa-arrow-trend-up{--fa:"";--fa--fa:""}.fa-plug-circle-minus{--fa:"";--fa--fa:""}.fa-sign,.fa-sign-hanging{--fa:"";--fa--fa:""}.fa-bezier-curve{--fa:"";--fa--fa:""}.fa-bell-slash{--fa:"";--fa--fa:""}.fa-tablet,.fa-tablet-android{--fa:"";--fa--fa:""}.fa-school-flag{--fa:"";--fa--fa:""}.fa-fill{--fa:"";--fa--fa:""}.fa-angle-up{--fa:"";--fa--fa:""}.fa-drumstick-bite{--fa:"";--fa--fa:""}.fa-holly-berry{--fa:"";--fa--fa:""}.fa-chevron-left{--fa:"";--fa--fa:""}.fa-bacteria{--fa:"";--fa--fa:""}.fa-hand-lizard{--fa:"";--fa--fa:""}.fa-notdef{--fa:"";--fa--fa:""}.fa-disease{--fa:"";--fa--fa:""}.fa-briefcase-medical{--fa:"";--fa--fa:""}.fa-genderless{--fa:"";--fa--fa:""}.fa-chevron-right{--fa:"";--fa--fa:""}.fa-retweet{--fa:"";--fa--fa:""}.fa-car-alt,.fa-car-rear{--fa:"";--fa--fa:""}.fa-pump-soap{--fa:"";--fa--fa:""}.fa-video-slash{--fa:"";--fa--fa:""}.fa-battery-2,.fa-battery-quarter{--fa:"";--fa--fa:""}.fa-radio{--fa:"";--fa--fa:""}.fa-baby-carriage,.fa-carriage-baby{--fa:"";--fa--fa:""}.fa-traffic-light{--fa:"";--fa--fa:""}.fa-thermometer{--fa:"";--fa--fa:""}.fa-vr-cardboard{--fa:"";--fa--fa:""}.fa-hand-middle-finger{--fa:"";--fa--fa:""}.fa-percent,.fa-percentage{--fa:"\%";--fa--fa:"\%\%"}.fa-truck-moving{--fa:"";--fa--fa:""}.fa-glass-water-droplet{--fa:"";--fa--fa:""}.fa-display{--fa:"";--fa--fa:""}.fa-face-smile,.fa-smile{--fa:"";--fa--fa:""}.fa-thumb-tack,.fa-thumbtack{--fa:"";--fa--fa:""}.fa-trophy{--fa:"";--fa--fa:""}.fa-person-praying,.fa-pray{--fa:"";--fa--fa:""}.fa-hammer{--fa:"";--fa--fa:""}.fa-hand-peace{--fa:"";--fa--fa:""}.fa-rotate,.fa-sync-alt{--fa:"";--fa--fa:""}.fa-spinner{--fa:"";--fa--fa:""}.fa-robot{--fa:"";--fa--fa:""}.fa-peace{--fa:"";--fa--fa:""}.fa-cogs,.fa-gears{--fa:"";--fa--fa:""}.fa-warehouse{--fa:"";--fa--fa:""}.fa-arrow-up-right-dots{--fa:"";--fa--fa:""}.fa-splotch{--fa:"";--fa--fa:""}.fa-face-grin-hearts,.fa-grin-hearts{--fa:"";--fa--fa:""}.fa-dice-four{--fa:"";--fa--fa:""}.fa-sim-card{--fa:"";--fa--fa:""}.fa-transgender,.fa-transgender-alt{--fa:"";--fa--fa:""}.fa-mercury{--fa:"";--fa--fa:""}.fa-arrow-turn-down,.fa-level-down{--fa:"";--fa--fa:""}.fa-person-falling-burst{--fa:"";--fa--fa:""}.fa-award{--fa:"";--fa--fa:""}.fa-ticket-alt,.fa-ticket-simple{--fa:"";--fa--fa:""}.fa-building{--fa:"";--fa--fa:""}.fa-angle-double-left,.fa-angles-left{--fa:"";--fa--fa:""}.fa-qrcode{--fa:"";--fa--fa:""}.fa-clock-rotate-left,.fa-history{--fa:"";--fa--fa:""}.fa-face-grin-beam-sweat,.fa-grin-beam-sweat{--fa:"";--fa--fa:""}.fa-arrow-right-from-file,.fa-file-export{--fa:"";--fa--fa:""}.fa-shield,.fa-shield-blank{--fa:"";--fa--fa:""}.fa-arrow-up-short-wide,.fa-sort-amount-up-alt{--fa:"";--fa--fa:""}.fa-comment-nodes{--fa:"";--fa--fa:""}.fa-house-medical{--fa:"";--fa--fa:""}.fa-golf-ball,.fa-golf-ball-tee{--fa:"";--fa--fa:""}.fa-chevron-circle-left,.fa-circle-chevron-left{--fa:"";--fa--fa:""}.fa-house-chimney-window{--fa:"";--fa--fa:""}.fa-pen-nib{--fa:"";--fa--fa:""}.fa-tent-arrow-turn-left{--fa:"";--fa--fa:""}.fa-tents{--fa:"";--fa--fa:""}.fa-magic,.fa-wand-magic{--fa:"";--fa--fa:""}.fa-dog{--fa:"";--fa--fa:""}.fa-carrot{--fa:"";--fa--fa:""}.fa-moon{--fa:"";--fa--fa:""}.fa-wine-glass-alt,.fa-wine-glass-empty{--fa:"";--fa--fa:""}.fa-cheese{--fa:"";--fa--fa:""}.fa-yin-yang{--fa:"";--fa--fa:""}.fa-music{--fa:"";--fa--fa:""}.fa-code-commit{--fa:"";--fa--fa:""}.fa-temperature-low{--fa:"";--fa--fa:""}.fa-biking,.fa-person-biking{--fa:"";--fa--fa:""}.fa-broom{--fa:"";--fa--fa:""}.fa-shield-heart{--fa:"";--fa--fa:""}.fa-gopuram{--fa:"";--fa--fa:""}.fa-earth-oceania,.fa-globe-oceania{--fa:"";--fa--fa:""}.fa-square-xmark,.fa-times-square,.fa-xmark-square{--fa:"";--fa--fa:""}.fa-hashtag{--fa:"\#";--fa--fa:"\#\#"}.fa-expand-alt,.fa-up-right-and-down-left-from-center{--fa:"";--fa--fa:""}.fa-oil-can{--fa:"";--fa--fa:""}.fa-t{--fa:"T";--fa--fa:"TT"}.fa-hippo{--fa:"";--fa--fa:""}.fa-chart-column{--fa:"";--fa--fa:""}.fa-infinity{--fa:"";--fa--fa:""}.fa-vial-circle-check{--fa:"";--fa--fa:""}.fa-person-arrow-down-to-line{--fa:"";--fa--fa:""}.fa-voicemail{--fa:"";--fa--fa:""}.fa-fan{--fa:"";--fa--fa:""}.fa-person-walking-luggage{--fa:"";--fa--fa:""}.fa-arrows-alt-v,.fa-up-down{--fa:"";--fa--fa:""}.fa-cloud-moon-rain{--fa:"";--fa--fa:""}.fa-calendar{--fa:"";--fa--fa:""}.fa-trailer{--fa:"";--fa--fa:""}.fa-bahai,.fa-haykal{--fa:"";--fa--fa:""}.fa-sd-card{--fa:"";--fa--fa:""}.fa-dragon{--fa:"";--fa--fa:""}.fa-shoe-prints{--fa:"";--fa--fa:""}.fa-circle-plus,.fa-plus-circle{--fa:"";--fa--fa:""}.fa-face-grin-tongue-wink,.fa-grin-tongue-wink{--fa:"";--fa--fa:""}.fa-hand-holding{--fa:"";--fa--fa:""}.fa-plug-circle-exclamation{--fa:"";--fa--fa:""}.fa-chain-broken,.fa-chain-slash,.fa-link-slash,.fa-unlink{--fa:"";--fa--fa:""}.fa-clone{--fa:"";--fa--fa:""}.fa-person-walking-arrow-loop-left{--fa:"";--fa--fa:""}.fa-arrow-up-z-a,.fa-sort-alpha-up-alt{--fa:"";--fa--fa:""}.fa-fire-alt,.fa-fire-flame-curved{--fa:"";--fa--fa:""}.fa-tornado{--fa:"";--fa--fa:""}.fa-file-circle-plus{--fa:"";--fa--fa:""}.fa-book-quran,.fa-quran{--fa:"";--fa--fa:""}.fa-anchor{--fa:"";--fa--fa:""}.fa-border-all{--fa:"";--fa--fa:""}.fa-angry,.fa-face-angry{--fa:"";--fa--fa:""}.fa-cookie-bite{--fa:"";--fa--fa:""}.fa-arrow-trend-down{--fa:"";--fa--fa:""}.fa-feed,.fa-rss{--fa:"";--fa--fa:""}.fa-draw-polygon{--fa:"";--fa--fa:""}.fa-balance-scale,.fa-scale-balanced{--fa:"";--fa--fa:""}.fa-gauge-simple-high,.fa-tachometer,.fa-tachometer-fast{--fa:"";--fa--fa:""}.fa-shower{--fa:"";--fa--fa:""}.fa-desktop,.fa-desktop-alt{--fa:"";--fa--fa:""}.fa-m{--fa:"M";--fa--fa:"MM"}.fa-table-list,.fa-th-list{--fa:"";--fa--fa:""}.fa-comment-sms,.fa-sms{--fa:"";--fa--fa:""}.fa-book{--fa:"";--fa--fa:""}.fa-user-plus{--fa:"";--fa--fa:""}.fa-check{--fa:"";--fa--fa:""}.fa-battery-4,.fa-battery-three-quarters{--fa:"";--fa--fa:""}.fa-house-circle-check{--fa:"";--fa--fa:""}.fa-angle-left{--fa:"";--fa--fa:""}.fa-diagram-successor{--fa:"";--fa--fa:""}.fa-truck-arrow-right{--fa:"";--fa--fa:""}.fa-arrows-split-up-and-left{--fa:"";--fa--fa:""}.fa-fist-raised,.fa-hand-fist{--fa:"";--fa--fa:""}.fa-cloud-moon{--fa:"";--fa--fa:""}.fa-briefcase{--fa:"";--fa--fa:""}.fa-person-falling{--fa:"";--fa--fa:""}.fa-image-portrait,.fa-portrait{--fa:"";--fa--fa:""}.fa-user-tag{--fa:"";--fa--fa:""}.fa-rug{--fa:"";--fa--fa:""}.fa-earth-europe,.fa-globe-europe{--fa:"";--fa--fa:""}.fa-cart-flatbed-suitcase,.fa-luggage-cart{--fa:"";--fa--fa:""}.fa-rectangle-times,.fa-rectangle-xmark,.fa-times-rectangle,.fa-window-close{--fa:"";--fa--fa:""}.fa-baht-sign{--fa:"";--fa--fa:""}.fa-book-open{--fa:"";--fa--fa:""}.fa-book-journal-whills,.fa-journal-whills{--fa:"";--fa--fa:""}.fa-handcuffs{--fa:"";--fa--fa:""}.fa-exclamation-triangle,.fa-triangle-exclamation,.fa-warning{--fa:"";--fa--fa:""}.fa-database{--fa:"";--fa--fa:""}.fa-mail-forward,.fa-share{--fa:"";--fa--fa:""}.fa-bottle-droplet{--fa:"";--fa--fa:""}.fa-mask-face{--fa:"";--fa--fa:""}.fa-hill-rockslide{--fa:"";--fa--fa:""}.fa-exchange-alt,.fa-right-left{--fa:"";--fa--fa:""}.fa-paper-plane{--fa:"";--fa--fa:""}.fa-road-circle-exclamation{--fa:"";--fa--fa:""}.fa-dungeon{--fa:"";--fa--fa:""}.fa-align-right{--fa:"";--fa--fa:""}.fa-money-bill-1-wave,.fa-money-bill-wave-alt{--fa:"";--fa--fa:""}.fa-life-ring{--fa:"";--fa--fa:""}.fa-hands,.fa-sign-language,.fa-signing{--fa:"";--fa--fa:""}.fa-calendar-day{--fa:"";--fa--fa:""}.fa-ladder-water,.fa-swimming-pool,.fa-water-ladder{--fa:"";--fa--fa:""}.fa-arrows-up-down,.fa-arrows-v{--fa:"";--fa--fa:""}.fa-face-grimace,.fa-grimace{--fa:"";--fa--fa:""}.fa-wheelchair-alt,.fa-wheelchair-move{--fa:"";--fa--fa:""}.fa-level-down-alt,.fa-turn-down{--fa:"";--fa--fa:""}.fa-person-walking-arrow-right{--fa:"";--fa--fa:""}.fa-envelope-square,.fa-square-envelope{--fa:"";--fa--fa:""}.fa-dice{--fa:"";--fa--fa:""}.fa-bowling-ball{--fa:"";--fa--fa:""}.fa-brain{--fa:"";--fa--fa:""}.fa-band-aid,.fa-bandage{--fa:"";--fa--fa:""}.fa-calendar-minus{--fa:"";--fa--fa:""}.fa-circle-xmark,.fa-times-circle,.fa-xmark-circle{--fa:"";--fa--fa:""}.fa-gifts{--fa:"";--fa--fa:""}.fa-hotel{--fa:"";--fa--fa:""}.fa-earth-asia,.fa-globe-asia{--fa:"";--fa--fa:""}.fa-id-card-alt,.fa-id-card-clip{--fa:"";--fa--fa:""}.fa-magnifying-glass-plus,.fa-search-plus{--fa:"";--fa--fa:""}.fa-thumbs-up{--fa:"";--fa--fa:""}.fa-user-clock{--fa:"";--fa--fa:""}.fa-allergies,.fa-hand-dots{--fa:"";--fa--fa:""}.fa-file-invoice{--fa:"";--fa--fa:""}.fa-window-minimize{--fa:"";--fa--fa:""}.fa-coffee,.fa-mug-saucer{--fa:"";--fa--fa:""}.fa-brush{--fa:"";--fa--fa:""}.fa-file-half-dashed{--fa:"";--fa--fa:""}.fa-mask{--fa:"";--fa--fa:""}.fa-magnifying-glass-minus,.fa-search-minus{--fa:"";--fa--fa:""}.fa-ruler-vertical{--fa:"";--fa--fa:""}.fa-user-alt,.fa-user-large{--fa:"";--fa--fa:""}.fa-train-tram{--fa:"";--fa--fa:""}.fa-user-nurse{--fa:"";--fa--fa:""}.fa-syringe{--fa:"";--fa--fa:""}.fa-cloud-sun{--fa:"";--fa--fa:""}.fa-stopwatch-20{--fa:"";--fa--fa:""}.fa-square-full{--fa:"";--fa--fa:""}.fa-magnet{--fa:"";--fa--fa:""}.fa-jar{--fa:"";--fa--fa:""}.fa-note-sticky,.fa-sticky-note{--fa:"";--fa--fa:""}.fa-bug-slash{--fa:"";--fa--fa:""}.fa-arrow-up-from-water-pump{--fa:"";--fa--fa:""}.fa-bone{--fa:"";--fa--fa:""}.fa-table-cells-row-unlock{--fa:"";--fa--fa:""}.fa-user-injured{--fa:"";--fa--fa:""}.fa-face-sad-tear,.fa-sad-tear{--fa:"";--fa--fa:""}.fa-plane{--fa:"";--fa--fa:""}.fa-tent-arrows-down{--fa:"";--fa--fa:""}.fa-exclamation{--fa:"\!";--fa--fa:"\!\!"}.fa-arrows-spin{--fa:"";--fa--fa:""}.fa-print{--fa:"";--fa--fa:""}.fa-try,.fa-turkish-lira,.fa-turkish-lira-sign{--fa:"";--fa--fa:""}.fa-dollar,.fa-dollar-sign,.fa-usd{--fa:"\$";--fa--fa:"\$\$"}.fa-x{--fa:"X";--fa--fa:"XX"}.fa-magnifying-glass-dollar,.fa-search-dollar{--fa:"";--fa--fa:""}.fa-users-cog,.fa-users-gear{--fa:"";--fa--fa:""}.fa-person-military-pointing{--fa:"";--fa--fa:""}.fa-bank,.fa-building-columns,.fa-institution,.fa-museum,.fa-university{--fa:"";--fa--fa:""}.fa-umbrella{--fa:"";--fa--fa:""}.fa-trowel{--fa:"";--fa--fa:""}.fa-d{--fa:"D";--fa--fa:"DD"}.fa-stapler{--fa:"";--fa--fa:""}.fa-masks-theater,.fa-theater-masks{--fa:"";--fa--fa:""}.fa-kip-sign{--fa:"";--fa--fa:""}.fa-hand-point-left{--fa:"";--fa--fa:""}.fa-handshake-alt,.fa-handshake-simple{--fa:"";--fa--fa:""}.fa-fighter-jet,.fa-jet-fighter{--fa:"";--fa--fa:""}.fa-share-alt-square,.fa-square-share-nodes{--fa:"";--fa--fa:""}.fa-barcode{--fa:"";--fa--fa:""}.fa-plus-minus{--fa:"";--fa--fa:""}.fa-video,.fa-video-camera{--fa:"";--fa--fa:""}.fa-graduation-cap,.fa-mortar-board{--fa:"";--fa--fa:""}.fa-hand-holding-medical{--fa:"";--fa--fa:""}.fa-person-circle-check{--fa:"";--fa--fa:""}.fa-level-up-alt,.fa-turn-up{--fa:"";--fa--fa:""}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:400;src:url(/build/fonts/fa-regular-400.4f6a2dab.woff2) format("woff2"),url(/build/fonts/fa-regular-400.05fdd87b.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-display:block;font-family:Font Awesome\ 6 Free;font-style:normal;font-weight:900;src:url(/build/fonts/fa-solid-900.83a538a0.woff2) format("woff2"),url(/build/fonts/fa-solid-900.ad1782c7.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-display:block;font-family:Font Awesome\ 6 Brands;font-style:normal;font-weight:400;src:url(/build/fonts/fa-brands-400.fdbb5585.woff2) format("woff2"),url(/build/fonts/fa-brands-400.26b80c88.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero{--fa:""}.fa-hooli{--fa:""}.fa-yelp{--fa:""}.fa-cc-visa{--fa:""}.fa-lastfm{--fa:""}.fa-shopware{--fa:""}.fa-creative-commons-nc{--fa:""}.fa-aws{--fa:""}.fa-redhat{--fa:""}.fa-yoast{--fa:""}.fa-cloudflare{--fa:""}.fa-ups{--fa:""}.fa-pixiv{--fa:""}.fa-wpexplorer{--fa:""}.fa-dyalog{--fa:""}.fa-bity{--fa:""}.fa-stackpath{--fa:""}.fa-buysellads{--fa:""}.fa-first-order{--fa:""}.fa-modx{--fa:""}.fa-guilded{--fa:""}.fa-vnv{--fa:""}.fa-js-square,.fa-square-js{--fa:""}.fa-microsoft{--fa:""}.fa-qq{--fa:""}.fa-orcid{--fa:""}.fa-java{--fa:""}.fa-invision{--fa:""}.fa-creative-commons-pd-alt{--fa:""}.fa-centercode{--fa:""}.fa-glide-g{--fa:""}.fa-drupal{--fa:""}.fa-jxl{--fa:""}.fa-dart-lang{--fa:""}.fa-hire-a-helper{--fa:""}.fa-creative-commons-by{--fa:""}.fa-unity{--fa:""}.fa-whmcs{--fa:""}.fa-rocketchat{--fa:""}.fa-vk{--fa:""}.fa-untappd{--fa:""}.fa-mailchimp{--fa:""}.fa-css3-alt{--fa:""}.fa-reddit-square,.fa-square-reddit{--fa:""}.fa-vimeo-v{--fa:""}.fa-contao{--fa:""}.fa-square-font-awesome{--fa:""}.fa-deskpro{--fa:""}.fa-brave{--fa:""}.fa-sistrix{--fa:""}.fa-instagram-square,.fa-square-instagram{--fa:""}.fa-battle-net{--fa:""}.fa-the-red-yeti{--fa:""}.fa-hacker-news-square,.fa-square-hacker-news{--fa:""}.fa-edge{--fa:""}.fa-threads{--fa:""}.fa-napster{--fa:""}.fa-snapchat-square,.fa-square-snapchat{--fa:""}.fa-google-plus-g{--fa:""}.fa-artstation{--fa:""}.fa-markdown{--fa:""}.fa-sourcetree{--fa:""}.fa-google-plus{--fa:""}.fa-diaspora{--fa:""}.fa-foursquare{--fa:""}.fa-stack-overflow{--fa:""}.fa-github-alt{--fa:""}.fa-phoenix-squadron{--fa:""}.fa-pagelines{--fa:""}.fa-algolia{--fa:""}.fa-red-river{--fa:""}.fa-creative-commons-sa{--fa:""}.fa-safari{--fa:""}.fa-google{--fa:""}.fa-font-awesome-alt,.fa-square-font-awesome-stroke{--fa:""}.fa-atlassian{--fa:""}.fa-linkedin-in{--fa:""}.fa-digital-ocean{--fa:""}.fa-nimblr{--fa:""}.fa-chromecast{--fa:""}.fa-evernote{--fa:""}.fa-hacker-news{--fa:""}.fa-creative-commons-sampling{--fa:""}.fa-adversal{--fa:""}.fa-creative-commons{--fa:""}.fa-watchman-monitoring{--fa:""}.fa-fonticons{--fa:""}.fa-weixin{--fa:""}.fa-shirtsinbulk{--fa:""}.fa-codepen{--fa:""}.fa-git-alt{--fa:""}.fa-lyft{--fa:""}.fa-rev{--fa:""}.fa-windows{--fa:""}.fa-wizards-of-the-coast{--fa:""}.fa-square-viadeo,.fa-viadeo-square{--fa:""}.fa-meetup{--fa:""}.fa-centos{--fa:""}.fa-adn{--fa:""}.fa-cloudsmith{--fa:""}.fa-opensuse{--fa:""}.fa-pied-piper-alt{--fa:""}.fa-dribbble-square,.fa-square-dribbble{--fa:""}.fa-codiepie{--fa:""}.fa-node{--fa:""}.fa-mix{--fa:""}.fa-steam{--fa:""}.fa-cc-apple-pay{--fa:""}.fa-scribd{--fa:""}.fa-debian{--fa:""}.fa-openid{--fa:""}.fa-instalod{--fa:""}.fa-files-pinwheel{--fa:""}.fa-expeditedssl{--fa:""}.fa-sellcast{--fa:""}.fa-square-twitter,.fa-twitter-square{--fa:""}.fa-r-project{--fa:""}.fa-delicious{--fa:""}.fa-freebsd{--fa:""}.fa-vuejs{--fa:""}.fa-accusoft{--fa:""}.fa-ioxhost{--fa:""}.fa-fonticons-fi{--fa:""}.fa-app-store{--fa:""}.fa-cc-mastercard{--fa:""}.fa-itunes-note{--fa:""}.fa-golang{--fa:""}.fa-kickstarter,.fa-square-kickstarter{--fa:""}.fa-grav{--fa:""}.fa-weibo{--fa:""}.fa-uncharted{--fa:""}.fa-firstdraft{--fa:""}.fa-square-youtube,.fa-youtube-square{--fa:""}.fa-wikipedia-w{--fa:""}.fa-rendact,.fa-wpressr{--fa:""}.fa-angellist{--fa:""}.fa-galactic-republic{--fa:""}.fa-nfc-directional{--fa:""}.fa-skype{--fa:""}.fa-joget{--fa:""}.fa-fedora{--fa:""}.fa-stripe-s{--fa:""}.fa-meta{--fa:""}.fa-laravel{--fa:""}.fa-hotjar{--fa:""}.fa-bluetooth-b{--fa:""}.fa-square-letterboxd{--fa:""}.fa-sticker-mule{--fa:""}.fa-creative-commons-zero{--fa:""}.fa-hips{--fa:""}.fa-css{--fa:""}.fa-behance{--fa:""}.fa-reddit{--fa:""}.fa-discord{--fa:""}.fa-chrome{--fa:""}.fa-app-store-ios{--fa:""}.fa-cc-discover{--fa:""}.fa-wpbeginner{--fa:""}.fa-confluence{--fa:""}.fa-shoelace{--fa:""}.fa-mdb{--fa:""}.fa-dochub{--fa:""}.fa-accessible-icon{--fa:""}.fa-ebay{--fa:""}.fa-amazon{--fa:""}.fa-unsplash{--fa:""}.fa-yarn{--fa:""}.fa-square-steam,.fa-steam-square{--fa:""}.fa-500px{--fa:""}.fa-square-vimeo,.fa-vimeo-square{--fa:""}.fa-asymmetrik{--fa:""}.fa-font-awesome,.fa-font-awesome-flag,.fa-font-awesome-logo-full{--fa:""}.fa-gratipay{--fa:""}.fa-apple{--fa:""}.fa-hive{--fa:""}.fa-gitkraken{--fa:""}.fa-keybase{--fa:""}.fa-apple-pay{--fa:""}.fa-padlet{--fa:""}.fa-amazon-pay{--fa:""}.fa-github-square,.fa-square-github{--fa:""}.fa-stumbleupon{--fa:""}.fa-fedex{--fa:""}.fa-phoenix-framework{--fa:""}.fa-shopify{--fa:""}.fa-neos{--fa:""}.fa-square-threads{--fa:""}.fa-hackerrank{--fa:""}.fa-researchgate{--fa:""}.fa-swift{--fa:""}.fa-angular{--fa:""}.fa-speakap{--fa:""}.fa-angrycreative{--fa:""}.fa-y-combinator{--fa:""}.fa-empire{--fa:""}.fa-envira{--fa:""}.fa-google-scholar{--fa:""}.fa-gitlab-square,.fa-square-gitlab{--fa:""}.fa-studiovinari{--fa:""}.fa-pied-piper{--fa:""}.fa-wordpress{--fa:""}.fa-product-hunt{--fa:""}.fa-firefox{--fa:""}.fa-linode{--fa:""}.fa-goodreads{--fa:""}.fa-odnoklassniki-square,.fa-square-odnoklassniki{--fa:""}.fa-jsfiddle{--fa:""}.fa-sith{--fa:""}.fa-themeisle{--fa:""}.fa-page4{--fa:""}.fa-hashnode{--fa:""}.fa-react{--fa:""}.fa-cc-paypal{--fa:""}.fa-squarespace{--fa:""}.fa-cc-stripe{--fa:""}.fa-creative-commons-share{--fa:""}.fa-bitcoin{--fa:""}.fa-keycdn{--fa:""}.fa-opera{--fa:""}.fa-itch-io{--fa:""}.fa-umbraco{--fa:""}.fa-galactic-senate{--fa:""}.fa-ubuntu{--fa:""}.fa-draft2digital{--fa:""}.fa-stripe{--fa:""}.fa-houzz{--fa:""}.fa-gg{--fa:""}.fa-dhl{--fa:""}.fa-pinterest-square,.fa-square-pinterest{--fa:""}.fa-xing{--fa:""}.fa-blackberry{--fa:""}.fa-creative-commons-pd{--fa:""}.fa-playstation{--fa:""}.fa-quinscape{--fa:""}.fa-less{--fa:""}.fa-blogger-b{--fa:""}.fa-opencart{--fa:""}.fa-vine{--fa:""}.fa-signal-messenger{--fa:""}.fa-paypal{--fa:""}.fa-gitlab{--fa:""}.fa-typo3{--fa:""}.fa-reddit-alien{--fa:""}.fa-yahoo{--fa:""}.fa-dailymotion{--fa:""}.fa-affiliatetheme{--fa:""}.fa-pied-piper-pp{--fa:""}.fa-bootstrap{--fa:""}.fa-odnoklassniki{--fa:""}.fa-nfc-symbol{--fa:""}.fa-mintbit{--fa:""}.fa-ethereum{--fa:""}.fa-speaker-deck{--fa:""}.fa-creative-commons-nc-eu{--fa:""}.fa-patreon{--fa:""}.fa-avianex{--fa:""}.fa-ello{--fa:""}.fa-gofore{--fa:""}.fa-bimobject{--fa:""}.fa-brave-reverse{--fa:""}.fa-facebook-f{--fa:""}.fa-google-plus-square,.fa-square-google-plus{--fa:""}.fa-web-awesome{--fa:""}.fa-mandalorian{--fa:""}.fa-first-order-alt{--fa:""}.fa-osi{--fa:""}.fa-google-wallet{--fa:""}.fa-d-and-d-beyond{--fa:""}.fa-periscope{--fa:""}.fa-fulcrum{--fa:""}.fa-cloudscale{--fa:""}.fa-forumbee{--fa:""}.fa-mizuni{--fa:""}.fa-schlix{--fa:""}.fa-square-xing,.fa-xing-square{--fa:""}.fa-bandcamp{--fa:""}.fa-wpforms{--fa:""}.fa-cloudversify{--fa:""}.fa-usps{--fa:""}.fa-megaport{--fa:""}.fa-magento{--fa:""}.fa-spotify{--fa:""}.fa-optin-monster{--fa:""}.fa-fly{--fa:""}.fa-square-bluesky{--fa:""}.fa-aviato{--fa:""}.fa-itunes{--fa:""}.fa-cuttlefish{--fa:""}.fa-blogger{--fa:""}.fa-flickr{--fa:""}.fa-viber{--fa:""}.fa-soundcloud{--fa:""}.fa-digg{--fa:""}.fa-tencent-weibo{--fa:""}.fa-letterboxd{--fa:""}.fa-symfony{--fa:""}.fa-maxcdn{--fa:""}.fa-etsy{--fa:""}.fa-facebook-messenger{--fa:""}.fa-audible{--fa:""}.fa-think-peaks{--fa:""}.fa-bilibili{--fa:""}.fa-erlang{--fa:""}.fa-x-twitter{--fa:""}.fa-cotton-bureau{--fa:""}.fa-dashcube{--fa:""}.fa-42-group,.fa-innosoft{--fa:""}.fa-stack-exchange{--fa:""}.fa-elementor{--fa:""}.fa-pied-piper-square,.fa-square-pied-piper{--fa:""}.fa-creative-commons-nd{--fa:""}.fa-palfed{--fa:""}.fa-superpowers{--fa:""}.fa-resolving{--fa:""}.fa-xbox{--fa:""}.fa-square-web-awesome-stroke{--fa:""}.fa-searchengin{--fa:""}.fa-tiktok{--fa:""}.fa-facebook-square,.fa-square-facebook{--fa:""}.fa-renren{--fa:""}.fa-linux{--fa:""}.fa-glide{--fa:""}.fa-linkedin{--fa:""}.fa-hubspot{--fa:""}.fa-deploydog{--fa:""}.fa-twitch{--fa:""}.fa-flutter{--fa:""}.fa-ravelry{--fa:""}.fa-mixer{--fa:""}.fa-lastfm-square,.fa-square-lastfm{--fa:""}.fa-vimeo{--fa:""}.fa-mendeley{--fa:""}.fa-uniregistry{--fa:""}.fa-figma{--fa:""}.fa-creative-commons-remix{--fa:""}.fa-cc-amazon-pay{--fa:""}.fa-dropbox{--fa:""}.fa-instagram{--fa:""}.fa-cmplid{--fa:""}.fa-upwork{--fa:""}.fa-facebook{--fa:""}.fa-gripfire{--fa:""}.fa-jedi-order{--fa:""}.fa-uikit{--fa:""}.fa-fort-awesome-alt{--fa:""}.fa-phabricator{--fa:""}.fa-ussunnah{--fa:""}.fa-earlybirds{--fa:""}.fa-trade-federation{--fa:""}.fa-autoprefixer{--fa:""}.fa-whatsapp{--fa:""}.fa-square-upwork{--fa:""}.fa-slideshare{--fa:""}.fa-google-play{--fa:""}.fa-viadeo{--fa:""}.fa-line{--fa:""}.fa-google-drive{--fa:""}.fa-servicestack{--fa:""}.fa-simplybuilt{--fa:""}.fa-bitbucket{--fa:""}.fa-imdb{--fa:""}.fa-deezer{--fa:""}.fa-raspberry-pi{--fa:""}.fa-jira{--fa:""}.fa-docker{--fa:""}.fa-screenpal{--fa:""}.fa-bluetooth{--fa:""}.fa-gitter{--fa:""}.fa-d-and-d{--fa:""}.fa-microblog{--fa:""}.fa-cc-diners-club{--fa:""}.fa-gg-circle{--fa:""}.fa-pied-piper-hat{--fa:""}.fa-kickstarter-k{--fa:""}.fa-yandex{--fa:""}.fa-readme{--fa:""}.fa-html5{--fa:""}.fa-sellsy{--fa:""}.fa-square-web-awesome{--fa:""}.fa-sass{--fa:""}.fa-wirsindhandwerk,.fa-wsh{--fa:""}.fa-buromobelexperte{--fa:""}.fa-salesforce{--fa:""}.fa-octopus-deploy{--fa:""}.fa-medapps{--fa:""}.fa-ns8{--fa:""}.fa-pinterest-p{--fa:""}.fa-apper{--fa:""}.fa-fort-awesome{--fa:""}.fa-waze{--fa:""}.fa-bluesky{--fa:""}.fa-cc-jcb{--fa:""}.fa-snapchat,.fa-snapchat-ghost{--fa:""}.fa-fantasy-flight-games{--fa:""}.fa-rust{--fa:""}.fa-wix{--fa:""}.fa-behance-square,.fa-square-behance{--fa:""}.fa-supple{--fa:""}.fa-webflow{--fa:""}.fa-rebel{--fa:""}.fa-css3{--fa:""}.fa-staylinked{--fa:""}.fa-kaggle{--fa:""}.fa-space-awesome{--fa:""}.fa-deviantart{--fa:""}.fa-cpanel{--fa:""}.fa-goodreads-g{--fa:""}.fa-git-square,.fa-square-git{--fa:""}.fa-square-tumblr,.fa-tumblr-square{--fa:""}.fa-trello{--fa:""}.fa-creative-commons-nc-jp{--fa:""}.fa-get-pocket{--fa:""}.fa-perbyte{--fa:""}.fa-grunt{--fa:""}.fa-weebly{--fa:""}.fa-connectdevelop{--fa:""}.fa-leanpub{--fa:""}.fa-black-tie{--fa:""}.fa-themeco{--fa:""}.fa-python{--fa:""}.fa-android{--fa:""}.fa-bots{--fa:""}.fa-free-code-camp{--fa:""}.fa-hornbill{--fa:""}.fa-js{--fa:""}.fa-ideal{--fa:""}.fa-git{--fa:""}.fa-dev{--fa:""}.fa-sketch{--fa:""}.fa-yandex-international{--fa:""}.fa-cc-amex{--fa:""}.fa-uber{--fa:""}.fa-github{--fa:""}.fa-php{--fa:""}.fa-alipay{--fa:""}.fa-youtube{--fa:""}.fa-skyatlas{--fa:""}.fa-firefox-browser{--fa:""}.fa-replyd{--fa:""}.fa-suse{--fa:""}.fa-jenkins{--fa:""}.fa-twitter{--fa:""}.fa-rockrms{--fa:""}.fa-pinterest{--fa:""}.fa-buffer{--fa:""}.fa-npm{--fa:""}.fa-yammer{--fa:""}.fa-btc{--fa:""}.fa-dribbble{--fa:""}.fa-stumbleupon-circle{--fa:""}.fa-internet-explorer{--fa:""}.fa-stubber{--fa:""}.fa-telegram,.fa-telegram-plane{--fa:""}.fa-old-republic{--fa:""}.fa-odysee{--fa:""}.fa-square-whatsapp,.fa-whatsapp-square{--fa:""}.fa-node-js{--fa:""}.fa-edge-legacy{--fa:""}.fa-slack,.fa-slack-hash{--fa:""}.fa-medrt{--fa:""}.fa-usb{--fa:""}.fa-tumblr{--fa:""}.fa-vaadin{--fa:""}.fa-quora{--fa:""}.fa-square-x-twitter{--fa:""}.fa-reacteurope{--fa:""}.fa-medium,.fa-medium-m{--fa:""}.fa-amilia{--fa:""}.fa-mixcloud{--fa:""}.fa-flipboard{--fa:""}.fa-viacoin{--fa:""}.fa-critical-role{--fa:""}.fa-sitrox{--fa:""}.fa-discourse{--fa:""}.fa-joomla{--fa:""}.fa-mastodon{--fa:""}.fa-airbnb{--fa:""}.fa-wolf-pack-battalion{--fa:""}.fa-buy-n-large{--fa:""}.fa-gulp{--fa:""}.fa-creative-commons-sampling-plus{--fa:""}.fa-strava{--fa:""}.fa-ember{--fa:""}.fa-canadian-maple-leaf{--fa:""}.fa-teamspeak{--fa:""}.fa-pushed{--fa:""}.fa-wordpress-simple{--fa:""}.fa-nutritionix{--fa:""}.fa-wodu{--fa:""}.fa-google-pay{--fa:""}.fa-intercom{--fa:""}.fa-zhihu{--fa:""}.fa-korvue{--fa:""}.fa-pix{--fa:""}.fa-steam-symbol{--fa:""}.inline-search{max-width:200px}@media(min-width:360px){.inline-search{max-width:235px}}@media(min-width:768px){.inline-search{max-width:325px}.search-dropdown{width:500px}}.navbar-brand.h1 a span,h1.navbar-brand a span{display:inline-block;padding-top:.5rem}.navbar-brand.h1 a:hover,h1.navbar-brand a:hover{text-decoration:none}#export-buttons .dropdown-menu,.inline-search .dropdown-menu,.page-actions .dropdown-menu{z-index:1021}.navbar{--tblr-navbar-brand-font-size:1rem}.user-shortcuts .dropdown-menu-card{min-width:260px}.user-shortcuts .user-shortcuts-icon{align-items:center;background-color:var(--tblr-bg-surface-secondary);color:var(--tblr-gray-500);display:flex;height:3.125rem;justify-content:center;margin-left:auto;margin-right:auto;width:3.125rem}.error-page{margin-bottom:50px}@media print{.control-sidebar,.sf-toolbar{display:none!important}.col-print-12{width:100%}.content-wrapper{margin:0!important}section.content{margin:0;padding:0}span i.dot{display:none;margin-right:0!important}}.page-center{justify-content:center}.hidden-no-space{margin:0;padding:0}.pre-scrollable{max-height:340px;overflow-y:scroll}td.timesheet-description ul{padding-left:15px}td.timesheet-description p{margin:0}td.badges{line-height:22px}.open-edit{cursor:pointer}td.w-min,th.w-min{white-space:nowrap;width:1%}table.dataTable thead>tr>th.hw-min{white-space:normal;width:1%}@media(min-width:576px){td.w-sm-min,th.w-sm-min{white-space:nowrap;width:1%}}.w-avatar{width:40px}.w-avatar img.avatar{max-width:40px}.list-group-item.danger{border-left:.2rem solid #d63939!important;padding-left:1.05rem}.list-group-item.success{border-left:.2rem solid #2fb344!important;padding-left:1.05rem}.box-body-scrollable{max-height:340px;overflow:auto}#activity_details_box th,#customer_details_box th,#project_details_box th{width:30%}.overlay{background:hsla(0,0%,100%,.7);height:100%;left:0;position:fixed;top:0;width:100%;z-index:1021}.overlay>.fas{color:#000;font-size:30px;left:50vw;margin-left:-15px;margin-top:-15px;position:absolute;top:50vh}table.dataTable{clear:both;margin-bottom:0!important;max-width:none!important}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{cursor:pointer;position:relative}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{font-weight:700}table.dataTable thead .sorting:after,table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{font-family:Font Awesome\ 6 Free;font-size:12px;opacity:.5;padding-left:5px}table.dataTable thead .sorting:after{content:"";opacity:.2}table.dataTable thead .sorting_asc:after{content:""}table.dataTable thead .sorting_desc:after{content:""}table.dataTable thead>tr>th{vertical-align:top;white-space:nowrap}table.dataTable th:active{outline:none}.markdown>table thead td,.markdown>table thead th,table.table-bordered thead td,table.table-bordered thead th{border-left-width:0;border-top-width:0}.markdown>table tbody td,.markdown>table tbody th,.markdown>table tfoot td,.markdown>table tfoot th,table.table-bordered tbody td,table.table-bordered tbody th,table.table-bordered tfoot td,table.table-bordered tfoot th{border-bottom-width:0;border-left-width:0}.markdown>table td:last-child,.markdown>table th:last-child,table.table-bordered td:last-child,table.table-bordered th:last-child{border-right-width:0}@media(min-width:1200px){.markdown>table.dataTable>tbody>tr>td,table.dataTable.table>tbody>tr>td{vertical-align:middle}}table.dataTable .actions{width:40px}table.dataTable tr.summary td{background-color:var(--tblr-bg-surface-secondary);border:0;font-weight:700}table.dataTable tr th.multiCheckbox{width:15px}table.dataTable tr.overlapping{border-top:2px solid rgba(214,57,57,.2)}table.dataTable tr.exported{opacity:.7}table.dataTable td .btn-group{display:flex}table.dataTable td .label{font-size:85%;line-height:24px;padding:.3em .6em}table.dataTable td span.label-invisible{opacity:.6}table.dataTable td.weekend,table.dataTable th.weekend{background-color:var(--tblr-bg-surface-tertiary)}table.dataTable th.today{background-color:var(--tblr-highlight-bg)}table.dataTable td.total,table.dataTable th.total{font-weight:700}.form-dataTable table.dataTable .form-group{margin-bottom:0}table.table-hover tr.exported:hover{opacity:1}.action-dropdown,.actions .dropdown .dropdown-menu{z-index:1021}.calendar-entry ul{list-style-type:none;padding:0}.calendar-entry div{white-space:pre-line}.draggable{cursor:grab}#timesheet_calendar{--bs-gray-400:var(--tblr-border-color);--bs-gray-200:var(--tblr-gray-200)}.fc-day-sat,.fc-day-sun{background-color:var(--tblr-bg-surface-secondary)}@keyframes ticktac-blink{0%{opacity:1}5%{opacity:.95}10%{opacity:.9}15%{opacity:.85}20%{opacity:.8}25%{opacity:.75}30%{opacity:.7}35%{opacity:.65}40%{opacity:.6}45%{opacity:.65}50%{opacity:.7}55%{opacity:.75}60%{opacity:.8}65%{opacity:.85}70%{opacity:.9}75%{opacity:.95}to{opacity:1}}.ticktac-start i,.ticktac-stop i{animation:ticktac-blink 2s step-end infinite;font-size:140%}@media(max-width:991.98px){aside.navbar .btn-outline-white,header.navbar .btn-outline-white{border-color:hsla(0,0%,100%,.2)}}.ts-dropdown{z-index:1021}.ts-control>input{min-width:unset}.ts-dropdown .optgroup [data-selectable].option{padding-left:20px}.checkbox-menu.show{z-index:1021}.duration-widget .input-group{min-width:110px}.duration-widget input.duration-input{min-width:55px}#report-form div.btn-list{width:100%}#report-form div.btn-list div.selectpicker{max-width:400px;min-width:200px}#report-form div.btn-list li.dropdown-item .form-check{margin-bottom:0}#report-form div.btn-list .input-group{width:unset}.color-choice-item{border-radius:var(--tblr-border-radius);display:inline-block;height:20px;width:20px}fieldset>.mb-3.row:last-child{margin-bottom:0!important}.form-fieldset-light{background-color:unset;border-left:none;border-radius:0;border-right:none;border-top:none;margin-bottom:0}.form-fieldset-light:last-child{border:none}.modal-content{box-shadow:0 10px 80px rgba(0,0,0,.6)}.progress-group .progress-title{white-space:nowrap;width:100%}.progress-group .progress-title .progress-text{display:inline-block;width:1%}.progress-group .progress-title .progress-number{display:inline-block;float:none;width:98%}.initials{font-size:13px;font-weight:700}.avatar-xs{height:23px;width:23px}.avatar-xs .initials{font-size:10px}.avatar-sm{height:38px;width:38px}.avatar-sm .initials{font-size:17px}.avatar-md{height:45px;width:45px}.avatar-md .initials{font-size:21px}.avatar-lg{height:60px;width:60px}.avatar-lg .initials{font-size:28px}.widget-user-image{border:3px solid #fff;border-radius:50%}.widget-user-image .avatar{height:83px;width:83px}.widget-user-image .avatar .initials{font-size:40px}.markdown>table.dataTable>tbody>tr>td.avatars .avatar,table.dataTable.table>tbody>tr>td.avatars .avatar{margin:1px}.avatar-list-stacked .avatar{margin-right:calc(var(--tblr-avatar-size)*-.2)!important}[data-bs-theme=dark] .markdown>table thead th,[data-bs-theme=dark] .table thead th{color:inherit;opacity:.6}[data-bs-theme=dark] table.dataTable thead .sorting:after{opacity:.6}[data-bs-theme=dark] .overlay,body[data-bs-theme=dark] [data-bs-theme=light] .overlay{background:rgba(0,0,0,.5)}[data-bs-theme=dark] .overlay>.fas{color:var(--tblr-white)}[data-bs-theme=dark] .nav,body[data-bs-theme=dark] [data-bs-theme=light] .nav{--tblr-nav-link-color:inherit;opacity:.6}[data-bs-theme=dark] .datagrid-title,body[data-bs-theme=dark] [data-bs-theme=light] .datagrid-title{color:inherit;opacity:.6}[data-bs-theme=dark] .input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){color:inherit}section.quick-entry-page #quick_entry_form{display:none}section.quick-entry-page .ts-wrapper{display:table;table-layout:fixed}section.quick-entry-page #quick_entry_box .duration-widget .input-group{min-width:85px}section.quick-entry-page #quick_entry_box .duration-widget .btn-duration-preset{padding:7px 8px 7px 5px}section.quick-entry-page #quick_entry_box .duration-widget input{padding:7px 3px 7px 7px}fieldset legend.col-form-label{padding-top:0}fieldset.form-fieldset>legend{font-size:1rem;font-weight:700}.ts-dropdown .optgroup:before{--tblr-spacer:.5rem}.dropdown-divider{--tblr-dropdown-divider-margin-y:.5rem}.dropdown-menu{background-clip:border-box}fieldset:empty{display:none}:host,:root,[data-bs-theme=light]{--tblr-box-shadow-input:none}.navbar[data-bs-theme=dark],body[data-bs-theme=dark] .navbar[data-bs-theme=light]{--tblr-navbar-color:hsla(0,0%,100%,.8)}.nav-pills .nav-link.active{border-style:solid;border-width:1px}[data-bs-theme=dark] .litepicker .container__days .day-item.is-in-range{--litepicker-is-in-range-color:var(--tblr-primary-text-emphasis)}.multiupdater[type=checkbox]{--tblr-border-color-translucent:rgba(4,32,69,.2)}.tag{--tblr-tag-height:unset}.float-help{background-color:var(--tblr-body-color);border-radius:50px;bottom:20px;height:50px;position:fixed;right:20px;text-align:center;width:50px;z-index:1021}.float-help i{color:var(--tblr-body-bg);font-size:30px;margin-top:11px}@media(max-width:767.98px){.float-help{border-radius:36px;height:36px;width:36px}.float-help i{font-size:20px;margin-top:8px}}div.chart-container{position:relative}div.chart-container canvas.chartjs{height:300px;width:100%}html[dir=rtl] .fa-chevron-left:before{content:""}html[dir=rtl] .fa-chevron-right:before{content:""}section.dashboard .widget{max-height:600px} \ No newline at end of file diff --git a/public/build/app.1899dc33.js b/public/build/app.1899dc33.js new file mode 100644 index 000000000..83da26275 --- /dev/null +++ b/public/build/app.1899dc33.js @@ -0,0 +1,2 @@ +/*! For license information please see app.1899dc33.js.LICENSE.txt */ +(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[524],{4028:function(t,e,n){n(4975),n(4942),n.g.KimaiPaginatedBoxWidget=n(4100).A,n.g.KimaiReloadPageWidget=n(5170).A,n.g.KimaiColor=n(9997).A,n.g.KimaiStorage=n(5247).A},4942:function(t,e,n){"use strict";var i=n(6285);class s{constructor(t){this._translations=t}get(t){return this._translations[t]}has(t){return t in this._translations}}class r{constructor(t){this._configurations=t}get(t){return this._configurations[t]}has(t){return t in this._configurations}isRTL(){return"rtl"===this.get("direction")}getLanguage(){return this.get("locale").replace("_","-")}is24Hours(){return!!this.get("twentyFourHours")}getFirstDayOfWeek(t=!0){void 0===t&&(t=!0);let e=this.get("first_dow_iso");return t||(e%=7),e}}class o{init(){}getId(){return null}setContainer(t){if(!(t instanceof a))throw new Error("Plugin was given an invalid KimaiContainer");this._core=t}getContainer(){return this._core}getConfiguration(t){return this.getContainer().getConfiguration().get(t)}getConfigurations(){return this.getContainer().getConfiguration()}getDateUtils(){return this.getPlugin("date")}getPlugin(t){return this.getContainer().getPlugin(t)}getTranslation(){return this.getContainer().getTranslation()}translate(t){return this.getTranslation().get(t)}escape(t){return this.getPlugin("escape").escapeForHtml(t)}trigger(t,e=null){this.getPlugin("event").trigger(t,e)}fetch(t,e={}){return this.getPlugin("fetch").fetch(t,e)}fetchForm(t,e={},n=null){n=n||t.getAttribute("action");const i=t.getAttribute("method").toUpperCase();if("GET"===i){const i=this.getPlugin("form").convertFormDataToQueryString(t,{},!0);n=n+(n.includes("?")?"&":"?")+i,e={method:"GET",...e}}else"POST"===i&&(e={method:"POST",body:new FormData(t),...e});return this.fetch(n,e)}isMobile(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)<576}}class a{constructor(t,e){if(!(t instanceof r))throw new Error("Configuration needs to a KimaiConfiguration instance");if(this._configuration=t,!(e instanceof s))throw new Error("Configuration needs to a KimaiTranslation instance");this._translation=e,this._plugins=[]}registerPlugin(t){if(!(t instanceof o))throw new Error("Invalid plugin given, needs to be a KimaiPlugin instance");return t.setContainer(this),this._plugins.push(t),t}getPlugin(t){for(let e of this._plugins)if(null!==e.getId()&&e.getId()===t)return e;throw new Error("Unknown plugin: "+t)}getPlugins(){return this._plugins}getTranslation(){return this._translation}getConfiguration(){return this._configuration}getUser(){return this.getPlugin("user")}}class l extends o{constructor(t){super(),this.dataAttribute=t}getId(){return"datatable-column-visibility"}init(){let t=document.querySelector("["+this.dataAttribute+"]");if(null!==t){this._id=t.getAttribute(this.dataAttribute),this._modal=document.getElementById("modal_"+this._id),this._modal.addEventListener("show.bs.modal",(()=>{this._evaluateCheckboxes()})),this._modal.querySelector("button[data-type=save]").addEventListener("click",(()=>{this._saveVisibility()})),this._modal.querySelector("button[data-type=reset]").addEventListener("click",(t=>{this._resetVisibility(t.currentTarget)})),this._modal.querySelectorAll("input[name=datatable_profile]").forEach((t=>{t.addEventListener("change",(()=>{const e=this._modal.getElementsByTagName("form")[0];this.fetchForm(e,{},t.getAttribute("data-href")).then((()=>{localStorage.setItem("kimai_profile",t.getAttribute("value")),document.location.reload()})).catch((()=>{e.setAttribute("action",t.getAttribute("data-href")),e.submit()}))}))}));for(let t of this._modal.querySelectorAll("form input[type=checkbox]"))t.addEventListener("change",(()=>{this._changeVisibility(t.getAttribute("name"),t.checked)}))}}_evaluateCheckboxes(){const t=this._modal.getElementsByTagName("form")[0],e=document.getElementsByClassName("datatable_"+this._id)[0];for(let n of e.getElementsByTagName("th")){const e=n.getAttribute("data-field");if(null===e)continue;const i=t.querySelector("input[name="+e+"]");null!==i&&(i.checked="none"!==window.getComputedStyle(n).display)}}_saveVisibility(){const t=this._modal.getElementsByTagName("form")[0];this.fetchForm(t).then((()=>{document.location.reload()})).catch((()=>{t.submit()}))}_resetVisibility(t){const e=this._modal.getElementsByTagName("form")[0];this.fetchForm(e,{},t.getAttribute("formaction")).then((()=>{document.location.reload()})).catch((()=>{e.setAttribute("action",t.getAttribute("formaction")),e.submit()}))}_changeVisibility(t,e){for(const n of document.getElementsByClassName("datatable_"+this._id)){let i=null;for(let s of n.getElementsByClassName("col_"+t)){if(null===i){let t="-none",n="d-table-cell";e||(t="-table-cell",n="d-none"),i="",s.classList.forEach((function(e,n,s){-1===e.indexOf(t)&&(i+=" "+e)})),-1===i.indexOf(n)&&(i+=" "+n)}s.className=i}}}}var c=n(9336);class u extends o{init(){[].slice.call(document.querySelectorAll('[data-toggle="tooltip"]')).map((function(t){return new c.m_(t)}));[...document.querySelectorAll(".offcanvas")].map((t=>new c.go(t)));this.getContainer().getPlugin("form").activateForm("div.page-wrapper form"),this._registerModalAutofocus("#remote_form_modal"),this.overlay=null,document.addEventListener("kimai.reloadContent",(t=>{if(null!==this.overlay)return;let e="body";void 0!==t.detail&&null!==t.detail&&(e=t.detail);const n=document.createElement("div");n.innerHTML='

',this.overlay=n.firstElementChild,document.querySelector(e).append(this.overlay)})),document.addEventListener("kimai.reloadedContent",(()=>{null!==this.overlay&&(this.overlay.remove(),this.overlay=null)}))}_registerModalAutofocus(t){if(this.isMobile())return;const e=document.querySelector(t);null!==e&&e.addEventListener("shown.bs.modal",(()=>{const t=e.querySelector("form");let n=t.querySelectorAll("[autofocus]");n.length<1&&(n=t.querySelectorAll("input[type=text],input[type=date],textarea,select")),n.length>0&&n[0].focus()}))}}var d=n(424);n(8214);class h extends o{supportsForm(t){return!1}activateForm(t){}destroyForm(t){}}class p extends h{constructor(t){super(),this._selector=t}init(){window.disableLitepickerStyles=!0,this._pickers=[]}supportsForm(t){return!0}activateForm(t){const e=this.getConfigurations().getFirstDayOfWeek(!1),n=this.getConfigurations().getLanguage();let i={buttonText:{previousMonth:'',nextMonth:'',apply:this.translate("confirm"),cancel:this.translate("cancel")}};const s=[].slice.call(t.querySelectorAll(this._selector)).map((t=>(void 0===t.dataset.format&&console.log("Trying to bind litepicker to an element without data-format attribute"),void 0!==t.hasAttribute("min")&&(i={...i,minDate:t.getAttribute("min")}),void 0!==t.hasAttribute("max")&&(i={...i,maxDate:t.getAttribute("max")}),i={...i,format:t.dataset.format,showTooltip:!1,element:t,lang:n,autoRefresh:!0,firstDay:e,setup:e=>{e.on("preselect",((t,n)=>{e._wasPreselected=!0})),e.on("selected",((n,i)=>{void 0!==e._wasPreselected&&(t.dispatchEvent(new Event("change",{bubbles:!0})),delete e._wasPreselected)})),void 0!==e.backdrop&&document.body.appendChild(e.backdrop)}},[t,new d.Litepicker(this.prepareOptions(i))])));this._pickers=this._pickers.concat(s)}prepareOptions(t){return{...t,plugins:["mobilefriendly"]}}destroyForm(t){[].slice.call(t.querySelectorAll(this._selector)).map((t=>{for(let e=0;e{this.reloadDatatable()};for(let t of e.split(" "))document.addEventListener(t,n);document.addEventListener("pagination-change",n),document.addEventListener("filter-change",n)}registerContextMenu(t){f.A.createForDataTable(t)}reloadDatatable(){const t=this.getContainer().getPlugin("toolbar").getSelector(),e=document.querySelector(t),n=t=>{const e=document.createElement("div");e.innerHTML=t;const n=e.querySelector(this._contentArea);document.querySelector(this._contentArea).replaceWith(n),this.registerContextMenu(this._selector),document.dispatchEvent(new Event("kimai.reloadedContent"))};document.dispatchEvent(new CustomEvent("kimai.reloadContent",{detail:this._contentArea})),null!==e?this.fetchForm(e).then((t=>{t.text().then(n)})).catch((()=>{e.submit()})):this.fetch(document.location).then((t=>{t.text().then(n)})).catch((()=>{document.location.reload()}))}}class v extends o{constructor(t,e){super(),this._formSelector=t,this._actionClass=e}getId(){return"toolbar"}init(){const t=this.getSelector();this._registerPagination(t),this._registerSortableTables(t),this._registerAlternativeSubmitActions(t,this._actionClass),[].slice.call(document.querySelectorAll(t+" input")).map((e=>{e.addEventListener("change",(e=>{switch(e.target.id){case"order":case"orderBy":case"page":break;default:document.querySelector(t+" input#page").value=1}})),this.triggerChange()})),[].slice.call(document.querySelectorAll(t+" select")).map((e=>{e.addEventListener("change",(e=>{let n=!0;switch(e.target.id){case"customer":null!==document.querySelector(t+" select#project")&&(n=!1);break;case"project":null!==document.querySelector(t+" select#activity")&&(n=!1)}document.querySelector(t+" input#page").value=1,n&&this.triggerChange()}))}))}_registerAlternativeSubmitActions(t,e){document.addEventListener("click",(function(n){let i=n.target;for(;null!==i&&"function"==typeof i.matches&&!i.matches("body");){if(i.classList.contains(e)){const e=document.querySelector(t);if(null===e)return;const s=e.getAttribute("action"),r=e.getAttribute("method");void 0!==i.dataset.target&&(e.target=i.dataset.target),e.action=i.href,void 0!==i.dataset.method&&(e.method=i.dataset.method),e.submit(),e.target="",e.action=s,e.method=r,n.preventDefault(),n.stopPropagation()}i=i.parentNode}}))}_registerSortableTables(t){document.body.addEventListener("click",(e=>{if(!e.target.matches("th.sortable"))return;let n="DESC",i=e.target.dataset.order;e.target.classList.contains("sorting_desc")&&(n="ASC"),document.querySelector(t+" #orderBy").value=i,document.querySelector(t+" #order").value=n,document.querySelector(t+" #orderBy").dispatchEvent(new Event("change")),document.querySelector(t+" #order").dispatchEvent(new Event("change")),document.dispatchEvent(new Event("filter-change"))}))}_registerPagination(t){document.body.addEventListener("click",(e=>{if(!(e.target.matches("ul.pagination li a")||null!==e.target.parentNode&&e.target.parentNode.matches("ul.pagination li a")))return;let n=document.querySelector(t+" input#page");if(null===n)return;let i=e.target;i.matches("a")||(i=i.parentNode),e.preventDefault(),e.stopPropagation();let s=i.href.split("/"),r=s[s.length-1];return/\d/.test(r)||(r=1),n.value=r,n.dispatchEvent(new Event("change")),document.dispatchEvent(new Event("pagination-change")),!1}))}triggerChange(){document.dispatchEvent(new Event("toolbar-change"))}getSelector(){return this._formSelector}}class y extends o{getId(){return"api"}_headers(){const t=new Headers;return t.append("Content-Type","application/json"),t}get(t,e,n,i){if(void 0!==e){const n=new URLSearchParams(e).toString();""!==n&&(t=t+(t.includes("?")?"&":"?")+n)}void 0===i&&(i=t=>{this.handleError("An error occurred",t)}),this.fetch(t,{method:"GET",headers:this._headers()}).then((t=>{t.json().then((t=>{n(t)}))})).catch((t=>{i(t)}))}post(t,e,n,i){void 0===i&&(i=t=>{this.handleError("action.update.error",t)}),this.fetch(t,{method:"POST",body:this._parseData(e),headers:this._headers()}).then((t=>{t.json().then((t=>{n(t)}))})).catch((t=>{i(t)}))}patch(t,e,n,i){void 0===i&&(i=t=>{this.handleError("action.update.error",t)}),this.fetch(t,{method:"PATCH",body:this._parseData(e),headers:this._headers()}).then((t=>{204===t.statusCode?n():t.json().then((t=>{n(t)}))})).catch((t=>{i(t)}))}delete(t,e,n){void 0===n&&(n=t=>{this.handleError("action.delete.error",t)}),this.fetch(t,{method:"DELETE",headers:this._headers()}).then((()=>{e()})).catch((t=>{n(t)}))}_parseData(t){return"object"==typeof t?JSON.stringify(t):t}handleError(t,e){if(void 0===e.headers)return;const n=e.headers.get("content-type");n&&-1!==n.indexOf("application/json")?e.json().then((n=>{let i=n.message;if(400===e.status&&n.errors){let t=[""+i+""];if(n.errors.errors)for(let e of n.errors.errors)t.push(e);if(n.errors.children)for(let e in n.errors.children){let i=n.errors.children[e];if(void 0!==i.errors&&i.errors.length>0)for(let e of i.errors)t.push(e)}t.length>0&&(i=t)}this.getPlugin("alert").error(t,i)})):e.text().then((()=>{const n="["+e.statusCode+"] "+e.statusText;this.getPlugin("alert").error(t,n)}))}}class b extends o{addClickHandler(t,e,n){document.body.addEventListener("click",(i=>{let s=i.target;for(;null!==s;){const e=s.tagName.toUpperCase();if("BODY"===e)return;if(s.matches(t))break;if("A"===e||"BUTTON"===e||"INPUT"===e||"LABEL"===e)return;for(let t of n)if(s.matches(t))return;s=s.parentNode}if(null===s)return;if(s.isContentEditable||s.parentNode.isContentEditable)return;if(!s.matches(t))return;for(let t of n)if(s.matches(t))return;i.preventDefault(),i.stopPropagation();let r=s.dataset.href;null==r&&(r=s.href),null!=r&&""!==r&&e(r)}))}}class _ extends b{constructor(t){super(),this._selector=t}init(){this.addClickHandler(this._selector,(function(t){window.location=t}),[])}}class w extends b{constructor(t,e){super(),this._selector=t,this._stopSelector=e}getId(){return"modal"}init(){this._isDirty=!1;const t=this._getModalElement();null!==t&&(t.addEventListener("hide.bs.modal",(e=>{if(this._isDirty){if(null===t.querySelector(".modal-body .remote_modal_is_dirty_warning")){const e=this.translate("modal.dirty"),n=document.createElement("div");n.innerHTML='

'+e+"

",t.querySelector(".modal-body").prepend(n.firstElementChild)}e.preventDefault()}else this._isDirty=!1,document.dispatchEvent(new Event("modal-hide"))})),t.addEventListener("hidden.bs.modal",(()=>{this.getContainer().getPlugin("form").destroyForm(this._getFormIdentifier()),t.querySelector(".modal-body").replaceWith("")})),t.addEventListener("show.bs.modal",(()=>{document.dispatchEvent(new Event("modal-show"))})),this.addClickHandler(this._selector,(t=>{this.openUrlInModal(t)}),this._stopSelector))}_getModal(){return c.aF.getOrCreateInstance(this._getModalElement())}openUrlInModal(t,e){const n=new Headers;n.append("X-Requested-With","Kimai-Modal"),this.fetch(t,{method:"GET",redirect:"follow",headers:n}).then((e=>{if(e.ok)return e.text().then((t=>{this._openFormInModal(t)}));window.location=t})).catch((n=>{null==e?window.location=t:e(n)}))}_getFormIdentifier(){return"#remote_form_modal .modal-content form"}_getModalElement(){return document.getElementById("remote_form_modal")}_makeScriptExecutable(t){if(void 0!==t.tagName&&"SCRIPT"===t.tagName){const e=document.createElement("script");e.text=t.innerHTML,t.parentNode.replaceChild(e,t)}else for(const e of t.childNodes)this._makeScriptExecutable(e);return t}_openFormInModal(t){const e=this._getFormIdentifier();let n=this._getModalElement();const i=document.createElement("div");i.innerHTML=t;const s=this._makeScriptExecutable(i.querySelector("#form_modal .modal-content"));if(null!==s){let t=n.querySelector(".modal-dialog"),r=i.querySelector(".modal-dialog").classList.contains("modal-lg");r&&!t.classList.contains("modal-lg")&&t.classList.toggle("modal-lg"),!r&&t.classList.contains("modal-lg")&&t.classList.toggle("modal-lg"),n.querySelector(".modal-content").replaceWith(s),[].slice.call(n.querySelectorAll('[data-bs-dismiss="modal"]')).map((t=>{t.addEventListener("click",(()=>{this._isDirty=!1,this._getModal().hide()}))})),this.getContainer().getPlugin("form").activateForm(e)}let r=i.querySelector("div.alert");null!==r&&n.querySelector(".modal-body").prepend(r);const o=document.querySelector(e);o.addEventListener("change",(()=>{this._isDirty=!0})),o.addEventListener("submit",this._getEventHandler()),this._getModal().show()}_getEventHandler(){return void 0===this.eventHandler&&(this.eventHandler=t=>{const e=t.target;if(void 0!==e.target&&""!==e.target)return!0;const n=document.querySelector(this._getFormIdentifier()+" button[type=submit]");n.textContent=n.textContent+" …",n.disabled=!0;const i=e.dataset.formEvent,s=this.getContainer().getPlugin("event"),r=this.getContainer().getPlugin("alert");t.preventDefault(),t.stopPropagation();const o=new Headers;o.append("X-Requested-With","Kimai-Modal");const a={headers:o};this.fetchForm(e,a).then((t=>{t.text().then((t=>{const o=document.createElement("div");o.innerHTML=t;let a=!1,l=!1,c=!1;n.textContent=n.textContent.replace(" …",""),n.disabled=!1;const u=o.querySelector("#form_modal .modal-content");if(null!==u&&(a=null!==u.querySelector(".is-invalid"),a||(a=null!==u.querySelector(".invalid-feedback")),l=null!==u.querySelector("ul.list-unstyled li.text-danger"),c=null!==o.querySelector("div.alert-danger")),a||l||c)this._openFormInModal(t);else{s.trigger(i);let t=e.dataset.msgSuccess;null!=t&&""!==t||(t="action.update.success"),this._isDirty=!1,this._getModal().hide(),r.success(t)}}))})).catch((t=>{let i=e.dataset.msgError;null!=i&&""!==i||(i="action.update.error"),r.error(i,t.message),setTimeout((()=>{n.textContent=n.textContent.replace(" …",""),n.disabled=!1}),1500)}))}),this.eventHandler}}class k extends o{constructor(){super(),this._selector=".ticktac-menu",this._selectorEmpty=".ticktac-menu-empty",this._favIconUrl=null}getId(){return"active-records"}init(){if(null===document.querySelector(this._selector))return;const t=()=>{this.reloadActiveRecords()};document.addEventListener("kimai.timesheetUpdate",t),document.addEventListener("kimai.timesheetDelete",t),document.addEventListener("kimai.activityUpdate",t),document.addEventListener("kimai.activityDelete",t),document.addEventListener("kimai.projectUpdate",t),document.addEventListener("kimai.projectDelete",t),document.addEventListener("kimai.customerUpdate",t),document.addEventListener("kimai.customerDelete",t),this._updateBrowserTitle=!!this.getConfiguration("updateBrowserTitle");const e=()=>{this._updateDuration()};this._updatesHandler=setInterval(e,1e4),document.addEventListener("kimai.timesheetUpdate",e),document.addEventListener("kimai.reloadedContent",e)}_updateDuration(){const t=document.querySelectorAll('[data-since]:not([data-since=""])');if(this._updateBrowserTitle&&this._changeFavicon(t.length>0),0===t.length)return void(this._updateBrowserTitle&&(void 0===document.body.dataset.title?this._updateBrowserTitle=!1:document.title=document.body.dataset.title));const e=this.getDateUtils();let n=[];for(const i of t){const t=e.formatDuration(i.dataset.since);void 0!==i.dataset.replacer&&null!==i.dataset.title&&"?"!==t&&n.push(t),i.textContent=t}0!==n.length&&this._updateBrowserTitle&&(document.title=n.shift())}_setEntries(t){const e=t.length>0;for(let t of document.querySelectorAll(this._selectorEmpty))t.style.display=e?"none":"inline-block";for(let n of document.querySelectorAll(this._selector)){if(n.style.display=e?"inline-block":"none",!e)for(let t of n.querySelectorAll("[data-since]"))t.dataset.since="";const i=n.querySelector(".ticktac-stop");e?(i&&(i.accesskey="s"),this._replaceInNode(n,t[0])):i&&(i.accesskey=null)}this._updateDuration()}_replaceInNode(t,e){const n=this.getDateUtils(),i=t.querySelectorAll("[data-replacer]");for(let s of i){const i=s.dataset.replacer;"url"===i?s.dataset.href=t.dataset.href.replace("000",e.id):"activity"===i?s.innerText=e.activity.name:"project"===i?s.innerText=e.project.name:"customer"===i?s.innerText=e.project.customer.name:"duration"===i&&(s.dataset.since=e.begin,s.innerText=n.formatDuration(e.duration))}}reloadActiveRecords(){const t=this.getContainer().getPlugin("api"),e=document.querySelector(this._selector).dataset.api;t.get(e,{},(t=>{this._setEntries(t)}))}_changeFavicon(t){const e=document.createElement("canvas"),n=document.getElementById("favicon");null===this._favIconUrl&&(this._favIconUrl=n.href);const i=n.cloneNode(!0);if(e.getContext&&i){const s=window.devicePixelRatio,r=document.createElement("img");e.height=e.width=16*s,r.onload=function(){const r=e.getContext("2d");if(r.drawImage(this,0,0,e.width,e.height),t){const t=5.5*s;r.fillStyle="rgb(182,57,57)",r.fillRect(e.width/2-t/2,e.height/2-t/2,t,t)}i.href=e.toDataURL("image/png"),n.remove(),document.head.appendChild(i)},r.src=this._favIconUrl}}}class T extends o{getId(){return"event"}trigger(t,e=null){if(""!==t)for(const n of t.split(" ")){let t=new Event(n);null!==e&&(t=new CustomEvent(n,{detail:e})),document.dispatchEvent(t)}}}class E extends o{constructor(t){super(),this._selector=t}init(){document.addEventListener("click",(t=>{let e=t.target;for(;null!==e&&"function"==typeof e.matches&&!e.matches("body");){if(e.classList.contains(this._selector)){const n=e.dataset;let i=n.href;i||(i=e.getAttribute("href")),void 0!==n.question?this.getContainer().getPlugin("alert").question(n.question,(t=>{t&&this._callApi(i,n)})):this._callApi(i,n),t.preventDefault(),t.stopPropagation()}e=e.parentNode}}))}_callApi(t,e){const n=e.method,i=e.event,s=this.getContainer().getPlugin("api"),r=this.getContainer().getPlugin("event"),o=this.getContainer().getPlugin("alert"),a=()=>{r.trigger(i),void 0!==e.msgSuccess&&o.success(e.msgSuccess)},l=t=>{let n="action.update.error";void 0!==e.msgError&&(n=e.msgError),s.handleError(n,t)};let c={};if(void 0!==e.payload&&(c=e.payload),"PATCH"===n)s.patch(t,c,a,l);else if("POST"===n){let e={};s.post(t,e,a,l)}else"DELETE"===n?s.delete(t,a,l):"GET"===n&&s.get(t,c,a,l)}}class D extends o{getId(){return"alert"}error(t,e){const n=this.getTranslation();n.has(t)&&(t=n.get(t)),t=t.replace("%reason%",""),void 0===e&&(e=null),null!==e&&(n.has(e)&&(e=n.get(e)),Array.isArray(e)&&(e=e.join("
")));const i="alert_global_error",s=document.getElementById(i);null!==s&&c.aF.getOrCreateInstance(s).hide();const r='\n \n ";this._showModal(r)}warning(t){this._show("warning",t)}success(t){this._toast("success",t)}info(t){this._show("info",t)}_showModal(t){const e=document.body,n=document.createElement("template");n.innerHTML=t.trim();const i=n.content.firstChild;e.appendChild(i);const s=new c.aF(i);i.addEventListener("hidden.bs.modal",(function(){e.removeChild(i)})),s.show()}_show(t,e){const n=this.getTranslation();n.has(e)&&(e=n.get(e));const i='\n \n ";this._showModal(i)}_mapClass(t){return"info"===t||"success"===t||"warning"===t||"danger"===t?t:"error"===t?"danger":"primary"}_toast(t,e){const n=this.getTranslation();n.has(e)&&(e=n.get(e));let i='';"success"===t?i='':"warning"===t?i='':"danger"!==t&&"error"!==t||(i='');const s='',r=document.getElementById("toast-container"),o=document.createElement("template");o.innerHTML=s.trim();const a=o.content.firstChild;r.appendChild(a);const l=new c.y8(a);a.addEventListener("hidden.bs.toast",(function(){r.removeChild(a)})),l.show()}question(t,e){const n=this.getTranslation();n.has(t)&&(t=n.get(t));const i=this._mapClass("info"),s='\n \n ",r=document.body,o=document.createElement("template");o.innerHTML=s.trim();const a=o.content.firstChild;r.appendChild(a),a.querySelector(".question-confirm").addEventListener("click",(()=>{e(!0)})),a.querySelector(".question-cancel").addEventListener("click",(()=>{e(!1)}));const l=new c.aF(a);a.addEventListener("hidden.bs.modal",(()=>{r.removeChild(a)})),l.show()}}function x(t,e){t.split(/\s+/).forEach((t=>{e(t)}))}class S{constructor(){this._events={}}on(t,e){x(t,(t=>{const n=this._events[t]||[];n.push(e),this._events[t]=n}))}off(t,e){var n=arguments.length;0!==n?x(t,(t=>{if(1===n)return void delete this._events[t];const i=this._events[t];void 0!==i&&(i.splice(i.indexOf(e),1),this._events[t]=i)})):this._events={}}trigger(t,...e){var n=this;x(t,(t=>{const i=n._events[t];void 0!==i&&i.forEach((t=>{t.apply(n,e)}))}))}}const O=t=>(t=t.filter(Boolean)).length<2?t[0]||"":1==I(t)?"["+t.join("")+"]":"(?:"+t.join("|")+")",L=t=>{if(!M(t))return t.join("");let e="",n=0;const i=()=>{n>1&&(e+="{"+n+"}")};return t.forEach(((s,r)=>{s!==t[r-1]?(i(),e+=s,n=1):n++})),i(),e},C=t=>{let e=Array.from(t);return O(e)},M=t=>new Set(t).size!==t.length,A=t=>(t+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),I=t=>t.reduce(((t,e)=>Math.max(t,N(e))),0),N=t=>Array.from(t).length,P=t=>{if(1===t.length)return[[t]];let e=[];const n=t.substring(1);return P(n).forEach((function(n){let i=n.slice(0);i[0]=t.charAt(0)+i[0],e.push(i),i=n.slice(0),i.unshift(t.charAt(0)),e.push(i)})),e},F=[[0,65535]];let j,q;const H={},V={"/":"⁄∕",0:"߀",a:"ⱥɐɑ",aa:"ꜳ",ae:"æǽǣ",ao:"ꜵ",au:"ꜷ",av:"ꜹꜻ",ay:"ꜽ",b:"ƀɓƃ",c:"ꜿƈȼↄ",d:"đɗɖᴅƌꮷԁɦ",e:"ɛǝᴇɇ",f:"ꝼƒ",g:"ǥɠꞡᵹꝿɢ",h:"ħⱨⱶɥ",i:"ɨı",j:"ɉȷ",k:"ƙⱪꝁꝃꝅꞣ",l:"łƚɫⱡꝉꝇꞁɭ",m:"ɱɯϻ",n:"ꞥƞɲꞑᴎлԉ",o:"øǿɔɵꝋꝍᴑ",oe:"œ",oi:"ƣ",oo:"ꝏ",ou:"ȣ",p:"ƥᵽꝑꝓꝕρ",q:"ꝗꝙɋ",r:"ɍɽꝛꞧꞃ",s:"ßȿꞩꞅʂ",t:"ŧƭʈⱦꞇ",th:"þ",tz:"ꜩ",u:"ʉ",v:"ʋꝟʌ",vy:"ꝡ",w:"ⱳ",y:"ƴɏỿ",z:"ƶȥɀⱬꝣ",hv:"ƕ"};for(let t in V){let e=V[t]||"";for(let n=0;nt.normalize(e),R=t=>Array.from(t).reduce(((t,e)=>t+W(e)),""),W=t=>(t=B(t).toLowerCase().replace($,(t=>H[t]||"")),B(t,"NFC"));const z=t=>{const e={},n=(t,n)=>{const i=e[t]||new Set,s=new RegExp("^"+C(i)+"$","iu");n.match(s)||(i.add(A(n)),e[t]=i)};for(let e of function*(t){for(const[e,n]of t)for(let t=e;t<=n;t++){let e=String.fromCharCode(t),n=R(e);n!=e.toLowerCase()&&(n.length>3||0!=n.length&&(yield{folded:n,composed:e,code_point:t}))}}(t))n(e.folded,e.folded),n(e.folded,e.composed);return e},Y=t=>{const e=z(t),n={};let i=[];for(let t in e){let s=e[t];s&&(n[t]=C(s)),t.length>1&&i.push(A(t))}i.sort(((t,e)=>e.length-t.length));const s=O(i);return q=new RegExp("^"+s,"u"),n},U=(t,e=1)=>(e=Math.max(e,t.length-1),O(P(t).map((t=>((t,e=1)=>{let n=0;return t=t.map((t=>(j[t]&&(n+=t.length),j[t]||t))),n>=e?L(t):""})(t,e))))),Z=(t,e=!0)=>{let n=t.length>1?1:0;return O(t.map((t=>{let i=[];const s=e?t.length():t.length()-1;for(let e=0;e{for(const n of e){if(n.start!=t.start||n.end!=t.end)continue;if(n.substrs.join("")!==t.substrs.join(""))continue;let e=t.parts;const i=t=>{for(const n of e){if(n.start===t.start&&n.substr===t.substr)return!1;if(1!=t.length&&1!=n.length){if(t.startn.start)return!0;if(n.startt.start)return!0}}return!1};if(!(n.parts.filter(i).length>0))return!0}return!1};class J{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(t){t&&(this.parts.push(t),this.substrs.push(t.substr),this.start=Math.min(t.start,this.start),this.end=Math.max(t.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(t,e){let n=new J,i=JSON.parse(JSON.stringify(this.parts)),s=i.pop();for(const t of i)n.add(t);let r=e.substr.substring(0,t-s.start),o=r.length;return n.add({start:s.start,end:s.start+o,length:o,substr:r}),n}}const G=t=>{var e;void 0===j&&(j=Y(e||F)),t=R(t);let n="",i=[new J];for(let e=0;e0){a=a.sort(((t,e)=>t.length()-e.length()));for(let t of a)K(t,i)||i.push(t)}else if(e>0&&1==l.size&&!l.has("3")){n+=Z(i,!1);let t=new J;const e=i[0];e&&t.add(e.last()),i=[t]}}return n+=Z(i,!0),n},Q=(t,e)=>{if(t)return t[e]},X=(t,e)=>{if(t){for(var n,i=e.split(".");(n=i.shift())&&(t=t[n]););return t}},tt=(t,e,n)=>{var i,s;return t?(t+="",null==e.regex||-1===(s=t.search(e.regex))?0:(i=e.string.length/t.length,0===s&&(i+=.5),i*n)):0},et=(t,e)=>{var n=t[e];if("function"==typeof n)return n;n&&!Array.isArray(n)&&(t[e]=[n])},nt=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},it=(t,e)=>"number"==typeof t&&"number"==typeof e?t>e?1:t(e=R(e+"").toLowerCase())?1:e>t?-1:0;class st{items;settings;constructor(t,e){this.items=t,this.settings=e||{diacritics:!0}}tokenize(t,e,n){if(!t||!t.length)return[];const i=[],s=t.split(/\s+/);var r;return n&&(r=new RegExp("^("+Object.keys(n).map(A).join("|")+"):(.*)$")),s.forEach((t=>{let n,s=null,o=null;r&&(n=t.match(r))&&(s=n[1],t=n[2]),t.length>0&&(o=this.settings.diacritics?G(t)||null:A(t),o&&e&&(o="\\b"+o)),i.push({string:t,regex:o?new RegExp(o,"iu"):null,field:s})})),i}getScoreFunction(t,e){var n=this.prepareSearch(t,e);return this._getScoreFunction(n)}_getScoreFunction(t){const e=t.tokens,n=e.length;if(!n)return function(){return 0};const i=t.options.fields,s=t.weights,r=i.length,o=t.getAttrFn;if(!r)return function(){return 1};const a=1===r?function(t,e){const n=i[0].field;return tt(o(e,n),t,s[n]||1)}:function(t,e){var n=0;if(t.field){const i=o(e,t.field);!t.regex&&i?n+=1/r:n+=tt(i,t,1)}else nt(s,((i,s)=>{n+=tt(o(e,s),t,i)}));return n/r};return 1===n?function(t){return a(e[0],t)}:"and"===t.options.conjunction?function(t){var i,s=0;for(let n of e){if((i=a(n,t))<=0)return 0;s+=i}return s/n}:function(t){var i=0;return nt(e,(e=>{i+=a(e,t)})),i/n}}getSortFunction(t,e){var n=this.prepareSearch(t,e);return this._getSortFunction(n)}_getSortFunction(t){var e,n=[];const i=this,s=t.options,r=!t.query&&s.sort_empty?s.sort_empty:s.sort;if("function"==typeof r)return r.bind(this);const o=function(e,n){return"$score"===e?n.score:t.getAttrFn(i.items[n.id],e)};if(r)for(let e of r)(t.query||"$score"!==e.field)&&n.push(e);if(t.query){e=!0;for(let t of n)if("$score"===t.field){e=!1;break}e&&n.unshift({field:"$score",direction:"desc"})}else n=n.filter((t=>"$score"!==t.field));return n.length?function(t,e){var i,s;for(let r of n){if(s=r.field,i=("desc"===r.direction?-1:1)*it(o(s,t),o(s,e)))return i}return 0}:null}prepareSearch(t,e){const n={};var i=Object.assign({},e);if(et(i,"sort"),et(i,"sort_empty"),i.fields){et(i,"fields");const t=[];i.fields.forEach((e=>{"string"==typeof e&&(e={field:e,weight:1}),t.push(e),n[e.field]="weight"in e?e.weight:1})),i.fields=t}return{options:i,query:t.toLowerCase().trim(),tokens:this.tokenize(t,i.respect_word_boundaries,n),total:0,items:[],weights:n,getAttrFn:i.nesting?X:Q}}search(t,e){var n,i,s=this;i=this.prepareSearch(t,e),e=i.options,t=i.query;const r=e.score||s._getScoreFunction(i);t.length?nt(s.items,((t,s)=>{n=r(t),(!1===e.filter||n>0)&&i.items.push({score:n,id:s})})):nt(s.items,((t,e)=>{i.items.push({score:1,id:e})}));const o=s._getSortFunction(i);return o&&i.items.sort(o),i.total=i.items.length,"number"==typeof e.limit&&(i.items=i.items.slice(0,e.limit)),i}}const rt=t=>null==t?null:ot(t),ot=t=>"boolean"==typeof t?t?"1":"0":t+"",at=t=>(t+"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),lt=(t,e)=>{var n;return function(i,s){var r=this;n&&(r.loading=Math.max(r.loading-1,0),clearTimeout(n)),n=setTimeout((function(){n=null,r.loadedSearches[i]=!0,t.call(r,i,s)}),e)}},ct=(t,e,n)=>{var i,s=t.trigger,r={};for(i of(t.trigger=function(){var n=arguments[0];if(-1===e.indexOf(n))return s.apply(t,arguments);r[n]=arguments},n.apply(t,[]),t.trigger=s,e))i in r&&s.apply(t,r[i])},ut=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},dt=(t,e,n,i)=>{t.addEventListener(e,n,i)},ht=(t,e)=>!!e&&(!!e[t]&&1===(e.altKey?1:0)+(e.ctrlKey?1:0)+(e.shiftKey?1:0)+(e.metaKey?1:0)),pt=(t,e)=>{const n=t.getAttribute("id");return n||(t.setAttribute("id",e),e)},mt=t=>t.replace(/[\\"']/g,"\\$&"),ft=(t,e)=>{e&&t.append(e)},gt=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},vt=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(yt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},yt=t=>"string"==typeof t&&t.indexOf("<")>-1,bt=(t,e)=>{var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!1),t.dispatchEvent(n)},_t=(t,e)=>{Object.assign(t.style,e)},wt=(t,...e)=>{var n=Tt(e);(t=Et(t)).map((t=>{n.map((e=>{t.classList.add(e)}))}))},kt=(t,...e)=>{var n=Tt(e);(t=Et(t)).map((t=>{n.map((e=>{t.classList.remove(e)}))}))},Tt=t=>{var e=[];return gt(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},Et=t=>(Array.isArray(t)||(t=[t]),t),Dt=(t,e,n)=>{if(!n||n.contains(t))for(;t&&t.matches;){if(t.matches(e))return t;t=t.parentNode}},xt=(t,e=0)=>e>0?t[t.length-1]:t[0],St=(t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n},Ot=(t,e)=>{gt(e,((e,n)=>{null==e?t.removeAttribute(n):t.setAttribute(n,""+e)}))},Lt=(t,e)=>{t.parentNode&&t.parentNode.replaceChild(e,t)},Ct=(t,e)=>{if(null===e)return;if("string"==typeof e){if(!e.length)return;e=new RegExp(e,"i")}const n=t=>3===t.nodeType?(t=>{var n=t.data.match(e);if(n&&t.data.length>0){var i=document.createElement("span");i.className="highlight";var s=t.splitText(n.index);s.splitText(n[0].length);var r=s.cloneNode(!0);return i.appendChild(r),Lt(s,i),1}return 0})(t):((t=>{1!==t.nodeType||!t.childNodes||/(script|style)/i.test(t.tagName)||"highlight"===t.className&&"SPAN"===t.tagName||Array.from(t.childNodes).forEach((t=>{n(t)}))})(t),0);n(t)},Mt="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey";var At={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(t){return t.length>0},render:{}};function It(t,e){var n=Object.assign({},At,e),i=n.dataAttr,s=n.labelField,r=n.valueField,o=n.disabledField,a=n.optgroupField,l=n.optgroupLabelField,c=n.optgroupValueField,u=t.tagName.toLowerCase(),d=t.getAttribute("placeholder")||t.getAttribute("data-placeholder");if(!d&&!n.allowEmptyOption){let e=t.querySelector('option[value=""]');e&&(d=e.textContent)}var h={placeholder:d,options:[],optgroups:[],items:[],maxItems:null};return"select"===u?(()=>{var e,u=h.options,d={},p=1;let m=0;var f=t=>{var e=Object.assign({},t.dataset),n=i&&e[i];return"string"==typeof n&&n.length&&(e=Object.assign(e,JSON.parse(n))),e},g=(t,e)=>{var i=rt(t.value);if(null!=i&&(i||n.allowEmptyOption)){if(d.hasOwnProperty(i)){if(e){var l=d[i][a];l?Array.isArray(l)?l.push(e):d[i][a]=[l,e]:d[i][a]=e}}else{var c=f(t);c[s]=c[s]||t.textContent,c[r]=c[r]||i,c[o]=c[o]||t.disabled,c[a]=c[a]||e,c.$option=t,c.$order=c.$order||++m,d[i]=c,u.push(c)}t.selected&&h.items.push(i)}};h.maxItems=t.hasAttribute("multiple")?null:1,gt(t.children,(t=>{var n,i,s;"optgroup"===(e=t.tagName.toLowerCase())?((s=f(n=t))[l]=s[l]||n.getAttribute("label")||"",s[c]=s[c]||p++,s[o]=s[o]||n.disabled,s.$order=s.$order||++m,h.optgroups.push(s),i=s[c],gt(n.children,(t=>{g(t,i)}))):"option"===e&&g(t)}))})():(()=>{const e=t.getAttribute(i);if(e)h.options=JSON.parse(e),gt(h.options,(t=>{h.items.push(t[r])}));else{var o=t.value.trim()||"";if(!n.allowEmptyOption&&!o.length)return;const e=o.split(n.delimiter);gt(e,(t=>{const e={};e[s]=t,e[r]=t,h.options.push(e)})),h.items=e}})(),Object.assign({},At,h,e)}var Nt=0;class Pt extends(function(t){return t.plugins={},class extends t{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(e,n){t.plugins[e]={name:e,fn:n}}initializePlugins(t){var e,n;const i=this,s=[];if(Array.isArray(t))t.forEach((t=>{"string"==typeof t?s.push(t):(i.plugins.settings[t.name]=t.options,s.push(t.name))}));else if(t)for(e in t)t.hasOwnProperty(e)&&(i.plugins.settings[e]=t[e],s.push(e));for(;n=s.shift();)i.require(n)}loadPlugin(e){var n=this,i=n.plugins,s=t.plugins[e];if(!t.plugins.hasOwnProperty(e))throw new Error('Unable to find "'+e+'" plugin');i.requested[e]=!0,i.loaded[e]=s.fn.apply(n,[n.plugins.settings[e]||{}]),i.names.push(e)}require(t){var e=this,n=e.plugins;if(!e.plugins.loaded.hasOwnProperty(t)){if(n.requested[t])throw new Error('Plugin has circular dependency ("'+t+'")');e.loadPlugin(t)}return n.loaded[t]}}}(S)){constructor(t,e){var n;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,Nt++;var i=vt(t);if(i.tomselect)throw new Error("Tom Select already initialized on this element");i.tomselect=this,n=(window.getComputedStyle&&window.getComputedStyle(i,null)).getPropertyValue("direction");const s=It(i,e);this.settings=s,this.input=i,this.tabIndex=i.tabIndex||0,this.is_select_tag="select"===i.tagName.toLowerCase(),this.rtl=/rtl/i.test(n),this.inputId=pt(i,"tomselect-"+Nt),this.isRequired=i.required,this.sifter=new st(this.options,{diacritics:s.diacritics}),s.mode=s.mode||(1===s.maxItems?"single":"multi"),"boolean"!=typeof s.hideSelected&&(s.hideSelected="multi"===s.mode),"boolean"!=typeof s.hidePlaceholder&&(s.hidePlaceholder="multi"!==s.mode);var r=s.createFilter;"function"!=typeof r&&("string"==typeof r&&(r=new RegExp(r)),r instanceof RegExp?s.createFilter=t=>r.test(t):s.createFilter=t=>this.settings.duplicates||!this.options[t]),this.initializePlugins(s.plugins),this.setupCallbacks(),this.setupTemplates();const o=vt("
"),a=vt("
"),l=this._render("dropdown"),c=vt('
'),u=this.input.getAttribute("class")||"",d=s.mode;var h;if(wt(o,s.wrapperClass,u,d),wt(a,s.controlClass),ft(o,a),wt(l,s.dropdownClass,d),s.copyClassesToDropdown&&wt(l,u),wt(c,s.dropdownContentClass),ft(l,c),vt(s.dropdownParent||o).appendChild(l),yt(s.controlInput)){h=vt(s.controlInput);gt(["autocorrect","autocapitalize","autocomplete","spellcheck"],(t=>{i.getAttribute(t)&&Ot(h,{[t]:i.getAttribute(t)})})),h.tabIndex=-1,a.appendChild(h),this.focus_node=h}else s.controlInput?(h=vt(s.controlInput),this.focus_node=h):(h=vt(""),this.focus_node=a);this.wrapper=o,this.dropdown=l,this.dropdown_content=c,this.control=a,this.control_input=h,this.setup()}setup(){const t=this,e=t.settings,n=t.control_input,i=t.dropdown,s=t.dropdown_content,r=t.wrapper,o=t.control,a=t.input,l=t.focus_node,c={passive:!0},u=t.inputId+"-ts-dropdown";Ot(s,{id:u}),Ot(l,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":u});const d=pt(l,t.inputId+"-ts-control"),h="label[for='"+(t=>t.replace(/['"\\]/g,"\\$&"))(t.inputId)+"']",p=document.querySelector(h),m=t.focus.bind(t);if(p){dt(p,"click",m),Ot(p,{for:d});const e=pt(p,t.inputId+"-ts-label");Ot(l,{"aria-labelledby":e}),Ot(s,{"aria-labelledby":e})}if(r.style.width=a.style.width,t.plugins.names.length){const e="plugin-"+t.plugins.names.join(" plugin-");wt([r,i],e)}(null===e.maxItems||e.maxItems>1)&&t.is_select_tag&&Ot(a,{multiple:"multiple"}),e.placeholder&&Ot(n,{placeholder:e.placeholder}),!e.splitOn&&e.delimiter&&(e.splitOn=new RegExp("\\s*"+A(e.delimiter)+"+\\s*")),e.load&&e.loadThrottle&&(e.load=lt(e.load,e.loadThrottle)),dt(i,"mousemove",(()=>{t.ignoreHover=!1})),dt(i,"mouseenter",(e=>{var n=Dt(e.target,"[data-selectable]",i);n&&t.onOptionHover(e,n)}),{capture:!0}),dt(i,"click",(e=>{const n=Dt(e.target,"[data-selectable]");n&&(t.onOptionSelect(e,n),ut(e,!0))})),dt(o,"click",(e=>{var i=Dt(e.target,"[data-ts-item]",o);i&&t.onItemSelect(e,i)?ut(e,!0):""==n.value&&(t.onClick(),ut(e,!0))})),dt(l,"keydown",(e=>t.onKeyDown(e))),dt(n,"keypress",(e=>t.onKeyPress(e))),dt(n,"input",(e=>t.onInput(e))),dt(l,"blur",(e=>t.onBlur(e))),dt(l,"focus",(e=>t.onFocus(e))),dt(n,"paste",(e=>t.onPaste(e)));const f=e=>{const s=e.composedPath()[0];if(!r.contains(s)&&!i.contains(s))return t.isFocused&&t.blur(),void t.inputState();s==n&&t.isOpen?e.stopPropagation():ut(e,!0)},g=()=>{t.isOpen&&t.positionDropdown()};dt(document,"mousedown",f),dt(window,"scroll",g,c),dt(window,"resize",g,c),this._destroy=()=>{document.removeEventListener("mousedown",f),window.removeEventListener("scroll",g),window.removeEventListener("resize",g),p&&p.removeEventListener("click",m)},this.revertSettings={innerHTML:a.innerHTML,tabIndex:a.tabIndex},a.tabIndex=-1,a.insertAdjacentElement("afterend",t.wrapper),t.sync(!1),e.items=[],delete e.optgroups,delete e.options,dt(a,"invalid",(()=>{t.isValid&&(t.isValid=!1,t.isInvalid=!0,t.refreshState())})),t.updateOriginalInput(),t.refreshItems(),t.close(!1),t.inputState(),t.isSetup=!0,a.disabled?t.disable():a.readOnly?t.setReadOnly(!0):t.enable(),t.on("change",this.onChange),wt(a,"tomselected","ts-hidden-accessible"),t.trigger("initialize"),!0===e.preload&&t.preload()}setupOptions(t=[],e=[]){this.addOptions(t),gt(e,(t=>{this.registerOptionGroup(t)}))}setupTemplates(){var t=this,e=t.settings.labelField,n=t.settings.optgroupLabelField,i={optgroup:t=>{let e=document.createElement("div");return e.className="optgroup",e.appendChild(t.options),e},optgroup_header:(t,e)=>'
'+e(t[n])+"
",option:(t,n)=>"
"+n(t[e])+"
",item:(t,n)=>"
"+n(t[e])+"
",option_create:(t,e)=>'
Add '+e(t.input)+"…
",no_results:()=>'
No results found
',loading:()=>'
',not_loading:()=>{},dropdown:()=>"
"};t.settings.render=Object.assign({},i,t.settings.render)}setupCallbacks(){var t,e,n={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(t in n)(e=this.settings[n[t]])&&this.on(t,e)}sync(t=!0){const e=this,n=t?It(e.input,{delimiter:e.settings.delimiter}):e.settings;e.setupOptions(n.options,n.optgroups),e.setValue(n.items||[],!0),e.lastQuery=null}onClick(){var t=this;if(t.activeItems.length>0)return t.clearActiveItems(),void t.focus();t.isFocused&&t.isOpen?t.blur():t.focus()}onMouseDown(){}onChange(){bt(this.input,"input"),bt(this.input,"change")}onPaste(t){var e=this;e.isInputHidden||e.isLocked?ut(t):e.settings.splitOn&&setTimeout((()=>{var t=e.inputValue();if(t.match(e.settings.splitOn)){var n=t.trim().split(e.settings.splitOn);gt(n,(t=>{rt(t)&&(this.options[t]?e.addItem(t):e.createItem(t))}))}}),0)}onKeyPress(t){var e=this;if(!e.isLocked){var n=String.fromCharCode(t.keyCode||t.which);return e.settings.create&&"multi"===e.settings.mode&&n===e.settings.delimiter?(e.createItem(),void ut(t)):void 0}ut(t)}onKeyDown(t){var e=this;if(e.ignoreHover=!0,e.isLocked)9!==t.keyCode&&ut(t);else{switch(t.keyCode){case 65:if(ht(Mt,t)&&""==e.control_input.value)return ut(t),void e.selectAll();break;case 27:return e.isOpen&&(ut(t,!0),e.close()),void e.clearActiveItems();case 40:if(!e.isOpen&&e.hasOptions)e.open();else if(e.activeOption){let t=e.getAdjacent(e.activeOption,1);t&&e.setActiveOption(t)}return void ut(t);case 38:if(e.activeOption){let t=e.getAdjacent(e.activeOption,-1);t&&e.setActiveOption(t)}return void ut(t);case 13:return void(e.canSelect(e.activeOption)?(e.onOptionSelect(t,e.activeOption),ut(t)):(e.settings.create&&e.createItem()||document.activeElement==e.control_input&&e.isOpen)&&ut(t));case 37:return void e.advanceSelection(-1,t);case 39:return void e.advanceSelection(1,t);case 9:return void(e.settings.selectOnTab&&(e.canSelect(e.activeOption)&&(e.onOptionSelect(t,e.activeOption),ut(t)),e.settings.create&&e.createItem()&&ut(t)));case 8:case 46:return void e.deleteSelection(t)}e.isInputHidden&&!ht(Mt,t)&&ut(t)}}onInput(t){if(this.isLocked)return;const e=this.inputValue();this.lastValue!==e&&(this.lastValue=e,""!=e?(this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=((t,e)=>e>0?window.setTimeout(t,e):(t.call(null),null))((()=>{this.refreshTimeout=null,this._onInput()}),this.settings.refreshThrottle)):this._onInput())}_onInput(){const t=this.lastValue;this.settings.shouldLoad.call(this,t)&&this.load(t),this.refreshOptions(),this.trigger("type",t)}onOptionHover(t,e){this.ignoreHover||this.setActiveOption(e,!1)}onFocus(t){var e=this,n=e.isFocused;if(e.isDisabled||e.isReadOnly)return e.blur(),void ut(t);e.ignoreFocus||(e.isFocused=!0,"focus"===e.settings.preload&&e.preload(),n||e.trigger("focus"),e.activeItems.length||(e.inputState(),e.refreshOptions(!!e.settings.openOnFocus)),e.refreshState())}onBlur(t){if(!1!==document.hasFocus()){var e=this;if(e.isFocused){e.isFocused=!1,e.ignoreFocus=!1;var n=()=>{e.close(),e.setActiveItem(),e.setCaret(e.items.length),e.trigger("blur")};e.settings.create&&e.settings.createOnBlur?e.createItem(null,n):n()}}}onOptionSelect(t,e){var n,i=this;e.parentElement&&e.parentElement.matches("[data-disabled]")||(e.classList.contains("create")?i.createItem(null,(()=>{i.settings.closeAfterSelect&&i.close()})):void 0!==(n=e.dataset.value)&&(i.lastQuery=null,i.addItem(n),i.settings.closeAfterSelect&&i.close(),!i.settings.hideSelected&&t.type&&/click/.test(t.type)&&i.setActiveOption(e)))}canSelect(t){return!!(this.isOpen&&t&&this.dropdown_content.contains(t))}onItemSelect(t,e){var n=this;return!n.isLocked&&"multi"===n.settings.mode&&(ut(t),n.setActiveItem(e,t),!0)}canLoad(t){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(t)}load(t){const e=this;if(!e.canLoad(t))return;wt(e.wrapper,e.settings.loadingClass),e.loading++;const n=e.loadCallback.bind(e);e.settings.load.call(e,t,n)}loadCallback(t,e){const n=this;n.loading=Math.max(n.loading-1,0),n.lastQuery=null,n.clearActiveOption(),n.setupOptions(t,e),n.refreshOptions(n.isFocused&&!n.isInputHidden),n.loading||kt(n.wrapper,n.settings.loadingClass),n.trigger("load",t,e)}preload(){var t=this.wrapper.classList;t.contains("preloaded")||(t.add("preloaded"),this.load(""))}setTextboxValue(t=""){var e=this.control_input;e.value!==t&&(e.value=t,bt(e,"update"),this.lastValue=t)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(t,e){ct(this,e?[]:["change"],(()=>{this.clear(e),this.addItems(t,e)}))}setMaxItems(t){0===t&&(t=null),this.settings.maxItems=t,this.refreshState()}setActiveItem(t,e){var n,i,s,r,o,a,l=this;if("single"!==l.settings.mode){if(!t)return l.clearActiveItems(),void(l.isFocused&&l.inputState());if("click"===(n=e&&e.type.toLowerCase())&&ht("shiftKey",e)&&l.activeItems.length){for(a=l.getLastActive(),(s=Array.prototype.indexOf.call(l.control.children,a))>(r=Array.prototype.indexOf.call(l.control.children,t))&&(o=s,s=r,r=o),i=s;i<=r;i++)t=l.control.children[i],-1===l.activeItems.indexOf(t)&&l.setActiveItemClass(t);ut(e)}else"click"===n&&ht(Mt,e)||"keydown"===n&&ht("shiftKey",e)?t.classList.contains("active")?l.removeActiveItem(t):l.setActiveItemClass(t):(l.clearActiveItems(),l.setActiveItemClass(t));l.inputState(),l.isFocused||l.focus()}}setActiveItemClass(t){const e=this,n=e.control.querySelector(".last-active");n&&kt(n,"last-active"),wt(t,"active last-active"),e.trigger("item_select",t),-1==e.activeItems.indexOf(t)&&e.activeItems.push(t)}removeActiveItem(t){var e=this.activeItems.indexOf(t);this.activeItems.splice(e,1),kt(t,"active")}clearActiveItems(){kt(this.activeItems,"active"),this.activeItems=[]}setActiveOption(t,e=!0){t!==this.activeOption&&(this.clearActiveOption(),t&&(this.activeOption=t,Ot(this.focus_node,{"aria-activedescendant":t.getAttribute("id")}),Ot(t,{"aria-selected":"true"}),wt(t,"active"),e&&this.scrollToOption(t)))}scrollToOption(t,e){if(!t)return;const n=this.dropdown_content,i=n.clientHeight,s=n.scrollTop||0,r=t.offsetHeight,o=t.getBoundingClientRect().top-n.getBoundingClientRect().top+s;o+r>i+s?this.scroll(o-i+r,e):o{t.setActiveItemClass(e)})))}inputState(){var t=this;t.control.contains(t.control_input)&&(Ot(t.control_input,{placeholder:t.settings.placeholder}),t.activeItems.length>0||!t.isFocused&&t.settings.hidePlaceholder&&t.items.length>0?(t.setTextboxValue(),t.isInputHidden=!0):(t.settings.hidePlaceholder&&t.items.length>0&&Ot(t.control_input,{placeholder:""}),t.isInputHidden=!1),t.wrapper.classList.toggle("input-hidden",t.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var t=this;t.isDisabled||t.isReadOnly||(t.ignoreFocus=!0,t.control_input.offsetWidth?t.control_input.focus():t.focus_node.focus(),setTimeout((()=>{t.ignoreFocus=!1,t.onFocus()}),0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(t){return this.sifter.getScoreFunction(t,this.getSearchOptions())}getSearchOptions(){var t=this.settings,e=t.sortField;return"string"==typeof t.sortField&&(e=[{field:t.sortField}]),{fields:t.searchField,conjunction:t.searchConjunction,sort:e,nesting:t.nesting}}search(t){var e,n,i=this,s=this.getSearchOptions();if(i.settings.score&&"function"!=typeof(n=i.settings.score.call(i,t)))throw new Error('Tom Select "score" setting must be a function that returns a function');return t!==i.lastQuery?(i.lastQuery=t,e=i.sifter.search(t,Object.assign(s,{score:n})),i.currentResults=e):e=Object.assign({},i.currentResults),i.settings.hideSelected&&(e.items=e.items.filter((t=>{let e=rt(t.id);return!(e&&-1!==i.items.indexOf(e))}))),e}refreshOptions(t=!0){var e,n,i,s,r,o,a,l,c,u;const d={},h=[];var p=this,m=p.inputValue();const f=m===p.lastQuery||""==m&&null==p.lastQuery;var g=p.search(m),v=null,y=p.settings.shouldOpen||!1,b=p.dropdown_content;f&&(v=p.activeOption)&&(c=v.closest("[data-group]")),s=g.items.length,"number"==typeof p.settings.maxOptions&&(s=Math.min(s,p.settings.maxOptions)),s>0&&(y=!0);const _=(t,e)=>{let n=d[t];if(void 0!==n){let t=h[n];if(void 0!==t)return[n,t.fragment]}let i=document.createDocumentFragment();return n=h.length,h.push({fragment:i,order:e,optgroup:t}),[n,i]};for(e=0;e0&&(u=u.cloneNode(!0),Ot(u,{id:a.$id+"-clone-"+n,"aria-selected":null}),u.classList.add("ts-cloned"),kt(u,"active"),p.activeOption&&p.activeOption.dataset.value==s&&c&&c.dataset.group===r.toString()&&(v=u)),l.appendChild(u),""!=r&&(d[r]=i)}}var w;p.settings.lockOptgroupOrder&&h.sort(((t,e)=>t.order-e.order)),a=document.createDocumentFragment(),gt(h,(t=>{let e=t.fragment,n=t.optgroup;if(!e||!e.children.length)return;let i=p.optgroups[n];if(void 0!==i){let t=document.createDocumentFragment(),n=p.render("optgroup_header",i);ft(t,n),ft(t,e);let s=p.render("optgroup",{group:i,options:t});ft(a,s)}else ft(a,e)})),b.innerHTML="",ft(b,a),p.settings.highlight&&(w=b.querySelectorAll("span.highlight"),Array.prototype.forEach.call(w,(function(t){var e=t.parentNode;e.replaceChild(t.firstChild,t),e.normalize()})),g.query.length&&g.tokens.length&>(g.tokens,(t=>{Ct(b,t.regex)})));var k=t=>{let e=p.render(t,{input:m});return e&&(y=!0,b.insertBefore(e,b.firstChild)),e};if(p.loading?k("loading"):p.settings.shouldLoad.call(p,m)?0===g.items.length&&k("no_results"):k("not_loading"),(l=p.canCreate(m))&&(u=k("option_create")),p.hasOptions=g.items.length>0||l,y){if(g.items.length>0){if(v||"single"!==p.settings.mode||null==p.items[0]||(v=p.getOption(p.items[0])),!b.contains(v)){let t=0;u&&!p.settings.addPrecedence&&(t=1),v=p.selectable()[t]}}else u&&(v=u);t&&!p.isOpen&&(p.open(),p.scrollToOption(v,"auto")),p.setActiveOption(v)}else p.clearActiveOption(),t&&p.isOpen&&p.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(t,e=!1){const n=this;if(Array.isArray(t))return n.addOptions(t,e),!1;const i=rt(t[n.settings.valueField]);return null!==i&&!n.options.hasOwnProperty(i)&&(t.$order=t.$order||++n.order,t.$id=n.inputId+"-opt-"+t.$order,n.options[i]=t,n.lastQuery=null,e&&(n.userOptions[i]=e,n.trigger("option_add",i,t)),i)}addOptions(t,e=!1){gt(t,(t=>{this.addOption(t,e)}))}registerOption(t){return this.addOption(t)}registerOptionGroup(t){var e=rt(t[this.settings.optgroupValueField]);return null!==e&&(t.$order=t.$order||++this.order,this.optgroups[e]=t,e)}addOptionGroup(t,e){var n;e[this.settings.optgroupValueField]=t,(n=this.registerOptionGroup(e))&&this.trigger("optgroup_add",n,e)}removeOptionGroup(t){this.optgroups.hasOwnProperty(t)&&(delete this.optgroups[t],this.clearCache(),this.trigger("optgroup_remove",t))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(t,e){const n=this;var i,s;const r=rt(t),o=rt(e[n.settings.valueField]);if(null===r)return;const a=n.options[r];if(null==a)return;if("string"!=typeof o)throw new Error("Value must be set in option data");const l=n.getOption(r),c=n.getItem(r);if(e.$order=e.$order||a.$order,delete n.options[r],n.uncacheValue(o),n.options[o]=e,l){if(n.dropdown_content.contains(l)){const t=n._render("option",e);Lt(l,t),n.activeOption===l&&n.setActiveOption(t)}l.remove()}c&&(-1!==(s=n.items.indexOf(r))&&n.items.splice(s,1,o),i=n._render("item",e),c.classList.contains("active")&&wt(i,"active"),Lt(c,i)),n.lastQuery=null}removeOption(t,e){const n=this;t=ot(t),n.uncacheValue(t),delete n.userOptions[t],delete n.options[t],n.lastQuery=null,n.trigger("option_remove",t),n.removeItem(t,e)}clearOptions(t){const e=(t||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const n={};gt(this.options,((t,i)=>{e(t,i)&&(n[i]=t)})),this.options=this.sifter.items=n,this.lastQuery=null,this.trigger("option_clear")}clearFilter(t,e){return this.items.indexOf(e)>=0}getOption(t,e=!1){const n=rt(t);if(null===n)return null;const i=this.options[n];if(null!=i){if(i.$div)return i.$div;if(e)return this._render("option",i)}return null}getAdjacent(t,e,n="option"){var i;if(!t)return null;i="item"==n?this.controlChildren():this.dropdown_content.querySelectorAll("[data-selectable]");for(let n=0;n0?i[n+1]:i[n-1];return null}getItem(t){if("object"==typeof t)return t;var e=rt(t);return null!==e?this.control.querySelector(`[data-value="${mt(e)}"]`):null}addItems(t,e){var n=this,i=Array.isArray(t)?t:[t];const s=(i=i.filter((t=>-1===n.items.indexOf(t))))[i.length-1];i.forEach((t=>{n.isPending=t!==s,n.addItem(t,e)}))}addItem(t,e){ct(this,e?[]:["change","dropdown_close"],(()=>{var n,i;const s=this,r=s.settings.mode,o=rt(t);if((!o||-1===s.items.indexOf(o)||("single"===r&&s.close(),"single"!==r&&s.settings.duplicates))&&null!==o&&s.options.hasOwnProperty(o)&&("single"===r&&s.clear(e),"multi"!==r||!s.isFull())){if(n=s._render("item",s.options[o]),s.control.contains(n)&&(n=n.cloneNode(!0)),i=s.isFull(),s.items.splice(s.caretPos,0,o),s.insertAtCaret(n),s.isSetup){if(!s.isPending&&s.settings.hideSelected){let t=s.getOption(o),e=s.getAdjacent(t,1);e&&s.setActiveOption(e)}s.isPending||s.settings.closeAfterSelect||s.refreshOptions(s.isFocused&&"single"!==r),0!=s.settings.closeAfterSelect&&s.isFull()?s.close():s.isPending||s.positionDropdown(),s.trigger("item_add",o,n),s.isPending||s.updateOriginalInput({silent:e})}(!s.isPending||!i&&s.isFull())&&(s.inputState(),s.refreshState())}}))}removeItem(t=null,e){const n=this;if(!(t=n.getItem(t)))return;var i,s;const r=t.dataset.value;i=St(t),t.remove(),t.classList.contains("active")&&(s=n.activeItems.indexOf(t),n.activeItems.splice(s,1),kt(t,"active")),n.items.splice(i,1),n.lastQuery=null,!n.settings.persist&&n.userOptions.hasOwnProperty(r)&&n.removeOption(r,e),i{})){3===arguments.length&&(e=arguments[2]),"function"!=typeof e&&(e=()=>{});var n,i=this,s=i.caretPos;if(t=t||i.inputValue(),!i.canCreate(t))return e(),!1;i.lock();var r=!1,o=t=>{if(i.unlock(),!t||"object"!=typeof t)return e();var n=rt(t[i.settings.valueField]);if("string"!=typeof n)return e();i.setTextboxValue(),i.addOption(t,!0),i.setCaret(s),i.addItem(n),e(t),r=!0};return n="function"==typeof i.settings.create?i.settings.create.call(this,t,o):{[i.settings.labelField]:t,[i.settings.valueField]:t},r||o(n),!0}refreshItems(){var t=this;t.lastQuery=null,t.isSetup&&t.addItems(t.items),t.updateOriginalInput(),t.refreshState()}refreshState(){const t=this;t.refreshValidityState();const e=t.isFull(),n=t.isLocked;t.wrapper.classList.toggle("rtl",t.rtl);const i=t.wrapper.classList;var s;i.toggle("focus",t.isFocused),i.toggle("disabled",t.isDisabled),i.toggle("readonly",t.isReadOnly),i.toggle("required",t.isRequired),i.toggle("invalid",!t.isValid),i.toggle("locked",n),i.toggle("full",e),i.toggle("input-active",t.isFocused&&!t.isInputHidden),i.toggle("dropdown-active",t.isOpen),i.toggle("has-options",(s=t.options,0===Object.keys(s).length)),i.toggle("has-items",t.items.length>0)}refreshValidityState(){var t=this;t.input.validity&&(t.isValid=t.input.validity.valid,t.isInvalid=!t.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(t={}){const e=this;var n,i;const s=e.input.querySelector('option[value=""]');if(e.is_select_tag){const r=[],o=e.input.querySelectorAll("option:checked").length;function a(t,n,i){return t||(t=vt('")),t!=s&&e.input.append(t),r.push(t),(t!=s||o>0)&&(t.selected=!0),t}e.input.querySelectorAll("option:checked").forEach((t=>{t.selected=!1})),0==e.items.length&&"single"==e.settings.mode?a(s,"",""):e.items.forEach((t=>{if(n=e.options[t],i=n[e.settings.labelField]||"",r.includes(n.$option)){a(e.input.querySelector(`option[value="${mt(t)}"]:not(:checked)`),t,i)}else n.$option=a(n.$option,t,i)}))}else e.input.value=e.getValue();e.isSetup&&(t.silent||e.trigger("change",e.getValue()))}open(){var t=this;t.isLocked||t.isOpen||"multi"===t.settings.mode&&t.isFull()||(t.isOpen=!0,Ot(t.focus_node,{"aria-expanded":"true"}),t.refreshState(),_t(t.dropdown,{visibility:"hidden",display:"block"}),t.positionDropdown(),_t(t.dropdown,{visibility:"visible",display:"block"}),t.focus(),t.trigger("dropdown_open",t.dropdown))}close(t=!0){var e=this,n=e.isOpen;t&&(e.setTextboxValue(),"single"===e.settings.mode&&e.items.length&&e.inputState()),e.isOpen=!1,Ot(e.focus_node,{"aria-expanded":"false"}),_t(e.dropdown,{display:"none"}),e.settings.hideSelected&&e.clearActiveOption(),e.refreshState(),n&&e.trigger("dropdown_close",e.dropdown)}positionDropdown(){if("body"===this.settings.dropdownParent){var t=this.control,e=t.getBoundingClientRect(),n=t.offsetHeight+e.top+window.scrollY,i=e.left+window.scrollX;_t(this.dropdown,{width:e.width+"px",top:n+"px",left:i+"px"})}}clear(t){var e=this;if(e.items.length){var n=e.controlChildren();gt(n,(t=>{e.removeItem(t,!0)})),e.inputState(),t||e.updateOriginalInput(),e.trigger("clear")}}insertAtCaret(t){const e=this,n=e.caretPos,i=e.control;i.insertBefore(t,i.children[n]||null),e.setCaret(n+1)}deleteSelection(t){var e,n,i,s,r,o=this;e=t&&8===t.keyCode?-1:1,n={start:(r=o.control_input).selectionStart||0,length:(r.selectionEnd||0)-(r.selectionStart||0)};const a=[];if(o.activeItems.length)s=xt(o.activeItems,e),i=St(s),e>0&&i++,gt(o.activeItems,(t=>a.push(t)));else if((o.isFocused||"single"===o.settings.mode)&&o.items.length){const t=o.controlChildren();let i;e<0&&0===n.start&&0===n.length?i=t[o.caretPos-1]:e>0&&n.start===o.inputValue().length&&(i=t[o.caretPos]),void 0!==i&&a.push(i)}if(!o.shouldDelete(a,t))return!1;for(ut(t,!0),void 0!==i&&o.setCaret(i);a.length;)o.removeItem(a.pop());return o.inputState(),o.positionDropdown(),o.refreshOptions(!1),!0}shouldDelete(t,e){const n=t.map((t=>t.dataset.value));return!(!n.length||"function"==typeof this.settings.onDelete&&!1===this.settings.onDelete(n,e))}advanceSelection(t,e){var n,i,s=this;s.rtl&&(t*=-1),s.inputValue().length||(ht(Mt,e)||ht("shiftKey",e)?(i=(n=s.getLastActive(t))?n.classList.contains("active")?s.getAdjacent(n,t,"item"):n:t>0?s.control_input.nextElementSibling:s.control_input.previousElementSibling)&&(i.classList.contains("active")&&s.removeActiveItem(n),s.setActiveItemClass(i)):s.moveCaret(t))}moveCaret(t){}getLastActive(t){let e=this.control.querySelector(".last-active");if(e)return e;var n=this.control.querySelectorAll(".active");return n?xt(n,t):void 0}setCaret(t){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(t=this.isReadOnly||this.isDisabled){this.isLocked=t,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(t){this.focus_node.tabIndex=t?-1:this.tabIndex,this.isDisabled=t,this.input.disabled=t,this.control_input.disabled=t,this.setLocked()}setReadOnly(t){this.isReadOnly=t,this.input.readOnly=t,this.control_input.readOnly=t,this.setLocked()}destroy(){var t=this,e=t.revertSettings;t.trigger("destroy"),t.off(),t.wrapper.remove(),t.dropdown.remove(),t.input.innerHTML=e.innerHTML,t.input.tabIndex=e.tabIndex,kt(t.input,"tomselected","ts-hidden-accessible"),t._destroy(),delete t.input.tomselect}render(t,e){var n,i;const s=this;if("function"!=typeof this.settings.render[t])return null;if(!(i=s.settings.render[t].call(this,e,at)))return null;if(i=vt(i),"option"===t||"option_create"===t?e[s.settings.disabledField]?Ot(i,{"aria-disabled":"true"}):Ot(i,{"data-selectable":""}):"optgroup"===t&&(n=e.group[s.settings.optgroupValueField],Ot(i,{"data-group":n}),e.group[s.settings.disabledField]&&Ot(i,{"data-disabled":""})),"option"===t||"item"===t){const n=ot(e[s.settings.valueField]);Ot(i,{"data-value":n}),"item"===t?(wt(i,s.settings.itemClass),Ot(i,{"data-ts-item":""})):(wt(i,s.settings.optionClass),Ot(i,{role:"option",id:e.$id}),e.$div=i,s.options[n]=e)}return i}_render(t,e){const n=this.render(t,e);if(null==n)throw"HTMLElement expected";return n}clearCache(){gt(this.options,(t=>{t.$div&&(t.$div.remove(),delete t.$div)}))}uncacheValue(t){const e=this.getOption(t);e&&e.remove()}canCreate(t){return this.settings.create&&t.length>0&&this.settings.createFilter.call(this,t)}hook(t,e,n){var i=this,s=i[e];i[e]=function(){var e,r;return"after"===t&&(e=s.apply(i,arguments)),r=n.apply(i,arguments),"instead"===t?r:("before"===t&&(e=s.apply(i,arguments)),e)}}}const Ft=t=>"boolean"==typeof t?t?"1":"0":t+"",jt=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},qt=t=>"string"==typeof t&&t.indexOf("<")>-1;const Ht=t=>"string"==typeof t&&t.indexOf("<")>-1;const Vt=(t,e,n,i)=>{t.addEventListener(e,n,i)},$t=t=>"string"==typeof t&&t.indexOf("<")>-1,Bt=(t,e)=>{((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(e,((e,n)=>{null==e?t.removeAttribute(n):t.setAttribute(n,""+e)}))};const Rt=t=>"string"==typeof t&&t.indexOf("<")>-1;const Wt=t=>{var e=[];return((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},zt=t=>(Array.isArray(t)||(t=[t]),t);const Yt=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Ut(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},Ut=t=>"string"==typeof t&&t.indexOf("<")>-1,Zt=t=>{var e=[];return((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},Kt=t=>(Array.isArray(t)||(t=[t]),t);const Jt=(t,e,n,i)=>{t.addEventListener(e,n,i)};const Gt=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},Qt=(t,e,n,i)=>{t.addEventListener(e,n,i)},Xt=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(te(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},te=t=>"string"==typeof t&&t.indexOf("<")>-1;const ee=t=>{var e=[];return((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},ne=t=>(Array.isArray(t)||(t=[t]),t);Pt.define("change_listener",(function(){var t,e,n,i;t=this.input,e="change",n=()=>{this.sync()},t.addEventListener(e,n,i)})),Pt.define("checkbox_options",(function(t){var e=this,n=e.onOptionSelect;e.settings.hideSelected=!1;const i=Object.assign({className:"tomselect-checkbox",checkedClassNames:void 0,uncheckedClassNames:void 0},t);var s=function(t,e){e?(t.checked=!0,i.uncheckedClassNames&&t.classList.remove(...i.uncheckedClassNames),i.checkedClassNames&&t.classList.add(...i.checkedClassNames)):(t.checked=!1,i.checkedClassNames&&t.classList.remove(...i.checkedClassNames),i.uncheckedClassNames&&t.classList.add(...i.uncheckedClassNames))},r=function(t){setTimeout((()=>{var e=t.querySelector("input."+i.className);e instanceof HTMLInputElement&&s(e,t.classList.contains("selected"))}),1)};e.hook("after","setupTemplates",(()=>{var t=e.settings.render.option;e.settings.render.option=(n,r)=>{var o=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(qt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(t.call(e,n,r)),a=document.createElement("input");i.className&&a.classList.add(i.className),a.addEventListener("click",(function(t){jt(t)})),a.type="checkbox";const l=null==(c=n[e.settings.valueField])?null:Ft(c);var c;return s(a,!!(l&&e.items.indexOf(l)>-1)),o.prepend(a),o}})),e.on("item_remove",(t=>{var n=e.getOption(t);n&&(n.classList.remove("selected"),r(n))})),e.on("item_add",(t=>{var n=e.getOption(t);n&&r(n)})),e.hook("instead","onOptionSelect",((t,i)=>{if(i.classList.contains("selected"))return i.classList.remove("selected"),e.removeItem(i.dataset.value),e.refreshOptions(),void jt(t,!0);n.call(e,t,i),r(i)}))})),Pt.define("clear_button",(function(t){const e=this,n=Object.assign({className:"clear-button",title:"Clear All",html:t=>`
⨯
`},t);e.on("initialize",(()=>{var t=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Ht(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(n.html(n));t.addEventListener("click",(t=>{e.isLocked||(e.clear(),"single"===e.settings.mode&&e.settings.allowEmptyOption&&e.addItem(""),t.preventDefault(),t.stopPropagation())})),e.control.appendChild(t)}))})),Pt.define("drag_drop",(function(){var t=this;if("multi"!==t.settings.mode)return;var e=t.lock,n=t.unlock;let i,s=!0;t.hook("after","setupTemplates",(()=>{var e=t.settings.render.item;t.settings.render.item=(n,r)=>{const o=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if($t(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(e.call(t,n,r));Bt(o,{draggable:"true"});const a=t=>{t.preventDefault(),o.classList.add("ts-drag-over"),l(o,i)},l=(t,e)=>{var n,i,s;void 0!==e&&(((t,e)=>{do{var n;if(t==(e=null==(n=e)?void 0:n.previousElementSibling))return!0}while(e&&e.previousElementSibling);return!1})(e,o)?(i=e,null==(s=(n=t).parentNode)||s.insertBefore(i,n.nextSibling)):((t,e)=>{var n;null==(n=t.parentNode)||n.insertBefore(e,t)})(t,e))};return Vt(o,"mousedown",(t=>{s||((t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())})(t),t.stopPropagation()})),Vt(o,"dragstart",(t=>{i=o,setTimeout((()=>{o.classList.add("ts-dragging")}),0)})),Vt(o,"dragenter",a),Vt(o,"dragover",a),Vt(o,"dragleave",(()=>{o.classList.remove("ts-drag-over")})),Vt(o,"dragend",(()=>{var e;document.querySelectorAll(".ts-drag-over").forEach((t=>t.classList.remove("ts-drag-over"))),null==(e=i)||e.classList.remove("ts-dragging"),i=void 0;var n=[];t.control.querySelectorAll("[data-value]").forEach((t=>{if(t.dataset.value){let e=t.dataset.value;e&&n.push(e)}})),t.setValue(n)})),o}})),t.hook("instead","lock",(()=>(s=!1,e.call(t)))),t.hook("instead","unlock",(()=>(s=!0,n.call(t))))})),Pt.define("dropdown_header",(function(t){const e=this,n=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:t=>'
'+t.title+'×
'},t);e.on("initialize",(()=>{var t=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Rt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(n.html(n)),i=t.querySelector("."+n.closeClass);i&&i.addEventListener("click",(t=>{((t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())})(t,!0),e.close()})),e.dropdown.insertBefore(t,e.dropdown.firstChild)}))})),Pt.define("caret_position",(function(){var t=this;t.hook("instead","setCaret",(e=>{"single"!==t.settings.mode&&t.control.contains(t.control_input)?(e=Math.max(0,Math.min(t.items.length,e)))==t.caretPos||t.isPending||t.controlChildren().forEach(((n,i)=>{i{if(!t.isFocused)return;const n=t.getLastActive(e);if(n){const i=((t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n})(n);t.setCaret(e>0?i+1:i),t.setActiveItem(),((t,...e)=>{var n=Wt(e);(t=zt(t)).map((t=>{n.map((e=>{t.classList.remove(e)}))}))})(n,"last-active")}else t.setCaret(t.caretPos+e)}))})),Pt.define("dropdown_input",(function(){const t=this;t.settings.shouldOpen=!0,t.hook("before","setup",(()=>{t.focus_node=t.control,((t,...e)=>{var n=Zt(e);(t=Kt(t)).map((t=>{n.map((e=>{t.classList.add(e)}))}))})(t.control_input,"dropdown-input");const e=Yt('");for(var D=1;D<=7;D+=1){var x=3+this.options.firstDay+D,S=document.createElement("div");S.innerHTML=this.weekdayName(x),S.title=this.weekdayName(x,"long"),E.appendChild(S)}var O=document.createElement("div");O.className=a.containerDays;var L=this.calcSkipDays(i);this.options.showWeekNumbers&&L&&O.appendChild(this.renderWeekNumber(i));for(var C=0;C1&&1===this.datePicked.length){var s=this.options.minDays-1,r=this.datePicked[0].clone().subtract(s,"day"),c=this.datePicked[0].clone().add(s,"day");t.isBetween(r,this.datePicked[0],"(]")&&e.classList.add(a.isLocked),t.isBetween(this.datePicked[0],c,"[)")&&e.classList.add(a.isLocked)}if(this.options.maxDays&&1===this.datePicked.length){var u=this.options.maxDays;r=this.datePicked[0].clone().subtract(u,"day"),c=this.datePicked[0].clone().add(u,"day"),t.isSameOrBefore(r)&&e.classList.add(a.isLocked),t.isSameOrAfter(c)&&e.classList.add(a.isLocked)}return this.options.selectForward&&1===this.datePicked.length&&t.isBefore(this.datePicked[0])&&e.classList.add(a.isLocked),this.options.selectBackward&&1===this.datePicked.length&&t.isAfter(this.datePicked[0])&&e.classList.add(a.isLocked),l.dateIsLocked(t,this.options,this.datePicked)&&e.classList.add(a.isLocked),this.options.highlightedDays.length&&this.options.highlightedDays.filter((function(e){return e instanceof Array?t.isBetween(e[0],e[1],"[]"):e.isSame(t,"day")})).length&&e.classList.add(a.isHighlighted),e.tabIndex=e.classList.contains("is-locked")?-1:0,this.emit("render:day",e,t),e},e.prototype.renderFooter=function(){var t=document.createElement("div");if(t.className=a.containerFooter,this.options.footerHTML?t.innerHTML=this.options.footerHTML:t.innerHTML='\n \n \n \n ",this.options.singleMode){if(1===this.datePicked.length){var e=this.datePicked[0].format(this.options.format,this.options.lang);t.querySelector("."+a.previewDateRange).innerHTML=e}}else if(1===this.datePicked.length&&t.querySelector("."+a.buttonApply).setAttribute("disabled",""),2===this.datePicked.length){e=this.datePicked[0].format(this.options.format,this.options.lang);var n=this.datePicked[1].format(this.options.format,this.options.lang);t.querySelector("."+a.previewDateRange).innerHTML=""+e+this.options.delimiter+n}return this.emit("render:footer",t),t},e.prototype.renderWeekNumber=function(t){var e=document.createElement("div"),n=t.getWeek(this.options.firstDay);return e.className=a.weekNumber,e.innerHTML=53===n&&0===t.getMonth()?"53 / 1":n,e},e.prototype.renderTooltip=function(){var t=document.createElement("div");return t.className=a.containerTooltip,t},e.prototype.weekdayName=function(t,e){return void 0===e&&(e="short"),new Date(1970,0,t,12,0,0,0).toLocaleString(this.options.lang,{weekday:e})},e.prototype.calcSkipDays=function(t){var e=t.getDay()-this.options.firstDay;return e<0&&(e+=7),e},e}(r.LPCore);e.Calendar=c},function(t,e,n){"use strict";var i,s=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,n=1,i=arguments.length;n',nextMonth:'',reset:'\n \n \n '},tooltipText:{one:"day",other:"days"}},n.options=r(r({},n.options),e.element.dataset),Object.keys(n.options).forEach((function(t){"true"!==n.options[t]&&"false"!==n.options[t]||(n.options[t]="true"===n.options[t])}));var i=r(r({},n.options.dropdowns),e.dropdowns),s=r(r({},n.options.buttonText),e.buttonText),o=r(r({},n.options.tooltipText),e.tooltipText);n.options=r(r({},n.options),e),n.options.dropdowns=r({},i),n.options.buttonText=r({},s),n.options.tooltipText=r({},o),n.options.elementEnd||(n.options.allowRepick=!1),n.options.lockDays.length&&(n.options.lockDays=a.DateTime.convertArray(n.options.lockDays,n.options.lockDaysFormat)),n.options.highlightedDays.length&&(n.options.highlightedDays=a.DateTime.convertArray(n.options.highlightedDays,n.options.highlightedDaysFormat));var l=n.parseInput(),c=l[0],u=l[1];n.options.startDate&&(n.options.singleMode||n.options.endDate)&&(c=new a.DateTime(n.options.startDate,n.options.format,n.options.lang)),c&&n.options.endDate&&(u=new a.DateTime(n.options.endDate,n.options.format,n.options.lang)),c instanceof a.DateTime&&!isNaN(c.getTime())&&(n.options.startDate=c),n.options.startDate&&u instanceof a.DateTime&&!isNaN(u.getTime())&&(n.options.endDate=u),!n.options.singleMode||n.options.startDate instanceof a.DateTime||(n.options.startDate=null),n.options.singleMode||n.options.startDate instanceof a.DateTime&&n.options.endDate instanceof a.DateTime||(n.options.startDate=null,n.options.endDate=null);for(var d=0;dwindow.innerHeight,c=e.top+r-n.height>=n.height;l&&c&&(o=e.top+r-n.height)}if(/left|right/.test(i[0])||i[1]&&"auto"!==i[1]&&/left|right/.test(i[1]))a=/left|right/.test(i[0])?e[i[0]]+s:e[i[1]]+s,"right"!==i[0]&&"right"!==i[1]||(a-=n.width);else{a=e.left+s,l=e.left+n.width>window.innerWidth;var u=e.right+s-n.width>=0;l&&u&&(a=e.right+s-n.width)}return{left:a,top:o}},e}(o.EventEmitter);e.LPCore=c},function(t,e,n){"use strict";var i,s="object"==typeof Reflect?Reflect:null,r=s&&"function"==typeof s.apply?s.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};i=s&&"function"==typeof s.ownKeys?s.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var o=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function c(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function u(t,e,n,i){var s,r,o,a;if("function"!=typeof n)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof n);if(void 0===(r=t._events)?(r=t._events=Object.create(null),t._eventsCount=0):(void 0!==r.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),r=t._events),o=r[e]),void 0===o)o=r[e]=n,++t._eventsCount;else if("function"==typeof o?o=r[e]=i?[n,o]:[o,n]:i?o.unshift(n):o.push(n),(s=c(t))>0&&o.length>s&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=o.length,a=l,console&&console.warn&&console.warn(a)}return t}function d(){for(var t=[],e=0;e0&&(o=e[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var l=s[t];if(void 0===l)return!1;if("function"==typeof l)r(l,this,e);else{var c=l.length,u=f(l,c);for(n=0;n=0;r--)if(n[r]===e||n[r].listener===e){o=n[r].listener,s=r;break}if(s<0)return this;0===s?n.shift():function(t,e){for(;e+1=0;i--)this.removeListener(t,e[i]);return this},a.prototype.listeners=function(t){return p(this,t,!0)},a.prototype.rawListeners=function(t){return p(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},a.prototype.listenerCount=m,a.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},function(t,e,n){(e=n(9)(!1)).push([t.i,':root{--litepicker-container-months-color-bg: #fff;--litepicker-container-months-box-shadow-color: #ddd;--litepicker-footer-color-bg: #fafafa;--litepicker-footer-box-shadow-color: #ddd;--litepicker-tooltip-color-bg: #fff;--litepicker-month-header-color: #333;--litepicker-button-prev-month-color: #9e9e9e;--litepicker-button-next-month-color: #9e9e9e;--litepicker-button-prev-month-color-hover: #2196f3;--litepicker-button-next-month-color-hover: #2196f3;--litepicker-month-width: calc(var(--litepicker-day-width) * 7);--litepicker-month-weekday-color: #9e9e9e;--litepicker-month-week-number-color: #9e9e9e;--litepicker-day-width: 38px;--litepicker-day-color: #333;--litepicker-day-color-hover: #2196f3;--litepicker-is-today-color: #f44336;--litepicker-is-in-range-color: #bbdefb;--litepicker-is-locked-color: #9e9e9e;--litepicker-is-start-color: #fff;--litepicker-is-start-color-bg: #2196f3;--litepicker-is-end-color: #fff;--litepicker-is-end-color-bg: #2196f3;--litepicker-button-cancel-color: #fff;--litepicker-button-cancel-color-bg: #9e9e9e;--litepicker-button-apply-color: #fff;--litepicker-button-apply-color-bg: #2196f3;--litepicker-button-reset-color: #909090;--litepicker-button-reset-color-hover: #2196f3;--litepicker-highlighted-day-color: #333;--litepicker-highlighted-day-color-bg: #ffeb3b}.show-week-numbers{--litepicker-month-width: calc(var(--litepicker-day-width) * 8)}.litepicker{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;font-size:0.8em;display:none}.litepicker button{border:none;background:none}.litepicker .container__main{display:-webkit-box;display:-ms-flexbox;display:flex}.litepicker .container__months{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:var(--litepicker-container-months-color-bg);border-radius:5px;-webkit-box-shadow:0 0 5px var(--litepicker-container-months-box-shadow-color);box-shadow:0 0 5px var(--litepicker-container-months-box-shadow-color);width:calc(var(--litepicker-month-width) + 10px);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months.columns-2{width:calc((var(--litepicker-month-width) * 2) + 20px)}.litepicker .container__months.columns-3{width:calc((var(--litepicker-month-width) * 3) + 30px)}.litepicker .container__months.columns-4{width:calc((var(--litepicker-month-width) * 4) + 40px)}.litepicker .container__months.split-view .month-item-header .button-previous-month,.litepicker .container__months.split-view .month-item-header .button-next-month{visibility:visible}.litepicker .container__months .month-item{padding:5px;width:var(--litepicker-month-width);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months .month-item-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:500;padding:10px 5px;text-align:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--litepicker-month-header-color)}.litepicker .container__months .month-item-header div{-webkit-box-flex:1;-ms-flex:1;flex:1}.litepicker .container__months .month-item-header div>.month-item-name{margin-right:5px}.litepicker .container__months .month-item-header div>.month-item-year{padding:0}.litepicker .container__months .month-item-header .reset-button{color:var(--litepicker-button-reset-color)}.litepicker .container__months .month-item-header .reset-button>svg{fill:var(--litepicker-button-reset-color)}.litepicker .container__months .month-item-header .reset-button *{pointer-events:none}.litepicker .container__months .month-item-header .reset-button:hover{color:var(--litepicker-button-reset-color-hover)}.litepicker .container__months .month-item-header .reset-button:hover>svg{fill:var(--litepicker-button-reset-color-hover)}.litepicker .container__months .month-item-header .button-previous-month,.litepicker .container__months .month-item-header .button-next-month{visibility:hidden;text-decoration:none;padding:3px 5px;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__months .month-item-header .button-previous-month *,.litepicker .container__months .month-item-header .button-next-month *{pointer-events:none}.litepicker .container__months .month-item-header .button-previous-month{color:var(--litepicker-button-prev-month-color)}.litepicker .container__months .month-item-header .button-previous-month>svg,.litepicker .container__months .month-item-header .button-previous-month>img{fill:var(--litepicker-button-prev-month-color)}.litepicker .container__months .month-item-header .button-previous-month:hover{color:var(--litepicker-button-prev-month-color-hover)}.litepicker .container__months .month-item-header .button-previous-month:hover>svg{fill:var(--litepicker-button-prev-month-color-hover)}.litepicker .container__months .month-item-header .button-next-month{color:var(--litepicker-button-next-month-color)}.litepicker .container__months .month-item-header .button-next-month>svg,.litepicker .container__months .month-item-header .button-next-month>img{fill:var(--litepicker-button-next-month-color)}.litepicker .container__months .month-item-header .button-next-month:hover{color:var(--litepicker-button-next-month-color-hover)}.litepicker .container__months .month-item-header .button-next-month:hover>svg{fill:var(--litepicker-button-next-month-color-hover)}.litepicker .container__months .month-item-weekdays-row{display:-webkit-box;display:-ms-flexbox;display:flex;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;color:var(--litepicker-month-weekday-color)}.litepicker .container__months .month-item-weekdays-row>div{padding:5px 0;font-size:85%;-webkit-box-flex:1;-ms-flex:1;flex:1;width:var(--litepicker-day-width);text-align:center}.litepicker .container__months .month-item:first-child .button-previous-month{visibility:visible}.litepicker .container__months .month-item:last-child .button-next-month{visibility:visible}.litepicker .container__months .month-item.no-previous-month .button-previous-month{visibility:hidden}.litepicker .container__months .month-item.no-next-month .button-next-month{visibility:hidden}.litepicker .container__days{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:center;-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__days>div,.litepicker .container__days>a{padding:5px 0;width:var(--litepicker-day-width)}.litepicker .container__days .day-item{color:var(--litepicker-day-color);text-align:center;text-decoration:none;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__days .day-item:hover{color:var(--litepicker-day-color-hover);-webkit-box-shadow:inset 0 0 0 1px var(--litepicker-day-color-hover);box-shadow:inset 0 0 0 1px var(--litepicker-day-color-hover)}.litepicker .container__days .day-item.is-today{color:var(--litepicker-is-today-color)}.litepicker .container__days .day-item.is-locked{color:var(--litepicker-is-locked-color)}.litepicker .container__days .day-item.is-locked:hover{color:var(--litepicker-is-locked-color);-webkit-box-shadow:none;box-shadow:none;cursor:default}.litepicker .container__days .day-item.is-in-range{background-color:var(--litepicker-is-in-range-color);border-radius:0}.litepicker .container__days .day-item.is-start-date{color:var(--litepicker-is-start-color);background-color:var(--litepicker-is-start-color-bg);border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-flipped{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date{color:var(--litepicker-is-end-color);background-color:var(--litepicker-is-end-color-bg);border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date.is-flipped{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-end-date{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-highlighted{color:var(--litepicker-highlighted-day-color);background-color:var(--litepicker-highlighted-day-color-bg)}.litepicker .container__days .week-number{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:var(--litepicker-month-week-number-color);font-size:85%}.litepicker .container__footer{text-align:right;padding:10px 5px;margin:0 5px;background-color:var(--litepicker-footer-color-bg);-webkit-box-shadow:inset 0px 3px 3px 0px var(--litepicker-footer-box-shadow-color);box-shadow:inset 0px 3px 3px 0px var(--litepicker-footer-box-shadow-color);border-bottom-left-radius:5px;border-bottom-right-radius:5px}.litepicker .container__footer .preview-date-range{margin-right:10px;font-size:90%}.litepicker .container__footer .button-cancel{background-color:var(--litepicker-button-cancel-color-bg);color:var(--litepicker-button-cancel-color);border:0;padding:3px 7px 4px;border-radius:3px}.litepicker .container__footer .button-cancel *{pointer-events:none}.litepicker .container__footer .button-apply{background-color:var(--litepicker-button-apply-color-bg);color:var(--litepicker-button-apply-color);border:0;padding:3px 7px 4px;border-radius:3px;margin-left:10px;margin-right:10px}.litepicker .container__footer .button-apply:disabled{opacity:0.7}.litepicker .container__footer .button-apply *{pointer-events:none}.litepicker .container__tooltip{position:absolute;margin-top:-4px;padding:4px 8px;border-radius:4px;background-color:var(--litepicker-tooltip-color-bg);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25);box-shadow:0 1px 3px rgba(0,0,0,0.25);white-space:nowrap;font-size:11px;pointer-events:none;visibility:hidden}.litepicker .container__tooltip:before{position:absolute;bottom:-5px;left:calc(50% - 5px);border-top:5px solid rgba(0,0,0,0.12);border-right:5px solid transparent;border-left:5px solid transparent;content:""}.litepicker .container__tooltip:after{position:absolute;bottom:-4px;left:calc(50% - 4px);border-top:4px solid var(--litepicker-tooltip-color-bg);border-right:4px solid transparent;border-left:4px solid transparent;content:""}\n',""]),e.locals={showWeekNumbers:"show-week-numbers",litepicker:"litepicker",containerMain:"container__main",containerMonths:"container__months",columns2:"columns-2",columns3:"columns-3",columns4:"columns-4",splitView:"split-view",monthItemHeader:"month-item-header",buttonPreviousMonth:"button-previous-month",buttonNextMonth:"button-next-month",monthItem:"month-item",monthItemName:"month-item-name",monthItemYear:"month-item-year",resetButton:"reset-button",monthItemWeekdaysRow:"month-item-weekdays-row",noPreviousMonth:"no-previous-month",noNextMonth:"no-next-month",containerDays:"container__days",dayItem:"day-item",isToday:"is-today",isLocked:"is-locked",isInRange:"is-in-range",isStartDate:"is-start-date",isFlipped:"is-flipped",isEndDate:"is-end-date",isHighlighted:"is-highlighted",weekNumber:"week-number",containerFooter:"container__footer",previewDateRange:"preview-date-range",buttonCancel:"button-cancel",buttonApply:"button-apply",containerTooltip:"container__tooltip"},t.exports=e},function(t,e,n){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=function(t,e){var n,i,s,r=t[1]||"",o=t[3];if(!o)return r;if(e&&"function"==typeof btoa){var a=(n=o,i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),"/*# ".concat(s," */")),l=o.sources.map((function(t){return"/*# sourceURL=".concat(o.sourceRoot||"").concat(t," */")}));return[r].concat(l).concat([a]).join("\n")}return[r].join("\n")}(e,t);return e[2]?"@media ".concat(e[2]," {").concat(n,"}"):n})).join("")},e.i=function(t,n,i){"string"==typeof t&&(t=[[null,t,""]]);var s={};if(i)for(var r=0;rthis.options.endDate.getTime()&&(this.options.endDate=this.options.startDate.clone(),this.options.startDate=new s.DateTime(t,this.options.format,this.options.lang)),this.updateInput())},r.Litepicker.prototype.setDateRange=function(t,e,n){void 0===n&&(n=!1),this.triggerElement=void 0;var i=new s.DateTime(t,this.options.format,this.options.lang),r=new s.DateTime(e,this.options.format,this.options.lang);(this.options.disallowLockDaysInRange?o.rangeIsLocked([i,r],this.options):o.dateIsLocked(i,this.options,[i,r])||o.dateIsLocked(r,this.options,[i,r]))&&!n?this.emit("error:range",[i,r]):(this.setStartDate(i),this.setEndDate(r),this.options.inlineMode&&this.render(),this.updateInput(),this.emit("selected",this.getStartDate(),this.getEndDate()))},r.Litepicker.prototype.gotoDate=function(t,e){void 0===e&&(e=0);var n=new s.DateTime(t);n.setDate(1),this.calendars[e]=n.clone(),this.render()},r.Litepicker.prototype.setLockDays=function(t){this.options.lockDays=s.DateTime.convertArray(t,this.options.lockDaysFormat),this.render()},r.Litepicker.prototype.setHighlightedDays=function(t){this.options.highlightedDays=s.DateTime.convertArray(t,this.options.highlightedDaysFormat),this.render()},r.Litepicker.prototype.setOptions=function(t){delete t.element,delete t.elementEnd,delete t.parentEl,t.startDate&&(t.startDate=new s.DateTime(t.startDate,this.options.format,this.options.lang)),t.endDate&&(t.endDate=new s.DateTime(t.endDate,this.options.format,this.options.lang));var e=i(i({},this.options.dropdowns),t.dropdowns),n=i(i({},this.options.buttonText),t.buttonText),r=i(i({},this.options.tooltipText),t.tooltipText);this.options=i(i({},this.options),t),this.options.dropdowns=i({},e),this.options.buttonText=i({},n),this.options.tooltipText=i({},r),!this.options.singleMode||this.options.startDate instanceof s.DateTime||(this.options.startDate=null,this.options.endDate=null),this.options.singleMode||this.options.startDate instanceof s.DateTime&&this.options.endDate instanceof s.DateTime||(this.options.startDate=null,this.options.endDate=null);for(var o=0;oMath.abs(r),a=t.options.numberOfMonths,l=null,c=!1,u="",d=Array.from(t.ui.querySelectorAll(".month-item"));if(o){var h=t.DateTime(t.ui.querySelector(".day-item").dataset.time),p=Number("".concat(1-Math.abs(s)/100)),m=0;if(s>0){m=-Math.abs(s),l=h.clone().add(a,"month");var f=t.options.maxDate;c=!f||l.isSameOrBefore(t.DateTime(f),"month"),u="next"}else{m=Math.abs(s),l=h.clone().subtract(a,"month");var g=t.options.minDate;c=!g||l.isSameOrAfter(t.DateTime(g),"month"),u="prev"}c&&d.map((function(t){t.style.opacity=p,t.style.transform="translateX(".concat(m,"px)")}))}Math.abs(s)+Math.abs(r)>100&&o&&l&&c&&(t.touchTargetMonth=u,t.gotoDate(l))}}),!!n&&{passive:!0}),t.ui.addEventListener("touchend",(function(e){t.touchTargetMonth||Array.from(t.ui.querySelectorAll(".month-item")).map((function(t){t.style.transform="translateX(0px)",t.style.opacity=1})),t.xTouchDown=null,t.yTouchDown=null}),!!n&&{passive:!0})}})},function(t,e,n){var i=n(7);"string"==typeof i&&(i=[[t.i,i,""]]);var s={insert:function(t){var e=document.querySelector("head"),n=window._lastElementInsertedByStyleLoader;window.disableLitepickerStyles||(n?n.nextSibling?e.insertBefore(t,n.nextSibling):e.appendChild(t):e.insertBefore(t,e.firstChild),window._lastElementInsertedByStyleLoader=t)},singleton:!1};n(1)(i,s),i.locals&&(t.exports=i.locals)},function(t,e,n){(e=n(0)(!1)).push([t.i,':root {\n --litepicker-mobilefriendly-backdrop-color-bg: #000;\n}\n\n.litepicker-backdrop {\n display: none;\n background-color: var(--litepicker-mobilefriendly-backdrop-color-bg);\n opacity: 0.3;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n}\n\n.litepicker-open {\n overflow: hidden;\n}\n\n.litepicker.mobilefriendly[data-plugins*="mobilefriendly"] {\n transform: translate(-50%, -50%);\n font-size: 1.1rem;\n --litepicker-container-months-box-shadow-color: #616161;\n}\n.litepicker.mobilefriendly-portrait {\n --litepicker-day-width: 13.5vw;\n --litepicker-month-width: calc(var(--litepicker-day-width) * 7);\n}\n.litepicker.mobilefriendly-landscape {\n --litepicker-day-width: 5.5vw;\n --litepicker-month-width: calc(var(--litepicker-day-width) * 7);\n}\n\n.litepicker[data-plugins*="mobilefriendly"] .container__months {\n overflow: hidden;\n}\n\n.litepicker.mobilefriendly[data-plugins*="mobilefriendly"] .container__months .month-item-header {\n height: var(--litepicker-day-width);\n}\n\n.litepicker.mobilefriendly[data-plugins*="mobilefriendly"] .container__days > div {\n height: var(--litepicker-day-width);\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n\n.litepicker[data-plugins*="mobilefriendly"] .container__months .month-item {\n transform-origin: center;\n}\n\n.litepicker[data-plugins*="mobilefriendly"] .container__months .month-item.touch-target-next {\n animation-name: lp-bounce-target-next;\n animation-duration: .5s;\n animation-timing-function: ease;\n}\n\n.litepicker[data-plugins*="mobilefriendly"] .container__months .month-item.touch-target-prev {\n animation-name: lp-bounce-target-prev;\n animation-duration: .5s;\n animation-timing-function: ease;\n}\n\n@keyframes lp-bounce-target-next {\n from {\n transform: translateX(100px) scale(0.5);\n }\n to {\n transform: translateX(0px) scale(1);\n }\n}\n\n@keyframes lp-bounce-target-prev {\n from {\n transform: translateX(-100px) scale(0.5);\n }\n to {\n transform: translateX(0px) scale(1);\n }\n}',""]),t.exports=e}])},4975:function(t,e,n){"use strict";n.r(e)},6285:function(t,e,n){"use strict";n.d(e,{c9:function(){return fi},dw:function(){return Tn},wB:function(){return bt}});class i extends Error{}class s extends i{constructor(t){super(`Invalid DateTime: ${t.toMessage()}`)}}class r extends i{constructor(t){super(`Invalid Interval: ${t.toMessage()}`)}}class o extends i{constructor(t){super(`Invalid Duration: ${t.toMessage()}`)}}class a extends i{}class l extends i{constructor(t){super(`Invalid unit ${t}`)}}class c extends i{}class u extends i{constructor(){super("Zone is an abstract class")}}const d="numeric",h="short",p="long",m={year:d,month:d,day:d},f={year:d,month:h,day:d},g={year:d,month:h,day:d,weekday:h},v={year:d,month:p,day:d},y={year:d,month:p,day:d,weekday:p},b={hour:d,minute:d},_={hour:d,minute:d,second:d},w={hour:d,minute:d,second:d,timeZoneName:h},k={hour:d,minute:d,second:d,timeZoneName:p},T={hour:d,minute:d,hourCycle:"h23"},E={hour:d,minute:d,second:d,hourCycle:"h23"},D={hour:d,minute:d,second:d,hourCycle:"h23",timeZoneName:h},x={hour:d,minute:d,second:d,hourCycle:"h23",timeZoneName:p},S={year:d,month:d,day:d,hour:d,minute:d},O={year:d,month:d,day:d,hour:d,minute:d,second:d},L={year:d,month:h,day:d,hour:d,minute:d},C={year:d,month:h,day:d,hour:d,minute:d,second:d},M={year:d,month:h,day:d,weekday:h,hour:d,minute:d},A={year:d,month:p,day:d,hour:d,minute:d,timeZoneName:h},I={year:d,month:p,day:d,hour:d,minute:d,second:d,timeZoneName:h},N={year:d,month:p,day:d,weekday:p,hour:d,minute:d,timeZoneName:p},P={year:d,month:p,day:d,weekday:p,hour:d,minute:d,second:d,timeZoneName:p};class F{get type(){throw new u}get name(){throw new u}get ianaName(){return this.name}get isUniversal(){throw new u}offsetName(t,e){throw new u}formatOffset(t,e){throw new u}offset(t){throw new u}equals(t){throw new u}get isValid(){throw new u}}let j=null;class q extends F{static get instance(){return null===j&&(j=new q),j}get type(){return"system"}get name(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(t,{format:e,locale:n}){return ne(t,e,n)}formatOffset(t,e){return oe(this.offset(t),e)}offset(t){return-new Date(t).getTimezoneOffset()}equals(t){return"system"===t.type}get isValid(){return!0}}let H={};const V={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};let $={};class B extends F{static create(t){return $[t]||($[t]=new B(t)),$[t]}static resetCache(){$={},H={}}static isValidSpecifier(t){return this.isValidZone(t)}static isValidZone(t){if(!t)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:t}).format(),!0}catch(t){return!1}}constructor(t){super(),this.zoneName=t,this.valid=B.isValidZone(t)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(t,{format:e,locale:n}){return ne(t,e,n,this.name)}formatOffset(t,e){return oe(this.offset(t),e)}offset(t){const e=new Date(t);if(isNaN(e))return NaN;const n=(i=this.name,H[i]||(H[i]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:i,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),H[i]);var i;let[s,r,o,a,l,c,u]=n.formatToParts?function(t,e){const n=t.formatToParts(e),i=[];for(let t=0;t=0?h:1e3+h,(Qt({year:s,month:r,day:o,hour:24===l?0:l,minute:c,second:u,millisecond:0})-d)/6e4}equals(t){return"iana"===t.type&&t.name===this.name}get isValid(){return this.valid}}let R={};let W={};function z(t,e={}){const n=JSON.stringify([t,e]);let i=W[n];return i||(i=new Intl.DateTimeFormat(t,e),W[n]=i),i}let Y={};let U={};let Z=null;let K={};function J(t,e,n,i){const s=t.listingMode();return"error"===s?null:"en"===s?n(e):i(e)}class G{constructor(t,e,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;const{padTo:i,floor:s,...r}=n;if(!e||Object.keys(r).length>0){const e={useGrouping:!1,...n};n.padTo>0&&(e.minimumIntegerDigits=n.padTo),this.inf=function(t,e={}){const n=JSON.stringify([t,e]);let i=Y[n];return i||(i=new Intl.NumberFormat(t,e),Y[n]=i),i}(t,e)}}format(t){if(this.inf){const e=this.floor?Math.floor(t):t;return this.inf.format(e)}return Wt(this.floor?Math.floor(t):Zt(t,3),this.padTo)}}class Q{constructor(t,e,n){let i;if(this.opts=n,this.originalZone=void 0,this.opts.timeZone)this.dt=t;else if("fixed"===t.zone.type){const e=t.offset/60*-1,n=e>=0?`Etc/GMT+${e}`:`Etc/GMT${e}`;0!==t.offset&&B.create(n).valid?(i=n,this.dt=t):(i="UTC",this.dt=0===t.offset?t:t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone)}else"system"===t.zone.type?this.dt=t:"iana"===t.zone.type?(this.dt=t,i=t.zone.name):(i="UTC",this.dt=t.setZone("UTC").plus({minutes:t.offset}),this.originalZone=t.zone);const s={...this.opts};s.timeZone=s.timeZone||i,this.dtf=z(e,s)}format(){return this.originalZone?this.formatToParts().map((({value:t})=>t)).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){const t=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?t.map((t=>{if("timeZoneName"===t.type){const e=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...t,value:e}}return t})):t}resolvedOptions(){return this.dtf.resolvedOptions()}}class X{constructor(t,e,n){this.opts={style:"long",...n},!e&&qt()&&(this.rtf=function(t,e={}){const{base:n,...i}=e,s=JSON.stringify([t,i]);let r=U[s];return r||(r=new Intl.RelativeTimeFormat(t,e),U[s]=r),r}(t,n))}format(t,e){return this.rtf?this.rtf.format(t,e):function(t,e,n="always",i=!1){const s={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},r=-1===["hours","minutes","seconds"].indexOf(t);if("auto"===n&&r){const n="days"===t;switch(e){case 1:return n?"tomorrow":`next ${s[t][0]}`;case-1:return n?"yesterday":`last ${s[t][0]}`;case 0:return n?"today":`this ${s[t][0]}`}}const o=Object.is(e,-0)||e<0,a=Math.abs(e),l=1===a,c=s[t],u=i?l?c[1]:c[2]||c[1]:l?s[t][0]:t;return o?`${a} ${u} ago`:`in ${a} ${u}`}(e,t,this.opts.numeric,"long"!==this.opts.style)}formatToParts(t,e){return this.rtf?this.rtf.formatToParts(t,e):[]}}const tt={firstDay:1,minimalDays:4,weekend:[6,7]};class et{static fromOpts(t){return et.create(t.locale,t.numberingSystem,t.outputCalendar,t.weekSettings,t.defaultToEN)}static create(t,e,n,i,s=!1){const r=t||bt.defaultLocale,o=r||(s?"en-US":Z||(Z=(new Intl.DateTimeFormat).resolvedOptions().locale,Z)),a=e||bt.defaultNumberingSystem,l=n||bt.defaultOutputCalendar,c=Bt(i)||bt.defaultWeekSettings;return new et(o,a,l,c,r)}static resetCache(){Z=null,W={},Y={},U={}}static fromObject({locale:t,numberingSystem:e,outputCalendar:n,weekSettings:i}={}){return et.create(t,e,n,i)}constructor(t,e,n,i,s){const[r,o,a]=function(t){const e=t.indexOf("-x-");-1!==e&&(t=t.substring(0,e));const n=t.indexOf("-u-");if(-1===n)return[t];{let e,i;try{e=z(t).resolvedOptions(),i=t}catch(s){const r=t.substring(0,n);e=z(r).resolvedOptions(),i=r}const{numberingSystem:s,calendar:r}=e;return[i,s,r]}}(t);this.locale=r,this.numberingSystem=e||o||null,this.outputCalendar=n||a||null,this.weekSettings=i,this.intl=function(t,e,n){return n||e?(t.includes("-u-")||(t+="-u"),n&&(t+=`-ca-${n}`),e&&(t+=`-nu-${e}`),t):t}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=s,this.fastNumbersCached=null}get fastNumbers(){var t;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(t=this).numberingSystem||"latn"===t.numberingSystem)&&("latn"===t.numberingSystem||!t.locale||t.locale.startsWith("en")||"latn"===new Intl.DateTimeFormat(t.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}listingMode(){const t=this.isEnglish(),e=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return t&&e?"en":"intl"}clone(t){return t&&0!==Object.getOwnPropertyNames(t).length?et.create(t.locale||this.specifiedLocale,t.numberingSystem||this.numberingSystem,t.outputCalendar||this.outputCalendar,Bt(t.weekSettings)||this.weekSettings,t.defaultToEN||!1):this}redefaultToEN(t={}){return this.clone({...t,defaultToEN:!0})}redefaultToSystem(t={}){return this.clone({...t,defaultToEN:!1})}months(t,e=!1){return J(this,t,de,(()=>{const n=e?{month:t,day:"numeric"}:{month:t},i=e?"format":"standalone";return this.monthsCache[i][t]||(this.monthsCache[i][t]=function(t){const e=[];for(let n=1;n<=12;n++){const i=fi.utc(2009,n,1);e.push(t(i))}return e}((t=>this.extract(t,n,"month")))),this.monthsCache[i][t]}))}weekdays(t,e=!1){return J(this,t,fe,(()=>{const n=e?{weekday:t,year:"numeric",month:"long",day:"numeric"}:{weekday:t},i=e?"format":"standalone";return this.weekdaysCache[i][t]||(this.weekdaysCache[i][t]=function(t){const e=[];for(let n=1;n<=7;n++){const i=fi.utc(2016,11,13+n);e.push(t(i))}return e}((t=>this.extract(t,n,"weekday")))),this.weekdaysCache[i][t]}))}meridiems(){return J(this,void 0,(()=>ge),(()=>{if(!this.meridiemCache){const t={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[fi.utc(2016,11,13,9),fi.utc(2016,11,13,19)].map((e=>this.extract(e,t,"dayperiod")))}return this.meridiemCache}))}eras(t){return J(this,t,_e,(()=>{const e={era:t};return this.eraCache[t]||(this.eraCache[t]=[fi.utc(-40,1,1),fi.utc(2017,1,1)].map((t=>this.extract(t,e,"era")))),this.eraCache[t]}))}extract(t,e,n){const i=this.dtFormatter(t,e).formatToParts().find((t=>t.type.toLowerCase()===n));return i?i.value:null}numberFormatter(t={}){return new G(this.intl,t.forceSimple||this.fastNumbers,t)}dtFormatter(t,e={}){return new Q(t,this.intl,e)}relFormatter(t={}){return new X(this.intl,this.isEnglish(),t)}listFormatter(t={}){return function(t,e={}){const n=JSON.stringify([t,e]);let i=R[n];return i||(i=new Intl.ListFormat(t,e),R[n]=i),i}(this.intl,t)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:Ht()?function(t){let e=K[t];if(!e){const n=new Intl.Locale(t);e="getWeekInfo"in n?n.getWeekInfo():n.weekInfo,K[t]=e}return e}(this.locale):tt}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(t){return this.locale===t.locale&&this.numberingSystem===t.numberingSystem&&this.outputCalendar===t.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}}let nt=null;class it extends F{static get utcInstance(){return null===nt&&(nt=new it(0)),nt}static instance(t){return 0===t?it.utcInstance:new it(t)}static parseSpecifier(t){if(t){const e=t.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(e)return new it(ie(e[1],e[2]))}return null}constructor(t){super(),this.fixed=t}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${oe(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${oe(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(t,e){return oe(this.fixed,e)}get isUniversal(){return!0}offset(){return this.fixed}equals(t){return"fixed"===t.type&&t.fixed===this.fixed}get isValid(){return!0}}class st extends F{constructor(t){super(),this.zoneName=t}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function rt(t,e){if(Pt(t)||null===t)return e;if(t instanceof F)return t;if("string"==typeof t){const n=t.toLowerCase();return"default"===n?e:"local"===n||"system"===n?q.instance:"utc"===n||"gmt"===n?it.utcInstance:it.parseSpecifier(n)||B.create(t)}return Ft(t)?it.instance(t):"object"==typeof t&&"offset"in t&&"function"==typeof t.offset?t:new st(t)}const ot={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},at={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},lt=ot.hanidec.replace(/[\[|\]]/g,"").split("");let ct={};function ut({numberingSystem:t},e=""){const n=t||"latn";return ct[n]||(ct[n]={}),ct[n][e]||(ct[n][e]=new RegExp(`${ot[n]}${e}`)),ct[n][e]}let dt,ht=()=>Date.now(),pt="system",mt=null,ft=null,gt=null,vt=60,yt=null;class bt{static get now(){return ht}static set now(t){ht=t}static set defaultZone(t){pt=t}static get defaultZone(){return rt(pt,q.instance)}static get defaultLocale(){return mt}static set defaultLocale(t){mt=t}static get defaultNumberingSystem(){return ft}static set defaultNumberingSystem(t){ft=t}static get defaultOutputCalendar(){return gt}static set defaultOutputCalendar(t){gt=t}static get defaultWeekSettings(){return yt}static set defaultWeekSettings(t){yt=Bt(t)}static get twoDigitCutoffYear(){return vt}static set twoDigitCutoffYear(t){vt=t%100}static get throwOnInvalid(){return dt}static set throwOnInvalid(t){dt=t}static resetCaches(){et.resetCache(),B.resetCache(),fi.resetCache(),ct={}}}class _t{constructor(t,e){this.reason=t,this.explanation=e}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const wt=[0,31,59,90,120,151,181,212,243,273,304,334],kt=[0,31,60,91,121,152,182,213,244,274,305,335];function Tt(t,e){return new _t("unit out of range",`you specified ${e} (of type ${typeof e}) as a ${t}, which is invalid`)}function Et(t,e,n){const i=new Date(Date.UTC(t,e-1,n));t<100&&t>=0&&i.setUTCFullYear(i.getUTCFullYear()-1900);const s=i.getUTCDay();return 0===s?7:s}function Dt(t,e,n){return n+(Kt(t)?kt:wt)[e-1]}function xt(t,e){const n=Kt(t)?kt:wt,i=n.findIndex((t=>tte(i,e,n)?(l=i+1,c=1):l=i,{weekYear:l,weekNumber:c,weekday:a,...ae(t)}}function Lt(t,e=4,n=1){const{weekYear:i,weekNumber:s,weekday:r}=t,o=St(Et(i,1,e),n),a=Jt(i);let l,c=7*s+r-o-7+e;c<1?(l=i-1,c+=Jt(l)):c>a?(l=i+1,c-=Jt(i)):l=i;const{month:u,day:d}=xt(l,c);return{year:l,month:u,day:d,...ae(t)}}function Ct(t){const{year:e,month:n,day:i}=t;return{year:e,ordinal:Dt(e,n,i),...ae(t)}}function Mt(t){const{year:e,ordinal:n}=t,{month:i,day:s}=xt(e,n);return{year:e,month:i,day:s,...ae(t)}}function At(t,e){if(!Pt(t.localWeekday)||!Pt(t.localWeekNumber)||!Pt(t.localWeekYear)){if(!Pt(t.weekday)||!Pt(t.weekNumber)||!Pt(t.weekYear))throw new a("Cannot mix locale-based week fields with ISO-based week fields");return Pt(t.localWeekday)||(t.weekday=t.localWeekday),Pt(t.localWeekNumber)||(t.weekNumber=t.localWeekNumber),Pt(t.localWeekYear)||(t.weekYear=t.localWeekYear),delete t.localWeekday,delete t.localWeekNumber,delete t.localWeekYear,{minDaysInFirstWeek:e.getMinDaysInFirstWeek(),startOfWeek:e.getStartOfWeek()}}return{minDaysInFirstWeek:4,startOfWeek:1}}function It(t){const e=jt(t.year),n=Rt(t.month,1,12),i=Rt(t.day,1,Gt(t.year,t.month));return e?n?!i&&Tt("day",t.day):Tt("month",t.month):Tt("year",t.year)}function Nt(t){const{hour:e,minute:n,second:i,millisecond:s}=t,r=Rt(e,0,23)||24===e&&0===n&&0===i&&0===s,o=Rt(n,0,59),a=Rt(i,0,59),l=Rt(s,0,999);return r?o?a?!l&&Tt("millisecond",s):Tt("second",i):Tt("minute",n):Tt("hour",e)}function Pt(t){return void 0===t}function Ft(t){return"number"==typeof t}function jt(t){return"number"==typeof t&&t%1==0}function qt(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(t){return!1}}function Ht(){try{return"undefined"!=typeof Intl&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch(t){return!1}}function Vt(t,e,n){if(0!==t.length)return t.reduce(((t,i)=>{const s=[e(i),i];return t&&n(t[0],s[0])===t[0]?t:s}),null)[1]}function $t(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function Bt(t){if(null==t)return null;if("object"!=typeof t)throw new c("Week settings must be an object");if(!Rt(t.firstDay,1,7)||!Rt(t.minimalDays,1,7)||!Array.isArray(t.weekend)||t.weekend.some((t=>!Rt(t,1,7))))throw new c("Invalid week settings");return{firstDay:t.firstDay,minimalDays:t.minimalDays,weekend:Array.from(t.weekend)}}function Rt(t,e,n){return jt(t)&&t>=e&&t<=n}function Wt(t,e=2){let n;return n=t<0?"-"+(""+-t).padStart(e,"0"):(""+t).padStart(e,"0"),n}function zt(t){return Pt(t)||null===t||""===t?void 0:parseInt(t,10)}function Yt(t){return Pt(t)||null===t||""===t?void 0:parseFloat(t)}function Ut(t){if(!Pt(t)&&null!==t&&""!==t){const e=1e3*parseFloat("0."+t);return Math.floor(e)}}function Zt(t,e,n=!1){const i=10**e;return(n?Math.trunc:Math.round)(t*i)/i}function Kt(t){return t%4==0&&(t%100!=0||t%400==0)}function Jt(t){return Kt(t)?366:365}function Gt(t,e){const n=function(t,e){return t-e*Math.floor(t/e)}(e-1,12)+1;return 2===n?Kt(t+(e-n)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][n-1]}function Qt(t){let e=Date.UTC(t.year,t.month-1,t.day,t.hour,t.minute,t.second,t.millisecond);return t.year<100&&t.year>=0&&(e=new Date(e),e.setUTCFullYear(t.year,t.month-1,t.day)),+e}function Xt(t,e,n){return-St(Et(t,1,e),n)+e-1}function te(t,e=4,n=1){const i=Xt(t,e,n),s=Xt(t+1,e,n);return(Jt(t)-i+s)/7}function ee(t){return t>99?t:t>bt.twoDigitCutoffYear?1900+t:2e3+t}function ne(t,e,n,i=null){const s=new Date(t),r={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};i&&(r.timeZone=i);const o={timeZoneName:e,...r},a=new Intl.DateTimeFormat(n,o).formatToParts(s).find((t=>"timezonename"===t.type.toLowerCase()));return a?a.value:null}function ie(t,e){let n=parseInt(t,10);Number.isNaN(n)&&(n=0);const i=parseInt(e,10)||0;return 60*n+(n<0||Object.is(n,-0)?-i:i)}function se(t){const e=Number(t);if("boolean"==typeof t||""===t||Number.isNaN(e))throw new c(`Invalid unit value ${t}`);return e}function re(t,e){const n={};for(const i in t)if($t(t,i)){const s=t[i];if(null==s)continue;n[e(i)]=se(s)}return n}function oe(t,e){const n=Math.trunc(Math.abs(t/60)),i=Math.trunc(Math.abs(t%60)),s=t>=0?"+":"-";switch(e){case"short":return`${s}${Wt(n,2)}:${Wt(i,2)}`;case"narrow":return`${s}${n}${i>0?`:${i}`:""}`;case"techie":return`${s}${Wt(n,2)}${Wt(i,2)}`;default:throw new RangeError(`Value format ${e} is out of range for property format`)}}function ae(t){return function(t,e){return e.reduce(((e,n)=>(e[n]=t[n],e)),{})}(t,["hour","minute","second","millisecond"])}const le=["January","February","March","April","May","June","July","August","September","October","November","December"],ce=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ue=["J","F","M","A","M","J","J","A","S","O","N","D"];function de(t){switch(t){case"narrow":return[...ue];case"short":return[...ce];case"long":return[...le];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const he=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],pe=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],me=["M","T","W","T","F","S","S"];function fe(t){switch(t){case"narrow":return[...me];case"short":return[...pe];case"long":return[...he];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const ge=["AM","PM"],ve=["Before Christ","Anno Domini"],ye=["BC","AD"],be=["B","A"];function _e(t){switch(t){case"narrow":return[...be];case"short":return[...ye];case"long":return[...ve];default:return null}}function we(t,e){let n="";for(const i of t)i.literal?n+=i.val:n+=e(i.val);return n}const ke={D:m,DD:f,DDD:v,DDDD:y,t:b,tt:_,ttt:w,tttt:k,T:T,TT:E,TTT:D,TTTT:x,f:S,ff:L,fff:A,ffff:N,F:O,FF:C,FFF:I,FFFF:P};class Te{static create(t,e={}){return new Te(t,e)}static parseFormat(t){let e=null,n="",i=!1;const s=[];for(let r=0;r0&&s.push({literal:i||/^\s+$/.test(n),val:n}),e=null,n="",i=!i):i||o===e?n+=o:(n.length>0&&s.push({literal:/^\s+$/.test(n),val:n}),n=o,e=o)}return n.length>0&&s.push({literal:i||/^\s+$/.test(n),val:n}),s}static macroTokenToFormatOpts(t){return ke[t]}constructor(t,e){this.opts=e,this.loc=t,this.systemLoc=null}formatWithSystemDefault(t,e){null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem());return this.systemLoc.dtFormatter(t,{...this.opts,...e}).format()}dtFormatter(t,e={}){return this.loc.dtFormatter(t,{...this.opts,...e})}formatDateTime(t,e){return this.dtFormatter(t,e).format()}formatDateTimeParts(t,e){return this.dtFormatter(t,e).formatToParts()}formatInterval(t,e){return this.dtFormatter(t.start,e).dtf.formatRange(t.start.toJSDate(),t.end.toJSDate())}resolvedOptions(t,e){return this.dtFormatter(t,e).resolvedOptions()}num(t,e=0){if(this.opts.forceSimple)return Wt(t,e);const n={...this.opts};return e>0&&(n.padTo=e),this.loc.numberFormatter(n).format(t)}formatDateTimeFromString(t,e){const n="en"===this.loc.listingMode(),i=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,s=(e,n)=>this.loc.extract(t,e,n),r=e=>t.isOffsetFixed&&0===t.offset&&e.allowZ?"Z":t.isValid?t.zone.formatOffset(t.ts,e.format):"",o=()=>n?function(t){return ge[t.hour<12?0:1]}(t):s({hour:"numeric",hourCycle:"h12"},"dayperiod"),a=(e,i)=>n?function(t,e){return de(e)[t.month-1]}(t,e):s(i?{month:e}:{month:e,day:"numeric"},"month"),l=(e,i)=>n?function(t,e){return fe(e)[t.weekday-1]}(t,e):s(i?{weekday:e}:{weekday:e,month:"long",day:"numeric"},"weekday"),c=e=>{const n=Te.macroTokenToFormatOpts(e);return n?this.formatWithSystemDefault(t,n):e},u=e=>n?function(t,e){return _e(e)[t.year<0?0:1]}(t,e):s({era:e},"era");return we(Te.parseFormat(e),(e=>{switch(e){case"S":return this.num(t.millisecond);case"u":case"SSS":return this.num(t.millisecond,3);case"s":return this.num(t.second);case"ss":return this.num(t.second,2);case"uu":return this.num(Math.floor(t.millisecond/10),2);case"uuu":return this.num(Math.floor(t.millisecond/100));case"m":return this.num(t.minute);case"mm":return this.num(t.minute,2);case"h":return this.num(t.hour%12==0?12:t.hour%12);case"hh":return this.num(t.hour%12==0?12:t.hour%12,2);case"H":return this.num(t.hour);case"HH":return this.num(t.hour,2);case"Z":return r({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return r({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return r({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return t.zone.offsetName(t.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return t.zone.offsetName(t.ts,{format:"long",locale:this.loc.locale});case"z":return t.zoneName;case"a":return o();case"d":return i?s({day:"numeric"},"day"):this.num(t.day);case"dd":return i?s({day:"2-digit"},"day"):this.num(t.day,2);case"c":case"E":return this.num(t.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return i?s({month:"numeric",day:"numeric"},"month"):this.num(t.month);case"LL":return i?s({month:"2-digit",day:"numeric"},"month"):this.num(t.month,2);case"LLL":return a("short",!0);case"LLLL":return a("long",!0);case"LLLLL":return a("narrow",!0);case"M":return i?s({month:"numeric"},"month"):this.num(t.month);case"MM":return i?s({month:"2-digit"},"month"):this.num(t.month,2);case"MMM":return a("short",!1);case"MMMM":return a("long",!1);case"MMMMM":return a("narrow",!1);case"y":return i?s({year:"numeric"},"year"):this.num(t.year);case"yy":return i?s({year:"2-digit"},"year"):this.num(t.year.toString().slice(-2),2);case"yyyy":return i?s({year:"numeric"},"year"):this.num(t.year,4);case"yyyyyy":return i?s({year:"numeric"},"year"):this.num(t.year,6);case"G":return u("short");case"GG":return u("long");case"GGGGG":return u("narrow");case"kk":return this.num(t.weekYear.toString().slice(-2),2);case"kkkk":return this.num(t.weekYear,4);case"W":return this.num(t.weekNumber);case"WW":return this.num(t.weekNumber,2);case"n":return this.num(t.localWeekNumber);case"nn":return this.num(t.localWeekNumber,2);case"ii":return this.num(t.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(t.localWeekYear,4);case"o":return this.num(t.ordinal);case"ooo":return this.num(t.ordinal,3);case"q":return this.num(t.quarter);case"qq":return this.num(t.quarter,2);case"X":return this.num(Math.floor(t.ts/1e3));case"x":return this.num(t.ts);default:return c(e)}}))}formatDurationFromString(t,e){const n=t=>{switch(t[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},i=Te.parseFormat(e),s=i.reduce(((t,{literal:e,val:n})=>e?t:t.concat(n)),[]);return we(i,(t=>e=>{const i=n(e);return i?this.num(t.get(i),e.length):e})(t.shiftTo(...s.map(n).filter((t=>t)))))}}const Ee=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function De(...t){const e=t.reduce(((t,e)=>t+e.source),"");return RegExp(`^${e}$`)}function xe(...t){return e=>t.reduce((([t,n,i],s)=>{const[r,o,a]=s(e,i);return[{...t,...r},o||n,a]}),[{},null,1]).slice(0,2)}function Se(t,...e){if(null==t)return[null,null];for(const[n,i]of e){const e=n.exec(t);if(e)return i(e)}return[null,null]}function Oe(...t){return(e,n)=>{const i={};let s;for(s=0;svoid 0!==t&&(e||t&&u)?-t:t;return[{years:h(Yt(n)),months:h(Yt(i)),weeks:h(Yt(s)),days:h(Yt(r)),hours:h(Yt(o)),minutes:h(Yt(a)),seconds:h(Yt(l),"-0"===l),milliseconds:h(Ut(c),d)}]}const We={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function ze(t,e,n,i,s,r,o){const a={year:2===e.length?ee(zt(e)):zt(e),month:ce.indexOf(n)+1,day:zt(i),hour:zt(s),minute:zt(r)};return o&&(a.second=zt(o)),t&&(a.weekday=t.length>3?he.indexOf(t)+1:pe.indexOf(t)+1),a}const Ye=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Ue(t){const[,e,n,i,s,r,o,a,l,c,u,d]=t,h=ze(e,s,i,n,r,o,a);let p;return p=l?We[l]:c?0:ie(u,d),[h,new it(p)]}const Ze=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Ke=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Je=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Ge(t){const[,e,n,i,s,r,o,a]=t;return[ze(e,s,i,n,r,o,a),it.utcInstance]}function Qe(t){const[,e,n,i,s,r,o,a]=t;return[ze(e,a,n,i,s,r,o),it.utcInstance]}const Xe=De(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,Ae),tn=De(/(\d{4})-?W(\d\d)(?:-?(\d))?/,Ae),en=De(/(\d{4})-?(\d{3})/,Ae),nn=De(Me),sn=xe((function(t,e){return[{year:je(t,e),month:je(t,e+1,1),day:je(t,e+2,1)},null,e+3]}),qe,He,Ve),rn=xe(Ie,qe,He,Ve),on=xe(Ne,qe,He,Ve),an=xe(qe,He,Ve);const ln=xe(qe);const cn=De(/(\d{4})-(\d\d)-(\d\d)/,Fe),un=De(Pe),dn=xe(qe,He,Ve);const hn="Invalid Duration",pn={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},mn={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...pn},fn=365.2425,gn=30.436875,vn={years:{quarters:4,months:12,weeks:52.1775,days:fn,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:4.3481250000000005,days:gn,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...pn},yn=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],bn=yn.slice(0).reverse();function _n(t,e,n=!1){const i={values:n?e.values:{...t.values,...e.values||{}},loc:t.loc.clone(e.loc),conversionAccuracy:e.conversionAccuracy||t.conversionAccuracy,matrix:e.matrix||t.matrix};return new Tn(i)}function wn(t,e){let n=e.milliseconds??0;for(const i of bn.slice(1))e[i]&&(n+=e[i]*t[i].milliseconds);return n}function kn(t,e){const n=wn(t,e)<0?-1:1;yn.reduceRight(((i,s)=>{if(Pt(e[s]))return i;if(i){const r=e[i]*n,o=t[s][i],a=Math.floor(r/o);e[s]+=a*n,e[i]-=a*o*n}return s}),null),yn.reduce(((n,i)=>{if(Pt(e[i]))return n;if(n){const s=e[n]%1;e[n]-=s,e[i]+=s*t[n][i]}return i}),null)}class Tn{constructor(t){const e="longterm"===t.conversionAccuracy||!1;let n=e?vn:mn;t.matrix&&(n=t.matrix),this.values=t.values,this.loc=t.loc||et.create(),this.conversionAccuracy=e?"longterm":"casual",this.invalid=t.invalid||null,this.matrix=n,this.isLuxonDuration=!0}static fromMillis(t,e){return Tn.fromObject({milliseconds:t},e)}static fromObject(t,e={}){if(null==t||"object"!=typeof t)throw new c("Duration.fromObject: argument expected to be an object, got "+(null===t?"null":typeof t));return new Tn({values:re(t,Tn.normalizeUnit),loc:et.fromObject(e),conversionAccuracy:e.conversionAccuracy,matrix:e.matrix})}static fromDurationLike(t){if(Ft(t))return Tn.fromMillis(t);if(Tn.isDuration(t))return t;if("object"==typeof t)return Tn.fromObject(t);throw new c(`Unknown duration argument ${t} of type ${typeof t}`)}static fromISO(t,e){const[n]=function(t){return Se(t,[Be,Re])}(t);return n?Tn.fromObject(n,e):Tn.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static fromISOTime(t,e){const[n]=function(t){return Se(t,[$e,ln])}(t);return n?Tn.fromObject(n,e):Tn.invalid("unparsable",`the input "${t}" can't be parsed as ISO 8601`)}static invalid(t,e=null){if(!t)throw new c("need to specify a reason the Duration is invalid");const n=t instanceof _t?t:new _t(t,e);if(bt.throwOnInvalid)throw new o(n);return new Tn({invalid:n})}static normalizeUnit(t){const e={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[t?t.toLowerCase():t];if(!e)throw new l(t);return e}static isDuration(t){return t&&t.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(t,e={}){const n={...e,floor:!1!==e.round&&!1!==e.floor};return this.isValid?Te.create(this.loc,n).formatDurationFromString(this,t):hn}toHuman(t={}){if(!this.isValid)return hn;const e=yn.map((e=>{const n=this.values[e];return Pt(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...t,unit:e.slice(0,-1)}).format(n)})).filter((t=>t));return this.loc.listFormatter({type:"conjunction",style:t.listStyle||"narrow",...t}).format(e)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let t="P";return 0!==this.years&&(t+=this.years+"Y"),0===this.months&&0===this.quarters||(t+=this.months+3*this.quarters+"M"),0!==this.weeks&&(t+=this.weeks+"W"),0!==this.days&&(t+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(t+="T"),0!==this.hours&&(t+=this.hours+"H"),0!==this.minutes&&(t+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(t+=Zt(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===t&&(t+="T0S"),t}toISOTime(t={}){if(!this.isValid)return null;const e=this.toMillis();if(e<0||e>=864e5)return null;t={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...t,includeOffset:!1};return fi.fromMillis(e,{zone:"UTC"}).toISOTime(t)}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?wn(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(t){if(!this.isValid)return this;const e=Tn.fromDurationLike(t),n={};for(const t of yn)($t(e.values,t)||$t(this.values,t))&&(n[t]=e.get(t)+this.get(t));return _n(this,{values:n},!0)}minus(t){if(!this.isValid)return this;const e=Tn.fromDurationLike(t);return this.plus(e.negate())}mapUnits(t){if(!this.isValid)return this;const e={};for(const n of Object.keys(this.values))e[n]=se(t(this.values[n],n));return _n(this,{values:e},!0)}get(t){return this[Tn.normalizeUnit(t)]}set(t){if(!this.isValid)return this;return _n(this,{values:{...this.values,...re(t,Tn.normalizeUnit)}})}reconfigure({locale:t,numberingSystem:e,conversionAccuracy:n,matrix:i}={}){return _n(this,{loc:this.loc.clone({locale:t,numberingSystem:e}),matrix:i,conversionAccuracy:n})}as(t){return this.isValid?this.shiftTo(t).get(t):NaN}normalize(){if(!this.isValid)return this;const t=this.toObject();return kn(this.matrix,t),_n(this,{values:t},!0)}rescale(){if(!this.isValid)return this;return _n(this,{values:function(t){const e={};for(const[n,i]of Object.entries(t))0!==i&&(e[n]=i);return e}(this.normalize().shiftToAll().toObject())},!0)}shiftTo(...t){if(!this.isValid)return this;if(0===t.length)return this;t=t.map((t=>Tn.normalizeUnit(t)));const e={},n={},i=this.toObject();let s;for(const r of yn)if(t.indexOf(r)>=0){s=r;let t=0;for(const e in n)t+=this.matrix[e][r]*n[e],n[e]=0;Ft(i[r])&&(t+=i[r]);const o=Math.trunc(t);e[r]=o,n[r]=(1e3*t-1e3*o)/1e3}else Ft(i[r])&&(n[r]=i[r]);for(const t in n)0!==n[t]&&(e[s]+=t===s?n[t]:n[t]/this.matrix[s][t]);return kn(this.matrix,e),_n(this,{values:e},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;const t={};for(const e of Object.keys(this.values))t[e]=0===this.values[e]?0:-this.values[e];return _n(this,{values:t},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(t){if(!this.isValid||!t.isValid)return!1;if(!this.loc.equals(t.loc))return!1;for(const i of yn)if(e=this.values[i],n=t.values[i],!(void 0===e||0===e?void 0===n||0===n:e===n))return!1;var e,n;return!0}}const En="Invalid Interval";class Dn{constructor(t){this.s=t.start,this.e=t.end,this.invalid=t.invalid||null,this.isLuxonInterval=!0}static invalid(t,e=null){if(!t)throw new c("need to specify a reason the Interval is invalid");const n=t instanceof _t?t:new _t(t,e);if(bt.throwOnInvalid)throw new r(n);return new Dn({invalid:n})}static fromDateTimes(t,e){const n=gi(t),i=gi(e),s=function(t,e){return t&&t.isValid?e&&e.isValid?et}isBefore(t){return!!this.isValid&&this.e<=t}contains(t){return!!this.isValid&&(this.s<=t&&this.e>t)}set({start:t,end:e}={}){return this.isValid?Dn.fromDateTimes(t||this.s,e||this.e):this}splitAt(...t){if(!this.isValid)return[];const e=t.map(gi).filter((t=>this.contains(t))).sort(((t,e)=>t.toMillis()-e.toMillis())),n=[];let{s:i}=this,s=0;for(;i+this.e?this.e:t;n.push(Dn.fromDateTimes(i,r)),i=r,s+=1}return n}splitBy(t){const e=Tn.fromDurationLike(t);if(!this.isValid||!e.isValid||0===e.as("milliseconds"))return[];let n,{s:i}=this,s=1;const r=[];for(;it*s)));n=+t>+this.e?this.e:t,r.push(Dn.fromDateTimes(i,n)),i=n,s+=1}return r}divideEqually(t){return this.isValid?this.splitBy(this.length()/t).slice(0,t):[]}overlaps(t){return this.e>t.s&&this.s=t.e)}equals(t){return!(!this.isValid||!t.isValid)&&(this.s.equals(t.s)&&this.e.equals(t.e))}intersection(t){if(!this.isValid)return this;const e=this.s>t.s?this.s:t.s,n=this.e=n?null:Dn.fromDateTimes(e,n)}union(t){if(!this.isValid)return this;const e=this.st.e?this.e:t.e;return Dn.fromDateTimes(e,n)}static merge(t){const[e,n]=t.sort(((t,e)=>t.s-e.s)).reduce((([t,e],n)=>e?e.overlaps(n)||e.abutsStart(n)?[t,e.union(n)]:[t.concat([e]),n]:[t,n]),[[],null]);return n&&e.push(n),e}static xor(t){let e=null,n=0;const i=[],s=t.map((t=>[{time:t.s,type:"s"},{time:t.e,type:"e"}])),r=Array.prototype.concat(...s).sort(((t,e)=>t.time-e.time));for(const t of r)n+="s"===t.type?1:-1,1===n?e=t.time:(e&&+e!=+t.time&&i.push(Dn.fromDateTimes(e,t.time)),e=null);return Dn.merge(i)}difference(...t){return Dn.xor([this].concat(t)).map((t=>this.intersection(t))).filter((t=>t&&!t.isEmpty()))}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:En}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(t=m,e={}){return this.isValid?Te.create(this.s.loc.clone(e),t).formatInterval(this):En}toISO(t){return this.isValid?`${this.s.toISO(t)}/${this.e.toISO(t)}`:En}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:En}toISOTime(t){return this.isValid?`${this.s.toISOTime(t)}/${this.e.toISOTime(t)}`:En}toFormat(t,{separator:e=" – "}={}){return this.isValid?`${this.s.toFormat(t)}${e}${this.e.toFormat(t)}`:En}toDuration(t,e){return this.isValid?this.e.diff(this.s,t,e):Tn.invalid(this.invalidReason)}mapEndpoints(t){return Dn.fromDateTimes(t(this.s),t(this.e))}}class xn{static hasDST(t=bt.defaultZone){const e=fi.now().setZone(t).set({month:12});return!t.isUniversal&&e.offset!==e.set({month:6}).offset}static isValidIANAZone(t){return B.isValidZone(t)}static normalizeZone(t){return rt(t,bt.defaultZone)}static getStartOfWeek({locale:t=null,locObj:e=null}={}){return(e||et.create(t)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:t=null,locObj:e=null}={}){return(e||et.create(t)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:t=null,locObj:e=null}={}){return(e||et.create(t)).getWeekendDays().slice()}static months(t="long",{locale:e=null,numberingSystem:n=null,locObj:i=null,outputCalendar:s="gregory"}={}){return(i||et.create(e,n,s)).months(t)}static monthsFormat(t="long",{locale:e=null,numberingSystem:n=null,locObj:i=null,outputCalendar:s="gregory"}={}){return(i||et.create(e,n,s)).months(t,!0)}static weekdays(t="long",{locale:e=null,numberingSystem:n=null,locObj:i=null}={}){return(i||et.create(e,n,null)).weekdays(t)}static weekdaysFormat(t="long",{locale:e=null,numberingSystem:n=null,locObj:i=null}={}){return(i||et.create(e,n,null)).weekdays(t,!0)}static meridiems({locale:t=null}={}){return et.create(t).meridiems()}static eras(t="short",{locale:e=null}={}){return et.create(e,null,"gregory").eras(t)}static features(){return{relative:qt(),localeWeek:Ht()}}}function Sn(t,e){const n=t=>t.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),i=n(e)-n(t);return Math.floor(Tn.fromMillis(i).as("days"))}function On(t,e,n,i){let[s,r,o,a]=function(t,e,n){const i=[["years",(t,e)=>e.year-t.year],["quarters",(t,e)=>e.quarter-t.quarter+4*(e.year-t.year)],["months",(t,e)=>e.month-t.month+12*(e.year-t.year)],["weeks",(t,e)=>{const n=Sn(t,e);return(n-n%7)/7}],["days",Sn]],s={},r=t;let o,a;for(const[l,c]of i)n.indexOf(l)>=0&&(o=l,s[l]=c(t,e),a=r.plus(s),a>e?(s[l]--,(t=r.plus(s))>e&&(a=t,s[l]--,t=r.plus(s))):t=a);return[t,s,a,o]}(t,e,n);const l=e-s,c=n.filter((t=>["hours","minutes","seconds","milliseconds"].indexOf(t)>=0));0===c.length&&(o0?Tn.fromMillis(l,i).shiftTo(...c).plus(u):u}function Ln(t,e=(t=>t)){return{regex:t,deser:([t])=>e(function(t){let e=parseInt(t,10);if(isNaN(e)){e="";for(let n=0;n=n&&i<=s&&(e+=i-n)}}return parseInt(e,10)}return e}(t))}}const Cn=`[ ${String.fromCharCode(160)}]`,Mn=new RegExp(Cn,"g");function An(t){return t.replace(/\./g,"\\.?").replace(Mn,Cn)}function In(t){return t.replace(/\./g,"").replace(Mn," ").toLowerCase()}function Nn(t,e){return null===t?null:{regex:RegExp(t.map(An).join("|")),deser:([n])=>t.findIndex((t=>In(n)===In(t)))+e}}function Pn(t,e){return{regex:t,deser:([,t,e])=>ie(t,e),groups:e}}function Fn(t){return{regex:t,deser:([t])=>t}}const jn={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let qn=null;function Hn(t,e){return Array.prototype.concat(...t.map((t=>function(t,e){if(t.literal)return t;const n=Bn(Te.macroTokenToFormatOpts(t.val),e);return null==n||n.includes(void 0)?t:n}(t,e))))}class Vn{constructor(t,e){if(this.locale=t,this.format=e,this.tokens=Hn(Te.parseFormat(e),t),this.units=this.tokens.map((e=>function(t,e){const n=ut(e),i=ut(e,"{2}"),s=ut(e,"{3}"),r=ut(e,"{4}"),o=ut(e,"{6}"),a=ut(e,"{1,2}"),l=ut(e,"{1,3}"),c=ut(e,"{1,6}"),u=ut(e,"{1,9}"),d=ut(e,"{2,4}"),h=ut(e,"{4,6}"),p=t=>{return{regex:RegExp((e=t.val,e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:([t])=>t,literal:!0};var e},m=(m=>{if(t.literal)return p(m);switch(m.val){case"G":return Nn(e.eras("short"),0);case"GG":return Nn(e.eras("long"),0);case"y":return Ln(c);case"yy":case"kk":return Ln(d,ee);case"yyyy":case"kkkk":return Ln(r);case"yyyyy":return Ln(h);case"yyyyyy":return Ln(o);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return Ln(a);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return Ln(i);case"MMM":return Nn(e.months("short",!0),1);case"MMMM":return Nn(e.months("long",!0),1);case"LLL":return Nn(e.months("short",!1),1);case"LLLL":return Nn(e.months("long",!1),1);case"o":case"S":return Ln(l);case"ooo":case"SSS":return Ln(s);case"u":return Fn(u);case"uu":return Fn(a);case"uuu":case"E":case"c":return Ln(n);case"a":return Nn(e.meridiems(),0);case"EEE":return Nn(e.weekdays("short",!1),1);case"EEEE":return Nn(e.weekdays("long",!1),1);case"ccc":return Nn(e.weekdays("short",!0),1);case"cccc":return Nn(e.weekdays("long",!0),1);case"Z":case"ZZ":return Pn(new RegExp(`([+-]${a.source})(?::(${i.source}))?`),2);case"ZZZ":return Pn(new RegExp(`([+-]${a.source})(${i.source})?`),2);case"z":return Fn(/[a-z_+-/]{1,256}?/i);case" ":return Fn(/[^\S\n\r]/);default:return p(m)}})(t)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return m.token=t,m}(e,t))),this.disqualifyingUnit=this.units.find((t=>t.invalidReason)),!this.disqualifyingUnit){const[t,e]=[`^${(n=this.units).map((t=>t.regex)).reduce(((t,e)=>`${t}(${e.source})`),"")}$`,n];this.regex=RegExp(t,"i"),this.handlers=e}var n}explainFromTokens(t){if(this.isValid){const[e,n]=function(t,e,n){const i=t.match(e);if(i){const t={};let e=1;for(const s in n)if($t(n,s)){const r=n[s],o=r.groups?r.groups+1:1;!r.literal&&r.token&&(t[r.token.val[0]]=r.deser(i.slice(e,e+o))),e+=o}return[i,t]}return[i,{}]}(t,this.regex,this.handlers),[i,s,r]=n?function(t){let e,n=null;return Pt(t.z)||(n=B.create(t.z)),Pt(t.Z)||(n||(n=new it(t.Z)),e=t.Z),Pt(t.q)||(t.M=3*(t.q-1)+1),Pt(t.h)||(t.h<12&&1===t.a?t.h+=12:12===t.h&&0===t.a&&(t.h=0)),0===t.G&&t.y&&(t.y=-t.y),Pt(t.u)||(t.S=Ut(t.u)),[Object.keys(t).reduce(((e,n)=>{const i=(t=>{switch(t){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(n);return i&&(e[i]=t[n]),e}),{}),n,e]}(n):[null,null,void 0];if($t(n,"a")&&$t(n,"H"))throw new a("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:this.tokens,regex:this.regex,rawMatches:e,matches:n,result:i,zone:s,specificOffset:r}}return{input:t,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}}function $n(t,e,n){return new Vn(t,n).explainFromTokens(e)}function Bn(t,e){if(!t)return null;const n=Te.create(e,t).dtFormatter((qn||(qn=fi.fromMillis(1555555555555)),qn)),i=n.formatToParts(),s=n.resolvedOptions();return i.map((e=>function(t,e,n){const{type:i,value:s}=t;if("literal"===i){const t=/^\s+$/.test(s);return{literal:!t,val:t?" ":s}}const r=e[i];let o=i;"hour"===i&&(o=null!=e.hour12?e.hour12?"hour12":"hour24":null!=e.hourCycle?"h11"===e.hourCycle||"h12"===e.hourCycle?"hour12":"hour24":n.hour12?"hour12":"hour24");let a=jn[o];if("object"==typeof a&&(a=a[r]),a)return{literal:!1,val:a}}(e,t,s)))}const Rn="Invalid DateTime",Wn=864e13;function zn(t){return new _t("unsupported zone",`the zone "${t.name}" is not supported`)}function Yn(t){return null===t.weekData&&(t.weekData=Ot(t.c)),t.weekData}function Un(t){return null===t.localWeekData&&(t.localWeekData=Ot(t.c,t.loc.getMinDaysInFirstWeek(),t.loc.getStartOfWeek())),t.localWeekData}function Zn(t,e){const n={ts:t.ts,zone:t.zone,c:t.c,o:t.o,loc:t.loc,invalid:t.invalid};return new fi({...n,...e,old:n})}function Kn(t,e,n){let i=t-60*e*1e3;const s=n.offset(i);if(e===s)return[i,e];i-=60*(s-e)*1e3;const r=n.offset(i);return s===r?[i,s]:[t-60*Math.min(s,r)*1e3,Math.max(s,r)]}function Jn(t,e){const n=new Date(t+=60*e*1e3);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function Gn(t,e,n){return Kn(Qt(t),e,n)}function Qn(t,e){const n=t.o,i=t.c.year+Math.trunc(e.years),s=t.c.month+Math.trunc(e.months)+3*Math.trunc(e.quarters),r={...t.c,year:i,month:s,day:Math.min(t.c.day,Gt(i,s))+Math.trunc(e.days)+7*Math.trunc(e.weeks)},o=Tn.fromObject({years:e.years-Math.trunc(e.years),quarters:e.quarters-Math.trunc(e.quarters),months:e.months-Math.trunc(e.months),weeks:e.weeks-Math.trunc(e.weeks),days:e.days-Math.trunc(e.days),hours:e.hours,minutes:e.minutes,seconds:e.seconds,milliseconds:e.milliseconds}).as("milliseconds"),a=Qt(r);let[l,c]=Kn(a,n,t.zone);return 0!==o&&(l+=o,c=t.zone.offset(l)),{ts:l,o:c}}function Xn(t,e,n,i,s,r){const{setZone:o,zone:a}=n;if(t&&0!==Object.keys(t).length||e){const i=e||a,s=fi.fromObject(t,{...n,zone:i,specificOffset:r});return o?s:s.setZone(a)}return fi.invalid(new _t("unparsable",`the input "${s}" can't be parsed as ${i}`))}function ti(t,e,n=!0){return t.isValid?Te.create(et.create("en-US"),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(t,e):null}function ei(t,e){const n=t.c.year>9999||t.c.year<0;let i="";return n&&t.c.year>=0&&(i+="+"),i+=Wt(t.c.year,n?6:4),e?(i+="-",i+=Wt(t.c.month),i+="-",i+=Wt(t.c.day)):(i+=Wt(t.c.month),i+=Wt(t.c.day)),i}function ni(t,e,n,i,s,r){let o=Wt(t.c.hour);return e?(o+=":",o+=Wt(t.c.minute),0===t.c.millisecond&&0===t.c.second&&n||(o+=":")):o+=Wt(t.c.minute),0===t.c.millisecond&&0===t.c.second&&n||(o+=Wt(t.c.second),0===t.c.millisecond&&i||(o+=".",o+=Wt(t.c.millisecond,3))),s&&(t.isOffsetFixed&&0===t.offset&&!r?o+="Z":t.o<0?(o+="-",o+=Wt(Math.trunc(-t.o/60)),o+=":",o+=Wt(Math.trunc(-t.o%60))):(o+="+",o+=Wt(Math.trunc(t.o/60)),o+=":",o+=Wt(Math.trunc(t.o%60)))),r&&(o+="["+t.zone.ianaName+"]"),o}const ii={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},si={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},ri={ordinal:1,hour:0,minute:0,second:0,millisecond:0},oi=["year","month","day","hour","minute","second","millisecond"],ai=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],li=["year","ordinal","hour","minute","second","millisecond"];function ci(t){switch(t.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return function(t){const e={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[t.toLowerCase()];if(!e)throw new l(t);return e}(t)}}function ui(t,e){const n=rt(e.zone,bt.defaultZone);if(!n.isValid)return fi.invalid(zn(n));const i=et.fromObject(e);let s,r;if(Pt(t.year))s=bt.now();else{for(const e of oi)Pt(t[e])&&(t[e]=ii[e]);const e=It(t)||Nt(t);if(e)return fi.invalid(e);const i=function(t){return mi[t]||(void 0===pi&&(pi=bt.now()),mi[t]=t.offset(pi)),mi[t]}(n);[s,r]=Gn(t,i,n)}return new fi({ts:s,zone:n,loc:i,o:r})}function di(t,e,n){const i=!!Pt(n.round)||n.round,s=(t,s)=>{t=Zt(t,i||n.calendary?0:2,!0);return e.loc.clone(n).relFormatter(n).format(t,s)},r=i=>n.calendary?e.hasSame(t,i)?0:e.startOf(i).diff(t.startOf(i),i).get(i):e.diff(t,i).get(i);if(n.unit)return s(r(n.unit),n.unit);for(const t of n.units){const e=r(t);if(Math.abs(e)>=1)return s(e,t)}return s(t>e?-0:0,n.units[n.units.length-1])}function hi(t){let e,n={};return t.length>0&&"object"==typeof t[t.length-1]?(n=t[t.length-1],e=Array.from(t).slice(0,t.length-1)):e=Array.from(t),[n,e]}let pi,mi={};class fi{constructor(t){const e=t.zone||bt.defaultZone;let n=t.invalid||(Number.isNaN(t.ts)?new _t("invalid input"):null)||(e.isValid?null:zn(e));this.ts=Pt(t.ts)?bt.now():t.ts;let i=null,s=null;if(!n){if(t.old&&t.old.ts===this.ts&&t.old.zone.equals(e))[i,s]=[t.old.c,t.old.o];else{const r=Ft(t.o)&&!t.old?t.o:e.offset(this.ts);i=Jn(this.ts,r),n=Number.isNaN(i.year)?new _t("invalid input"):null,i=n?null:i,s=n?null:r}}this._zone=e,this.loc=t.loc||et.create(),this.invalid=n,this.weekData=null,this.localWeekData=null,this.c=i,this.o=s,this.isLuxonDateTime=!0}static now(){return new fi({})}static local(){const[t,e]=hi(arguments),[n,i,s,r,o,a,l]=e;return ui({year:n,month:i,day:s,hour:r,minute:o,second:a,millisecond:l},t)}static utc(){const[t,e]=hi(arguments),[n,i,s,r,o,a,l]=e;return t.zone=it.utcInstance,ui({year:n,month:i,day:s,hour:r,minute:o,second:a,millisecond:l},t)}static fromJSDate(t,e={}){const n=(i=t,"[object Date]"===Object.prototype.toString.call(i)?t.valueOf():NaN);var i;if(Number.isNaN(n))return fi.invalid("invalid input");const s=rt(e.zone,bt.defaultZone);return s.isValid?new fi({ts:n,zone:s,loc:et.fromObject(e)}):fi.invalid(zn(s))}static fromMillis(t,e={}){if(Ft(t))return t<-Wn||t>Wn?fi.invalid("Timestamp out of range"):new fi({ts:t,zone:rt(e.zone,bt.defaultZone),loc:et.fromObject(e)});throw new c(`fromMillis requires a numerical input, but received a ${typeof t} with value ${t}`)}static fromSeconds(t,e={}){if(Ft(t))return new fi({ts:1e3*t,zone:rt(e.zone,bt.defaultZone),loc:et.fromObject(e)});throw new c("fromSeconds requires a numerical input")}static fromObject(t,e={}){t=t||{};const n=rt(e.zone,bt.defaultZone);if(!n.isValid)return fi.invalid(zn(n));const i=et.fromObject(e),s=re(t,ci),{minDaysInFirstWeek:r,startOfWeek:o}=At(s,i),l=bt.now(),c=Pt(e.specificOffset)?n.offset(l):e.specificOffset,u=!Pt(s.ordinal),d=!Pt(s.year),h=!Pt(s.month)||!Pt(s.day),p=d||h,m=s.weekYear||s.weekNumber;if((p||u)&&m)throw new a("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(h&&u)throw new a("Can't mix ordinal dates with month/day");const f=m||s.weekday&&!p;let g,v,y=Jn(l,c);f?(g=ai,v=si,y=Ot(y,r,o)):u?(g=li,v=ri,y=Ct(y)):(g=oi,v=ii);let b=!1;for(const t of g){Pt(s[t])?s[t]=b?v[t]:y[t]:b=!0}const _=f?function(t,e=4,n=1){const i=jt(t.weekYear),s=Rt(t.weekNumber,1,te(t.weekYear,e,n)),r=Rt(t.weekday,1,7);return i?s?!r&&Tt("weekday",t.weekday):Tt("week",t.weekNumber):Tt("weekYear",t.weekYear)}(s,r,o):u?function(t){const e=jt(t.year),n=Rt(t.ordinal,1,Jt(t.year));return e?!n&&Tt("ordinal",t.ordinal):Tt("year",t.year)}(s):It(s),w=_||Nt(s);if(w)return fi.invalid(w);const k=f?Lt(s,r,o):u?Mt(s):s,[T,E]=Gn(k,c,n),D=new fi({ts:T,zone:n,o:E,loc:i});return s.weekday&&p&&t.weekday!==D.weekday?fi.invalid("mismatched weekday",`you can't specify both a weekday of ${s.weekday} and a date of ${D.toISO()}`):D.isValid?D:fi.invalid(D.invalid)}static fromISO(t,e={}){const[n,i]=function(t){return Se(t,[Xe,sn],[tn,rn],[en,on],[nn,an])}(t);return Xn(n,i,e,"ISO 8601",t)}static fromRFC2822(t,e={}){const[n,i]=function(t){return Se(function(t){return t.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(t),[Ye,Ue])}(t);return Xn(n,i,e,"RFC 2822",t)}static fromHTTP(t,e={}){const[n,i]=function(t){return Se(t,[Ze,Ge],[Ke,Ge],[Je,Qe])}(t);return Xn(n,i,e,"HTTP",e)}static fromFormat(t,e,n={}){if(Pt(t)||Pt(e))throw new c("fromFormat requires an input string and a format");const{locale:i=null,numberingSystem:s=null}=n,r=et.fromOpts({locale:i,numberingSystem:s,defaultToEN:!0}),[o,a,l,u]=function(t,e,n){const{result:i,zone:s,specificOffset:r,invalidReason:o}=$n(t,e,n);return[i,s,r,o]}(r,t,e);return u?fi.invalid(u):Xn(o,a,n,`format ${e}`,t,l)}static fromString(t,e,n={}){return fi.fromFormat(t,e,n)}static fromSQL(t,e={}){const[n,i]=function(t){return Se(t,[cn,sn],[un,dn])}(t);return Xn(n,i,e,"SQL",t)}static invalid(t,e=null){if(!t)throw new c("need to specify a reason the DateTime is invalid");const n=t instanceof _t?t:new _t(t,e);if(bt.throwOnInvalid)throw new s(n);return new fi({invalid:n})}static isDateTime(t){return t&&t.isLuxonDateTime||!1}static parseFormatForOpts(t,e={}){const n=Bn(t,et.fromObject(e));return n?n.map((t=>t?t.val:null)).join(""):null}static expandFormat(t,e={}){return Hn(Te.parseFormat(t),et.fromObject(e)).map((t=>t.val)).join("")}static resetCache(){pi=void 0,mi={}}get(t){return this[t]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Yn(this).weekYear:NaN}get weekNumber(){return this.isValid?Yn(this).weekNumber:NaN}get weekday(){return this.isValid?Yn(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?Un(this).weekday:NaN}get localWeekNumber(){return this.isValid?Un(this).weekNumber:NaN}get localWeekYear(){return this.isValid?Un(this).weekYear:NaN}get ordinal(){return this.isValid?Ct(this.c).ordinal:NaN}get monthShort(){return this.isValid?xn.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?xn.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?xn.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?xn.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];const t=864e5,e=6e4,n=Qt(this.c),i=this.zone.offset(n-t),s=this.zone.offset(n+t),r=this.zone.offset(n-i*e),o=this.zone.offset(n-s*e);if(r===o)return[this];const a=n-r*e,l=n-o*e,c=Jn(a,r),u=Jn(l,o);return c.hour===u.hour&&c.minute===u.minute&&c.second===u.second&&c.millisecond===u.millisecond?[Zn(this,{ts:a}),Zn(this,{ts:l})]:[this]}get isInLeapYear(){return Kt(this.year)}get daysInMonth(){return Gt(this.year,this.month)}get daysInYear(){return this.isValid?Jt(this.year):NaN}get weeksInWeekYear(){return this.isValid?te(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?te(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(t={}){const{locale:e,numberingSystem:n,calendar:i}=Te.create(this.loc.clone(t),t).resolvedOptions(this);return{locale:e,numberingSystem:n,outputCalendar:i}}toUTC(t=0,e={}){return this.setZone(it.instance(t),e)}toLocal(){return this.setZone(bt.defaultZone)}setZone(t,{keepLocalTime:e=!1,keepCalendarTime:n=!1}={}){if((t=rt(t,bt.defaultZone)).equals(this.zone))return this;if(t.isValid){let i=this.ts;if(e||n){const e=t.offset(this.ts),n=this.toObject();[i]=Gn(n,e,t)}return Zn(this,{ts:i,zone:t})}return fi.invalid(zn(t))}reconfigure({locale:t,numberingSystem:e,outputCalendar:n}={}){return Zn(this,{loc:this.loc.clone({locale:t,numberingSystem:e,outputCalendar:n})})}setLocale(t){return this.reconfigure({locale:t})}set(t){if(!this.isValid)return this;const e=re(t,ci),{minDaysInFirstWeek:n,startOfWeek:i}=At(e,this.loc),s=!Pt(e.weekYear)||!Pt(e.weekNumber)||!Pt(e.weekday),r=!Pt(e.ordinal),o=!Pt(e.year),l=!Pt(e.month)||!Pt(e.day),c=o||l,u=e.weekYear||e.weekNumber;if((c||r)&&u)throw new a("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&r)throw new a("Can't mix ordinal dates with month/day");let d;s?d=Lt({...Ot(this.c,n,i),...e},n,i):Pt(e.ordinal)?(d={...this.toObject(),...e},Pt(e.day)&&(d.day=Math.min(Gt(d.year,d.month),d.day))):d=Mt({...Ct(this.c),...e});const[h,p]=Gn(d,this.o,this.zone);return Zn(this,{ts:h,o:p})}plus(t){if(!this.isValid)return this;return Zn(this,Qn(this,Tn.fromDurationLike(t)))}minus(t){if(!this.isValid)return this;return Zn(this,Qn(this,Tn.fromDurationLike(t).negate()))}startOf(t,{useLocaleWeeks:e=!1}={}){if(!this.isValid)return this;const n={},i=Tn.normalizeUnit(t);switch(i){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0}if("weeks"===i)if(e){const t=this.loc.getStartOfWeek(),{weekday:e}=this;ethis.valueOf(),o=On(r?this:t,r?t:this,s,i);var a;return r?o.negate():o}diffNow(t="milliseconds",e={}){return this.diff(fi.now(),t,e)}until(t){return this.isValid?Dn.fromDateTimes(this,t):this}hasSame(t,e,n){if(!this.isValid)return!1;const i=t.valueOf(),s=this.setZone(t.zone,{keepLocalTime:!0});return s.startOf(e,n)<=i&&i<=s.endOf(e,n)}equals(t){return this.isValid&&t.isValid&&this.valueOf()===t.valueOf()&&this.zone.equals(t.zone)&&this.loc.equals(t.loc)}toRelative(t={}){if(!this.isValid)return null;const e=t.base||fi.fromObject({},{zone:this.zone}),n=t.padding?thist.valueOf()),Math.min)}static max(...t){if(!t.every(fi.isDateTime))throw new c("max requires all arguments be DateTimes");return Vt(t,(t=>t.valueOf()),Math.max)}static fromFormatExplain(t,e,n={}){const{locale:i=null,numberingSystem:s=null}=n;return $n(et.fromOpts({locale:i,numberingSystem:s,defaultToEN:!0}),t,e)}static fromStringExplain(t,e,n={}){return fi.fromFormatExplain(t,e,n)}static buildFormatParser(t,e={}){const{locale:n=null,numberingSystem:i=null}=e,s=et.fromOpts({locale:n,numberingSystem:i,defaultToEN:!0});return new Vn(s,t)}static fromFormatParser(t,e,n={}){if(Pt(t)||Pt(e))throw new c("fromFormatParser requires an input string and a format parser");const{locale:i=null,numberingSystem:s=null}=n,r=et.fromOpts({locale:i,numberingSystem:s,defaultToEN:!0});if(!r.equals(e.locale))throw new c(`fromFormatParser called with a locale of ${r}, but the format parser was created for ${e.locale}`);const{result:o,zone:a,specificOffset:l,invalidReason:u}=e.explainFromTokens(t);return u?fi.invalid(u):Xn(o,a,n,`format ${e.format}`,t,l)}static get DATE_SHORT(){return m}static get DATE_MED(){return f}static get DATE_MED_WITH_WEEKDAY(){return g}static get DATE_FULL(){return v}static get DATE_HUGE(){return y}static get TIME_SIMPLE(){return b}static get TIME_WITH_SECONDS(){return _}static get TIME_WITH_SHORT_OFFSET(){return w}static get TIME_WITH_LONG_OFFSET(){return k}static get TIME_24_SIMPLE(){return T}static get TIME_24_WITH_SECONDS(){return E}static get TIME_24_WITH_SHORT_OFFSET(){return D}static get TIME_24_WITH_LONG_OFFSET(){return x}static get DATETIME_SHORT(){return S}static get DATETIME_SHORT_WITH_SECONDS(){return O}static get DATETIME_MED(){return L}static get DATETIME_MED_WITH_SECONDS(){return C}static get DATETIME_MED_WITH_WEEKDAY(){return M}static get DATETIME_FULL(){return A}static get DATETIME_FULL_WITH_SECONDS(){return I}static get DATETIME_HUGE(){return N}static get DATETIME_HUGE_WITH_SECONDS(){return P}}function gi(t){if(fi.isDateTime(t))return t;if(t&&t.valueOf&&Ft(t.valueOf()))return fi.fromJSDate(t);if(t&&"object"==typeof t)return fi.fromObject(t);throw new c(`Unknown datetime argument: ${t}, of type ${typeof t}`)}}},function(t){var e;e=4028,t(t.s=e)}]); \ No newline at end of file diff --git a/public/build/app.9662939e.js b/public/build/app.9662939e.js new file mode 100644 index 000000000..397e9e5b8 --- /dev/null +++ b/public/build/app.9662939e.js @@ -0,0 +1,2 @@ +/*! For license information please see app.9662939e.js.LICENSE.txt */ +(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[524],{424:function(t){window,t.exports=function(t){var e={};function n(i){if(e[i])return e[i].exports;var s=e[i]={i:i,l:!1,exports:{}};return t[i].call(s.exports,s,s.exports,n),s.l=!0,s.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var s in t)n.d(i,s,function(e){return t[e]}.bind(null,s));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=4)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(e,n,i){void 0===e&&(e=null),void 0===n&&(n=null),void 0===i&&(i="en-US"),this.dateInstance="object"==typeof n&&null!==n?n.parse(e instanceof t?e.clone().toJSDate():e):"string"==typeof n?t.parseDateTime(e,n,i):e?t.parseDateTime(e):t.parseDateTime(new Date),this.lang=i}return t.parseDateTime=function(e,n,i){if(void 0===n&&(n="YYYY-MM-DD"),void 0===i&&(i="en-US"),!e)return new Date(NaN);if(e instanceof Date)return new Date(e);if(e instanceof t)return e.clone().toJSDate();if(/^-?\d{10,}$/.test(e))return t.getDateZeroTime(new Date(Number(e)));if("string"==typeof e){for(var s=[],r=null;null!=(r=t.regex.exec(n));)"\\"!==r[1]&&s.push(r);if(s.length){var o={year:null,month:null,shortMonth:null,longMonth:null,day:null,value:""};s[0].index>0&&(o.value+=".*?");for(var a=0,l=Object.entries(s);at.getTime()&&this.timestamp()=t.getTime()&&this.timestamp()t.getTime()&&this.timestamp()<=e.getTime();case"[]":return this.timestamp()>=t.getTime()&&this.timestamp()<=e.getTime()}},t.prototype.isBefore=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return t.getTime()>this.getTime();case"day":case"days":return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()>new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime();case"month":case"months":return new Date(t.getFullYear(),t.getMonth(),1).getTime()>new Date(this.getFullYear(),this.getMonth(),1).getTime();case"year":case"years":return t.getFullYear()>this.getFullYear()}throw new Error("isBefore: Invalid unit!")},t.prototype.isSameOrBefore=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return t.getTime()>=this.getTime();case"day":case"days":return new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime()>=new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime();case"month":case"months":return new Date(t.getFullYear(),t.getMonth(),1).getTime()>=new Date(this.getFullYear(),this.getMonth(),1).getTime()}throw new Error("isSameOrBefore: Invalid unit!")},t.prototype.isAfter=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return this.getTime()>t.getTime();case"day":case"days":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()>new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case"month":case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime()>new Date(t.getFullYear(),t.getMonth(),1).getTime();case"year":case"years":return this.getFullYear()>t.getFullYear()}throw new Error("isAfter: Invalid unit!")},t.prototype.isSameOrAfter=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return this.getTime()>=t.getTime();case"day":case"days":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()>=new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case"month":case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime()>=new Date(t.getFullYear(),t.getMonth(),1).getTime()}throw new Error("isSameOrAfter: Invalid unit!")},t.prototype.isSame=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":return this.getTime()===t.getTime();case"day":case"days":return new Date(this.getFullYear(),this.getMonth(),this.getDate()).getTime()===new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime();case"month":case"months":return new Date(this.getFullYear(),this.getMonth(),1).getTime()===new Date(t.getFullYear(),t.getMonth(),1).getTime()}throw new Error("isSame: Invalid unit!")},t.prototype.add=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":this.setSeconds(this.getSeconds()+t);break;case"day":case"days":this.setDate(this.getDate()+t);break;case"month":case"months":this.setMonth(this.getMonth()+t)}return this},t.prototype.subtract=function(t,e){switch(void 0===e&&(e="seconds"),e){case"second":case"seconds":this.setSeconds(this.getSeconds()-t);break;case"day":case"days":this.setDate(this.getDate()-t);break;case"month":case"months":this.setMonth(this.getMonth()-t)}return this},t.prototype.diff=function(t,e){switch(void 0===e&&(e="seconds"),e){default:case"second":case"seconds":return this.getTime()-t.getTime();case"day":case"days":return Math.round((this.timestamp()-t.getTime())/864e5);case"month":case"months":}},t.prototype.format=function(e,n){if(void 0===n&&(n="en-US"),"object"==typeof e)return e.output(this.clone().toJSDate());for(var i="",s=[],r=null;null!=(r=t.regex.exec(e));)"\\"!==r[1]&&s.push(r);if(s.length){s[0].index>0&&(i+=e.substring(0,s[0].index));for(var o=0,a=Object.entries(s);o1&&n.isAfter(e)&&n.setMonth(n.getMonth()-(this.options.numberOfMonths-1)),this.calendars[0]=n.clone()):(e.setDate(1),this.calendars[0]=e.clone())}},e.prototype.bindEvents=function(){document.addEventListener("click",this.onClick.bind(this),!0),this.ui=document.createElement("div"),this.ui.className=l.litepicker,this.ui.style.display="none",this.ui.addEventListener("mouseenter",this.onMouseEnter.bind(this),!0),this.ui.addEventListener("mouseleave",this.onMouseLeave.bind(this),!1),this.options.autoRefresh?(this.options.element instanceof HTMLElement&&this.options.element.addEventListener("keyup",this.onInput.bind(this),!0),this.options.elementEnd instanceof HTMLElement&&this.options.elementEnd.addEventListener("keyup",this.onInput.bind(this),!0)):(this.options.element instanceof HTMLElement&&this.options.element.addEventListener("change",this.onInput.bind(this),!0),this.options.elementEnd instanceof HTMLElement&&this.options.elementEnd.addEventListener("change",this.onInput.bind(this),!0)),this.options.parentEl?this.options.parentEl instanceof HTMLElement?this.options.parentEl.appendChild(this.ui):document.querySelector(this.options.parentEl).appendChild(this.ui):this.options.inlineMode?this.options.element instanceof HTMLInputElement?this.options.element.parentNode.appendChild(this.ui):this.options.element.appendChild(this.ui):document.body.appendChild(this.ui),this.updateInput(),this.init(),"function"==typeof this.options.setup&&this.options.setup.call(this,this),this.render(),this.options.inlineMode&&this.show()},e.prototype.updateInput=function(){if(this.options.element instanceof HTMLInputElement){var t=this.options.startDate,e=this.options.endDate;if(this.options.singleMode&&t)this.options.element.value=t.format(this.options.format,this.options.lang);else if(!this.options.singleMode&&t&&e){var n=t.format(this.options.format,this.options.lang),i=e.format(this.options.format,this.options.lang);this.options.elementEnd instanceof HTMLInputElement?(this.options.element.value=n,this.options.elementEnd.value=i):this.options.element.value=""+n+this.options.delimiter+i}t||e||(this.options.element.value="",this.options.elementEnd instanceof HTMLInputElement&&(this.options.elementEnd.value=""))}},e.prototype.isSamePicker=function(t){return t.closest("."+l.litepicker)===this.ui},e.prototype.shouldShown=function(t){return!t.disabled&&(t===this.options.element||this.options.elementEnd&&t===this.options.elementEnd)},e.prototype.shouldResetDatePicked=function(){return this.options.singleMode||2===this.datePicked.length},e.prototype.shouldSwapDatePicked=function(){return 2===this.datePicked.length&&this.datePicked[0].getTime()>this.datePicked[1].getTime()},e.prototype.shouldCheckLockDays=function(){return this.options.disallowLockDaysInRange&&2===this.datePicked.length},e.prototype.onClick=function(t){var e=t.target;if(t.target.shadowRoot&&(e=t.composedPath()[0]),e&&this.ui)if(this.shouldShown(e))this.show(e);else if(e.closest("."+l.litepicker)||!this.isShowning()){if(this.isSamePicker(e))if(this.emit("before:click",e),this.preventClick)this.preventClick=!1;else{if(e.classList.contains(l.dayItem)){if(t.preventDefault(),e.classList.contains(l.isLocked))return;if(this.shouldResetDatePicked()&&(this.datePicked.length=0),this.datePicked[this.datePicked.length]=new a.DateTime(e.dataset.time),this.shouldSwapDatePicked()){var n=this.datePicked[1].clone();this.datePicked[1]=this.datePicked[0].clone(),this.datePicked[0]=n.clone()}return this.shouldCheckLockDays()&&c.rangeIsLocked(this.datePicked,this.options)&&(this.emit("error:range",this.datePicked),this.datePicked.length=0),this.render(),this.emit.apply(this,r(["preselect"],r(this.datePicked).map((function(t){return t.clone()})))),void(this.options.autoApply&&(this.options.singleMode&&this.datePicked.length?(this.setDate(this.datePicked[0]),this.hide()):this.options.singleMode||2!==this.datePicked.length||(this.setDateRange(this.datePicked[0],this.datePicked[1]),this.hide())))}if(e.classList.contains(l.buttonPreviousMonth)){t.preventDefault();var i=0,s=this.options.switchingMonths||this.options.numberOfMonths;if(this.options.splitView){var o=e.closest("."+l.monthItem);i=c.findNestedMonthItem(o),s=1}return this.calendars[i].setMonth(this.calendars[i].getMonth()-s),this.gotoDate(this.calendars[i],i),void this.emit("change:month",this.calendars[i],i)}if(e.classList.contains(l.buttonNextMonth))return t.preventDefault(),i=0,s=this.options.switchingMonths||this.options.numberOfMonths,this.options.splitView&&(o=e.closest("."+l.monthItem),i=c.findNestedMonthItem(o),s=1),this.calendars[i].setMonth(this.calendars[i].getMonth()+s),this.gotoDate(this.calendars[i],i),void this.emit("change:month",this.calendars[i],i);e.classList.contains(l.buttonCancel)&&(t.preventDefault(),this.hide(),this.emit("button:cancel")),e.classList.contains(l.buttonApply)&&(t.preventDefault(),this.options.singleMode&&this.datePicked.length?this.setDate(this.datePicked[0]):this.options.singleMode||2!==this.datePicked.length||this.setDateRange(this.datePicked[0],this.datePicked[1]),this.hide(),this.emit("button:apply",this.options.startDate,this.options.endDate))}}else this.hide()},e.prototype.showTooltip=function(t,e){var n=this.ui.querySelector("."+l.containerTooltip);n.style.visibility="visible",n.innerHTML=e;var i=this.ui.getBoundingClientRect(),s=n.getBoundingClientRect(),r=t.getBoundingClientRect(),o=r.top,a=r.left;if(this.options.inlineMode&&this.options.parentEl){var c=this.ui.parentNode.getBoundingClientRect();o-=c.top,a-=c.left}else o-=i.top,a-=i.left;o-=s.height,a-=s.width/2,a+=r.width/2,n.style.top=o+"px",n.style.left=a+"px",this.emit("tooltip",n,t)},e.prototype.hideTooltip=function(){this.ui.querySelector("."+l.containerTooltip).style.visibility="hidden"},e.prototype.shouldAllowMouseEnter=function(t){return!this.options.singleMode&&!t.classList.contains(l.isLocked)},e.prototype.shouldAllowRepick=function(){return this.options.elementEnd&&this.options.allowRepick&&this.options.startDate&&this.options.endDate},e.prototype.isDayItem=function(t){return t.classList.contains(l.dayItem)},e.prototype.onMouseEnter=function(t){var e=this,n=t.target;if(this.isDayItem(n)&&this.shouldAllowMouseEnter(n)){if(this.shouldAllowRepick()&&(this.triggerElement===this.options.element?this.datePicked[0]=this.options.endDate.clone():this.triggerElement===this.options.elementEnd&&(this.datePicked[0]=this.options.startDate.clone())),1!==this.datePicked.length)return;var i=this.ui.querySelector("."+l.dayItem+'[data-time="'+this.datePicked[0].getTime()+'"]'),s=this.datePicked[0].clone(),r=new a.DateTime(n.dataset.time),o=!1;if(s.getTime()>r.getTime()){var c=s.clone();s=r.clone(),r=c.clone(),o=!0}if(Array.prototype.slice.call(this.ui.querySelectorAll("."+l.dayItem)).forEach((function(t){var n=new a.DateTime(t.dataset.time),i=e.renderDay(n);n.isBetween(s,r)&&i.classList.add(l.isInRange),t.className=i.className})),n.classList.add(l.isEndDate),o?(i&&i.classList.add(l.isFlipped),n.classList.add(l.isFlipped)):(i&&i.classList.remove(l.isFlipped),n.classList.remove(l.isFlipped)),this.options.showTooltip){var u=r.diff(s,"day")+1;if("function"==typeof this.options.tooltipNumber&&(u=this.options.tooltipNumber.call(this,u)),u>0){var d=this.pluralSelector(u),h=u+" "+(this.options.tooltipText[d]?this.options.tooltipText[d]:"["+d+"]");this.showTooltip(n,h);var p=window.navigator.userAgent,m=/(iphone|ipad)/i.test(p),f=/OS 1([0-2])/i.test(p);m&&f&&n.dispatchEvent(new Event("click"))}else this.hideTooltip()}}},e.prototype.onMouseLeave=function(t){t.target,this.options.allowRepick&&(!this.options.allowRepick||this.options.startDate||this.options.endDate)&&(this.datePicked.length=0,this.render())},e.prototype.onInput=function(t){var e=this.parseInput(),n=e[0],i=e[1],s=this.options.format;if(this.options.elementEnd?n instanceof a.DateTime&&i instanceof a.DateTime&&n.format(s)===this.options.element.value&&i.format(s)===this.options.elementEnd.value:this.options.singleMode?n instanceof a.DateTime&&n.format(s)===this.options.element.value:n instanceof a.DateTime&&i instanceof a.DateTime&&""+n.format(s)+this.options.delimiter+i.format(s)===this.options.element.value){if(i&&n.getTime()>i.getTime()){var r=n.clone();n=i.clone(),i=r.clone()}this.options.startDate=new a.DateTime(n,this.options.format,this.options.lang),i&&(this.options.endDate=new a.DateTime(i,this.options.format,this.options.lang)),this.updateInput(),this.render();var o=n.clone(),l=0;(this.options.elementEnd?n.format(s)===t.target.value:t.target.value.startsWith(n.format(s)))||(o=i.clone(),l=this.options.numberOfMonths-1),this.emit("selected",this.getStartDate(),this.getEndDate()),this.gotoDate(o,l)}},e}(o.Calendar);e.Litepicker=u},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findNestedMonthItem=function(t){for(var e=t.parentNode.childNodes,n=0;ny&&((p=document.createElement("option")).value=String(t.getFullYear()),p.text=String(t.getFullYear()),p.selected=!0,p.disabled=!0,g.appendChild(p)),h=y;h>=v;h-=1){p=document.createElement("option");var b=new o.DateTime(new Date(h,0,1,0,0,0));p.value=String(h),p.text=String(h),p.disabled=this.options.minDate&&b.isBefore(new o.DateTime(this.options.minDate),"year")||this.options.maxDate&&b.isAfter(new o.DateTime(this.options.maxDate),"year"),p.selected=t.getFullYear()===h,g.appendChild(p)}if(t.getFullYear()W
");for(var E=1;E<=7;E+=1){var x=3+this.options.firstDay+E,S=document.createElement("div");S.innerHTML=this.weekdayName(x),S.title=this.weekdayName(x,"long"),D.appendChild(S)}var O=document.createElement("div");O.className=a.containerDays;var L=this.calcSkipDays(i);this.options.showWeekNumbers&&L&&O.appendChild(this.renderWeekNumber(i));for(var C=0;C1&&1===this.datePicked.length){var s=this.options.minDays-1,r=this.datePicked[0].clone().subtract(s,"day"),c=this.datePicked[0].clone().add(s,"day");t.isBetween(r,this.datePicked[0],"(]")&&e.classList.add(a.isLocked),t.isBetween(this.datePicked[0],c,"[)")&&e.classList.add(a.isLocked)}if(this.options.maxDays&&1===this.datePicked.length){var u=this.options.maxDays;r=this.datePicked[0].clone().subtract(u,"day"),c=this.datePicked[0].clone().add(u,"day"),t.isSameOrBefore(r)&&e.classList.add(a.isLocked),t.isSameOrAfter(c)&&e.classList.add(a.isLocked)}return this.options.selectForward&&1===this.datePicked.length&&t.isBefore(this.datePicked[0])&&e.classList.add(a.isLocked),this.options.selectBackward&&1===this.datePicked.length&&t.isAfter(this.datePicked[0])&&e.classList.add(a.isLocked),l.dateIsLocked(t,this.options,this.datePicked)&&e.classList.add(a.isLocked),this.options.highlightedDays.length&&this.options.highlightedDays.filter((function(e){return e instanceof Array?t.isBetween(e[0],e[1],"[]"):e.isSame(t,"day")})).length&&e.classList.add(a.isHighlighted),e.tabIndex=e.classList.contains("is-locked")?-1:0,this.emit("render:day",e,t),e},e.prototype.renderFooter=function(){var t=document.createElement("div");if(t.className=a.containerFooter,this.options.footerHTML?t.innerHTML=this.options.footerHTML:t.innerHTML='\n \n \n \n ",this.options.singleMode){if(1===this.datePicked.length){var e=this.datePicked[0].format(this.options.format,this.options.lang);t.querySelector("."+a.previewDateRange).innerHTML=e}}else if(1===this.datePicked.length&&t.querySelector("."+a.buttonApply).setAttribute("disabled",""),2===this.datePicked.length){e=this.datePicked[0].format(this.options.format,this.options.lang);var n=this.datePicked[1].format(this.options.format,this.options.lang);t.querySelector("."+a.previewDateRange).innerHTML=""+e+this.options.delimiter+n}return this.emit("render:footer",t),t},e.prototype.renderWeekNumber=function(t){var e=document.createElement("div"),n=t.getWeek(this.options.firstDay);return e.className=a.weekNumber,e.innerHTML=53===n&&0===t.getMonth()?"53 / 1":n,e},e.prototype.renderTooltip=function(){var t=document.createElement("div");return t.className=a.containerTooltip,t},e.prototype.weekdayName=function(t,e){return void 0===e&&(e="short"),new Date(1970,0,t,12,0,0,0).toLocaleString(this.options.lang,{weekday:e})},e.prototype.calcSkipDays=function(t){var e=t.getDay()-this.options.firstDay;return e<0&&(e+=7),e},e}(r.LPCore);e.Calendar=c},function(t,e,n){"use strict";var i,s=this&&this.__extends||(i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)},function(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}),r=this&&this.__assign||function(){return(r=Object.assign||function(t){for(var e,n=1,i=arguments.length;n',nextMonth:'',reset:'\n \n \n '},tooltipText:{one:"day",other:"days"}},n.options=r(r({},n.options),e.element.dataset),Object.keys(n.options).forEach((function(t){"true"!==n.options[t]&&"false"!==n.options[t]||(n.options[t]="true"===n.options[t])}));var i=r(r({},n.options.dropdowns),e.dropdowns),s=r(r({},n.options.buttonText),e.buttonText),o=r(r({},n.options.tooltipText),e.tooltipText);n.options=r(r({},n.options),e),n.options.dropdowns=r({},i),n.options.buttonText=r({},s),n.options.tooltipText=r({},o),n.options.elementEnd||(n.options.allowRepick=!1),n.options.lockDays.length&&(n.options.lockDays=a.DateTime.convertArray(n.options.lockDays,n.options.lockDaysFormat)),n.options.highlightedDays.length&&(n.options.highlightedDays=a.DateTime.convertArray(n.options.highlightedDays,n.options.highlightedDaysFormat));var l=n.parseInput(),c=l[0],u=l[1];n.options.startDate&&(n.options.singleMode||n.options.endDate)&&(c=new a.DateTime(n.options.startDate,n.options.format,n.options.lang)),c&&n.options.endDate&&(u=new a.DateTime(n.options.endDate,n.options.format,n.options.lang)),c instanceof a.DateTime&&!isNaN(c.getTime())&&(n.options.startDate=c),n.options.startDate&&u instanceof a.DateTime&&!isNaN(u.getTime())&&(n.options.endDate=u),!n.options.singleMode||n.options.startDate instanceof a.DateTime||(n.options.startDate=null),n.options.singleMode||n.options.startDate instanceof a.DateTime&&n.options.endDate instanceof a.DateTime||(n.options.startDate=null,n.options.endDate=null);for(var d=0;dwindow.innerHeight,c=e.top+r-n.height>=n.height;l&&c&&(o=e.top+r-n.height)}if(/left|right/.test(i[0])||i[1]&&"auto"!==i[1]&&/left|right/.test(i[1]))a=/left|right/.test(i[0])?e[i[0]]+s:e[i[1]]+s,"right"!==i[0]&&"right"!==i[1]||(a-=n.width);else{a=e.left+s,l=e.left+n.width>window.innerWidth;var u=e.right+s-n.width>=0;l&&u&&(a=e.right+s-n.width)}return{left:a,top:o}},e}(o.EventEmitter);e.LPCore=c},function(t,e,n){"use strict";var i,s="object"==typeof Reflect?Reflect:null,r=s&&"function"==typeof s.apply?s.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};i=s&&"function"==typeof s.ownKeys?s.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var o=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var l=10;function c(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function u(t,e,n,i){var s,r,o,a;if("function"!=typeof n)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof n);if(void 0===(r=t._events)?(r=t._events=Object.create(null),t._eventsCount=0):(void 0!==r.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),r=t._events),o=r[e]),void 0===o)o=r[e]=n,++t._eventsCount;else if("function"==typeof o?o=r[e]=i?[n,o]:[o,n]:i?o.unshift(n):o.push(n),(s=c(t))>0&&o.length>s&&!o.warned){o.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+o.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=o.length,a=l,console&&console.warn&&console.warn(a)}return t}function d(){for(var t=[],e=0;e0&&(o=e[0]),o instanceof Error)throw o;var a=new Error("Unhandled error."+(o?" ("+o.message+")":""));throw a.context=o,a}var l=s[t];if(void 0===l)return!1;if("function"==typeof l)r(l,this,e);else{var c=l.length,u=f(l,c);for(n=0;n=0;r--)if(n[r]===e||n[r].listener===e){o=n[r].listener,s=r;break}if(s<0)return this;0===s?n.shift():function(t,e){for(;e+1=0;i--)this.removeListener(t,e[i]);return this},a.prototype.listeners=function(t){return p(this,t,!0)},a.prototype.rawListeners=function(t){return p(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},a.prototype.listenerCount=m,a.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},function(t,e,n){(e=n(9)(!1)).push([t.i,':root{--litepicker-container-months-color-bg: #fff;--litepicker-container-months-box-shadow-color: #ddd;--litepicker-footer-color-bg: #fafafa;--litepicker-footer-box-shadow-color: #ddd;--litepicker-tooltip-color-bg: #fff;--litepicker-month-header-color: #333;--litepicker-button-prev-month-color: #9e9e9e;--litepicker-button-next-month-color: #9e9e9e;--litepicker-button-prev-month-color-hover: #2196f3;--litepicker-button-next-month-color-hover: #2196f3;--litepicker-month-width: calc(var(--litepicker-day-width) * 7);--litepicker-month-weekday-color: #9e9e9e;--litepicker-month-week-number-color: #9e9e9e;--litepicker-day-width: 38px;--litepicker-day-color: #333;--litepicker-day-color-hover: #2196f3;--litepicker-is-today-color: #f44336;--litepicker-is-in-range-color: #bbdefb;--litepicker-is-locked-color: #9e9e9e;--litepicker-is-start-color: #fff;--litepicker-is-start-color-bg: #2196f3;--litepicker-is-end-color: #fff;--litepicker-is-end-color-bg: #2196f3;--litepicker-button-cancel-color: #fff;--litepicker-button-cancel-color-bg: #9e9e9e;--litepicker-button-apply-color: #fff;--litepicker-button-apply-color-bg: #2196f3;--litepicker-button-reset-color: #909090;--litepicker-button-reset-color-hover: #2196f3;--litepicker-highlighted-day-color: #333;--litepicker-highlighted-day-color-bg: #ffeb3b}.show-week-numbers{--litepicker-month-width: calc(var(--litepicker-day-width) * 8)}.litepicker{font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;font-size:0.8em;display:none}.litepicker button{border:none;background:none}.litepicker .container__main{display:-webkit-box;display:-ms-flexbox;display:flex}.litepicker .container__months{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;background-color:var(--litepicker-container-months-color-bg);border-radius:5px;-webkit-box-shadow:0 0 5px var(--litepicker-container-months-box-shadow-color);box-shadow:0 0 5px var(--litepicker-container-months-box-shadow-color);width:calc(var(--litepicker-month-width) + 10px);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months.columns-2{width:calc((var(--litepicker-month-width) * 2) + 20px)}.litepicker .container__months.columns-3{width:calc((var(--litepicker-month-width) * 3) + 30px)}.litepicker .container__months.columns-4{width:calc((var(--litepicker-month-width) * 4) + 40px)}.litepicker .container__months.split-view .month-item-header .button-previous-month,.litepicker .container__months.split-view .month-item-header .button-next-month{visibility:visible}.litepicker .container__months .month-item{padding:5px;width:var(--litepicker-month-width);-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__months .month-item-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;font-weight:500;padding:10px 5px;text-align:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:var(--litepicker-month-header-color)}.litepicker .container__months .month-item-header div{-webkit-box-flex:1;-ms-flex:1;flex:1}.litepicker .container__months .month-item-header div>.month-item-name{margin-right:5px}.litepicker .container__months .month-item-header div>.month-item-year{padding:0}.litepicker .container__months .month-item-header .reset-button{color:var(--litepicker-button-reset-color)}.litepicker .container__months .month-item-header .reset-button>svg{fill:var(--litepicker-button-reset-color)}.litepicker .container__months .month-item-header .reset-button *{pointer-events:none}.litepicker .container__months .month-item-header .reset-button:hover{color:var(--litepicker-button-reset-color-hover)}.litepicker .container__months .month-item-header .reset-button:hover>svg{fill:var(--litepicker-button-reset-color-hover)}.litepicker .container__months .month-item-header .button-previous-month,.litepicker .container__months .month-item-header .button-next-month{visibility:hidden;text-decoration:none;padding:3px 5px;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__months .month-item-header .button-previous-month *,.litepicker .container__months .month-item-header .button-next-month *{pointer-events:none}.litepicker .container__months .month-item-header .button-previous-month{color:var(--litepicker-button-prev-month-color)}.litepicker .container__months .month-item-header .button-previous-month>svg,.litepicker .container__months .month-item-header .button-previous-month>img{fill:var(--litepicker-button-prev-month-color)}.litepicker .container__months .month-item-header .button-previous-month:hover{color:var(--litepicker-button-prev-month-color-hover)}.litepicker .container__months .month-item-header .button-previous-month:hover>svg{fill:var(--litepicker-button-prev-month-color-hover)}.litepicker .container__months .month-item-header .button-next-month{color:var(--litepicker-button-next-month-color)}.litepicker .container__months .month-item-header .button-next-month>svg,.litepicker .container__months .month-item-header .button-next-month>img{fill:var(--litepicker-button-next-month-color)}.litepicker .container__months .month-item-header .button-next-month:hover{color:var(--litepicker-button-next-month-color-hover)}.litepicker .container__months .month-item-header .button-next-month:hover>svg{fill:var(--litepicker-button-next-month-color-hover)}.litepicker .container__months .month-item-weekdays-row{display:-webkit-box;display:-ms-flexbox;display:flex;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;color:var(--litepicker-month-weekday-color)}.litepicker .container__months .month-item-weekdays-row>div{padding:5px 0;font-size:85%;-webkit-box-flex:1;-ms-flex:1;flex:1;width:var(--litepicker-day-width);text-align:center}.litepicker .container__months .month-item:first-child .button-previous-month{visibility:visible}.litepicker .container__months .month-item:last-child .button-next-month{visibility:visible}.litepicker .container__months .month-item.no-previous-month .button-previous-month{visibility:hidden}.litepicker .container__months .month-item.no-next-month .button-next-month{visibility:hidden}.litepicker .container__days{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;justify-self:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:center;-webkit-box-sizing:content-box;box-sizing:content-box}.litepicker .container__days>div,.litepicker .container__days>a{padding:5px 0;width:var(--litepicker-day-width)}.litepicker .container__days .day-item{color:var(--litepicker-day-color);text-align:center;text-decoration:none;border-radius:3px;-webkit-transition:color 0.3s, border 0.3s;transition:color 0.3s, border 0.3s;cursor:default}.litepicker .container__days .day-item:hover{color:var(--litepicker-day-color-hover);-webkit-box-shadow:inset 0 0 0 1px var(--litepicker-day-color-hover);box-shadow:inset 0 0 0 1px var(--litepicker-day-color-hover)}.litepicker .container__days .day-item.is-today{color:var(--litepicker-is-today-color)}.litepicker .container__days .day-item.is-locked{color:var(--litepicker-is-locked-color)}.litepicker .container__days .day-item.is-locked:hover{color:var(--litepicker-is-locked-color);-webkit-box-shadow:none;box-shadow:none;cursor:default}.litepicker .container__days .day-item.is-in-range{background-color:var(--litepicker-is-in-range-color);border-radius:0}.litepicker .container__days .day-item.is-start-date{color:var(--litepicker-is-start-color);background-color:var(--litepicker-is-start-color-bg);border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-flipped{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date{color:var(--litepicker-is-end-color);background-color:var(--litepicker-is-end-color-bg);border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-end-date.is-flipped{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:0;border-bottom-right-radius:0}.litepicker .container__days .day-item.is-start-date.is-end-date{border-top-left-radius:5px;border-bottom-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px}.litepicker .container__days .day-item.is-highlighted{color:var(--litepicker-highlighted-day-color);background-color:var(--litepicker-highlighted-day-color-bg)}.litepicker .container__days .week-number{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:var(--litepicker-month-week-number-color);font-size:85%}.litepicker .container__footer{text-align:right;padding:10px 5px;margin:0 5px;background-color:var(--litepicker-footer-color-bg);-webkit-box-shadow:inset 0px 3px 3px 0px var(--litepicker-footer-box-shadow-color);box-shadow:inset 0px 3px 3px 0px var(--litepicker-footer-box-shadow-color);border-bottom-left-radius:5px;border-bottom-right-radius:5px}.litepicker .container__footer .preview-date-range{margin-right:10px;font-size:90%}.litepicker .container__footer .button-cancel{background-color:var(--litepicker-button-cancel-color-bg);color:var(--litepicker-button-cancel-color);border:0;padding:3px 7px 4px;border-radius:3px}.litepicker .container__footer .button-cancel *{pointer-events:none}.litepicker .container__footer .button-apply{background-color:var(--litepicker-button-apply-color-bg);color:var(--litepicker-button-apply-color);border:0;padding:3px 7px 4px;border-radius:3px;margin-left:10px;margin-right:10px}.litepicker .container__footer .button-apply:disabled{opacity:0.7}.litepicker .container__footer .button-apply *{pointer-events:none}.litepicker .container__tooltip{position:absolute;margin-top:-4px;padding:4px 8px;border-radius:4px;background-color:var(--litepicker-tooltip-color-bg);-webkit-box-shadow:0 1px 3px rgba(0,0,0,0.25);box-shadow:0 1px 3px rgba(0,0,0,0.25);white-space:nowrap;font-size:11px;pointer-events:none;visibility:hidden}.litepicker .container__tooltip:before{position:absolute;bottom:-5px;left:calc(50% - 5px);border-top:5px solid rgba(0,0,0,0.12);border-right:5px solid transparent;border-left:5px solid transparent;content:""}.litepicker .container__tooltip:after{position:absolute;bottom:-4px;left:calc(50% - 4px);border-top:4px solid var(--litepicker-tooltip-color-bg);border-right:4px solid transparent;border-left:4px solid transparent;content:""}\n',""]),e.locals={showWeekNumbers:"show-week-numbers",litepicker:"litepicker",containerMain:"container__main",containerMonths:"container__months",columns2:"columns-2",columns3:"columns-3",columns4:"columns-4",splitView:"split-view",monthItemHeader:"month-item-header",buttonPreviousMonth:"button-previous-month",buttonNextMonth:"button-next-month",monthItem:"month-item",monthItemName:"month-item-name",monthItemYear:"month-item-year",resetButton:"reset-button",monthItemWeekdaysRow:"month-item-weekdays-row",noPreviousMonth:"no-previous-month",noNextMonth:"no-next-month",containerDays:"container__days",dayItem:"day-item",isToday:"is-today",isLocked:"is-locked",isInRange:"is-in-range",isStartDate:"is-start-date",isFlipped:"is-flipped",isEndDate:"is-end-date",isHighlighted:"is-highlighted",weekNumber:"week-number",containerFooter:"container__footer",previewDateRange:"preview-date-range",buttonCancel:"button-cancel",buttonApply:"button-apply",containerTooltip:"container__tooltip"},t.exports=e},function(t,e,n){"use strict";t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var n=function(t,e){var n,i,s,r=t[1]||"",o=t[3];if(!o)return r;if(e&&"function"==typeof btoa){var a=(n=o,i=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),s="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(i),"/*# ".concat(s," */")),l=o.sources.map((function(t){return"/*# sourceURL=".concat(o.sourceRoot||"").concat(t," */")}));return[r].concat(l).concat([a]).join("\n")}return[r].join("\n")}(e,t);return e[2]?"@media ".concat(e[2]," {").concat(n,"}"):n})).join("")},e.i=function(t,n,i){"string"==typeof t&&(t=[[null,t,""]]);var s={};if(i)for(var r=0;rthis.options.endDate.getTime()&&(this.options.endDate=this.options.startDate.clone(),this.options.startDate=new s.DateTime(t,this.options.format,this.options.lang)),this.updateInput())},r.Litepicker.prototype.setDateRange=function(t,e,n){void 0===n&&(n=!1),this.triggerElement=void 0;var i=new s.DateTime(t,this.options.format,this.options.lang),r=new s.DateTime(e,this.options.format,this.options.lang);(this.options.disallowLockDaysInRange?o.rangeIsLocked([i,r],this.options):o.dateIsLocked(i,this.options,[i,r])||o.dateIsLocked(r,this.options,[i,r]))&&!n?this.emit("error:range",[i,r]):(this.setStartDate(i),this.setEndDate(r),this.options.inlineMode&&this.render(),this.updateInput(),this.emit("selected",this.getStartDate(),this.getEndDate()))},r.Litepicker.prototype.gotoDate=function(t,e){void 0===e&&(e=0);var n=new s.DateTime(t);n.setDate(1),this.calendars[e]=n.clone(),this.render()},r.Litepicker.prototype.setLockDays=function(t){this.options.lockDays=s.DateTime.convertArray(t,this.options.lockDaysFormat),this.render()},r.Litepicker.prototype.setHighlightedDays=function(t){this.options.highlightedDays=s.DateTime.convertArray(t,this.options.highlightedDaysFormat),this.render()},r.Litepicker.prototype.setOptions=function(t){delete t.element,delete t.elementEnd,delete t.parentEl,t.startDate&&(t.startDate=new s.DateTime(t.startDate,this.options.format,this.options.lang)),t.endDate&&(t.endDate=new s.DateTime(t.endDate,this.options.format,this.options.lang));var e=i(i({},this.options.dropdowns),t.dropdowns),n=i(i({},this.options.buttonText),t.buttonText),r=i(i({},this.options.tooltipText),t.tooltipText);this.options=i(i({},this.options),t),this.options.dropdowns=i({},e),this.options.buttonText=i({},n),this.options.tooltipText=i({},r),!this.options.singleMode||this.options.startDate instanceof s.DateTime||(this.options.startDate=null,this.options.endDate=null),this.options.singleMode||this.options.startDate instanceof s.DateTime&&this.options.endDate instanceof s.DateTime||(this.options.startDate=null,this.options.endDate=null);for(var o=0;o
'),null!==t.url){if(n+='"}this.createFromClickEvent(t,n)}createFromClickEvent(t,e){const n=this.getContextMenuElement();n.classList.contains("action-dropdown")||n.classList.add("action-dropdown"),n.innerHTML=e,n.style.position="fixed",n.style.top=t.clientY+"px",n.style.left=t.clientX+"px";const i=t=>{t.target.classList.contains("dropdown-toggle")||t.target.classList.contains("dropdown-divider")||(n.classList.remove("d-block"),n.classList.contains("d-none")||n.classList.add("d-none"),n.removeEventListener("click",i),document.removeEventListener("click",i))};n.addEventListener("click",i),document.addEventListener("click",i),n.classList.remove("d-none"),n.classList.contains("d-block")||n.classList.add("d-block")}static createForDataTable(t){[].slice.call(document.querySelectorAll(t)).map((t=>{null!==t.querySelector("td.actions div.dropdown-menu")&&t.addEventListener("contextmenu",(e=>{let n=e.target;for(;null!==n;){const t=n.tagName.toUpperCase();if("TH"===t||"TABLE"===t||"BODY"===t)return;if("TR"===t)break;n=n.parentNode}if(null===n||!n.matches("table.dataTable tbody tr"))return;const s=n.querySelector("td.actions div.dropdown-menu");if(null===s)return;e.preventDefault();new i(t.dataset.contextMenu).createFromClickEvent(e,s.innerHTML)}))}))}}},4028:function(t,e,n){n(4975),n(4942),n.g.KimaiPaginatedBoxWidget=n(4100).A,n.g.KimaiReloadPageWidget=n(5170).A,n.g.KimaiColor=n(9997).A,n.g.KimaiStorage=n(5247).A},4100:function(t,e,n){"use strict";n.d(e,{A:function(){return s}});var i=n(2758);class s{constructor(t){this.selector=t;const e=document.querySelector(this.selector);if(void 0!==e.dataset.reload){this.events=e.dataset.reload.split(" ");const t=()=>{let t=null;t=void 0!==document.querySelector(this.selector).dataset.reloadHref?document.querySelector(this.selector).dataset.reloadHref:document.querySelector(this.selector+" ul.pagination li.active a").href,this.loadPage(t)};for(const e of this.events)document.addEventListener(e,t)}document.body.addEventListener("click",(t=>{let e=t.target;e.matches(this.selector+" a.pagination-link")||(e=e.parentNode),e.matches(this.selector+" a.pagination-link")&&(t.preventDefault(),this.loadPage(e.href))}))}static create(t){return new s(t)}loadPage(t){const e=this.selector;document.dispatchEvent(new CustomEvent("kimai.reloadContent",{detail:this.selector}));const n=()=>{document.dispatchEvent(new Event("kimai.reloadedContent"))};window.kimai.getPlugin("fetch").fetch(t).then((t=>{t.text().then((t=>{const s=document.createElement("div");s.innerHTML=t,document.querySelector(e).replaceWith(this._makeScriptExecutable(s.firstElementChild)),i.A.createForDataTable(e+" table.dataTable"),n()}))})).catch((()=>{window.kimai.getPlugin("alert").error("Failed loading selected page"),n()}))}_makeScriptExecutable(t){if(void 0!==t.tagName&&"SCRIPT"===t.tagName){const e=document.createElement("script");e.text=t.innerHTML,t.parentNode.replaceChild(e,t)}else for(const e of t.childNodes)this._makeScriptExecutable(e);return t}}},4942:function(t,e,n){"use strict";var i=n(8097);class s{constructor(t){this._translations=t}get(t){return this._translations[t]}has(t){return t in this._translations}}class r{constructor(t){this._configurations=t}get(t){return this._configurations[t]}has(t){return t in this._configurations}isRTL(){return"rtl"===this.get("direction")}getLanguage(){return this.get("locale").replace("_","-")}is24Hours(){return!!this.get("twentyFourHours")}getFirstDayOfWeek(t=!0){void 0===t&&(t=!0);let e=this.get("first_dow_iso");return t||(e%=7),e}}class o{init(){}getId(){return null}setContainer(t){if(!(t instanceof a))throw new Error("Plugin was given an invalid KimaiContainer");this._core=t}getContainer(){return this._core}getConfiguration(t){return this.getContainer().getConfiguration().get(t)}getConfigurations(){return this.getContainer().getConfiguration()}getDateUtils(){return this.getPlugin("date")}getPlugin(t){return this.getContainer().getPlugin(t)}getTranslation(){return this.getContainer().getTranslation()}translate(t){return this.getTranslation().get(t)}escape(t){return this.getPlugin("escape").escapeForHtml(t)}trigger(t,e=null){this.getPlugin("event").trigger(t,e)}fetch(t,e={}){return this.getPlugin("fetch").fetch(t,e)}fetchForm(t,e={},n=null){n=n||t.getAttribute("action");const i=t.getAttribute("method").toUpperCase();if("GET"===i){const i=this.getPlugin("form").convertFormDataToQueryString(t,{},!0);n=n+(n.includes("?")?"&":"?")+i,e={method:"GET",...e}}else"POST"===i&&(e={method:"POST",body:new FormData(t),...e});return this.fetch(n,e)}isMobile(){return Math.max(document.documentElement.clientWidth,window.innerWidth||0)<576}}class a{constructor(t,e){if(!(t instanceof r))throw new Error("Configuration needs to a KimaiConfiguration instance");if(this._configuration=t,!(e instanceof s))throw new Error("Configuration needs to a KimaiTranslation instance");this._translation=e,this._plugins=[]}registerPlugin(t){if(!(t instanceof o))throw new Error("Invalid plugin given, needs to be a KimaiPlugin instance");return t.setContainer(this),this._plugins.push(t),t}getPlugin(t){for(let e of this._plugins)if(null!==e.getId()&&e.getId()===t)return e;throw new Error("Unknown plugin: "+t)}getPlugins(){return this._plugins}getTranslation(){return this._translation}getConfiguration(){return this._configuration}getUser(){return this.getPlugin("user")}}class l extends o{constructor(t){super(),this.dataAttribute=t}getId(){return"datatable-column-visibility"}init(){let t=document.querySelector("["+this.dataAttribute+"]");if(null!==t){this._id=t.getAttribute(this.dataAttribute),this._modal=document.getElementById("modal_"+this._id),this._modal.addEventListener("show.bs.modal",(()=>{this._evaluateCheckboxes()})),this._modal.querySelector("button[data-type=save]").addEventListener("click",(()=>{this._saveVisibility()})),this._modal.querySelector("button[data-type=reset]").addEventListener("click",(t=>{this._resetVisibility(t.currentTarget)})),this._modal.querySelectorAll("input[name=datatable_profile]").forEach((t=>{t.addEventListener("change",(()=>{const e=this._modal.getElementsByTagName("form")[0];this.fetchForm(e,{},t.getAttribute("data-href")).then((()=>{localStorage.setItem("kimai_profile",t.getAttribute("value")),document.location.reload()})).catch((()=>{e.setAttribute("action",t.getAttribute("data-href")),e.submit()}))}))}));for(let t of this._modal.querySelectorAll("form input[type=checkbox]"))t.addEventListener("change",(()=>{this._changeVisibility(t.getAttribute("name"),t.checked)}))}}_evaluateCheckboxes(){const t=this._modal.getElementsByTagName("form")[0],e=document.getElementsByClassName("datatable_"+this._id)[0];for(let n of e.getElementsByTagName("th")){const e=n.getAttribute("data-field");if(null===e)continue;const i=t.querySelector("input[name="+e+"]");null!==i&&(i.checked="none"!==window.getComputedStyle(n).display)}}_saveVisibility(){const t=this._modal.getElementsByTagName("form")[0];this.fetchForm(t).then((()=>{document.location.reload()})).catch((()=>{t.submit()}))}_resetVisibility(t){const e=this._modal.getElementsByTagName("form")[0];this.fetchForm(e,{},t.getAttribute("formaction")).then((()=>{document.location.reload()})).catch((()=>{e.setAttribute("action",t.getAttribute("formaction")),e.submit()}))}_changeVisibility(t,e){for(const n of document.getElementsByClassName("datatable_"+this._id)){let i=null;for(let s of n.getElementsByClassName("col_"+t)){if(null===i){let t="-none",n="d-table-cell";e||(t="-table-cell",n="d-none"),i="",s.classList.forEach((function(e,n,s){-1===e.indexOf(t)&&(i+=" "+e)})),-1===i.indexOf(n)&&(i+=" "+n)}s.className=i}}}}var c=n(9336);class u extends o{init(){[].slice.call(document.querySelectorAll('[data-toggle="tooltip"]')).map((function(t){return new c.m_(t)}));[...document.querySelectorAll(".offcanvas")].map((t=>new c.go(t)));this.getContainer().getPlugin("form").activateForm("div.page-wrapper form"),this._registerModalAutofocus("#remote_form_modal"),this.overlay=null,document.addEventListener("kimai.reloadContent",(t=>{if(null!==this.overlay)return;let e="body";void 0!==t.detail&&null!==t.detail&&(e=t.detail);const n=document.createElement("div");n.innerHTML='
',this.overlay=n.firstElementChild,document.querySelector(e).append(this.overlay)})),document.addEventListener("kimai.reloadedContent",(()=>{null!==this.overlay&&(this.overlay.remove(),this.overlay=null)}))}_registerModalAutofocus(t){if(this.isMobile())return;const e=document.querySelector(t);null!==e&&e.addEventListener("shown.bs.modal",(()=>{const t=e.querySelector("form");let n=t.querySelectorAll("[autofocus]");n.length<1&&(n=t.querySelectorAll("input[type=text],input[type=date],textarea,select")),n.length>0&&n[0].focus()}))}}var d=n(424);n(8214);class h extends o{supportsForm(t){return!1}activateForm(t){}destroyForm(t){}}class p extends h{constructor(t){super(),this._selector=t}init(){window.disableLitepickerStyles=!0,this._pickers=[]}supportsForm(t){return!0}activateForm(t){const e=this.getConfigurations().getFirstDayOfWeek(!1),n=this.getConfigurations().getLanguage();let i={buttonText:{previousMonth:'',nextMonth:'',apply:this.translate("confirm"),cancel:this.translate("cancel")}};const s=[].slice.call(t.querySelectorAll(this._selector)).map((t=>(void 0===t.dataset.format&&console.log("Trying to bind litepicker to an element without data-format attribute"),void 0!==t.hasAttribute("min")&&(i={...i,minDate:t.getAttribute("min")}),void 0!==t.hasAttribute("max")&&(i={...i,maxDate:t.getAttribute("max")}),i={...i,format:t.dataset.format,showTooltip:!1,element:t,lang:n,autoRefresh:!0,firstDay:e,setup:e=>{e.on("preselect",((t,n)=>{e._wasPreselected=!0})),e.on("selected",((n,i)=>{void 0!==e._wasPreselected&&(t.dispatchEvent(new Event("change",{bubbles:!0})),delete e._wasPreselected)})),void 0!==e.backdrop&&document.body.appendChild(e.backdrop)}},[t,new d.Litepicker(this.prepareOptions(i))])));this._pickers=this._pickers.concat(s)}prepareOptions(t){return{...t,plugins:["mobilefriendly"]}}destroyForm(t){[].slice.call(t.querySelectorAll(this._selector)).map((t=>{for(let e=0;e{this.reloadDatatable()};for(let t of e.split(" "))document.addEventListener(t,n);document.addEventListener("pagination-change",n),document.addEventListener("filter-change",n)}registerContextMenu(t){f.A.createForDataTable(t)}reloadDatatable(){const t=this.getContainer().getPlugin("toolbar").getSelector(),e=document.querySelector(t),n=t=>{const e=document.createElement("div");e.innerHTML=t;const n=e.querySelector(this._contentArea);document.querySelector(this._contentArea).replaceWith(n),this.registerContextMenu(this._selector),document.dispatchEvent(new Event("kimai.reloadedContent"))};document.dispatchEvent(new CustomEvent("kimai.reloadContent",{detail:this._contentArea})),null!==e?this.fetchForm(e).then((t=>{t.text().then(n)})).catch((()=>{e.submit()})):this.fetch(document.location).then((t=>{t.text().then(n)})).catch((()=>{document.location.reload()}))}}class v extends o{constructor(t,e){super(),this._formSelector=t,this._actionClass=e}getId(){return"toolbar"}init(){const t=this.getSelector();this._registerPagination(t),this._registerSortableTables(t),this._registerAlternativeSubmitActions(t,this._actionClass),[].slice.call(document.querySelectorAll(t+" input")).map((e=>{e.addEventListener("change",(e=>{switch(e.target.id){case"order":case"orderBy":case"page":break;default:document.querySelector(t+" input#page").value=1}})),this.triggerChange()})),[].slice.call(document.querySelectorAll(t+" select")).map((e=>{e.addEventListener("change",(e=>{let n=!0;switch(e.target.id){case"customer":null!==document.querySelector(t+" select#project")&&(n=!1);break;case"project":null!==document.querySelector(t+" select#activity")&&(n=!1)}document.querySelector(t+" input#page").value=1,n&&this.triggerChange()}))}))}_registerAlternativeSubmitActions(t,e){document.addEventListener("click",(function(n){let i=n.target;for(;null!==i&&"function"==typeof i.matches&&!i.matches("body");){if(i.classList.contains(e)){const e=document.querySelector(t);if(null===e)return;const s=e.getAttribute("action"),r=e.getAttribute("method");void 0!==i.dataset.target&&(e.target=i.dataset.target),e.action=i.href,void 0!==i.dataset.method&&(e.method=i.dataset.method),e.submit(),e.target="",e.action=s,e.method=r,n.preventDefault(),n.stopPropagation()}i=i.parentNode}}))}_registerSortableTables(t){document.body.addEventListener("click",(e=>{if(!e.target.matches("th.sortable"))return;let n="DESC",i=e.target.dataset.order;e.target.classList.contains("sorting_desc")&&(n="ASC"),document.querySelector(t+" #orderBy").value=i,document.querySelector(t+" #order").value=n,document.querySelector(t+" #orderBy").dispatchEvent(new Event("change")),document.querySelector(t+" #order").dispatchEvent(new Event("change")),document.dispatchEvent(new Event("filter-change"))}))}_registerPagination(t){document.body.addEventListener("click",(e=>{if(!(e.target.matches("ul.pagination li a")||null!==e.target.parentNode&&e.target.parentNode.matches("ul.pagination li a")))return;let n=document.querySelector(t+" input#page");if(null===n)return;let i=e.target;i.matches("a")||(i=i.parentNode),e.preventDefault(),e.stopPropagation();let s=i.href.split("/"),r=s[s.length-1];return/\d/.test(r)||(r=1),n.value=r,n.dispatchEvent(new Event("change")),document.dispatchEvent(new Event("pagination-change")),!1}))}triggerChange(){document.dispatchEvent(new Event("toolbar-change"))}getSelector(){return this._formSelector}}class y extends o{getId(){return"api"}_headers(){const t=new Headers;return t.append("Content-Type","application/json"),t}get(t,e,n,i){if(void 0!==e){const n=new URLSearchParams(e).toString();""!==n&&(t=t+(t.includes("?")?"&":"?")+n)}void 0===i&&(i=t=>{this.handleError("An error occurred",t)}),this.fetch(t,{method:"GET",headers:this._headers()}).then((t=>{t.json().then((t=>{n(t)}))})).catch((t=>{i(t)}))}post(t,e,n,i){void 0===i&&(i=t=>{this.handleError("action.update.error",t)}),this.fetch(t,{method:"POST",body:this._parseData(e),headers:this._headers()}).then((t=>{t.json().then((t=>{n(t)}))})).catch((t=>{i(t)}))}patch(t,e,n,i){void 0===i&&(i=t=>{this.handleError("action.update.error",t)}),this.fetch(t,{method:"PATCH",body:this._parseData(e),headers:this._headers()}).then((t=>{204===t.statusCode?n():t.json().then((t=>{n(t)}))})).catch((t=>{i(t)}))}delete(t,e,n){void 0===n&&(n=t=>{this.handleError("action.delete.error",t)}),this.fetch(t,{method:"DELETE",headers:this._headers()}).then((()=>{e()})).catch((t=>{n(t)}))}_parseData(t){return"object"==typeof t?JSON.stringify(t):t}handleError(t,e){if(void 0===e.headers)return;const n=e.headers.get("content-type");n&&-1!==n.indexOf("application/json")?e.json().then((n=>{let i=n.message;if(400===e.status&&n.errors){let t=[""+i+""];if(n.errors.errors)for(let e of n.errors.errors)t.push(e);if(n.errors.children)for(let e in n.errors.children){let i=n.errors.children[e];if(void 0!==i.errors&&i.errors.length>0)for(let e of i.errors)t.push(e)}t.length>0&&(i=t)}this.getPlugin("alert").error(t,i)})):e.text().then((()=>{const n="["+e.statusCode+"] "+e.statusText;this.getPlugin("alert").error(t,n)}))}}class b extends o{addClickHandler(t,e,n){document.body.addEventListener("click",(i=>{let s=i.target;for(;null!==s;){const e=s.tagName.toUpperCase();if("BODY"===e)return;if(s.matches(t))break;if("A"===e||"BUTTON"===e||"INPUT"===e||"LABEL"===e)return;for(let t of n)if(s.matches(t))return;s=s.parentNode}if(null===s)return;if(s.isContentEditable||s.parentNode.isContentEditable)return;if(!s.matches(t))return;for(let t of n)if(s.matches(t))return;i.preventDefault(),i.stopPropagation();let r=s.dataset.href;null==r&&(r=s.href),null!=r&&""!==r&&e(r)}))}}class _ extends b{constructor(t){super(),this._selector=t}init(){this.addClickHandler(this._selector,(function(t){window.location=t}),[])}}class w extends b{constructor(t,e){super(),this._selector=t,this._stopSelector=e}getId(){return"modal"}init(){this._isDirty=!1;const t=this._getModalElement();null!==t&&(t.addEventListener("hide.bs.modal",(e=>{if(this._isDirty){if(null===t.querySelector(".modal-body .remote_modal_is_dirty_warning")){const e=this.translate("modal.dirty"),n=document.createElement("div");n.innerHTML='

'+e+"

",t.querySelector(".modal-body").prepend(n.firstElementChild)}e.preventDefault()}else this._isDirty=!1,document.dispatchEvent(new Event("modal-hide"))})),t.addEventListener("hidden.bs.modal",(()=>{this.getContainer().getPlugin("form").destroyForm(this._getFormIdentifier()),t.querySelector(".modal-body").replaceWith("")})),t.addEventListener("show.bs.modal",(()=>{document.dispatchEvent(new Event("modal-show"))})),this.addClickHandler(this._selector,(t=>{this.openUrlInModal(t)}),this._stopSelector))}_getModal(){return c.aF.getOrCreateInstance(this._getModalElement())}openUrlInModal(t,e){const n=new Headers;n.append("X-Requested-With","Kimai-Modal"),this.fetch(t,{method:"GET",redirect:"follow",headers:n}).then((e=>{if(e.ok)return e.text().then((t=>{this._openFormInModal(t)}));window.location=t})).catch((n=>{null==e?window.location=t:e(n)}))}_getFormIdentifier(){return"#remote_form_modal .modal-content form"}_getModalElement(){return document.getElementById("remote_form_modal")}_makeScriptExecutable(t){if(void 0!==t.tagName&&"SCRIPT"===t.tagName){const e=document.createElement("script");e.text=t.innerHTML,t.parentNode.replaceChild(e,t)}else for(const e of t.childNodes)this._makeScriptExecutable(e);return t}_openFormInModal(t){const e=this._getFormIdentifier();let n=this._getModalElement();const i=document.createElement("div");i.innerHTML=t;const s=this._makeScriptExecutable(i.querySelector("#form_modal .modal-content"));if(null!==s){let t=n.querySelector(".modal-dialog"),r=i.querySelector(".modal-dialog").classList.contains("modal-lg");r&&!t.classList.contains("modal-lg")&&t.classList.toggle("modal-lg"),!r&&t.classList.contains("modal-lg")&&t.classList.toggle("modal-lg"),n.querySelector(".modal-content").replaceWith(s),[].slice.call(n.querySelectorAll('[data-bs-dismiss="modal"]')).map((t=>{t.addEventListener("click",(()=>{this._isDirty=!1,this._getModal().hide()}))})),this.getContainer().getPlugin("form").activateForm(e)}let r=i.querySelector("div.alert");null!==r&&n.querySelector(".modal-body").prepend(r);const o=document.querySelector(e);o.addEventListener("change",(()=>{this._isDirty=!0})),o.addEventListener("submit",this._getEventHandler()),this._getModal().show()}_getEventHandler(){return void 0===this.eventHandler&&(this.eventHandler=t=>{const e=t.target;if(void 0!==e.target&&""!==e.target)return!0;const n=document.querySelector(this._getFormIdentifier()+" button[type=submit]");n.textContent=n.textContent+" …",n.disabled=!0;const i=e.dataset.formEvent,s=this.getContainer().getPlugin("event"),r=this.getContainer().getPlugin("alert");t.preventDefault(),t.stopPropagation();const o=new Headers;o.append("X-Requested-With","Kimai-Modal");const a={headers:o};this.fetchForm(e,a).then((t=>{t.text().then((t=>{const o=document.createElement("div");o.innerHTML=t;let a=!1,l=!1,c=!1;n.textContent=n.textContent.replace(" …",""),n.disabled=!1;const u=o.querySelector("#form_modal .modal-content");if(null!==u&&(a=null!==u.querySelector(".is-invalid"),a||(a=null!==u.querySelector(".invalid-feedback")),l=null!==u.querySelector("ul.list-unstyled li.text-danger"),c=null!==o.querySelector("div.alert-danger")),a||l||c)this._openFormInModal(t);else{s.trigger(i);let t=e.dataset.msgSuccess;null!=t&&""!==t||(t="action.update.success"),this._isDirty=!1,this._getModal().hide(),r.success(t)}}))})).catch((t=>{let i=e.dataset.msgError;null!=i&&""!==i||(i="action.update.error"),r.error(i,t.message),setTimeout((()=>{n.textContent=n.textContent.replace(" …",""),n.disabled=!1}),1500)}))}),this.eventHandler}}class k extends o{constructor(){super(),this._selector=".ticktac-menu",this._selectorEmpty=".ticktac-menu-empty",this._favIconUrl=null}getId(){return"active-records"}init(){if(null===document.querySelector(this._selector))return;const t=()=>{this.reloadActiveRecords()};document.addEventListener("kimai.timesheetUpdate",t),document.addEventListener("kimai.timesheetDelete",t),document.addEventListener("kimai.activityUpdate",t),document.addEventListener("kimai.activityDelete",t),document.addEventListener("kimai.projectUpdate",t),document.addEventListener("kimai.projectDelete",t),document.addEventListener("kimai.customerUpdate",t),document.addEventListener("kimai.customerDelete",t),this._updateBrowserTitle=!!this.getConfiguration("updateBrowserTitle");const e=()=>{this._updateDuration()};this._updatesHandler=setInterval(e,1e4),document.addEventListener("kimai.timesheetUpdate",e),document.addEventListener("kimai.reloadedContent",e)}_updateDuration(){const t=document.querySelectorAll('[data-since]:not([data-since=""])');if(this._updateBrowserTitle&&this._changeFavicon(t.length>0),0===t.length)return void(this._updateBrowserTitle&&(void 0===document.body.dataset.title?this._updateBrowserTitle=!1:document.title=document.body.dataset.title));const e=this.getDateUtils();let n=[];for(const i of t){const t=e.formatDuration(i.dataset.since);void 0!==i.dataset.replacer&&null!==i.dataset.title&&"?"!==t&&n.push(t),i.textContent=t}0!==n.length&&this._updateBrowserTitle&&(document.title=n.shift())}_setEntries(t){const e=t.length>0;for(let t of document.querySelectorAll(this._selectorEmpty))t.style.display=e?"none":"inline-block";for(let n of document.querySelectorAll(this._selector)){if(n.style.display=e?"inline-block":"none",!e)for(let t of n.querySelectorAll("[data-since]"))t.dataset.since="";const i=n.querySelector(".ticktac-stop");e?(i&&(i.accesskey="s"),this._replaceInNode(n,t[0])):i&&(i.accesskey=null)}this._updateDuration()}_replaceInNode(t,e){const n=this.getDateUtils(),i=t.querySelectorAll("[data-replacer]");for(let s of i){const i=s.dataset.replacer;"url"===i?s.dataset.href=t.dataset.href.replace("000",e.id):"activity"===i?s.innerText=e.activity.name:"project"===i?s.innerText=e.project.name:"customer"===i?s.innerText=e.project.customer.name:"duration"===i&&(s.dataset.since=e.begin,s.innerText=n.formatDuration(e.duration))}}reloadActiveRecords(){const t=this.getContainer().getPlugin("api"),e=document.querySelector(this._selector).dataset.api;t.get(e,{},(t=>{this._setEntries(t)}))}_changeFavicon(t){const e=document.createElement("canvas"),n=document.getElementById("favicon");null===this._favIconUrl&&(this._favIconUrl=n.href);const i=n.cloneNode(!0);if(e.getContext&&i){const s=window.devicePixelRatio,r=document.createElement("img");e.height=e.width=16*s,r.onload=function(){const r=e.getContext("2d");if(r.drawImage(this,0,0,e.width,e.height),t){const t=5.5*s;r.fillStyle="rgb(182,57,57)",r.fillRect(e.width/2-t/2,e.height/2-t/2,t,t)}i.href=e.toDataURL("image/png"),n.remove(),document.head.appendChild(i)},r.src=this._favIconUrl}}}class T extends o{getId(){return"event"}trigger(t,e=null){if(""!==t)for(const n of t.split(" ")){let t=new Event(n);null!==e&&(t=new CustomEvent(n,{detail:e})),document.dispatchEvent(t)}}}class D extends o{constructor(t){super(),this._selector=t}init(){document.addEventListener("click",(t=>{let e=t.target;for(;null!==e&&"function"==typeof e.matches&&!e.matches("body");){if(e.classList.contains(this._selector)){const n=e.dataset;let i=n.href;i||(i=e.getAttribute("href")),void 0!==n.question?this.getContainer().getPlugin("alert").question(n.question,(t=>{t&&this._callApi(i,n)})):this._callApi(i,n),t.preventDefault(),t.stopPropagation()}e=e.parentNode}}))}_callApi(t,e){const n=e.method,i=e.event,s=this.getContainer().getPlugin("api"),r=this.getContainer().getPlugin("event"),o=this.getContainer().getPlugin("alert"),a=()=>{r.trigger(i),void 0!==e.msgSuccess&&o.success(e.msgSuccess)},l=t=>{let n="action.update.error";void 0!==e.msgError&&(n=e.msgError),s.handleError(n,t)};let c={};if(void 0!==e.payload&&(c=e.payload),"PATCH"===n)s.patch(t,c,a,l);else if("POST"===n){let e={};s.post(t,e,a,l)}else"DELETE"===n?s.delete(t,a,l):"GET"===n&&s.get(t,c,a,l)}}class E extends o{getId(){return"alert"}error(t,e){const n=this.getTranslation();n.has(t)&&(t=n.get(t)),t=t.replace("%reason%",""),void 0===e&&(e=null),null!==e&&(n.has(e)&&(e=n.get(e)),Array.isArray(e)&&(e=e.join("
")));const i="alert_global_error",s=document.getElementById(i);null!==s&&c.aF.getOrCreateInstance(s).hide();const r='\n
\n ";this._showModal(r)}warning(t){this._show("warning",t)}success(t){this._toast("success",t)}info(t){this._show("info",t)}_showModal(t){const e=document.body,n=document.createElement("template");n.innerHTML=t.trim();const i=n.content.firstChild;e.appendChild(i);const s=new c.aF(i);i.addEventListener("hidden.bs.modal",(function(){e.removeChild(i)})),s.show()}_show(t,e){const n=this.getTranslation();n.has(e)&&(e=n.get(e));const i='\n \n ";this._showModal(i)}_mapClass(t){return"info"===t||"success"===t||"warning"===t||"danger"===t?t:"error"===t?"danger":"primary"}_toast(t,e){const n=this.getTranslation();n.has(e)&&(e=n.get(e));let i='';"success"===t?i='':"warning"===t?i='':"danger"!==t&&"error"!==t||(i='');const s='',r=document.getElementById("toast-container"),o=document.createElement("template");o.innerHTML=s.trim();const a=o.content.firstChild;r.appendChild(a);const l=new c.y8(a);a.addEventListener("hidden.bs.toast",(function(){r.removeChild(a)})),l.show()}question(t,e){const n=this.getTranslation();n.has(t)&&(t=n.get(t));const i=this._mapClass("info"),s='\n \n ",r=document.body,o=document.createElement("template");o.innerHTML=s.trim();const a=o.content.firstChild;r.appendChild(a),a.querySelector(".question-confirm").addEventListener("click",(()=>{e(!0)})),a.querySelector(".question-cancel").addEventListener("click",(()=>{e(!1)}));const l=new c.aF(a);a.addEventListener("hidden.bs.modal",(()=>{r.removeChild(a)})),l.show()}}function x(t,e){t.split(/\s+/).forEach((t=>{e(t)}))}class S{constructor(){this._events={}}on(t,e){x(t,(t=>{const n=this._events[t]||[];n.push(e),this._events[t]=n}))}off(t,e){var n=arguments.length;0!==n?x(t,(t=>{if(1===n)return void delete this._events[t];const i=this._events[t];void 0!==i&&(i.splice(i.indexOf(e),1),this._events[t]=i)})):this._events={}}trigger(t,...e){var n=this;x(t,(t=>{const i=n._events[t];void 0!==i&&i.forEach((t=>{t.apply(n,e)}))}))}}const O=t=>(t=t.filter(Boolean)).length<2?t[0]||"":1==I(t)?"["+t.join("")+"]":"(?:"+t.join("|")+")",L=t=>{if(!M(t))return t.join("");let e="",n=0;const i=()=>{n>1&&(e+="{"+n+"}")};return t.forEach(((s,r)=>{s!==t[r-1]?(i(),e+=s,n=1):n++})),i(),e},C=t=>{let e=Array.from(t);return O(e)},M=t=>new Set(t).size!==t.length,A=t=>(t+"").replace(/([\$\(\)\*\+\.\?\[\]\^\{\|\}\\])/gu,"\\$1"),I=t=>t.reduce(((t,e)=>Math.max(t,N(e))),0),N=t=>Array.from(t).length,F=t=>{if(1===t.length)return[[t]];let e=[];const n=t.substring(1);return F(n).forEach((function(n){let i=n.slice(0);i[0]=t.charAt(0)+i[0],e.push(i),i=n.slice(0),i.unshift(t.charAt(0)),e.push(i)})),e},P=[[0,65535]];let j,q;const H={},V={"/":"⁄∕",0:"߀",a:"ⱥɐɑ",aa:"ꜳ",ae:"æǽǣ",ao:"ꜵ",au:"ꜷ",av:"ꜹꜻ",ay:"ꜽ",b:"ƀɓƃ",c:"ꜿƈȼↄ",d:"đɗɖᴅƌꮷԁɦ",e:"ɛǝᴇɇ",f:"ꝼƒ",g:"ǥɠꞡᵹꝿɢ",h:"ħⱨⱶɥ",i:"ɨı",j:"ɉȷ",k:"ƙⱪꝁꝃꝅꞣ",l:"łƚɫⱡꝉꝇꞁɭ",m:"ɱɯϻ",n:"ꞥƞɲꞑᴎлԉ",o:"øǿɔɵꝋꝍᴑ",oe:"œ",oi:"ƣ",oo:"ꝏ",ou:"ȣ",p:"ƥᵽꝑꝓꝕρ",q:"ꝗꝙɋ",r:"ɍɽꝛꞧꞃ",s:"ßȿꞩꞅʂ",t:"ŧƭʈⱦꞇ",th:"þ",tz:"ꜩ",u:"ʉ",v:"ʋꝟʌ",vy:"ꝡ",w:"ⱳ",y:"ƴɏỿ",z:"ƶȥɀⱬꝣ",hv:"ƕ"};for(let t in V){let e=V[t]||"";for(let n=0;nt.normalize(e),R=t=>Array.from(t).reduce(((t,e)=>t+W(e)),""),W=t=>(t=B(t).toLowerCase().replace($,(t=>H[t]||"")),B(t,"NFC"));const z=t=>{const e={},n=(t,n)=>{const i=e[t]||new Set,s=new RegExp("^"+C(i)+"$","iu");n.match(s)||(i.add(A(n)),e[t]=i)};for(let e of function*(t){for(const[e,n]of t)for(let t=e;t<=n;t++){let e=String.fromCharCode(t),n=R(e);n!=e.toLowerCase()&&(n.length>3||0!=n.length&&(yield{folded:n,composed:e,code_point:t}))}}(t))n(e.folded,e.folded),n(e.folded,e.composed);return e},U=t=>{const e=z(t),n={};let i=[];for(let t in e){let s=e[t];s&&(n[t]=C(s)),t.length>1&&i.push(A(t))}i.sort(((t,e)=>e.length-t.length));const s=O(i);return q=new RegExp("^"+s,"u"),n},Y=(t,e=1)=>(e=Math.max(e,t.length-1),O(F(t).map((t=>((t,e=1)=>{let n=0;return t=t.map((t=>(j[t]&&(n+=t.length),j[t]||t))),n>=e?L(t):""})(t,e))))),Z=(t,e=!0)=>{let n=t.length>1?1:0;return O(t.map((t=>{let i=[];const s=e?t.length():t.length()-1;for(let e=0;e{for(const n of e){if(n.start!=t.start||n.end!=t.end)continue;if(n.substrs.join("")!==t.substrs.join(""))continue;let e=t.parts;const i=t=>{for(const n of e){if(n.start===t.start&&n.substr===t.substr)return!1;if(1!=t.length&&1!=n.length){if(t.startn.start)return!0;if(n.startt.start)return!0}}return!1};if(!(n.parts.filter(i).length>0))return!0}return!1};class J{parts;substrs;start;end;constructor(){this.parts=[],this.substrs=[],this.start=0,this.end=0}add(t){t&&(this.parts.push(t),this.substrs.push(t.substr),this.start=Math.min(t.start,this.start),this.end=Math.max(t.end,this.end))}last(){return this.parts[this.parts.length-1]}length(){return this.parts.length}clone(t,e){let n=new J,i=JSON.parse(JSON.stringify(this.parts)),s=i.pop();for(const t of i)n.add(t);let r=e.substr.substring(0,t-s.start),o=r.length;return n.add({start:s.start,end:s.start+o,length:o,substr:r}),n}}const G=t=>{var e;void 0===j&&(j=U(e||P)),t=R(t);let n="",i=[new J];for(let e=0;e0){a=a.sort(((t,e)=>t.length()-e.length()));for(let t of a)K(t,i)||i.push(t)}else if(e>0&&1==l.size&&!l.has("3")){n+=Z(i,!1);let t=new J;const e=i[0];e&&t.add(e.last()),i=[t]}}return n+=Z(i,!0),n},Q=(t,e)=>{if(t)return t[e]},X=(t,e)=>{if(t){for(var n,i=e.split(".");(n=i.shift())&&(t=t[n]););return t}},tt=(t,e,n)=>{var i,s;return t?(t+="",null==e.regex||-1===(s=t.search(e.regex))?0:(i=e.string.length/t.length,0===s&&(i+=.5),i*n)):0},et=(t,e)=>{var n=t[e];if("function"==typeof n)return n;n&&!Array.isArray(n)&&(t[e]=[n])},nt=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},it=(t,e)=>"number"==typeof t&&"number"==typeof e?t>e?1:t(e=R(e+"").toLowerCase())?1:e>t?-1:0;class st{items;settings;constructor(t,e){this.items=t,this.settings=e||{diacritics:!0}}tokenize(t,e,n){if(!t||!t.length)return[];const i=[],s=t.split(/\s+/);var r;return n&&(r=new RegExp("^("+Object.keys(n).map(A).join("|")+"):(.*)$")),s.forEach((t=>{let n,s=null,o=null;r&&(n=t.match(r))&&(s=n[1],t=n[2]),t.length>0&&(o=this.settings.diacritics?G(t)||null:A(t),o&&e&&(o="\\b"+o)),i.push({string:t,regex:o?new RegExp(o,"iu"):null,field:s})})),i}getScoreFunction(t,e){var n=this.prepareSearch(t,e);return this._getScoreFunction(n)}_getScoreFunction(t){const e=t.tokens,n=e.length;if(!n)return function(){return 0};const i=t.options.fields,s=t.weights,r=i.length,o=t.getAttrFn;if(!r)return function(){return 1};const a=1===r?function(t,e){const n=i[0].field;return tt(o(e,n),t,s[n]||1)}:function(t,e){var n=0;if(t.field){const i=o(e,t.field);!t.regex&&i?n+=1/r:n+=tt(i,t,1)}else nt(s,((i,s)=>{n+=tt(o(e,s),t,i)}));return n/r};return 1===n?function(t){return a(e[0],t)}:"and"===t.options.conjunction?function(t){var i,s=0;for(let n of e){if((i=a(n,t))<=0)return 0;s+=i}return s/n}:function(t){var i=0;return nt(e,(e=>{i+=a(e,t)})),i/n}}getSortFunction(t,e){var n=this.prepareSearch(t,e);return this._getSortFunction(n)}_getSortFunction(t){var e,n=[];const i=this,s=t.options,r=!t.query&&s.sort_empty?s.sort_empty:s.sort;if("function"==typeof r)return r.bind(this);const o=function(e,n){return"$score"===e?n.score:t.getAttrFn(i.items[n.id],e)};if(r)for(let e of r)(t.query||"$score"!==e.field)&&n.push(e);if(t.query){e=!0;for(let t of n)if("$score"===t.field){e=!1;break}e&&n.unshift({field:"$score",direction:"desc"})}else n=n.filter((t=>"$score"!==t.field));return n.length?function(t,e){var i,s;for(let r of n){if(s=r.field,i=("desc"===r.direction?-1:1)*it(o(s,t),o(s,e)))return i}return 0}:null}prepareSearch(t,e){const n={};var i=Object.assign({},e);if(et(i,"sort"),et(i,"sort_empty"),i.fields){et(i,"fields");const t=[];i.fields.forEach((e=>{"string"==typeof e&&(e={field:e,weight:1}),t.push(e),n[e.field]="weight"in e?e.weight:1})),i.fields=t}return{options:i,query:t.toLowerCase().trim(),tokens:this.tokenize(t,i.respect_word_boundaries,n),total:0,items:[],weights:n,getAttrFn:i.nesting?X:Q}}search(t,e){var n,i,s=this;i=this.prepareSearch(t,e),e=i.options,t=i.query;const r=e.score||s._getScoreFunction(i);t.length?nt(s.items,((t,s)=>{n=r(t),(!1===e.filter||n>0)&&i.items.push({score:n,id:s})})):nt(s.items,((t,e)=>{i.items.push({score:1,id:e})}));const o=s._getSortFunction(i);return o&&i.items.sort(o),i.total=i.items.length,"number"==typeof e.limit&&(i.items=i.items.slice(0,e.limit)),i}}const rt=t=>null==t?null:ot(t),ot=t=>"boolean"==typeof t?t?"1":"0":t+"",at=t=>(t+"").replace(/&/g,"&").replace(//g,">").replace(/"/g,"""),lt=(t,e)=>{var n;return function(i,s){var r=this;n&&(r.loading=Math.max(r.loading-1,0),clearTimeout(n)),n=setTimeout((function(){n=null,r.loadedSearches[i]=!0,t.call(r,i,s)}),e)}},ct=(t,e,n)=>{var i,s=t.trigger,r={};for(i of(t.trigger=function(){var n=arguments[0];if(-1===e.indexOf(n))return s.apply(t,arguments);r[n]=arguments},n.apply(t,[]),t.trigger=s,e))i in r&&s.apply(t,r[i])},ut=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},dt=(t,e,n,i)=>{t.addEventListener(e,n,i)},ht=(t,e)=>!!e&&(!!e[t]&&1===(e.altKey?1:0)+(e.ctrlKey?1:0)+(e.shiftKey?1:0)+(e.metaKey?1:0)),pt=(t,e)=>{const n=t.getAttribute("id");return n||(t.setAttribute("id",e),e)},mt=t=>t.replace(/[\\"']/g,"\\$&"),ft=(t,e)=>{e&&t.append(e)},gt=(t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)},vt=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(yt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},yt=t=>"string"==typeof t&&t.indexOf("<")>-1,bt=(t,e)=>{var n=document.createEvent("HTMLEvents");n.initEvent(e,!0,!1),t.dispatchEvent(n)},_t=(t,e)=>{Object.assign(t.style,e)},wt=(t,...e)=>{var n=Tt(e);(t=Dt(t)).map((t=>{n.map((e=>{t.classList.add(e)}))}))},kt=(t,...e)=>{var n=Tt(e);(t=Dt(t)).map((t=>{n.map((e=>{t.classList.remove(e)}))}))},Tt=t=>{var e=[];return gt(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},Dt=t=>(Array.isArray(t)||(t=[t]),t),Et=(t,e,n)=>{if(!n||n.contains(t))for(;t&&t.matches;){if(t.matches(e))return t;t=t.parentNode}},xt=(t,e=0)=>e>0?t[t.length-1]:t[0],St=(t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n},Ot=(t,e)=>{gt(e,((e,n)=>{null==e?t.removeAttribute(n):t.setAttribute(n,""+e)}))},Lt=(t,e)=>{t.parentNode&&t.parentNode.replaceChild(e,t)},Ct=(t,e)=>{if(null===e)return;if("string"==typeof e){if(!e.length)return;e=new RegExp(e,"i")}const n=t=>3===t.nodeType?(t=>{var n=t.data.match(e);if(n&&t.data.length>0){var i=document.createElement("span");i.className="highlight";var s=t.splitText(n.index);s.splitText(n[0].length);var r=s.cloneNode(!0);return i.appendChild(r),Lt(s,i),1}return 0})(t):((t=>{1!==t.nodeType||!t.childNodes||/(script|style)/i.test(t.tagName)||"highlight"===t.className&&"SPAN"===t.tagName||Array.from(t.childNodes).forEach((t=>{n(t)}))})(t),0);n(t)},Mt="undefined"!=typeof navigator&&/Mac/.test(navigator.userAgent)?"metaKey":"ctrlKey";var At={options:[],optgroups:[],plugins:[],delimiter:",",splitOn:null,persist:!0,diacritics:!0,create:null,createOnBlur:!1,createFilter:null,highlight:!0,openOnFocus:!0,shouldOpen:null,maxOptions:50,maxItems:null,hideSelected:null,duplicates:!1,addPrecedence:!1,selectOnTab:!1,preload:null,allowEmptyOption:!1,refreshThrottle:300,loadThrottle:300,loadingClass:"loading",dataAttr:null,optgroupField:"optgroup",valueField:"value",labelField:"text",disabledField:"disabled",optgroupLabelField:"label",optgroupValueField:"value",lockOptgroupOrder:!1,sortField:"$order",searchField:["text"],searchConjunction:"and",mode:null,wrapperClass:"ts-wrapper",controlClass:"ts-control",dropdownClass:"ts-dropdown",dropdownContentClass:"ts-dropdown-content",itemClass:"item",optionClass:"option",dropdownParent:null,controlInput:'',copyClassesToDropdown:!1,placeholder:null,hidePlaceholder:null,shouldLoad:function(t){return t.length>0},render:{}};function It(t,e){var n=Object.assign({},At,e),i=n.dataAttr,s=n.labelField,r=n.valueField,o=n.disabledField,a=n.optgroupField,l=n.optgroupLabelField,c=n.optgroupValueField,u=t.tagName.toLowerCase(),d=t.getAttribute("placeholder")||t.getAttribute("data-placeholder");if(!d&&!n.allowEmptyOption){let e=t.querySelector('option[value=""]');e&&(d=e.textContent)}var h={placeholder:d,options:[],optgroups:[],items:[],maxItems:null};return"select"===u?(()=>{var e,u=h.options,d={},p=1;let m=0;var f=t=>{var e=Object.assign({},t.dataset),n=i&&e[i];return"string"==typeof n&&n.length&&(e=Object.assign(e,JSON.parse(n))),e},g=(t,e)=>{var i=rt(t.value);if(null!=i&&(i||n.allowEmptyOption)){if(d.hasOwnProperty(i)){if(e){var l=d[i][a];l?Array.isArray(l)?l.push(e):d[i][a]=[l,e]:d[i][a]=e}}else{var c=f(t);c[s]=c[s]||t.textContent,c[r]=c[r]||i,c[o]=c[o]||t.disabled,c[a]=c[a]||e,c.$option=t,c.$order=c.$order||++m,d[i]=c,u.push(c)}t.selected&&h.items.push(i)}};h.maxItems=t.hasAttribute("multiple")?null:1,gt(t.children,(t=>{var n,i,s;"optgroup"===(e=t.tagName.toLowerCase())?((s=f(n=t))[l]=s[l]||n.getAttribute("label")||"",s[c]=s[c]||p++,s[o]=s[o]||n.disabled,s.$order=s.$order||++m,h.optgroups.push(s),i=s[c],gt(n.children,(t=>{g(t,i)}))):"option"===e&&g(t)}))})():(()=>{const e=t.getAttribute(i);if(e)h.options=JSON.parse(e),gt(h.options,(t=>{h.items.push(t[r])}));else{var o=t.value.trim()||"";if(!n.allowEmptyOption&&!o.length)return;const e=o.split(n.delimiter);gt(e,(t=>{const e={};e[s]=t,e[r]=t,h.options.push(e)})),h.items=e}})(),Object.assign({},At,h,e)}var Nt=0;class Ft extends(function(t){return t.plugins={},class extends t{constructor(){super(...arguments),this.plugins={names:[],settings:{},requested:{},loaded:{}}}static define(e,n){t.plugins[e]={name:e,fn:n}}initializePlugins(t){var e,n;const i=this,s=[];if(Array.isArray(t))t.forEach((t=>{"string"==typeof t?s.push(t):(i.plugins.settings[t.name]=t.options,s.push(t.name))}));else if(t)for(e in t)t.hasOwnProperty(e)&&(i.plugins.settings[e]=t[e],s.push(e));for(;n=s.shift();)i.require(n)}loadPlugin(e){var n=this,i=n.plugins,s=t.plugins[e];if(!t.plugins.hasOwnProperty(e))throw new Error('Unable to find "'+e+'" plugin');i.requested[e]=!0,i.loaded[e]=s.fn.apply(n,[n.plugins.settings[e]||{}]),i.names.push(e)}require(t){var e=this,n=e.plugins;if(!e.plugins.loaded.hasOwnProperty(t)){if(n.requested[t])throw new Error('Plugin has circular dependency ("'+t+'")');e.loadPlugin(t)}return n.loaded[t]}}}(S)){constructor(t,e){var n;super(),this.order=0,this.isOpen=!1,this.isDisabled=!1,this.isReadOnly=!1,this.isInvalid=!1,this.isValid=!0,this.isLocked=!1,this.isFocused=!1,this.isInputHidden=!1,this.isSetup=!1,this.ignoreFocus=!1,this.ignoreHover=!1,this.hasOptions=!1,this.lastValue="",this.caretPos=0,this.loading=0,this.loadedSearches={},this.activeOption=null,this.activeItems=[],this.optgroups={},this.options={},this.userOptions={},this.items=[],this.refreshTimeout=null,Nt++;var i=vt(t);if(i.tomselect)throw new Error("Tom Select already initialized on this element");i.tomselect=this,n=(window.getComputedStyle&&window.getComputedStyle(i,null)).getPropertyValue("direction");const s=It(i,e);this.settings=s,this.input=i,this.tabIndex=i.tabIndex||0,this.is_select_tag="select"===i.tagName.toLowerCase(),this.rtl=/rtl/i.test(n),this.inputId=pt(i,"tomselect-"+Nt),this.isRequired=i.required,this.sifter=new st(this.options,{diacritics:s.diacritics}),s.mode=s.mode||(1===s.maxItems?"single":"multi"),"boolean"!=typeof s.hideSelected&&(s.hideSelected="multi"===s.mode),"boolean"!=typeof s.hidePlaceholder&&(s.hidePlaceholder="multi"!==s.mode);var r=s.createFilter;"function"!=typeof r&&("string"==typeof r&&(r=new RegExp(r)),r instanceof RegExp?s.createFilter=t=>r.test(t):s.createFilter=t=>this.settings.duplicates||!this.options[t]),this.initializePlugins(s.plugins),this.setupCallbacks(),this.setupTemplates();const o=vt("
"),a=vt("
"),l=this._render("dropdown"),c=vt('
'),u=this.input.getAttribute("class")||"",d=s.mode;var h;if(wt(o,s.wrapperClass,u,d),wt(a,s.controlClass),ft(o,a),wt(l,s.dropdownClass,d),s.copyClassesToDropdown&&wt(l,u),wt(c,s.dropdownContentClass),ft(l,c),vt(s.dropdownParent||o).appendChild(l),yt(s.controlInput)){h=vt(s.controlInput);gt(["autocorrect","autocapitalize","autocomplete","spellcheck"],(t=>{i.getAttribute(t)&&Ot(h,{[t]:i.getAttribute(t)})})),h.tabIndex=-1,a.appendChild(h),this.focus_node=h}else s.controlInput?(h=vt(s.controlInput),this.focus_node=h):(h=vt(""),this.focus_node=a);this.wrapper=o,this.dropdown=l,this.dropdown_content=c,this.control=a,this.control_input=h,this.setup()}setup(){const t=this,e=t.settings,n=t.control_input,i=t.dropdown,s=t.dropdown_content,r=t.wrapper,o=t.control,a=t.input,l=t.focus_node,c={passive:!0},u=t.inputId+"-ts-dropdown";Ot(s,{id:u}),Ot(l,{role:"combobox","aria-haspopup":"listbox","aria-expanded":"false","aria-controls":u});const d=pt(l,t.inputId+"-ts-control"),h="label[for='"+(t=>t.replace(/['"\\]/g,"\\$&"))(t.inputId)+"']",p=document.querySelector(h),m=t.focus.bind(t);if(p){dt(p,"click",m),Ot(p,{for:d});const e=pt(p,t.inputId+"-ts-label");Ot(l,{"aria-labelledby":e}),Ot(s,{"aria-labelledby":e})}if(r.style.width=a.style.width,t.plugins.names.length){const e="plugin-"+t.plugins.names.join(" plugin-");wt([r,i],e)}(null===e.maxItems||e.maxItems>1)&&t.is_select_tag&&Ot(a,{multiple:"multiple"}),e.placeholder&&Ot(n,{placeholder:e.placeholder}),!e.splitOn&&e.delimiter&&(e.splitOn=new RegExp("\\s*"+A(e.delimiter)+"+\\s*")),e.load&&e.loadThrottle&&(e.load=lt(e.load,e.loadThrottle)),dt(i,"mousemove",(()=>{t.ignoreHover=!1})),dt(i,"mouseenter",(e=>{var n=Et(e.target,"[data-selectable]",i);n&&t.onOptionHover(e,n)}),{capture:!0}),dt(i,"click",(e=>{const n=Et(e.target,"[data-selectable]");n&&(t.onOptionSelect(e,n),ut(e,!0))})),dt(o,"click",(e=>{var i=Et(e.target,"[data-ts-item]",o);i&&t.onItemSelect(e,i)?ut(e,!0):""==n.value&&(t.onClick(),ut(e,!0))})),dt(l,"keydown",(e=>t.onKeyDown(e))),dt(n,"keypress",(e=>t.onKeyPress(e))),dt(n,"input",(e=>t.onInput(e))),dt(l,"blur",(e=>t.onBlur(e))),dt(l,"focus",(e=>t.onFocus(e))),dt(n,"paste",(e=>t.onPaste(e)));const f=e=>{const s=e.composedPath()[0];if(!r.contains(s)&&!i.contains(s))return t.isFocused&&t.blur(),void t.inputState();s==n&&t.isOpen?e.stopPropagation():ut(e,!0)},g=()=>{t.isOpen&&t.positionDropdown()};dt(document,"mousedown",f),dt(window,"scroll",g,c),dt(window,"resize",g,c),this._destroy=()=>{document.removeEventListener("mousedown",f),window.removeEventListener("scroll",g),window.removeEventListener("resize",g),p&&p.removeEventListener("click",m)},this.revertSettings={innerHTML:a.innerHTML,tabIndex:a.tabIndex},a.tabIndex=-1,a.insertAdjacentElement("afterend",t.wrapper),t.sync(!1),e.items=[],delete e.optgroups,delete e.options,dt(a,"invalid",(()=>{t.isValid&&(t.isValid=!1,t.isInvalid=!0,t.refreshState())})),t.updateOriginalInput(),t.refreshItems(),t.close(!1),t.inputState(),t.isSetup=!0,a.disabled?t.disable():a.readOnly?t.setReadOnly(!0):t.enable(),t.on("change",this.onChange),wt(a,"tomselected","ts-hidden-accessible"),t.trigger("initialize"),!0===e.preload&&t.preload()}setupOptions(t=[],e=[]){this.addOptions(t),gt(e,(t=>{this.registerOptionGroup(t)}))}setupTemplates(){var t=this,e=t.settings.labelField,n=t.settings.optgroupLabelField,i={optgroup:t=>{let e=document.createElement("div");return e.className="optgroup",e.appendChild(t.options),e},optgroup_header:(t,e)=>'
'+e(t[n])+"
",option:(t,n)=>"
"+n(t[e])+"
",item:(t,n)=>"
"+n(t[e])+"
",option_create:(t,e)=>'
Add '+e(t.input)+"…
",no_results:()=>'
No results found
',loading:()=>'
',not_loading:()=>{},dropdown:()=>"
"};t.settings.render=Object.assign({},i,t.settings.render)}setupCallbacks(){var t,e,n={initialize:"onInitialize",change:"onChange",item_add:"onItemAdd",item_remove:"onItemRemove",item_select:"onItemSelect",clear:"onClear",option_add:"onOptionAdd",option_remove:"onOptionRemove",option_clear:"onOptionClear",optgroup_add:"onOptionGroupAdd",optgroup_remove:"onOptionGroupRemove",optgroup_clear:"onOptionGroupClear",dropdown_open:"onDropdownOpen",dropdown_close:"onDropdownClose",type:"onType",load:"onLoad",focus:"onFocus",blur:"onBlur"};for(t in n)(e=this.settings[n[t]])&&this.on(t,e)}sync(t=!0){const e=this,n=t?It(e.input,{delimiter:e.settings.delimiter}):e.settings;e.setupOptions(n.options,n.optgroups),e.setValue(n.items||[],!0),e.lastQuery=null}onClick(){var t=this;if(t.activeItems.length>0)return t.clearActiveItems(),void t.focus();t.isFocused&&t.isOpen?t.blur():t.focus()}onMouseDown(){}onChange(){bt(this.input,"input"),bt(this.input,"change")}onPaste(t){var e=this;e.isInputHidden||e.isLocked?ut(t):e.settings.splitOn&&setTimeout((()=>{var t=e.inputValue();if(t.match(e.settings.splitOn)){var n=t.trim().split(e.settings.splitOn);gt(n,(t=>{rt(t)&&(this.options[t]?e.addItem(t):e.createItem(t))}))}}),0)}onKeyPress(t){var e=this;if(!e.isLocked){var n=String.fromCharCode(t.keyCode||t.which);return e.settings.create&&"multi"===e.settings.mode&&n===e.settings.delimiter?(e.createItem(),void ut(t)):void 0}ut(t)}onKeyDown(t){var e=this;if(e.ignoreHover=!0,e.isLocked)9!==t.keyCode&&ut(t);else{switch(t.keyCode){case 65:if(ht(Mt,t)&&""==e.control_input.value)return ut(t),void e.selectAll();break;case 27:return e.isOpen&&(ut(t,!0),e.close()),void e.clearActiveItems();case 40:if(!e.isOpen&&e.hasOptions)e.open();else if(e.activeOption){let t=e.getAdjacent(e.activeOption,1);t&&e.setActiveOption(t)}return void ut(t);case 38:if(e.activeOption){let t=e.getAdjacent(e.activeOption,-1);t&&e.setActiveOption(t)}return void ut(t);case 13:return void(e.canSelect(e.activeOption)?(e.onOptionSelect(t,e.activeOption),ut(t)):(e.settings.create&&e.createItem()||document.activeElement==e.control_input&&e.isOpen)&&ut(t));case 37:return void e.advanceSelection(-1,t);case 39:return void e.advanceSelection(1,t);case 9:return void(e.settings.selectOnTab&&(e.canSelect(e.activeOption)&&(e.onOptionSelect(t,e.activeOption),ut(t)),e.settings.create&&e.createItem()&&ut(t)));case 8:case 46:return void e.deleteSelection(t)}e.isInputHidden&&!ht(Mt,t)&&ut(t)}}onInput(t){if(this.isLocked)return;const e=this.inputValue();this.lastValue!==e&&(this.lastValue=e,""!=e?(this.refreshTimeout&&window.clearTimeout(this.refreshTimeout),this.refreshTimeout=((t,e)=>e>0?window.setTimeout(t,e):(t.call(null),null))((()=>{this.refreshTimeout=null,this._onInput()}),this.settings.refreshThrottle)):this._onInput())}_onInput(){const t=this.lastValue;this.settings.shouldLoad.call(this,t)&&this.load(t),this.refreshOptions(),this.trigger("type",t)}onOptionHover(t,e){this.ignoreHover||this.setActiveOption(e,!1)}onFocus(t){var e=this,n=e.isFocused;if(e.isDisabled||e.isReadOnly)return e.blur(),void ut(t);e.ignoreFocus||(e.isFocused=!0,"focus"===e.settings.preload&&e.preload(),n||e.trigger("focus"),e.activeItems.length||(e.inputState(),e.refreshOptions(!!e.settings.openOnFocus)),e.refreshState())}onBlur(t){if(!1!==document.hasFocus()){var e=this;if(e.isFocused){e.isFocused=!1,e.ignoreFocus=!1;var n=()=>{e.close(),e.setActiveItem(),e.setCaret(e.items.length),e.trigger("blur")};e.settings.create&&e.settings.createOnBlur?e.createItem(null,n):n()}}}onOptionSelect(t,e){var n,i=this;e.parentElement&&e.parentElement.matches("[data-disabled]")||(e.classList.contains("create")?i.createItem(null,(()=>{i.settings.closeAfterSelect&&i.close()})):void 0!==(n=e.dataset.value)&&(i.lastQuery=null,i.addItem(n),i.settings.closeAfterSelect&&i.close(),!i.settings.hideSelected&&t.type&&/click/.test(t.type)&&i.setActiveOption(e)))}canSelect(t){return!!(this.isOpen&&t&&this.dropdown_content.contains(t))}onItemSelect(t,e){var n=this;return!n.isLocked&&"multi"===n.settings.mode&&(ut(t),n.setActiveItem(e,t),!0)}canLoad(t){return!!this.settings.load&&!this.loadedSearches.hasOwnProperty(t)}load(t){const e=this;if(!e.canLoad(t))return;wt(e.wrapper,e.settings.loadingClass),e.loading++;const n=e.loadCallback.bind(e);e.settings.load.call(e,t,n)}loadCallback(t,e){const n=this;n.loading=Math.max(n.loading-1,0),n.lastQuery=null,n.clearActiveOption(),n.setupOptions(t,e),n.refreshOptions(n.isFocused&&!n.isInputHidden),n.loading||kt(n.wrapper,n.settings.loadingClass),n.trigger("load",t,e)}preload(){var t=this.wrapper.classList;t.contains("preloaded")||(t.add("preloaded"),this.load(""))}setTextboxValue(t=""){var e=this.control_input;e.value!==t&&(e.value=t,bt(e,"update"),this.lastValue=t)}getValue(){return this.is_select_tag&&this.input.hasAttribute("multiple")?this.items:this.items.join(this.settings.delimiter)}setValue(t,e){ct(this,e?[]:["change"],(()=>{this.clear(e),this.addItems(t,e)}))}setMaxItems(t){0===t&&(t=null),this.settings.maxItems=t,this.refreshState()}setActiveItem(t,e){var n,i,s,r,o,a,l=this;if("single"!==l.settings.mode){if(!t)return l.clearActiveItems(),void(l.isFocused&&l.inputState());if("click"===(n=e&&e.type.toLowerCase())&&ht("shiftKey",e)&&l.activeItems.length){for(a=l.getLastActive(),(s=Array.prototype.indexOf.call(l.control.children,a))>(r=Array.prototype.indexOf.call(l.control.children,t))&&(o=s,s=r,r=o),i=s;i<=r;i++)t=l.control.children[i],-1===l.activeItems.indexOf(t)&&l.setActiveItemClass(t);ut(e)}else"click"===n&&ht(Mt,e)||"keydown"===n&&ht("shiftKey",e)?t.classList.contains("active")?l.removeActiveItem(t):l.setActiveItemClass(t):(l.clearActiveItems(),l.setActiveItemClass(t));l.inputState(),l.isFocused||l.focus()}}setActiveItemClass(t){const e=this,n=e.control.querySelector(".last-active");n&&kt(n,"last-active"),wt(t,"active last-active"),e.trigger("item_select",t),-1==e.activeItems.indexOf(t)&&e.activeItems.push(t)}removeActiveItem(t){var e=this.activeItems.indexOf(t);this.activeItems.splice(e,1),kt(t,"active")}clearActiveItems(){kt(this.activeItems,"active"),this.activeItems=[]}setActiveOption(t,e=!0){t!==this.activeOption&&(this.clearActiveOption(),t&&(this.activeOption=t,Ot(this.focus_node,{"aria-activedescendant":t.getAttribute("id")}),Ot(t,{"aria-selected":"true"}),wt(t,"active"),e&&this.scrollToOption(t)))}scrollToOption(t,e){if(!t)return;const n=this.dropdown_content,i=n.clientHeight,s=n.scrollTop||0,r=t.offsetHeight,o=t.getBoundingClientRect().top-n.getBoundingClientRect().top+s;o+r>i+s?this.scroll(o-i+r,e):o{t.setActiveItemClass(e)})))}inputState(){var t=this;t.control.contains(t.control_input)&&(Ot(t.control_input,{placeholder:t.settings.placeholder}),t.activeItems.length>0||!t.isFocused&&t.settings.hidePlaceholder&&t.items.length>0?(t.setTextboxValue(),t.isInputHidden=!0):(t.settings.hidePlaceholder&&t.items.length>0&&Ot(t.control_input,{placeholder:""}),t.isInputHidden=!1),t.wrapper.classList.toggle("input-hidden",t.isInputHidden))}inputValue(){return this.control_input.value.trim()}focus(){var t=this;t.isDisabled||t.isReadOnly||(t.ignoreFocus=!0,t.control_input.offsetWidth?t.control_input.focus():t.focus_node.focus(),setTimeout((()=>{t.ignoreFocus=!1,t.onFocus()}),0))}blur(){this.focus_node.blur(),this.onBlur()}getScoreFunction(t){return this.sifter.getScoreFunction(t,this.getSearchOptions())}getSearchOptions(){var t=this.settings,e=t.sortField;return"string"==typeof t.sortField&&(e=[{field:t.sortField}]),{fields:t.searchField,conjunction:t.searchConjunction,sort:e,nesting:t.nesting}}search(t){var e,n,i=this,s=this.getSearchOptions();if(i.settings.score&&"function"!=typeof(n=i.settings.score.call(i,t)))throw new Error('Tom Select "score" setting must be a function that returns a function');return t!==i.lastQuery?(i.lastQuery=t,e=i.sifter.search(t,Object.assign(s,{score:n})),i.currentResults=e):e=Object.assign({},i.currentResults),i.settings.hideSelected&&(e.items=e.items.filter((t=>{let e=rt(t.id);return!(e&&-1!==i.items.indexOf(e))}))),e}refreshOptions(t=!0){var e,n,i,s,r,o,a,l,c,u;const d={},h=[];var p=this,m=p.inputValue();const f=m===p.lastQuery||""==m&&null==p.lastQuery;var g=p.search(m),v=null,y=p.settings.shouldOpen||!1,b=p.dropdown_content;f&&(v=p.activeOption)&&(c=v.closest("[data-group]")),s=g.items.length,"number"==typeof p.settings.maxOptions&&(s=Math.min(s,p.settings.maxOptions)),s>0&&(y=!0);const _=(t,e)=>{let n=d[t];if(void 0!==n){let t=h[n];if(void 0!==t)return[n,t.fragment]}let i=document.createDocumentFragment();return n=h.length,h.push({fragment:i,order:e,optgroup:t}),[n,i]};for(e=0;e0&&(u=u.cloneNode(!0),Ot(u,{id:a.$id+"-clone-"+n,"aria-selected":null}),u.classList.add("ts-cloned"),kt(u,"active"),p.activeOption&&p.activeOption.dataset.value==s&&c&&c.dataset.group===r.toString()&&(v=u)),l.appendChild(u),""!=r&&(d[r]=i)}}var w;p.settings.lockOptgroupOrder&&h.sort(((t,e)=>t.order-e.order)),a=document.createDocumentFragment(),gt(h,(t=>{let e=t.fragment,n=t.optgroup;if(!e||!e.children.length)return;let i=p.optgroups[n];if(void 0!==i){let t=document.createDocumentFragment(),n=p.render("optgroup_header",i);ft(t,n),ft(t,e);let s=p.render("optgroup",{group:i,options:t});ft(a,s)}else ft(a,e)})),b.innerHTML="",ft(b,a),p.settings.highlight&&(w=b.querySelectorAll("span.highlight"),Array.prototype.forEach.call(w,(function(t){var e=t.parentNode;e.replaceChild(t.firstChild,t),e.normalize()})),g.query.length&&g.tokens.length&>(g.tokens,(t=>{Ct(b,t.regex)})));var k=t=>{let e=p.render(t,{input:m});return e&&(y=!0,b.insertBefore(e,b.firstChild)),e};if(p.loading?k("loading"):p.settings.shouldLoad.call(p,m)?0===g.items.length&&k("no_results"):k("not_loading"),(l=p.canCreate(m))&&(u=k("option_create")),p.hasOptions=g.items.length>0||l,y){if(g.items.length>0){if(v||"single"!==p.settings.mode||null==p.items[0]||(v=p.getOption(p.items[0])),!b.contains(v)){let t=0;u&&!p.settings.addPrecedence&&(t=1),v=p.selectable()[t]}}else u&&(v=u);t&&!p.isOpen&&(p.open(),p.scrollToOption(v,"auto")),p.setActiveOption(v)}else p.clearActiveOption(),t&&p.isOpen&&p.close(!1)}selectable(){return this.dropdown_content.querySelectorAll("[data-selectable]")}addOption(t,e=!1){const n=this;if(Array.isArray(t))return n.addOptions(t,e),!1;const i=rt(t[n.settings.valueField]);return null!==i&&!n.options.hasOwnProperty(i)&&(t.$order=t.$order||++n.order,t.$id=n.inputId+"-opt-"+t.$order,n.options[i]=t,n.lastQuery=null,e&&(n.userOptions[i]=e,n.trigger("option_add",i,t)),i)}addOptions(t,e=!1){gt(t,(t=>{this.addOption(t,e)}))}registerOption(t){return this.addOption(t)}registerOptionGroup(t){var e=rt(t[this.settings.optgroupValueField]);return null!==e&&(t.$order=t.$order||++this.order,this.optgroups[e]=t,e)}addOptionGroup(t,e){var n;e[this.settings.optgroupValueField]=t,(n=this.registerOptionGroup(e))&&this.trigger("optgroup_add",n,e)}removeOptionGroup(t){this.optgroups.hasOwnProperty(t)&&(delete this.optgroups[t],this.clearCache(),this.trigger("optgroup_remove",t))}clearOptionGroups(){this.optgroups={},this.clearCache(),this.trigger("optgroup_clear")}updateOption(t,e){const n=this;var i,s;const r=rt(t),o=rt(e[n.settings.valueField]);if(null===r)return;const a=n.options[r];if(null==a)return;if("string"!=typeof o)throw new Error("Value must be set in option data");const l=n.getOption(r),c=n.getItem(r);if(e.$order=e.$order||a.$order,delete n.options[r],n.uncacheValue(o),n.options[o]=e,l){if(n.dropdown_content.contains(l)){const t=n._render("option",e);Lt(l,t),n.activeOption===l&&n.setActiveOption(t)}l.remove()}c&&(-1!==(s=n.items.indexOf(r))&&n.items.splice(s,1,o),i=n._render("item",e),c.classList.contains("active")&&wt(i,"active"),Lt(c,i)),n.lastQuery=null}removeOption(t,e){const n=this;t=ot(t),n.uncacheValue(t),delete n.userOptions[t],delete n.options[t],n.lastQuery=null,n.trigger("option_remove",t),n.removeItem(t,e)}clearOptions(t){const e=(t||this.clearFilter).bind(this);this.loadedSearches={},this.userOptions={},this.clearCache();const n={};gt(this.options,((t,i)=>{e(t,i)&&(n[i]=t)})),this.options=this.sifter.items=n,this.lastQuery=null,this.trigger("option_clear")}clearFilter(t,e){return this.items.indexOf(e)>=0}getOption(t,e=!1){const n=rt(t);if(null===n)return null;const i=this.options[n];if(null!=i){if(i.$div)return i.$div;if(e)return this._render("option",i)}return null}getAdjacent(t,e,n="option"){var i;if(!t)return null;i="item"==n?this.controlChildren():this.dropdown_content.querySelectorAll("[data-selectable]");for(let n=0;n0?i[n+1]:i[n-1];return null}getItem(t){if("object"==typeof t)return t;var e=rt(t);return null!==e?this.control.querySelector(`[data-value="${mt(e)}"]`):null}addItems(t,e){var n=this,i=Array.isArray(t)?t:[t];const s=(i=i.filter((t=>-1===n.items.indexOf(t))))[i.length-1];i.forEach((t=>{n.isPending=t!==s,n.addItem(t,e)}))}addItem(t,e){ct(this,e?[]:["change","dropdown_close"],(()=>{var n,i;const s=this,r=s.settings.mode,o=rt(t);if((!o||-1===s.items.indexOf(o)||("single"===r&&s.close(),"single"!==r&&s.settings.duplicates))&&null!==o&&s.options.hasOwnProperty(o)&&("single"===r&&s.clear(e),"multi"!==r||!s.isFull())){if(n=s._render("item",s.options[o]),s.control.contains(n)&&(n=n.cloneNode(!0)),i=s.isFull(),s.items.splice(s.caretPos,0,o),s.insertAtCaret(n),s.isSetup){if(!s.isPending&&s.settings.hideSelected){let t=s.getOption(o),e=s.getAdjacent(t,1);e&&s.setActiveOption(e)}s.isPending||s.settings.closeAfterSelect||s.refreshOptions(s.isFocused&&"single"!==r),0!=s.settings.closeAfterSelect&&s.isFull()?s.close():s.isPending||s.positionDropdown(),s.trigger("item_add",o,n),s.isPending||s.updateOriginalInput({silent:e})}(!s.isPending||!i&&s.isFull())&&(s.inputState(),s.refreshState())}}))}removeItem(t=null,e){const n=this;if(!(t=n.getItem(t)))return;var i,s;const r=t.dataset.value;i=St(t),t.remove(),t.classList.contains("active")&&(s=n.activeItems.indexOf(t),n.activeItems.splice(s,1),kt(t,"active")),n.items.splice(i,1),n.lastQuery=null,!n.settings.persist&&n.userOptions.hasOwnProperty(r)&&n.removeOption(r,e),i{})){3===arguments.length&&(e=arguments[2]),"function"!=typeof e&&(e=()=>{});var n,i=this,s=i.caretPos;if(t=t||i.inputValue(),!i.canCreate(t))return e(),!1;i.lock();var r=!1,o=t=>{if(i.unlock(),!t||"object"!=typeof t)return e();var n=rt(t[i.settings.valueField]);if("string"!=typeof n)return e();i.setTextboxValue(),i.addOption(t,!0),i.setCaret(s),i.addItem(n),e(t),r=!0};return n="function"==typeof i.settings.create?i.settings.create.call(this,t,o):{[i.settings.labelField]:t,[i.settings.valueField]:t},r||o(n),!0}refreshItems(){var t=this;t.lastQuery=null,t.isSetup&&t.addItems(t.items),t.updateOriginalInput(),t.refreshState()}refreshState(){const t=this;t.refreshValidityState();const e=t.isFull(),n=t.isLocked;t.wrapper.classList.toggle("rtl",t.rtl);const i=t.wrapper.classList;var s;i.toggle("focus",t.isFocused),i.toggle("disabled",t.isDisabled),i.toggle("readonly",t.isReadOnly),i.toggle("required",t.isRequired),i.toggle("invalid",!t.isValid),i.toggle("locked",n),i.toggle("full",e),i.toggle("input-active",t.isFocused&&!t.isInputHidden),i.toggle("dropdown-active",t.isOpen),i.toggle("has-options",(s=t.options,0===Object.keys(s).length)),i.toggle("has-items",t.items.length>0)}refreshValidityState(){var t=this;t.input.validity&&(t.isValid=t.input.validity.valid,t.isInvalid=!t.isValid)}isFull(){return null!==this.settings.maxItems&&this.items.length>=this.settings.maxItems}updateOriginalInput(t={}){const e=this;var n,i;const s=e.input.querySelector('option[value=""]');if(e.is_select_tag){const r=[],o=e.input.querySelectorAll("option:checked").length;function a(t,n,i){return t||(t=vt('")),t!=s&&e.input.append(t),r.push(t),(t!=s||o>0)&&(t.selected=!0),t}e.input.querySelectorAll("option:checked").forEach((t=>{t.selected=!1})),0==e.items.length&&"single"==e.settings.mode?a(s,"",""):e.items.forEach((t=>{if(n=e.options[t],i=n[e.settings.labelField]||"",r.includes(n.$option)){a(e.input.querySelector(`option[value="${mt(t)}"]:not(:checked)`),t,i)}else n.$option=a(n.$option,t,i)}))}else e.input.value=e.getValue();e.isSetup&&(t.silent||e.trigger("change",e.getValue()))}open(){var t=this;t.isLocked||t.isOpen||"multi"===t.settings.mode&&t.isFull()||(t.isOpen=!0,Ot(t.focus_node,{"aria-expanded":"true"}),t.refreshState(),_t(t.dropdown,{visibility:"hidden",display:"block"}),t.positionDropdown(),_t(t.dropdown,{visibility:"visible",display:"block"}),t.focus(),t.trigger("dropdown_open",t.dropdown))}close(t=!0){var e=this,n=e.isOpen;t&&(e.setTextboxValue(),"single"===e.settings.mode&&e.items.length&&e.inputState()),e.isOpen=!1,Ot(e.focus_node,{"aria-expanded":"false"}),_t(e.dropdown,{display:"none"}),e.settings.hideSelected&&e.clearActiveOption(),e.refreshState(),n&&e.trigger("dropdown_close",e.dropdown)}positionDropdown(){if("body"===this.settings.dropdownParent){var t=this.control,e=t.getBoundingClientRect(),n=t.offsetHeight+e.top+window.scrollY,i=e.left+window.scrollX;_t(this.dropdown,{width:e.width+"px",top:n+"px",left:i+"px"})}}clear(t){var e=this;if(e.items.length){var n=e.controlChildren();gt(n,(t=>{e.removeItem(t,!0)})),e.inputState(),t||e.updateOriginalInput(),e.trigger("clear")}}insertAtCaret(t){const e=this,n=e.caretPos,i=e.control;i.insertBefore(t,i.children[n]||null),e.setCaret(n+1)}deleteSelection(t){var e,n,i,s,r,o=this;e=t&&8===t.keyCode?-1:1,n={start:(r=o.control_input).selectionStart||0,length:(r.selectionEnd||0)-(r.selectionStart||0)};const a=[];if(o.activeItems.length)s=xt(o.activeItems,e),i=St(s),e>0&&i++,gt(o.activeItems,(t=>a.push(t)));else if((o.isFocused||"single"===o.settings.mode)&&o.items.length){const t=o.controlChildren();let i;e<0&&0===n.start&&0===n.length?i=t[o.caretPos-1]:e>0&&n.start===o.inputValue().length&&(i=t[o.caretPos]),void 0!==i&&a.push(i)}if(!o.shouldDelete(a,t))return!1;for(ut(t,!0),void 0!==i&&o.setCaret(i);a.length;)o.removeItem(a.pop());return o.inputState(),o.positionDropdown(),o.refreshOptions(!1),!0}shouldDelete(t,e){const n=t.map((t=>t.dataset.value));return!(!n.length||"function"==typeof this.settings.onDelete&&!1===this.settings.onDelete(n,e))}advanceSelection(t,e){var n,i,s=this;s.rtl&&(t*=-1),s.inputValue().length||(ht(Mt,e)||ht("shiftKey",e)?(i=(n=s.getLastActive(t))?n.classList.contains("active")?s.getAdjacent(n,t,"item"):n:t>0?s.control_input.nextElementSibling:s.control_input.previousElementSibling)&&(i.classList.contains("active")&&s.removeActiveItem(n),s.setActiveItemClass(i)):s.moveCaret(t))}moveCaret(t){}getLastActive(t){let e=this.control.querySelector(".last-active");if(e)return e;var n=this.control.querySelectorAll(".active");return n?xt(n,t):void 0}setCaret(t){this.caretPos=this.items.length}controlChildren(){return Array.from(this.control.querySelectorAll("[data-ts-item]"))}lock(){this.setLocked(!0)}unlock(){this.setLocked(!1)}setLocked(t=this.isReadOnly||this.isDisabled){this.isLocked=t,this.refreshState()}disable(){this.setDisabled(!0),this.close()}enable(){this.setDisabled(!1)}setDisabled(t){this.focus_node.tabIndex=t?-1:this.tabIndex,this.isDisabled=t,this.input.disabled=t,this.control_input.disabled=t,this.setLocked()}setReadOnly(t){this.isReadOnly=t,this.input.readOnly=t,this.control_input.readOnly=t,this.setLocked()}destroy(){var t=this,e=t.revertSettings;t.trigger("destroy"),t.off(),t.wrapper.remove(),t.dropdown.remove(),t.input.innerHTML=e.innerHTML,t.input.tabIndex=e.tabIndex,kt(t.input,"tomselected","ts-hidden-accessible"),t._destroy(),delete t.input.tomselect}render(t,e){var n,i;const s=this;if("function"!=typeof this.settings.render[t])return null;if(!(i=s.settings.render[t].call(this,e,at)))return null;if(i=vt(i),"option"===t||"option_create"===t?e[s.settings.disabledField]?Ot(i,{"aria-disabled":"true"}):Ot(i,{"data-selectable":""}):"optgroup"===t&&(n=e.group[s.settings.optgroupValueField],Ot(i,{"data-group":n}),e.group[s.settings.disabledField]&&Ot(i,{"data-disabled":""})),"option"===t||"item"===t){const n=ot(e[s.settings.valueField]);Ot(i,{"data-value":n}),"item"===t?(wt(i,s.settings.itemClass),Ot(i,{"data-ts-item":""})):(wt(i,s.settings.optionClass),Ot(i,{role:"option",id:e.$id}),e.$div=i,s.options[n]=e)}return i}_render(t,e){const n=this.render(t,e);if(null==n)throw"HTMLElement expected";return n}clearCache(){gt(this.options,(t=>{t.$div&&(t.$div.remove(),delete t.$div)}))}uncacheValue(t){const e=this.getOption(t);e&&e.remove()}canCreate(t){return this.settings.create&&t.length>0&&this.settings.createFilter.call(this,t)}hook(t,e,n){var i=this,s=i[e];i[e]=function(){var e,r;return"after"===t&&(e=s.apply(i,arguments)),r=n.apply(i,arguments),"instead"===t?r:("before"===t&&(e=s.apply(i,arguments)),e)}}}const Pt=t=>"boolean"==typeof t?t?"1":"0":t+"",jt=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},qt=t=>"string"==typeof t&&t.indexOf("<")>-1;const Ht=t=>"string"==typeof t&&t.indexOf("<")>-1;const Vt=(t,e,n,i)=>{t.addEventListener(e,n,i)},$t=t=>"string"==typeof t&&t.indexOf("<")>-1,Bt=(t,e)=>{((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(e,((e,n)=>{null==e?t.removeAttribute(n):t.setAttribute(n,""+e)}))};const Rt=t=>"string"==typeof t&&t.indexOf("<")>-1;const Wt=t=>{var e=[];return((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},zt=t=>(Array.isArray(t)||(t=[t]),t);const Ut=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Yt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},Yt=t=>"string"==typeof t&&t.indexOf("<")>-1,Zt=t=>{var e=[];return((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},Kt=t=>(Array.isArray(t)||(t=[t]),t);const Jt=(t,e,n,i)=>{t.addEventListener(e,n,i)};const Gt=(t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())},Qt=(t,e,n,i)=>{t.addEventListener(e,n,i)},Xt=t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(te(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)},te=t=>"string"==typeof t&&t.indexOf("<")>-1;const ee=t=>{var e=[];return((t,e)=>{if(Array.isArray(t))t.forEach(e);else for(var n in t)t.hasOwnProperty(n)&&e(t[n],n)})(t,(t=>{"string"==typeof t&&(t=t.trim().split(/[\t\n\f\r\s]/)),Array.isArray(t)&&(e=e.concat(t))})),e.filter(Boolean)},ne=t=>(Array.isArray(t)||(t=[t]),t);Ft.define("change_listener",(function(){var t,e,n,i;t=this.input,e="change",n=()=>{this.sync()},t.addEventListener(e,n,i)})),Ft.define("checkbox_options",(function(t){var e=this,n=e.onOptionSelect;e.settings.hideSelected=!1;const i=Object.assign({className:"tomselect-checkbox",checkedClassNames:void 0,uncheckedClassNames:void 0},t);var s=function(t,e){e?(t.checked=!0,i.uncheckedClassNames&&t.classList.remove(...i.uncheckedClassNames),i.checkedClassNames&&t.classList.add(...i.checkedClassNames)):(t.checked=!1,i.checkedClassNames&&t.classList.remove(...i.checkedClassNames),i.uncheckedClassNames&&t.classList.add(...i.uncheckedClassNames))},r=function(t){setTimeout((()=>{var e=t.querySelector("input."+i.className);e instanceof HTMLInputElement&&s(e,t.classList.contains("selected"))}),1)};e.hook("after","setupTemplates",(()=>{var t=e.settings.render.option;e.settings.render.option=(n,r)=>{var o=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(qt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(t.call(e,n,r)),a=document.createElement("input");i.className&&a.classList.add(i.className),a.addEventListener("click",(function(t){jt(t)})),a.type="checkbox";const l=null==(c=n[e.settings.valueField])?null:Pt(c);var c;return s(a,!!(l&&e.items.indexOf(l)>-1)),o.prepend(a),o}})),e.on("item_remove",(t=>{var n=e.getOption(t);n&&(n.classList.remove("selected"),r(n))})),e.on("item_add",(t=>{var n=e.getOption(t);n&&r(n)})),e.hook("instead","onOptionSelect",((t,i)=>{if(i.classList.contains("selected"))return i.classList.remove("selected"),e.removeItem(i.dataset.value),e.refreshOptions(),void jt(t,!0);n.call(e,t,i),r(i)}))})),Ft.define("clear_button",(function(t){const e=this,n=Object.assign({className:"clear-button",title:"Clear All",html:t=>`
⨯
`},t);e.on("initialize",(()=>{var t=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Ht(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(n.html(n));t.addEventListener("click",(t=>{e.isLocked||(e.clear(),"single"===e.settings.mode&&e.settings.allowEmptyOption&&e.addItem(""),t.preventDefault(),t.stopPropagation())})),e.control.appendChild(t)}))})),Ft.define("drag_drop",(function(){var t=this;if("multi"!==t.settings.mode)return;var e=t.lock,n=t.unlock;let i,s=!0;t.hook("after","setupTemplates",(()=>{var e=t.settings.render.item;t.settings.render.item=(n,r)=>{const o=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if($t(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(e.call(t,n,r));Bt(o,{draggable:"true"});const a=t=>{t.preventDefault(),o.classList.add("ts-drag-over"),l(o,i)},l=(t,e)=>{var n,i,s;void 0!==e&&(((t,e)=>{do{var n;if(t==(e=null==(n=e)?void 0:n.previousElementSibling))return!0}while(e&&e.previousElementSibling);return!1})(e,o)?(i=e,null==(s=(n=t).parentNode)||s.insertBefore(i,n.nextSibling)):((t,e)=>{var n;null==(n=t.parentNode)||n.insertBefore(e,t)})(t,e))};return Vt(o,"mousedown",(t=>{s||((t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())})(t),t.stopPropagation()})),Vt(o,"dragstart",(t=>{i=o,setTimeout((()=>{o.classList.add("ts-dragging")}),0)})),Vt(o,"dragenter",a),Vt(o,"dragover",a),Vt(o,"dragleave",(()=>{o.classList.remove("ts-drag-over")})),Vt(o,"dragend",(()=>{var e;document.querySelectorAll(".ts-drag-over").forEach((t=>t.classList.remove("ts-drag-over"))),null==(e=i)||e.classList.remove("ts-dragging"),i=void 0;var n=[];t.control.querySelectorAll("[data-value]").forEach((t=>{if(t.dataset.value){let e=t.dataset.value;e&&n.push(e)}})),t.setValue(n)})),o}})),t.hook("instead","lock",(()=>(s=!1,e.call(t)))),t.hook("instead","unlock",(()=>(s=!0,n.call(t))))})),Ft.define("dropdown_header",(function(t){const e=this,n=Object.assign({title:"Untitled",headerClass:"dropdown-header",titleRowClass:"dropdown-header-title",labelClass:"dropdown-header-label",closeClass:"dropdown-header-close",html:t=>'
'+t.title+'×
'},t);e.on("initialize",(()=>{var t=(t=>{if(t.jquery)return t[0];if(t instanceof HTMLElement)return t;if(Rt(t)){var e=document.createElement("template");return e.innerHTML=t.trim(),e.content.firstChild}return document.querySelector(t)})(n.html(n)),i=t.querySelector("."+n.closeClass);i&&i.addEventListener("click",(t=>{((t,e=!1)=>{t&&(t.preventDefault(),e&&t.stopPropagation())})(t,!0),e.close()})),e.dropdown.insertBefore(t,e.dropdown.firstChild)}))})),Ft.define("caret_position",(function(){var t=this;t.hook("instead","setCaret",(e=>{"single"!==t.settings.mode&&t.control.contains(t.control_input)?(e=Math.max(0,Math.min(t.items.length,e)))==t.caretPos||t.isPending||t.controlChildren().forEach(((n,i)=>{i{if(!t.isFocused)return;const n=t.getLastActive(e);if(n){const i=((t,e)=>{if(!t)return-1;e=e||t.nodeName;for(var n=0;t=t.previousElementSibling;)t.matches(e)&&n++;return n})(n);t.setCaret(e>0?i+1:i),t.setActiveItem(),((t,...e)=>{var n=Wt(e);(t=zt(t)).map((t=>{n.map((e=>{t.classList.remove(e)}))}))})(n,"last-active")}else t.setCaret(t.caretPos+e)}))})),Ft.define("dropdown_input",(function(){const t=this;t.settings.shouldOpen=!0,t.hook("before","setup",(()=>{t.focus_node=t.control,((t,...e)=>{var n=Zt(e);(t=Kt(t)).map((t=>{n.map((e=>{t.classList.add(e)}))}))})(t.control_input,"dropdown-input");const e=Ut(''),null!==e.url){if(n+='"}this.createFromClickEvent(e,n)}createFromClickEvent(e,t){const n=this.getContextMenuElement();n.classList.contains("action-dropdown")||n.classList.add("action-dropdown"),n.innerHTML=t,n.style.position="fixed",n.style.top=e.clientY+"px",n.style.left=e.clientX+"px";const r=e=>{e.target.classList.contains("dropdown-toggle")||e.target.classList.contains("dropdown-divider")||(n.classList.remove("d-block"),n.classList.contains("d-none")||n.classList.add("d-none"),n.removeEventListener("click",r),document.removeEventListener("click",r))};n.addEventListener("click",r),document.addEventListener("click",r),n.classList.remove("d-none"),n.classList.contains("d-block")||n.classList.add("d-block")}static createForDataTable(e){[].slice.call(document.querySelectorAll(e)).map((e=>{null!==e.querySelector("td.actions div.dropdown-menu")&&e.addEventListener("contextmenu",(t=>{let n=t.target;for(;null!==n;){const e=n.tagName.toUpperCase();if("TH"===e||"TABLE"===e||"BODY"===e)return;if("TR"===e)break;n=n.parentNode}if(null===n||!n.matches("table.dataTable tbody tr"))return;const i=n.querySelector("td.actions div.dropdown-menu");if(null===i)return;t.preventDefault();new r(e.dataset.contextMenu).createFromClickEvent(t,i.innerHTML)}))}))}}},3445:function(e,t){"use strict";t.A={code:"sv",week:{dow:1,doy:4},buttonText:{prev:"Förra",next:"Nästa",today:"Idag",month:"Månad",week:"Vecka",day:"Dag",list:"Program"},buttonHints:{prev:function(e){return"Föregående ".concat(e.toLocaleLowerCase())},next:function(e){return"Nästa ".concat(e.toLocaleLowerCase())},today:function(e){return("Program"===e?"Detta":"Denna")+" "+e.toLocaleLowerCase()}},viewHint:"$0 vy",navLinkHint:"Gå till $0",moreLinkHint:function(e){return"Visa ytterligare ".concat(e," händelse").concat(1===e?"":"r")},weekText:"v.",weekTextLong:"Vecka",allDayText:"Heldag",moreLinkText:"till",noEventsText:"Inga händelser att visa",closeHint:"Stäng",timeHint:"Klockan",eventHint:"Händelse"}},3578:function(e,t){"use strict";t.A={code:"cs",week:{dow:1,doy:4},buttonText:{prev:"Dříve",next:"Později",today:"Nyní",month:"Měsíc",week:"Týden",day:"Den",list:"Agenda"},weekText:"Týd",allDayText:"Celý den",moreLinkText:function(e){return"+další: "+e},noEventsText:"Žádné akce k zobrazení"}},3793:function(e,t){"use strict";t.A={code:"ja",buttonText:{prev:"前",next:"次",today:"今日",month:"月",week:"週",day:"日",list:"予定リスト"},weekText:"週",allDayText:"終日",moreLinkText:function(e){return"他 "+e+" 件"},noEventsText:"表示する予定はありません"}},4019:function(e,t){"use strict";t.A={code:"da",week:{dow:1,doy:4},buttonText:{prev:"Forrige",next:"Næste",today:"I dag",month:"Måned",week:"Uge",day:"Dag",list:"Agenda"},weekText:"Uge",allDayText:"Hele dagen",moreLinkText:"flere",noEventsText:"Ingen arrangementer at vise"}},4053:function(e,t){"use strict";t.A={code:"fi",week:{dow:1,doy:4},buttonText:{prev:"Edellinen",next:"Seuraava",today:"Tänään",month:"Kuukausi",week:"Viikko",day:"Päivä",list:"Tapahtumat"},weekText:"Vk",allDayText:"Koko päivä",moreLinkText:"lisää",noEventsText:"Ei näytettäviä tapahtumia"}},4661:function(e,t,n){"use strict";n.d(t,{A:function(){return Nu}});var r=n(9336),i=function(e,t){return i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},i(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}i(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var s=function(){return s=Object.assign||function(e){for(var t,n=1,r=arguments.length;n2&&(s.children=arguments.length>3?l.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(o in e.defaultProps)void 0===s[o]&&(s[o]=e.defaultProps[o]);return T(e,s,r,i,null)}function T(e,t,n,r,i){var o={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==i?++c:i};return null==i&&null!=u.vnode&&u.vnode(o),o}function E(){return{current:null}}function D(e){return e.children}function S(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||y.test(t)?n:n+"px"}function C(e,t,n,r,i){var o;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||S(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||S(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])o=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+o]=n,n?r||e.addEventListener(t,o?x:k,o):e.removeEventListener(t,o?x:k,o);else if("dangerouslySetInnerHTML"!==t){if(i)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&-1==t.indexOf("-")?e.removeAttribute(t):e.setAttribute(t,n))}}function k(e){d=!0;try{return this.l[e.type+!1](u.event?u.event(e):e)}finally{d=!1}}function x(e){d=!0;try{return this.l[e.type+!0](u.event?u.event(e):e)}finally{d=!1}}function O(e,t){this.props=e,this.context=t}function M(e,t){if(null==t)return e.__?M(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&h.sort((function(e,t){return e.__v.__b-t.__v.__b})));N.__r=0}function P(e,t,n,r,i,o,s,a,l,u){var c,d,h,f,p,m,y,b=r&&r.__k||v,_=b.length;for(n.__k=[],c=0;c0?T(f.type,f.props,f.key,f.ref?f.ref:null,f.__v):f)){if(f.__=n,f.__b=n.__b+1,null===(h=b[c])||h&&f.key==h.key&&f.type===h.type)b[c]=void 0;else for(d=0;d<_;d++){if((h=b[d])&&f.key==h.key&&f.type===h.type){b[d]=void 0;break}h=null}V(e,f,h=h||g,i,o,s,a,l,u),p=f.__e,(d=f.ref)&&h.ref!=d&&(y||(y=[]),h.ref&&y.push(h.ref,null,f),y.push(d,f.__c||p,f)),null!=p?(null==m&&(m=p),"function"==typeof f.type&&f.__k===h.__k?f.__d=l=L(f,l,e):l=Y(e,f,h,b,p,l),"function"==typeof n.type&&(n.__d=l)):l&&h.__e==l&&l.parentNode!=e&&(l=M(h))}for(n.__e=m,c=_;c--;)null!=b[c]&&("function"==typeof n.type&&null!=b[c].__e&&b[c].__e==n.__d&&(n.__d=z(r).nextSibling),B(b[c],b[c]));if(y)for(c=0;c=0;t--)if((n=e.__k[t])&&(r=z(n)))return r;return null}function V(e,t,n,r,i,o,s,a,l){var c,d,h,f,p,m,g,v,y,_,w,T,E,S,C,k=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,o=[a]),(c=u.__b)&&c(t);try{e:if("function"==typeof k){if(v=t.props,y=(c=k.contextType)&&r[c.__c],_=c?y?y.props.value:c.__:r,n.__c?g=(d=t.__c=n.__c).__=d.__E:("prototype"in k&&k.prototype.render?t.__c=d=new k(v,_):(t.__c=d=new O(v,_),d.constructor=k,d.render=F),y&&y.sub(d),d.props=v,d.state||(d.state={}),d.context=_,d.__n=r,h=d.__d=!0,d.__h=[],d._sb=[]),null==d.__s&&(d.__s=d.state),null!=k.getDerivedStateFromProps&&(d.__s==d.state&&(d.__s=b({},d.__s)),b(d.__s,k.getDerivedStateFromProps(v,d.__s))),f=d.props,p=d.state,d.__v=t,h)null==k.getDerivedStateFromProps&&null!=d.componentWillMount&&d.componentWillMount(),null!=d.componentDidMount&&d.__h.push(d.componentDidMount);else{if(null==k.getDerivedStateFromProps&&v!==f&&null!=d.componentWillReceiveProps&&d.componentWillReceiveProps(v,_),!d.__e&&null!=d.shouldComponentUpdate&&!1===d.shouldComponentUpdate(v,d.__s,_)||t.__v===n.__v){for(t.__v!==n.__v&&(d.props=v,d.state=d.__s,d.__d=!1),t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),w=0;w3;)n.pop()();if(n[1]>>1,1),t.i.removeChild(e)}}),q(w(we,{context:t.context},e.__v),t.l)):t.l&&t.componentWillUnmount()}function Ee(e,t){var n=w(Te,{__v:e,i:t});return n.containerInfo=t,n}(be.prototype=new O).__a=function(e){var t=this,n=ye(t.__v),r=t.o.get(e);return r[0]++,function(i){var o=function(){t.props.revealOrder?(r.push(i),_e(t,e,r)):i()};n?n(o):o()}},be.prototype.render=function(e){this.u=null,this.o=new Map;var t=H(e.children);e.revealOrder&&"b"===e.revealOrder[0]&&t.reverse();for(var n=t.length;n--;)this.o.set(t[n],this.u=[1,0,this.u]);return e.children},be.prototype.componentDidUpdate=be.prototype.componentDidMount=function(){var e=this;this.o.forEach((function(t,n){_e(e,n,t)}))};var De="undefined"!=typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,Se=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Ce="undefined"!=typeof document,ke=function(e){return("undefined"!=typeof Symbol&&"symbol"==typeof Symbol()?/fil|che|rad/i:/fil|che|ra/i).test(e)};O.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach((function(e){Object.defineProperty(O.prototype,e,{configurable:!0,get:function(){return this["UNSAFE_"+e]},set:function(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,value:t})}})}));var xe=u.event;function Oe(){}function Me(){return this.cancelBubble}function Ae(){return this.defaultPrevented}u.event=function(e){return xe&&(e=xe(e)),e.persist=Oe,e.isPropagationStopped=Me,e.isDefaultPrevented=Ae,e.nativeEvent=e};var Ie={configurable:!0,get:function(){return this.class}},Re=u.vnode;u.vnode=function(e){var t=e.type,n=e.props,r=n;if("string"==typeof t){var i=-1===t.indexOf("-");for(var o in r={},n){var s=n[o];Ce&&"children"===o&&"noscript"===t||"value"===o&&"defaultValue"in n&&null==s||("defaultValue"===o&&"value"in n&&null==n.value?o="value":"download"===o&&!0===s?s="":/ondoubleclick/i.test(o)?o="ondblclick":/^onchange(textarea|input)/i.test(o+t)&&!ke(n.type)?o="oninput":/^onfocus$/i.test(o)?o="onfocusin":/^onblur$/i.test(o)?o="onfocusout":/^on(Ani|Tra|Tou|BeforeInp|Compo)/.test(o)?o=o.toLowerCase():i&&Se.test(o)?o=o.replace(/[A-Z0-9]/g,"-$&").toLowerCase():null===s&&(s=void 0),/^oninput$/i.test(o)&&(o=o.toLowerCase(),r[o]&&(o="oninputCapture")),r[o]=s)}"select"==t&&r.multiple&&Array.isArray(r.value)&&(r.value=H(n.children).forEach((function(e){e.props.selected=-1!=r.value.indexOf(e.props.value)}))),"select"==t&&null!=r.defaultValue&&(r.value=H(n.children).forEach((function(e){e.props.selected=r.multiple?-1!=r.defaultValue.indexOf(e.props.value):r.defaultValue==e.props.value}))),e.props=r,n.class!=n.className&&(Ie.enumerable="className"in n,null!=n.className&&(r.class=n.className),Object.defineProperty(r,"className",Ie))}e.$$typeof=De,Re&&Re(e)};var Ne=u.__r;u.__r=function(e){Ne&&Ne(e),e.__c};var Pe="undefined"!=typeof globalThis?globalThis:window;Pe.FullCalendarVDom?console.warn("FullCalendar VDOM already loaded"):Pe.FullCalendarVDom={Component:O,createElement:w,render:q,createRef:E,Fragment:D,createContext:function(e){var t=Z(e),n=t.Provider;return t.Provider=function(){var e=this,t=!this.getChildContext,r=n.apply(this,arguments);if(t){var i=[];this.shouldComponentUpdate=function(t){e.props.value!==t.value&&i.forEach((function(e){e.context=t.value,e.forceUpdate()}))},this.sub=function(e){i.push(e);var t=e.componentWillUnmount;e.componentWillUnmount=function(){i.splice(i.indexOf(e),1),t&&t.call(e)}}}return r},t},createPortal:Ee,flushSync:function(e){e();var t=u.debounceRendering,n=[];function r(e){n.push(e)}u.debounceRendering=r,q(w(Le,{}),document.createElement("div"));for(;n.length;)n.shift()();u.debounceRendering=t},unmountComponentAtNode:function(e){q(null,e)}};var Le=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){return w("div",{})},t.prototype.componentDidMount=function(){this.setState({})},t}(O);if("undefined"==typeof FullCalendarVDom)throw new Error("Please import the top-level fullcalendar lib before attempting to import a plugin.");var He=FullCalendarVDom.Component,Ye=FullCalendarVDom.createElement,ze=FullCalendarVDom.render,Ve=FullCalendarVDom.createRef,We=FullCalendarVDom.Fragment,Ue=FullCalendarVDom.createContext,je=FullCalendarVDom.createPortal,Be=FullCalendarVDom.flushSync,Fe=FullCalendarVDom.unmountComponentAtNode,qe=function(){function e(e,t){this.context=e,this.internalEventSource=t}return e.prototype.remove=function(){this.context.dispatch({type:"REMOVE_EVENT_SOURCE",sourceId:this.internalEventSource.sourceId})},e.prototype.refetch=function(){this.context.dispatch({type:"FETCH_EVENT_SOURCES",sourceIds:[this.internalEventSource.sourceId],isRefetch:!0})},Object.defineProperty(e.prototype,"id",{get:function(){return this.internalEventSource.publicId},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"url",{get:function(){return this.internalEventSource.meta.url},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"format",{get:function(){return this.internalEventSource.meta.format},enumerable:!1,configurable:!0}),e}();function Ze(e){e.parentNode&&e.parentNode.removeChild(e)}function Ge(e,t){if(e.closest)return e.closest(t);if(!document.documentElement.contains(e))return null;do{if($e(e,t))return e;e=e.parentElement||e.parentNode}while(null!==e&&1===e.nodeType);return null}function $e(e,t){return(e.matches||e.matchesSelector||e.msMatchesSelector).call(e,t)}var Ke=/(top|left|right|bottom|width|height)$/i;function Xe(e,t){for(var n in t)Je(e,n,t[n])}function Je(e,t,n){null==n?e.style[t]="":"number"==typeof n&&Ke.test(t)?e.style[t]=n+"px":e.style[t]=n}function Qe(e){var t,n;return null!==(n=null===(t=e.composedPath)||void 0===t?void 0:t.call(e)[0])&&void 0!==n?n:e.target}function et(e){return e.getRootNode?e.getRootNode():document}var tt=0;function nt(){return"fc-dom-"+(tt+=1)}function rt(e){e.preventDefault()}function it(e,t,n,r){var i=function(e,t){return function(n){var r=Ge(n.target,e);r&&t.call(r,n,r)}}(n,r);return e.addEventListener(t,i),function(){e.removeEventListener(t,i)}}var ot=["webkitTransitionEnd","otransitionend","oTransitionEnd","msTransitionEnd","transitionend"];function st(e){return s({onClick:e},at(e))}function at(e){return{tabIndex:0,onKeyDown:function(t){"Enter"!==t.key&&" "!==t.key||(e(t),t.preventDefault())}}}var lt=0;function ut(){return String(lt+=1)}function ct(){document.body.classList.add("fc-not-allowed")}function dt(){document.body.classList.remove("fc-not-allowed")}function ht(e,t,n){return n.func?n.func(e,t):function(e,t){if(!e&&!t)return 0;if(null==t)return-1;if(null==e)return 1;if("string"==typeof e||"string"==typeof t)return String(e).localeCompare(String(t));return e-t}(e[n.field],t[n.field])*(n.order||1)}function ft(e,t){var n=String(e);return"000".substr(0,t-n.length)+n}function pt(e,t,n){return"function"==typeof e?e.apply(void 0,t):"string"==typeof e?t.reduce((function(e,t,n){return e.replace("$"+n,t||"")}),e):n}function mt(e,t){return e-t}function gt(e){return e%1==0}function vt(e){var t=e.querySelector(".fc-scrollgrid-shrink-frame"),n=e.querySelector(".fc-scrollgrid-shrink-cushion");if(!t)throw new Error("needs fc-scrollgrid-shrink-frame className");if(!n)throw new Error("needs fc-scrollgrid-shrink-cushion className");return e.getBoundingClientRect().width-t.getBoundingClientRect().width+n.getBoundingClientRect().width}var yt=["sun","mon","tue","wed","thu","fri","sat"];function bt(e,t){var n=Ot(e);return n[2]+=7*t,Mt(n)}function _t(e,t){var n=Ot(e);return n[2]+=t,Mt(n)}function wt(e,t){var n=Ot(e);return n[6]+=t,Mt(n)}function Tt(e,t){return(t.valueOf()-e.valueOf())/864e5}function Et(e,t){return It(e)===It(t)?Math.round(Tt(e,t)):null}function Dt(e){return Mt([e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()])}function St(e,t,n,r){var i=Mt([t,0,1+Ct(t,n,r)]),o=Dt(e),s=Math.round(Tt(i,o));return Math.floor(s/7)+1}function Ct(e,t,n){var r=7+t-n;return-((7+Mt([e,0,r]).getUTCDay()-t)%7)+r-1}function kt(e){return[e.getFullYear(),e.getMonth(),e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds(),e.getMilliseconds()]}function xt(e){return new Date(e[0],e[1]||0,null==e[2]?1:e[2],e[3]||0,e[4]||0,e[5]||0)}function Ot(e){return[e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate(),e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()]}function Mt(e){return 1===e.length&&(e=e.concat([0])),new Date(Date.UTC.apply(Date,e))}function At(e){return!isNaN(e.valueOf())}function It(e){return 1e3*e.getUTCHours()*60*60+1e3*e.getUTCMinutes()*60+1e3*e.getUTCSeconds()+e.getUTCMilliseconds()}function Rt(e,t,n,r){return{instanceId:ut(),defId:e,range:t,forcedStartTzo:null==n?null:n,forcedEndTzo:null==r?null:r}}var Nt=Object.prototype.hasOwnProperty;function Pt(e,t){var n={};if(t)for(var r in t){for(var i=[],o=e.length-1;o>=0;o-=1){var s=e[o][r];if("object"==typeof s&&s)i.unshift(s);else if(void 0!==s){n[r]=s;break}}i.length&&(n[r]=Pt(i))}for(o=e.length-1;o>=0;o-=1){var a=e[o];for(var l in a)l in n||(n[l]=a[l])}return n}function Lt(e,t){var n={};for(var r in e)t(e[r],r)&&(n[r]=e[r]);return n}function Ht(e,t){var n={};for(var r in e)n[r]=t(e[r],r);return n}function Yt(e){for(var t={},n=0,r=e;n10&&(null==t?r=r.replace("Z",""):0!==t&&(r=r.replace("Z",rn(t,!0)))),r}function nn(e){return e.toISOString().replace(/T.*$/,"")}function rn(e,t){void 0===t&&(t=!1);var n=e<0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),o=Math.round(r%60);return t?n+ft(i,2)+":"+ft(o,2):"GMT"+n+i+(o?":"+ft(o,2):"")}function on(e,t,n){if(e===t)return!0;var r,i=e.length;if(i!==t.length)return!1;for(r=0;r1)||"numeric"!==i.year&&"2-digit"!==i.year||"numeric"!==i.month&&"2-digit"!==i.month||"numeric"!==i.day&&"2-digit"!==i.day||(a=1);var l=this.format(e,n),u=this.format(t,n);if(l===u)return l;var c=gn(function(e,t){var n={};for(var r in e)(!(r in un)||un[r]<=t)&&(n[r]=e[r]);return n}(i,a),o,n),d=c(e),h=c(t),f=function(e,t,n,r){var i=0;for(;i=Jt(t)&&(r=_t(r,1))}return e.start&&(n=Dt(e.start),r&&r<=n&&(r=_t(n,1))),{start:n,end:r}}function Jn(e,t,n,r){return"year"===r?Gt(n.diffWholeYears(e,t),"year"):"month"===r?Gt(n.diffWholeMonths(e,t),"month"):(o=t,s=Dt(i=e),a=Dt(o),{years:0,months:0,days:Math.round(Tt(s,a)),milliseconds:o.valueOf()-a.valueOf()-(i.valueOf()-s.valueOf())});var i,o,s,a}function Qn(e,t){var n,r,i=[],o=t.start;for(e.sort(er),n=0;no&&i.push({start:o,end:r.start}),r.end>o&&(o=r.end);return ot.start)&&(null===e.start||null===t.end||e.start=e.start)&&(null===e.end||null!==t.end&&t.end<=e.end)}function ir(e,t){return(null===e.start||t>=e.start)&&(null===e.end||t=(n||t.end),isToday:t&&ir(t,r.start)}}function vr(e){return e.instance?e.instance.instanceId:e.def.defId+":"+e.range.start.toISOString()}function yr(e,t){var n=e.eventRange,r=n.def,i=n.instance,o=r.url;if(o)return{href:o};var s=t.emitter,a=t.options.eventInteractive;return null==a&&null==(a=r.interactive)&&(a=Boolean(s.hasHandlers("eventClick"))),a?at((function(e){s.trigger("eventClick",{el:e.target,event:new Lr(t,r,i),jsEvent:e,view:t.viewApi})})):{}}var br={start:An,end:An,allDay:Boolean};function _r(e,t,n){var r=function(e,t){var n=Mn(e,br),r=n.refined,i=n.extra,o=r.start?t.createMarkerMeta(r.start):null,a=r.end?t.createMarkerMeta(r.end):null,l=r.allDay;null==l&&(l=o&&o.isTimeUnspecified&&(!a||a.isTimeUnspecified));return s({range:{start:o?o.marker:null,end:a?a.marker:null},allDay:l},i)}(e,t),i=r.range;if(!i.start)return null;if(!i.end){if(null==n)return null;i.end=t.add(i.start,n)}return r}function wr(e,t,n){return s(s({},Tr(e,t,n)),{timeZone:t.timeZone})}function Tr(e,t,n){return{start:t.toDate(e.start),end:t.toDate(e.end),startStr:t.formatIso(e.start,{omitTime:n}),endStr:t.formatIso(e.end,{omitTime:n})}}function Er(e,t,n){var r=Zn({editable:!1},n),i=$n(r.refined,r.extra,"",e.allDay,!0,n);return{def:i,ui:ur(i,t),instance:Rt(i.defId,e.range),range:e.range,isStart:!0,isEnd:!0}}function Dr(e,t,n){n.emitter.trigger("select",s(s({},Sr(e,n)),{jsEvent:t?t.origEvent:null,view:n.viewApi||n.calendarApi.view}))}function Sr(e,t){for(var n,r,i={},o=0,a=t.pluginHooks.dateSpanTransforms;o=0;r-=1){var i=n[r].parseMeta(e);if(i)return{sourceDefId:r,meta:i}}return null}(o,t);if(a)return{_raw:e,isFetching:!1,latestFetchId:"",fetchRange:null,defaultAllDay:o.defaultAllDay,eventDataTransform:o.eventDataTransform,success:o.success,failure:o.failure,publicId:o.id||"",sourceId:ut(),sourceDefId:a.sourceDefId,meta:a.meta,ui:Vn(o,t),extendedProps:s}}return null}function Rr(e){return s(s(s({},Yn),Ar),e.pluginHooks.eventSourceRefiners)}function Nr(e,t){return"function"==typeof e&&(e=e()),null==e?t.createNowMarker():t.createMarker(e)}var Pr=function(){function e(){}return e.prototype.getCurrentData=function(){return this.currentDataManager.getCurrentData()},e.prototype.dispatch=function(e){return this.currentDataManager.dispatch(e)},Object.defineProperty(e.prototype,"view",{get:function(){return this.getCurrentData().viewApi},enumerable:!1,configurable:!0}),e.prototype.batchRendering=function(e){e()},e.prototype.updateSize=function(){this.trigger("_resize",!0)},e.prototype.setOption=function(e,t){this.dispatch({type:"SET_OPTION",optionName:e,rawOptionValue:t})},e.prototype.getOption=function(e){return this.currentDataManager.currentCalendarOptionsInput[e]},e.prototype.getAvailableLocaleCodes=function(){return Object.keys(this.getCurrentData().availableRawLocales)},e.prototype.on=function(e,t){var n=this.currentDataManager;n.currentCalendarOptionsRefiners[e]?n.emitter.on(e,t):console.warn("Unknown listener name '"+e+"'")},e.prototype.off=function(e,t){this.currentDataManager.emitter.off(e,t)},e.prototype.trigger=function(e){for(var t,n=[],r=1;r=1?Math.min(i,o):i}(e,this.weekDow,this.weekDoy)},e.prototype.format=function(e,t,n){return void 0===n&&(n={}),t.format({marker:e,timeZoneOffset:null!=n.forcedTzo?n.forcedTzo:this.offsetForMarker(e)},this)},e.prototype.formatRange=function(e,t,n,r){return void 0===r&&(r={}),r.isEndExclusive&&(t=wt(t,-1)),n.formatRange({marker:e,timeZoneOffset:null!=r.forcedStartTzo?r.forcedStartTzo:this.offsetForMarker(e)},{marker:t,timeZoneOffset:null!=r.forcedEndTzo?r.forcedEndTzo:this.offsetForMarker(t)},this,r.defaultSeparator)},e.prototype.formatIso=function(e,t){void 0===t&&(t={});var n=null;return t.omitTimeZoneOffset||(n=null!=t.forcedTzo?t.forcedTzo:this.offsetForMarker(e)),tn(e,n,t.omitTime)},e.prototype.timestampToMarker=function(e){return"local"===this.timeZone?Mt(kt(new Date(e))):"UTC"!==this.timeZone&&this.namedTimeZoneImpl?Mt(this.namedTimeZoneImpl.timestampToArray(e)):new Date(e)},e.prototype.offsetForMarker=function(e){return"local"===this.timeZone?-xt(Ot(e)).getTimezoneOffset():"UTC"===this.timeZone?0:this.namedTimeZoneImpl?this.namedTimeZoneImpl.offsetForArray(Ot(e)):null},e.prototype.toDate=function(e,t){return"local"===this.timeZone?xt(Ot(e)):"UTC"===this.timeZone?new Date(e.valueOf()):this.namedTimeZoneImpl?new Date(e.valueOf()-1e3*this.namedTimeZoneImpl.offsetForArray(Ot(e))*60):new Date(e.valueOf()-(t||0))},e}(),Br=[],Fr={code:"en",week:{dow:0,doy:4},direction:"ltr",buttonText:{prev:"prev",next:"next",prevYear:"prev year",nextYear:"next year",year:"year",today:"today",month:"month",week:"week",day:"day",list:"list"},weekText:"W",weekTextLong:"Week",closeHint:"Close",timeHint:"Time",eventHint:"Event",allDayText:"all-day",moreLinkText:"more",noEventsText:"No events to display"},qr=s(s({},Fr),{buttonHints:{prev:"Previous $0",next:"Next $0",today:function(e,t){return"day"===t?"Today":"This "+e}},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:function(e){return"Show "+e+" more event"+(1===e?"":"s")}});function Zr(e){for(var t=e.length>0?e[0].code:"en",n=Br.concat(e),r={en:qr},i=0,o=n;i0;i-=1){var o=r.slice(0,i).join("-");if(t[o])return t[o]}return null}(n,t)||qr;return $r(e,n,r)}(e,t):$r(e.code,[e.code],e)}function $r(e,t,n){var r=Pt([Fr,n],["buttonText"]);delete r.code;var i=r.week;return delete r.week,{codeArg:e,codes:t,week:i,simpleNumberFormat:new Intl.NumberFormat(e),options:r}}var Kr,Xr={startTime:"09:00",endTime:"17:00",daysOfWeek:[1,2,3,4,5],display:"inverse-background",classNames:"fc-non-business",groupId:"_businessHours"};function Jr(e,t){return In(function(e){var t;t=!0===e?[{}]:Array.isArray(e)?e.filter((function(e){return e.daysOfWeek})):"object"==typeof e&&e?[e]:[];return t=t.map((function(e){return s(s({},Xr),e)}))}(e),null,t)}function Qr(e,t){return e.left>=t.left&&e.left=t.top&&e.top
",e.querySelector("table").style.height="100px",e.querySelector("div").style.height="100%",document.body.appendChild(e);var t=e.querySelector("div").offsetHeight>0;return document.body.removeChild(e),t}()),Kr}var ni={defs:{},instances:{}},ri=function(){function e(){this.getKeysForEventDefs=sn(this._getKeysForEventDefs),this.splitDateSelection=sn(this._splitDateSpan),this.splitEventStore=sn(this._splitEventStore),this.splitIndividualUi=sn(this._splitIndividualUi),this.splitEventDrag=sn(this._splitInteraction),this.splitEventResize=sn(this._splitInteraction),this.eventUiBuilders={}}return e.prototype.splitProps=function(e){var t=this,n=this.getKeyInfo(e),r=this.getKeysForEventDefs(e.eventStore),i=this.splitDateSelection(e.dateSelection),o=this.splitIndividualUi(e.eventUiBases,r),s=this.splitEventStore(e.eventStore,r),a=this.splitEventDrag(e.eventDrag),l=this.splitEventResize(e.eventResize),u={};for(var c in this.eventUiBuilders=Ht(n,(function(e,n){return t.eventUiBuilders[n]||sn(ii)})),n){var d=n[c],h=s[c]||ni,f=this.eventUiBuilders[c];u[c]={businessHours:d.businessHours||e.businessHours,dateSelection:i[c]||null,eventStore:h,eventUiBases:f(e.eventUiBases[""],d.ui,o[c]),eventSelection:h.instances[e.eventSelection]?e.eventSelection:"",eventDrag:a[c]||null,eventResize:l[c]||null}}return u},e.prototype._splitDateSpan=function(e){var t={};if(e)for(var n=0,r=this.getKeysForDateSpan(e);nn:!!t&&e>=t.end)}}function si(e,t){var n=["fc-day","fc-day-"+yt[e.dow]];return e.isDisabled?n.push("fc-day-disabled"):(e.isToday&&(n.push("fc-day-today"),n.push(t.getClass("today"))),e.isPast&&n.push("fc-day-past"),e.isFuture&&n.push("fc-day-future"),e.isOther&&n.push("fc-day-other")),n}var ai=wn({year:"numeric",month:"long",day:"numeric"}),li=wn({week:"long"});function ui(e,t,n,r){void 0===n&&(n="day"),void 0===r&&(r=!0);var i=e.dateEnv,o=e.options,a=e.calendarApi,l=i.format(t,"week"===n?li:ai);if(o.navLinks){var u=i.toDate(t),c=function(e){var r="day"===n?o.navLinkDayClick:"week"===n?o.navLinkWeekClick:null;"function"==typeof r?r.call(a,i.toDate(t),e):("string"==typeof r&&(n=r),a.zoomTo(t,n))};return s({title:pt(o.navLinkHint,[l,u],l),"data-navlink":""},r?st(c):{onClick:c})}return{"aria-label":l}}var ci,di=null;function hi(){return null===di&&(di=function(){var e=document.createElement("div");Xe(e,{position:"absolute",top:-1e3,left:0,border:0,padding:0,overflow:"scroll",direction:"rtl"}),e.innerHTML="
",document.body.appendChild(e);var t=e.firstChild.getBoundingClientRect().left>e.getBoundingClientRect().left;return Ze(e),t}()),di}function fi(){return ci||(ci=function(){var e=document.createElement("div");e.style.overflow="scroll",e.style.position="absolute",e.style.top="-9999px",e.style.left="-9999px",document.body.appendChild(e);var t=pi(e);return document.body.removeChild(e),t}()),ci}function pi(e){return{x:e.offsetHeight-e.clientHeight,y:e.offsetWidth-e.clientWidth}}function mi(e,t,n){void 0===t&&(t=!1);var r=n?e.getBoundingClientRect():gi(e),i=function(e,t){void 0===t&&(t=!1);var n=window.getComputedStyle(e),r=parseInt(n.borderLeftWidth,10)||0,i=parseInt(n.borderRightWidth,10)||0,o=parseInt(n.borderTopWidth,10)||0,s=parseInt(n.borderBottomWidth,10)||0,a=pi(e),l=a.y-r-i,u={borderLeft:r,borderRight:i,borderTop:o,borderBottom:s,scrollbarBottom:a.x-o-s,scrollbarLeft:0,scrollbarRight:0};return hi()&&"rtl"===n.direction?u.scrollbarLeft=l:u.scrollbarRight=l,t&&(u.paddingLeft=parseInt(n.paddingLeft,10)||0,u.paddingRight=parseInt(n.paddingRight,10)||0,u.paddingTop=parseInt(n.paddingTop,10)||0,u.paddingBottom=parseInt(n.paddingBottom,10)||0),u}(e,t),o={left:r.left+i.borderLeft+i.scrollbarLeft,right:r.right-i.borderRight-i.scrollbarRight,top:r.top+i.borderTop,bottom:r.bottom-i.borderBottom-i.scrollbarBottom};return t&&(o.left+=i.paddingLeft,o.right-=i.paddingRight,o.top+=i.paddingTop,o.bottom-=i.paddingBottom),o}function gi(e){var t=e.getBoundingClientRect();return{left:t.left+window.pageXOffset,top:t.top+window.pageYOffset,right:t.right+window.pageXOffset,bottom:t.bottom+window.pageYOffset}}function vi(e){for(var t=[];e instanceof HTMLElement;){var n=window.getComputedStyle(e);if("fixed"===n.position)break;/(auto|scroll)/.test(n.overflow+n.overflowY+n.overflowX)&&t.push(e),e=e.parentNode}return t}var yi=function(){function e(){this.handlers={},this.thisContext=null}return e.prototype.setThisContext=function(e){this.thisContext=e},e.prototype.setOptions=function(e){this.options=e},e.prototype.on=function(e,t){!function(e,t,n){(e[t]||(e[t]=[])).push(n)}(this.handlers,e,t)},e.prototype.off=function(e,t){!function(e,t,n){n?e[t]&&(e[t]=e[t].filter((function(e){return e!==n}))):delete e[t]}(this.handlers,e,t)},e.prototype.trigger=function(e){for(var t=[],n=1;n=n[t]&&e=n[t]&&e0},e.prototype.canScrollHorizontally=function(){return this.getMaxScrollLeft()>0},e.prototype.canScrollUp=function(){return this.getScrollTop()>0},e.prototype.canScrollDown=function(){return this.getScrollTop()0},e.prototype.canScrollRight=function(){return this.getScrollLeft()=c.end?new Date(c.end.valueOf()-1):u),i=this.buildCurrentRangeInfo(e,t),o=/^(year|month|week|day)$/.test(i.unit),s=this.buildRenderRange(this.trimHiddenDays(i.range),i.unit,o),a=s=this.trimHiddenDays(s),d.showNonCurrentDates||(a=tr(a,i.range)),a=tr(a=this.adjustActiveRange(a),r),l=nr(i.range,r),{validRange:r,currentRange:i.range,currentRangeUnit:i.unit,isRangeAllDay:o,activeRange:a,renderRange:s,slotMinTime:d.slotMinTime,slotMaxTime:d.slotMaxTime,isValid:l,dateIncrement:this.buildDateIncrement(i.duration)}},e.prototype.buildValidRange=function(){var e=this.props.validRangeInput,t="function"==typeof e?e.call(this.props.calendarApi,this.nowDate):e;return this.refineRange(t)||{start:null,end:null}},e.prototype.buildCurrentRangeInfo=function(e,t){var n,r=this.props,i=null,o=null,s=null;return r.duration?(i=r.duration,o=r.durationUnit,s=this.buildRangeFromDuration(e,t,i,o)):(n=this.props.dayCount)?(o="day",s=this.buildRangeFromDayCount(e,t,n)):(s=this.buildCustomVisibleRange(e))?o=r.dateEnv.greatestWholeUnit(s.start,s.end).unit:(o=en(i=this.getFallbackDuration()).unit,s=this.buildRangeFromDuration(e,t,i,o)),{duration:i,unit:o,range:s}},e.prototype.getFallbackDuration=function(){return Gt({day:1})},e.prototype.adjustActiveRange=function(e){var t=this.props,n=t.dateEnv,r=t.usesMinMaxTime,i=t.slotMinTime,o=t.slotMaxTime,s=e.start,a=e.end;return r&&(Xt(i)<0&&(s=Dt(s),s=n.add(s,i)),Xt(o)>1&&(a=_t(a=Dt(a),-1),a=n.add(a,o))),{start:s,end:a}},e.prototype.buildRangeFromDuration=function(e,t,n,r){var i,o,s,a=this.props,l=a.dateEnv,u=a.dateAlignment;if(!u){var c=this.props.dateIncrement;u=c&&Jt(c)e.fetchRange.end}(e,t,n)})),t,!1,n)}function no(e,t,n,r,i){var o={};for(var s in e){var a=e[s];t[s]?o[s]=ro(a,n,r,i):o[s]=a}return o}function ro(e,t,n,r){var i=r.options,o=r.calendarApi,a=r.pluginHooks.eventSourceDefs[e.sourceDefId],l=ut();return a.fetch({eventSource:e,range:t,isRefetch:n,context:r},(function(n){var s=n.rawEvents;i.eventSourceSuccess&&(s=i.eventSourceSuccess.call(o,s,n.xhr)||s),e.success&&(s=e.success.call(o,s,n.xhr)||s),r.dispatch({type:"RECEIVE_EVENTS",sourceId:e.sourceId,fetchId:l,fetchRange:t,rawEvents:s})}),(function(n){console.warn(n.message,n),i.eventSourceFailure&&i.eventSourceFailure.call(o,n),e.failure&&e.failure(n),r.dispatch({type:"RECEIVE_EVENT_ERROR",sourceId:e.sourceId,fetchId:l,fetchRange:t,error:n})})),s(s({},e),{isFetching:!0,latestFetchId:l})}function io(e,t){return Lt(e,(function(e){return oo(e,t)}))}function oo(e,t){return!t.pluginHooks.eventSourceDefs[e.sourceDefId].ignoreRange}function so(e,t,n,r,i){switch(t.type){case"RECEIVE_EVENTS":return function(e,t,n,r,i,o){if(t&&n===t.latestFetchId){var s=In(function(e,t,n){var r=n.options.eventDataTransform,i=t?t.eventDataTransform:null;i&&(e=ao(e,i));r&&(e=ao(e,r));return e}(i,t,o),t,o);return r&&(s=Bt(s,r,o)),Pn(lo(e,t.sourceId),s)}return e}(e,n[t.sourceId],t.fetchId,t.fetchRange,t.rawEvents,i);case"ADD_EVENTS":return function(e,t,n,r){n&&(t=Bt(t,n,r));return Pn(e,t)}(e,t.eventStore,r?r.activeRange:null,i);case"RESET_EVENTS":return t.eventStore;case"MERGE_EVENTS":return Pn(e,t.eventStore);case"PREV":case"NEXT":case"CHANGE_DATE":case"CHANGE_VIEW_TYPE":return r?Bt(e,r.activeRange,i):e;case"REMOVE_EVENTS":return function(e,t){var n=e.defs,r=e.instances,i={},o={};for(var s in n)t.defs[s]||(i[s]=n[s]);for(var a in r)!t.instances[a]&&i[r[a].defId]&&(o[a]=r[a]);return{defs:i,instances:o}}(e,t.eventStore);case"REMOVE_EVENT_SOURCE":return lo(e,t.sourceId);case"REMOVE_ALL_EVENT_SOURCES":return Ln(e,(function(e){return!e.sourceId}));case"REMOVE_ALL_EVENTS":return{defs:{},instances:{}};default:return e}}function ao(e,t){var n;if(t){n=[];for(var r=0,i=e;r=200&&s.status<400){var e=!1,t=void 0;try{t=JSON.parse(s.responseText),e=!0}catch(e){}e?r(t,s):i("Failure parsing JSON",s)}else i("Request failed",s)},s.onerror=function(){i("Request failed",s)},s.send(o)}function bo(e){var t=[];for(var n in e)t.push(encodeURIComponent(n)+"="+encodeURIComponent(e[n]));return t.join("&")}function _o(e,t){for(var n=zt(t.getCurrentData().eventSources),r=[],i=0,o=e;i1)return{year:"numeric",month:"short",day:"numeric"};return{year:"numeric",month:"long",day:"numeric"}}(e)),{isEndExclusive:e.isRangeAllDay,defaultSeparator:t.titleRangeSeparator})}var So=function(){function e(e){var t=this;this.computeOptionsData=sn(this._computeOptionsData),this.computeCurrentViewData=sn(this._computeCurrentViewData),this.organizeRawLocales=sn(Zr),this.buildLocale=sn(Gr),this.buildPluginHooks=Ni(),this.buildDateEnv=sn(Co),this.buildTheme=sn(ko),this.parseToolbars=sn(po),this.buildViewSpecs=sn(Gi),this.buildDateProfileGenerator=an(xo),this.buildViewApi=sn(Oo),this.buildViewUiProps=an(Io),this.buildEventUiBySource=sn(Mo,Vt),this.buildEventUiBases=sn(Ao),this.parseContextBusinessHours=an(No),this.buildTitle=sn(Do),this.emitter=new yi,this.actionRunner=new Eo(this._handleAction.bind(this),this.updateData.bind(this)),this.currentCalendarOptionsInput={},this.currentCalendarOptionsRefined={},this.currentViewOptionsInput={},this.currentViewOptionsRefined={},this.currentCalendarOptionsRefiners={},this.getCurrentData=function(){return t.data},this.dispatch=function(e){t.actionRunner.request(e)},this.props=e,this.actionRunner.pause();var n={},r=this.computeOptionsData(e.optionOverrides,n,e.calendarApi),i=r.calendarOptions.initialView||r.pluginHooks.initialView,o=this.computeCurrentViewData(i,r,e.optionOverrides,n);e.calendarApi.currentDataManager=this,this.emitter.setThisContext(e.calendarApi),this.emitter.setOptions(o.options);var a,l,u,c=(a=r.calendarOptions,l=r.dateEnv,null!=(u=a.initialDate)?l.createMarker(u):Nr(a.now,l)),d=o.dateProfileGenerator.build(c);ir(d.activeRange,c)||(c=d.currentRange.start);for(var h={dateEnv:r.dateEnv,options:r.calendarOptions,pluginHooks:r.pluginHooks,calendarApi:e.calendarApi,dispatch:this.dispatch,emitter:this.emitter,getCurrentData:this.getCurrentData},f=0,p=r.pluginHooks.contextInit;fs.end&&(r+=this.insertEntry({index:e.index,thickness:e.thickness,span:{start:s.end,end:o.end}},i)),r?(n.push.apply(n,a([{index:e.index,thickness:e.thickness,span:zo(s,o)}],i)),r):(n.push(e),0)},e.prototype.insertEntryAt=function(e,t){var n=this.entriesByLevel,r=this.levelCoords;-1===t.lateral?(Vo(r,t.level,t.levelCoord),Vo(n,t.level,[e])):Vo(n[t.level],t.lateral,e),this.stackCnts[Yo(e)]=t.stackCnt},e.prototype.findInsertion=function(e){for(var t=this,n=t.levelCoords,r=t.entriesByLevel,i=t.strictOrder,o=t.stackCnts,s=n.length,a=0,l=-1,u=-1,c=null,d=0,h=0;h=a+e.thickness)break;for(var p=r[h],m=void 0,g=Wo(p,e.span.start,Ho),v=g[0]+g[1];(m=p[v])&&m.span.starta&&(a=y,c=m,l=h,u=v),y===a&&(d=Math.max(d,o[Yo(m)]+1)),v+=1}}var b=0;if(c)for(b=l+1;bn(e[i-1]))return[i,0];for(;rs))return[o,1];r=o+1}}return[r,0]}var Uo=function(){function e(e){this.component=e.component,this.isHitComboAllowed=e.isHitComboAllowed||null}return e.prototype.destroy=function(){},e}();function jo(e,t){return{component:e,el:t.el,useEventCenter:null==t.useEventCenter||t.useEventCenter,isHitComboAllowed:t.isHitComboAllowed||null}}function Bo(e){var t;return(t={})[e.component.uid]=e,t}var Fo={},qo=function(){function e(e,t){this.emitter=new yi}return e.prototype.destroy=function(){},e.prototype.setMirrorIsVisible=function(e){},e.prototype.setMirrorNeedsRevert=function(e){},e.prototype.setAutoScrollEnabled=function(e){},e}(),Zo={},Go={startTime:Gt,duration:Gt,create:Boolean,sourceId:String};function $o(e){var t=Mn(e,Go),n=t.refined,r=t.extra;return{startTime:n.startTime||null,duration:n.duration||null,create:null==n.create||n.create,sourceId:n.sourceId,leftoverProps:r}}var Ko=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){var e=this,t=this.props.widgetGroups.map((function(t){return e.renderWidgetGroup(t)}));return Ye.apply(void 0,a(["div",{className:"fc-toolbar-chunk"}],t))},t.prototype.renderWidgetGroup=function(e){for(var t=this.props,n=this.context.theme,r=[],i=!0,o=0,s=e;o1){var v=i&&n.getClass("buttonGroup")||"";return Ye.apply(void 0,a(["div",{className:v}],r))}return r[0]},t}(xi),Xo=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){var e,t,n=this.props,r=n.model,i=n.extraClassName,o=!1,s=r.sectionWidgets,a=s.center;return s.left?(o=!0,e=s.left):e=s.start,s.right?(o=!0,t=s.right):t=s.end,Ye("div",{className:[i||"","fc-toolbar",o?"fc-toolbar-ltr":""].join(" ")},this.renderSection("start",e||[]),this.renderSection("center",a||[]),this.renderSection("end",t||[]))},t.prototype.renderSection=function(e,t){var n=this.props;return Ye(Ko,{key:e,widgetGroups:t,title:n.title,navUnit:n.navUnit,activeButton:n.activeButton,isTodayEnabled:n.isTodayEnabled,isPrevEnabled:n.isPrevEnabled,isNextEnabled:n.isNextEnabled,titleId:n.titleId})},t}(xi),Jo=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.state={availableWidth:null},t.handleEl=function(e){t.el=e,Ai(t.props.elRef,e),t.updateAvailableWidth()},t.handleResize=function(){t.updateAvailableWidth()},t}return o(t,e),t.prototype.render=function(){var e=this.props,t=this.state,n=e.aspectRatio,r=["fc-view-harness",n||e.liquid||e.height?"fc-view-harness-active":"fc-view-harness-passive"],i="",o="";return n?null!==t.availableWidth?i=t.availableWidth/n:o=1/n*100+"%":i=e.height||"",Ye("div",{"aria-labelledby":e.labeledById,ref:this.handleEl,className:r.join(" "),style:{height:i,paddingBottom:o}},e.children)},t.prototype.componentDidMount=function(){this.context.addResizeHandler(this.handleResize)},t.prototype.componentWillUnmount=function(){this.context.removeResizeHandler(this.handleResize)},t.prototype.updateAvailableWidth=function(){this.el&&this.props.aspectRatio&&this.setState({availableWidth:this.el.offsetWidth})},t}(xi),Qo=function(e){function t(t){var n=e.call(this,t)||this;return n.handleSegClick=function(e,t){var r=n.component,i=r.context,o=ar(t);if(o&&r.isValidSegDownEl(e.target)){var s=Ge(e.target,".fc-event-forced-url"),a=s?s.querySelector("a[href]").href:"";i.emitter.trigger("eventClick",{el:t,event:new Lr(r.context,o.eventRange.def,o.eventRange.instance),jsEvent:e,view:i.viewApi}),a&&!e.defaultPrevented&&(window.location.href=a)}},n.destroy=it(t.el,"click",".fc-event",n.handleSegClick),n}return o(t,e),t}(Uo),es=function(e){function t(t){var n,r,i,o,s,a=e.call(this,t)||this;return a.handleEventElRemove=function(e){e===a.currentSegEl&&a.handleSegLeave(null,a.currentSegEl)},a.handleSegEnter=function(e,t){ar(t)&&(a.currentSegEl=t,a.triggerEvent("eventMouseEnter",e,t))},a.handleSegLeave=function(e,t){a.currentSegEl&&(a.currentSegEl=null,a.triggerEvent("eventMouseLeave",e,t))},a.removeHoverListeners=(n=t.el,r=".fc-event",i=a.handleSegEnter,o=a.handleSegLeave,it(n,"mouseover",r,(function(e,t){if(t!==s){s=t,i(e,t);var n=function(e){s=null,o(e,t),t.removeEventListener("mouseleave",n)};t.addEventListener("mouseleave",n)}}))),a}return o(t,e),t.prototype.destroy=function(){this.removeHoverListeners()},t.prototype.triggerEvent=function(e,t,n){var r=this.component,i=r.context,o=ar(n);t&&!r.isValidSegDownEl(t.target)||i.emitter.trigger(e,{el:n,event:new Lr(i,o.eventRange.def,o.eventRange.instance),jsEvent:t,view:i.viewApi})},t}(Uo),ts=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.buildViewContext=sn(Ci),t.buildViewPropTransformers=sn(rs),t.buildToolbarProps=sn(ns),t.headerRef=Ve(),t.footerRef=Ve(),t.interactionsStore={},t.state={viewLabelId:nt()},t.registerInteractiveComponent=function(e,n){var r=jo(e,n),i=[Qo,es].concat(t.props.pluginHooks.componentInteractions).map((function(e){return new e(r)}));t.interactionsStore[e.uid]=i,Fo[e.uid]=r},t.unregisterInteractiveComponent=function(e){var n=t.interactionsStore[e.uid];if(n){for(var r=0,i=n;r1?ui(this.context,a):{},f=s(s(s({date:t.toDate(a),view:i},o.extraHookProps),{text:d}),u);return Ye(Hi,{hookProps:f,classNames:n.dayHeaderClassNames,content:n.dayHeaderContent,defaultContent:ss,didMount:n.dayHeaderDidMount,willUnmount:n.dayHeaderWillUnmount},(function(e,t,n,r){return Ye("th",s({ref:e,role:"columnheader",className:c.concat(t).join(" "),"data-date":u.isDisabled?void 0:nn(a),colSpan:o.colSpan},o.extraDataAttrs),Ye("div",{className:"fc-scrollgrid-sync-inner"},!u.isDisabled&&Ye("a",s({ref:n,className:["fc-col-header-cell-cushion",o.isSticky?"fc-sticky":""].join(" ")},h),r)))}))},t}(xi),ls=wn({weekday:"long"}),us=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){var e=this.props,t=this.context,n=t.dateEnv,r=t.theme,i=t.viewApi,o=t.options,a=_t(new Date(2592e5),e.dow),l={dow:e.dow,isDisabled:!1,isFuture:!1,isPast:!1,isToday:!1,isOther:!1},u=[os].concat(si(l,r),e.extraClassNames||[]),c=n.format(a,e.dayHeaderFormat),d=s(s(s(s({date:a},l),{view:i}),e.extraHookProps),{text:c});return Ye(Hi,{hookProps:d,classNames:o.dayHeaderClassNames,content:o.dayHeaderContent,defaultContent:ss,didMount:o.dayHeaderDidMount,willUnmount:o.dayHeaderWillUnmount},(function(t,r,i,o){return Ye("th",s({ref:t,role:"columnheader",className:u.concat(r).join(" "),colSpan:e.colSpan},e.extraDataAttrs),Ye("div",{className:"fc-scrollgrid-sync-inner"},Ye("a",{"aria-label":n.format(a,ls),className:["fc-col-header-cell-cushion",e.isSticky?"fc-sticky":""].join(" "),ref:i},o)))}))},t}(xi),cs=function(e){function t(t,n){var r=e.call(this,t,n)||this;return r.initialNowDate=Nr(n.options.now,n.dateEnv),r.initialNowQueriedMs=(new Date).valueOf(),r.state=r.computeTiming().currentState,r}return o(t,e),t.prototype.render=function(){var e=this.props,t=this.state;return e.children(t.nowDate,t.todayRange)},t.prototype.componentDidMount=function(){this.setTimeout()},t.prototype.componentDidUpdate=function(e){e.unit!==this.props.unit&&(this.clearTimeout(),this.setTimeout())},t.prototype.componentWillUnmount=function(){this.clearTimeout()},t.prototype.computeTiming=function(){var e=this.props,t=this.context,n=wt(this.initialNowDate,(new Date).valueOf()-this.initialNowQueriedMs),r=t.dateEnv.startOf(n,e.unit),i=t.dateEnv.add(r,Gt(1,e.unit)),o=i.valueOf()-n.valueOf();return o=Math.min(864e5,o),{currentState:{nowDate:r,todayRange:ds(r)},nextState:{nowDate:i,todayRange:ds(i)},waitMs:o}},t.prototype.setTimeout=function(){var e=this,t=this.computeTiming(),n=t.nextState,r=t.waitMs;this.timeoutId=setTimeout((function(){e.setState(n,(function(){e.setTimeout()}))}),r)},t.prototype.clearTimeout=function(){this.timeoutId&&clearTimeout(this.timeoutId)},t.contextType=Si,t}(He);function ds(e){var t=Dt(e);return{start:t,end:_t(t,1)}}var hs=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.createDayHeaderFormatter=sn(fs),t}return o(t,e),t.prototype.render=function(){var e=this.context,t=this.props,n=t.dates,r=t.dateProfile,i=t.datesRepDistinctDays,o=t.renderIntro,s=this.createDayHeaderFormatter(e.options.dayHeaderFormat,i,n.length);return Ye(cs,{unit:"day"},(function(e,t){return Ye("tr",{role:"row"},o&&o("day"),n.map((function(e){return i?Ye(as,{key:e.toISOString(),date:e,dateProfile:r,todayRange:t,colCnt:n.length,dayHeaderFormat:s}):Ye(us,{key:e.getUTCDay(),dow:e.getUTCDay(),dayHeaderFormat:s})})))}))},t}(xi);function fs(e,t,n){return e||function(e,t){return wn(!e||t>10?{weekday:"short"}:t>1?{weekday:"short",month:"numeric",day:"numeric",omitCommas:!0}:{weekday:"long"})}(t,n)}var ps=function(){function e(e,t){for(var n=e.start,r=e.end,i=[],o=[],s=-1;n=t.length?t[t.length-1]+1:t[n]},e}(),ms=function(){function e(e,t){var n,r,i,o=e.dates;if(t){for(r=o[0].getUTCDay(),n=1;nt)return!0}return!1},t.prototype.needsYScrolling=function(){if(Ss.test(this.props.overflowY))return!1;for(var e=this.el,t=this.el.getBoundingClientRect().height-this.getXScrollbarWidth(),n=e.children,r=0;rt)return!0}return!1},t.prototype.getXScrollbarWidth=function(){return Ss.test(this.props.overflowX)?0:this.el.offsetHeight-this.el.clientHeight},t.prototype.getYScrollbarWidth=function(){return Ss.test(this.props.overflowY)?0:this.el.offsetWidth-this.el.clientWidth},t}(xi),ks=function(){function e(e){var t=this;this.masterCallback=e,this.currentMap={},this.depths={},this.callbackMap={},this.handleValue=function(e,n){var r=t,i=r.depths,o=r.currentMap,s=!1,a=!1;null!==e?(s=n in o,o[n]=e,i[n]=(i[n]||0)+1,a=!0):(i[n]-=1,i[n]||(delete o[n],delete t.callbackMap[n],s=!0)),t.masterCallback&&(s&&t.masterCallback(null,String(n)),a&&t.masterCallback(e,String(n)))}}return e.prototype.createRef=function(e){var t=this,n=this.callbackMap[e];return n||(n=this.callbackMap[e]=function(n){t.handleValue(n,String(e))}),n},e.prototype.collect=function(e,t,n){return function(e,t,n,r){void 0===t&&(t=0),void 0===r&&(r=1);var i=[];null==n&&(n=Object.keys(e).length);for(var o=t;o=0&&e=0&&tt.eventRange.range.end?e:t}var oa=function(e){function t(t,n){void 0===n&&(n={});var r=e.call(this)||this;return r.isRendering=!1,r.isRendered=!1,r.currentClassNames=[],r.customContentRenderId=0,r.handleAction=function(e){switch(e.type){case"SET_EVENT_DRAG":case"SET_EVENT_RESIZE":r.renderRunner.tryDrain()}},r.handleData=function(e){r.currentData=e,r.renderRunner.request(e.calendarOptions.rerenderDelay)},r.handleRenderRequest=function(){if(r.isRendering){r.isRendered=!0;var e=r.currentData;Be((function(){ze(Ye(is,{options:e.calendarOptions,theme:e.theme,emitter:e.emitter},(function(t,n,i,o){return r.setClassNames(t),r.setHeight(n),Ye(Yi.Provider,{value:r.customContentRenderId},Ye(ts,s({isHeightAuto:i,forPrint:o},e)))})),r.el)}))}else r.isRendered&&(r.isRendered=!1,Fe(r.el),r.setClassNames([]),r.setHeight(""))},r.el=t,r.renderRunner=new To(r.handleRenderRequest),new So({optionOverrides:n,calendarApi:r,onAction:r.handleAction,onData:r.handleData}),r}return o(t,e),Object.defineProperty(t.prototype,"view",{get:function(){return this.currentData.viewApi},enumerable:!1,configurable:!0}),t.prototype.render=function(){var e=this.isRendering;e?this.customContentRenderId+=1:this.isRendering=!0,this.renderRunner.request(),e&&this.updateSize()},t.prototype.destroy=function(){this.isRendering&&(this.isRendering=!1,this.renderRunner.request())},t.prototype.updateSize=function(){var t=this;Be((function(){e.prototype.updateSize.call(t)}))},t.prototype.batchRendering=function(e){this.renderRunner.pause("batchRendering"),e(),this.renderRunner.resume("batchRendering")},t.prototype.pauseRendering=function(){this.renderRunner.pause("pauseRendering")},t.prototype.resumeRendering=function(){this.renderRunner.resume("pauseRendering",!0)},t.prototype.resetOptions=function(e,t){this.currentDataManager.resetOptions(e,t)},t.prototype.setClassNames=function(e){if(!on(e,this.currentClassNames)){for(var t=this.el.classList,n=0,r=this.currentClassNames;n1,_=y.span.start===a;d+=y.levelCoord-c,c=y.levelCoord+y.thickness,b?(d+=y.thickness,_&&m.push({seg:Ta(p,y.span.start,y.span.end,n),isVisible:!0,isAbsolute:!0,absoluteTop:y.levelCoord,marginTop:0})):_&&(m.push({seg:Ta(p,y.span.start,y.span.end,n),isVisible:!0,isAbsolute:!1,absoluteTop:y.levelCoord,marginTop:d}),d=0)}i.push(u),o.push(m),s.push(d)}return{singleColPlacements:i,multiColPlacements:o,leftoverMargins:s}}(a.toRects(),e,s),p=f.singleColPlacements,m=f.multiColPlacements,g=f.leftoverMargins,v=[],y=[],b=0,_=u;b<_.length;b++){m[(S=_[b]).firstCol].push({seg:S,isVisible:!1,isAbsolute:!0,absoluteTop:0,marginTop:0});for(var w=S.firstCol;w<=S.lastCol;w+=1)p[w].push({seg:Ta(S,w,w+1,s),isVisible:!1,isAbsolute:!1,absoluteTop:0,marginTop:0})}for(w=0;w1,showWeekNumbers:t.showWeekNumbers,todayRange:p,dateProfile:n,cells:o,renderIntro:t.renderRowIntro,businessHourSegs:a[f],eventSelection:t.eventSelection,bgEventSegs:l[f].filter(Ca),fgEventSegs:u[f],dateSelectionSegs:c[f],eventDrag:d[f],eventResize:h[f],dayMaxEvents:i,dayMaxEventRows:r,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:t.forPrint})})))))})))},t.prototype.prepareHits=function(){this.rowPositions=new bi(this.rootEl,this.rowRefs.collect().map((function(e){return e.getCellEls()[0]})),!1,!0),this.colPositions=new bi(this.rootEl,this.rowRefs.currentMap[0].getCellEls(),!0,!1)},t.prototype.queryHit=function(e,t){var n=this.colPositions,r=this.rowPositions,i=n.leftToIndex(e),o=r.topToIndex(t);if(null!=o&&null!=i){var a=this.props.cells[o][i];return{dateProfile:this.props.dateProfile,dateSpan:s({range:this.getCellRange(o,i),allDay:!0},a.extraDateSpan),dayEl:this.getCellEl(o,i),rect:{left:n.lefts[i],right:n.rights[i],top:r.tops[o],bottom:r.bottoms[o]},layer:0}}return null},t.prototype.getCellEl=function(e,t){return this.rowRefs.currentMap[e].getCellEls()[t]},t.prototype.getCellRange=function(e,t){var n=this.props.cells[e][t].date;return{start:n,end:_t(n,1)}},t}(Ii);function Ca(e){return e.eventRange.def.allDay}var ka=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.forceDayIfListItem=!0,t}return o(t,e),t.prototype.sliceRange=function(e,t){return t.sliceRange(e)},t}(gs),xa=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.slicer=new ka,t.tableRef=Ve(),t}return o(t,e),t.prototype.render=function(){var e=this.props,t=this.context;return Ye(Sa,s({ref:this.tableRef},this.slicer.sliceProps(e,e.dateProfile,e.nextDayThreshold,t,e.dayTableModel),{dateProfile:e.dateProfile,cells:e.dayTableModel.cells,colGroupNode:e.colGroupNode,tableMinWidth:e.tableMinWidth,renderRowIntro:e.renderRowIntro,dayMaxEvents:e.dayMaxEvents,dayMaxEventRows:e.dayMaxEventRows,showWeekNumbers:e.showWeekNumbers,expandRows:e.expandRows,headerAlignElRef:e.headerAlignElRef,clientWidth:e.clientWidth,clientHeight:e.clientHeight,forPrint:e.forPrint}))},t}(Ii),Oa=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.buildDayTableModel=sn(Ma),t.headerRef=Ve(),t.tableRef=Ve(),t}return o(t,e),t.prototype.render=function(){var e=this,t=this.context,n=t.options,r=t.dateProfileGenerator,i=this.props,o=this.buildDayTableModel(i.dateProfile,r),s=n.dayHeaders&&Ye(hs,{ref:this.headerRef,dateProfile:i.dateProfile,dates:o.headerDates,datesRepDistinctDays:1===o.rowCnt}),a=function(t){return Ye(xa,{ref:e.tableRef,dateProfile:i.dateProfile,dayTableModel:o,businessHours:i.businessHours,dateSelection:i.dateSelection,eventStore:i.eventStore,eventUiBases:i.eventUiBases,eventSelection:i.eventSelection,eventDrag:i.eventDrag,eventResize:i.eventResize,nextDayThreshold:n.nextDayThreshold,colGroupNode:t.tableColGroupNode,tableMinWidth:t.tableMinWidth,dayMaxEvents:n.dayMaxEvents,dayMaxEventRows:n.dayMaxEventRows,showWeekNumbers:n.weekNumbers,expandRows:!i.isHeightAuto,headerAlignElRef:e.headerElRef,clientWidth:t.clientWidth,clientHeight:t.clientHeight,forPrint:i.forPrint})};return n.dayMinWidth?this.renderHScrollLayout(s,a,o.colCnt,n.dayMinWidth):this.renderSimpleLayout(s,a)},t}(sa);function Ma(e,t){var n=new ps(e.renderRange,t);return new ms(n,/year|month|week/.test(e.currentRangeUnit))}var Aa=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.buildRenderRange=function(t,n,r){var i,o=this.props.dateEnv,s=e.prototype.buildRenderRange.call(this,t,n,r),a=s.start,l=s.end;(/^(year|month)$/.test(n)&&(a=o.startOfWeek(a),(i=o.startOfWeek(l)).valueOf()!==l.valueOf()&&(l=bt(i,1))),this.props.monthMode&&this.props.fixedWeekCount)&&(l=bt(l,6-Math.ceil(Tt(a,l)/7)));return{start:a,end:l}},t}(Ki),Ia=Ri({initialView:"dayGridMonth",views:{dayGrid:{component:Oa,dateProfileGeneratorClass:Aa},dayGridDay:{type:"dayGrid",duration:{days:1}},dayGridWeek:{type:"dayGrid",duration:{weeks:1}},dayGridMonth:{type:"dayGrid",duration:{months:1},monthMode:!0,fixedWeekCount:!0}}}),Ra=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.getKeyInfo=function(){return{allDay:{},timed:{}}},t.prototype.getKeysForDateSpan=function(e){return e.allDay?["allDay"]:["timed"]},t.prototype.getKeysForEventDef=function(e){return e.allDay?"background"===(t=e).ui.display||"inverse-background"===t.ui.display?["timed","allDay"]:["allDay"]:["timed"];var t},t}(ri),Na=wn({hour:"numeric",minute:"2-digit",omitZeroMinute:!0,meridiem:"short"});function Pa(e){var t=["fc-timegrid-slot","fc-timegrid-slot-label",e.isLabeled?"fc-scrollgrid-shrink":"fc-timegrid-slot-minor"];return Ye(Si.Consumer,null,(function(n){if(!e.isLabeled)return Ye("td",{className:t.join(" "),"data-time":e.isoTimeStr});var r=n.dateEnv,i=n.options,o=n.viewApi,s=null==i.slotLabelFormat?Na:Array.isArray(i.slotLabelFormat)?wn(i.slotLabelFormat[0]):wn(i.slotLabelFormat),a={level:0,time:e.time,date:r.toDate(e.date),view:o,text:r.format(e.date,s)};return Ye(Hi,{hookProps:a,classNames:i.slotLabelClassNames,content:i.slotLabelContent,defaultContent:La,didMount:i.slotLabelDidMount,willUnmount:i.slotLabelWillUnmount},(function(n,r,i,o){return Ye("td",{ref:n,className:t.concat(r).join(" "),"data-time":e.isoTimeStr},Ye("div",{className:"fc-timegrid-slot-label-frame fc-scrollgrid-shrink-frame"},Ye("div",{className:"fc-timegrid-slot-label-cushion fc-scrollgrid-shrink-cushion",ref:i},o)))}))}))}function La(e){return e.text}var Ha=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.prototype.render=function(){return this.props.slatMetas.map((function(e){return Ye("tr",{key:e.key},Ye(Pa,s({},e)))}))},t}(xi),Ya=wn({week:"short"}),za=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.allDaySplitter=new Ra,t.headerElRef=Ve(),t.rootElRef=Ve(),t.scrollerElRef=Ve(),t.state={slatCoords:null},t.handleScrollTopRequest=function(e){var n=t.scrollerElRef.current;n&&(n.scrollTop=e)},t.renderHeadAxis=function(e,n){void 0===n&&(n="");var r=t.context.options,i=t.props.dateProfile.renderRange,o=1===Tt(i.start,i.end)?ui(t.context,i.start,"week"):{};return r.weekNumbers&&"day"===e?Ye($s,{date:i.start,defaultFormat:Ya},(function(e,t,r,i){return Ye("th",{ref:e,"aria-hidden":!0,className:["fc-timegrid-axis","fc-scrollgrid-shrink"].concat(t).join(" ")},Ye("div",{className:"fc-timegrid-axis-frame fc-scrollgrid-shrink-frame fc-timegrid-axis-frame-liquid",style:{height:n}},Ye("a",s({ref:r,className:"fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion fc-scrollgrid-sync-inner"},o),i)))})):Ye("th",{"aria-hidden":!0,className:"fc-timegrid-axis"},Ye("div",{className:"fc-timegrid-axis-frame",style:{height:n}}))},t.renderTableRowAxis=function(e){var n=t.context,r=n.options,i=n.viewApi,o={text:r.allDayText,view:i};return Ye(Hi,{hookProps:o,classNames:r.allDayClassNames,content:r.allDayContent,defaultContent:Va,didMount:r.allDayDidMount,willUnmount:r.allDayWillUnmount},(function(t,n,r,i){return Ye("td",{ref:t,"aria-hidden":!0,className:["fc-timegrid-axis","fc-scrollgrid-shrink"].concat(n).join(" ")},Ye("div",{className:"fc-timegrid-axis-frame fc-scrollgrid-shrink-frame"+(null==e?" fc-timegrid-axis-frame-liquid":""),style:{height:e}},Ye("span",{className:"fc-timegrid-axis-cushion fc-scrollgrid-shrink-cushion fc-scrollgrid-sync-inner",ref:r},i)))}))},t.handleSlatCoords=function(e){t.setState({slatCoords:e})},t}return o(t,e),t.prototype.renderSimpleLayout=function(e,t,n){var r=this.context,i=this.props,o=[],s=Ps(r.options);return e&&o.push({type:"header",key:"header",isSticky:s,chunk:{elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}}),t&&(o.push({type:"body",key:"all-day",chunk:{content:t}}),o.push({type:"body",key:"all-day-divider",outerContent:Ye("tr",{role:"presentation",className:"fc-scrollgrid-section"},Ye("td",{className:"fc-timegrid-divider "+r.theme.getClass("tableCellShaded")}))})),o.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(r.options.expandRows),chunk:{scrollerElRef:this.scrollerElRef,content:n}}),Ye(Fi,{viewSpec:r.viewSpec,elRef:this.rootElRef},(function(e,t){return Ye("div",{className:["fc-timegrid"].concat(t).join(" "),ref:e},Ye(Hs,{liquid:!i.isHeightAuto&&!i.forPrint,collapsibleWidth:i.forPrint,cols:[{width:"shrink"}],sections:o}))}))},t.prototype.renderHScrollLayout=function(e,t,n,r,i,o,s){var a=this,l=this.context.pluginHooks.scrollGridImpl;if(!l)throw new Error("No ScrollGrid implementation");var u=this.context,c=this.props,d=!c.forPrint&&Ps(u.options),h=!c.forPrint&&Ls(u.options),f=[];e&&f.push({type:"header",key:"header",isSticky:d,syncRowHeights:!0,chunks:[{key:"axis",rowContent:function(e){return Ye("tr",{role:"presentation"},a.renderHeadAxis("day",e.rowSyncHeights[0]))}},{key:"cols",elRef:this.headerElRef,tableClassName:"fc-col-header",rowContent:e}]}),t&&(f.push({type:"body",key:"all-day",syncRowHeights:!0,chunks:[{key:"axis",rowContent:function(e){return Ye("tr",{role:"presentation"},a.renderTableRowAxis(e.rowSyncHeights[0]))}},{key:"cols",content:t}]}),f.push({key:"all-day-divider",type:"body",outerContent:Ye("tr",{role:"presentation",className:"fc-scrollgrid-section"},Ye("td",{colSpan:2,className:"fc-timegrid-divider "+u.theme.getClass("tableCellShaded")}))}));var p=u.options.nowIndicator;return f.push({type:"body",key:"body",liquid:!0,expandRows:Boolean(u.options.expandRows),chunks:[{key:"axis",content:function(e){return Ye("div",{className:"fc-timegrid-axis-chunk"},Ye("table",{"aria-hidden":!0,style:{height:e.expandRows?e.clientHeight:""}},e.tableColGroupNode,Ye("tbody",null,Ye(Ha,{slatMetas:o}))),Ye("div",{className:"fc-timegrid-now-indicator-container"},Ye(cs,{unit:p?"minute":"day"},(function(e){var t=p&&s&&s.safeComputeTop(e);return"number"==typeof t?Ye(Ws,{isAxis:!0,date:e},(function(e,n,r,i){return Ye("div",{ref:e,className:["fc-timegrid-now-indicator-arrow"].concat(n).join(" "),style:{top:t}},i)})):null}))))}},{key:"cols",scrollerElRef:this.scrollerElRef,content:n}]}),h&&f.push({key:"footer",type:"footer",isSticky:!0,chunks:[{key:"axis",content:Ns},{key:"cols",content:Ns}]}),Ye(Fi,{viewSpec:u.viewSpec,elRef:this.rootElRef},(function(e,t){return Ye("div",{className:["fc-timegrid"].concat(t).join(" "),ref:e},Ye(l,{liquid:!c.isHeightAuto&&!c.forPrint,collapsibleWidth:!1,colGroups:[{width:"shrink",cols:[{width:"shrink"}]},{cols:[{span:r,minWidth:i}]}],sections:f}))}))},t.prototype.getAllDayMaxEventProps=function(){var e=this.context.options,t=e.dayMaxEvents,n=e.dayMaxEventRows;return!0!==t&&!0!==n||(t=void 0,n=5),{dayMaxEvents:t,dayMaxEventRows:n}},t}(Ii);function Va(e){return e.text}var Wa=function(){function e(e,t,n){this.positions=e,this.dateProfile=t,this.slotDuration=n}return e.prototype.safeComputeTop=function(e){var t=this.dateProfile;if(ir(t.currentRange,e)){var n=Dt(e),r=e.valueOf()-n.valueOf();if(r>=Jt(t.slotMinTime)&&r0,b=Boolean(l)&&l.span.end-l.span.start=0;t-=1)if(null!==(r=Qt(n=Gt(hl[t]),e))&&r>1)return n;return e}(r),c=[];Jt(a)=e.getTime())&&(!t||n<=t.getTime())}function i(e){var t=e.startDate.toJSDate().getTime(),n=e.endDate.toJSDate().getTime();return e.endDate.isDate&&n>t&&(n-=1),{startTime:t,endTime:n}}var o=[];this.events.forEach((function(e){e.isRecurrenceException()&&o.push(e)}));var s={events:[],occurrences:[]};return this.events.filter((function(e){return!e.isRecurrenceException()})).forEach((function(e){var a=[];if(e.component.getAllProperties("exdate").forEach((function(e){var t=e.getFirstValue();a.push(t.toJSDate().getTime())})),e.isRecurring()){var l=e.iterator(),u=void 0,c=0,d=function(){if(c+=1,u=l.next()){var n=e.getOccurrenceDetails(u),d=i(n),h=d.startTime,f=d.endTime,p=-1!==a.indexOf(h),m=o.find((function(t){return t.uid===e.uid&&t.recurrenceId.toJSDate().getTime()===n.startDate.toJSDate().getTime()}));if(t&&h>t.getTime())return"break";r(h,f)&&(m?s.events.push(m):p||s.occurrences.push(n))}};do{if("break"===d())break}while(u&&(!n.maxIterations||c=200&&s.status<400?i(s.responseText,s):o("Request failed",s)},s.onerror=function(){return o("Request failed",s)},s.send(null)):l.completed?u(l.errorMessage,l.iCalExpander,l.xhr):l.callbacks.push(u)}}]});Zo.touchMouseIgnoreWait=500;var xl=0,Ol=0,Ml=!1,Al=function(){function e(e){var t=this;this.subjectEl=null,this.selector="",this.handleSelector="",this.shouldIgnoreMove=!1,this.shouldWatchScroll=!0,this.isDragging=!1,this.isTouchDragging=!1,this.wasTouchScroll=!1,this.handleMouseDown=function(e){if(!t.shouldIgnoreMouse()&&function(e){return 0===e.button&&!e.ctrlKey}(e)&&t.tryStart(e)){var n=t.createEventFromMouse(e,!0);t.emitter.trigger("pointerdown",n),t.initScrollWatch(n),t.shouldIgnoreMove||document.addEventListener("mousemove",t.handleMouseMove),document.addEventListener("mouseup",t.handleMouseUp)}},this.handleMouseMove=function(e){var n=t.createEventFromMouse(e);t.recordCoords(n),t.emitter.trigger("pointermove",n)},this.handleMouseUp=function(e){document.removeEventListener("mousemove",t.handleMouseMove),document.removeEventListener("mouseup",t.handleMouseUp),t.emitter.trigger("pointerup",t.createEventFromMouse(e)),t.cleanup()},this.handleTouchStart=function(e){if(t.tryStart(e)){t.isTouchDragging=!0;var n=t.createEventFromTouch(e,!0);t.emitter.trigger("pointerdown",n),t.initScrollWatch(n);var r=e.target;t.shouldIgnoreMove||r.addEventListener("touchmove",t.handleTouchMove),r.addEventListener("touchend",t.handleTouchEnd),r.addEventListener("touchcancel",t.handleTouchEnd),window.addEventListener("scroll",t.handleTouchScroll,!0)}},this.handleTouchMove=function(e){var n=t.createEventFromTouch(e);t.recordCoords(n),t.emitter.trigger("pointermove",n)},this.handleTouchEnd=function(e){if(t.isDragging){var n=e.target;n.removeEventListener("touchmove",t.handleTouchMove),n.removeEventListener("touchend",t.handleTouchEnd),n.removeEventListener("touchcancel",t.handleTouchEnd),window.removeEventListener("scroll",t.handleTouchScroll,!0),t.emitter.trigger("pointerup",t.createEventFromTouch(e)),t.cleanup(),t.isTouchDragging=!1,xl+=1,setTimeout((function(){xl-=1}),Zo.touchMouseIgnoreWait)}},this.handleTouchScroll=function(){t.wasTouchScroll=!0},this.handleScroll=function(e){if(!t.shouldIgnoreMove){var n=window.pageXOffset-t.prevScrollX+t.prevPageX,r=window.pageYOffset-t.prevScrollY+t.prevPageY;t.emitter.trigger("pointermove",{origEvent:e,isTouch:t.isTouchDragging,subjectEl:t.subjectEl,pageX:n,pageY:r,deltaX:n-t.origPageX,deltaY:r-t.origPageY})}},this.containerEl=e,this.emitter=new yi,e.addEventListener("mousedown",this.handleMouseDown),e.addEventListener("touchstart",this.handleTouchStart,{passive:!0}),1===(Ol+=1)&&window.addEventListener("touchmove",Il,{passive:!1})}return e.prototype.destroy=function(){this.containerEl.removeEventListener("mousedown",this.handleMouseDown),this.containerEl.removeEventListener("touchstart",this.handleTouchStart,{passive:!0}),(Ol-=1)||window.removeEventListener("touchmove",Il,{passive:!1})},e.prototype.tryStart=function(e){var t=this.querySubjectEl(e),n=e.target;return!(!t||this.handleSelector&&!Ge(n,this.handleSelector))&&(this.subjectEl=t,this.isDragging=!0,this.wasTouchScroll=!1,!0)},e.prototype.cleanup=function(){Ml=!1,this.isDragging=!1,this.subjectEl=null,this.destroyScrollWatch()},e.prototype.querySubjectEl=function(e){return this.selector?Ge(e.target,this.selector):this.containerEl},e.prototype.shouldIgnoreMouse=function(){return xl||this.isTouchDragging},e.prototype.cancelTouchScroll=function(){this.isDragging&&(Ml=!0)},e.prototype.initScrollWatch=function(e){this.shouldWatchScroll&&(this.recordCoords(e),window.addEventListener("scroll",this.handleScroll,!0))},e.prototype.recordCoords=function(e){this.shouldWatchScroll&&(this.prevPageX=e.pageX,this.prevPageY=e.pageY,this.prevScrollX=window.pageXOffset,this.prevScrollY=window.pageYOffset)},e.prototype.destroyScrollWatch=function(){this.shouldWatchScroll&&window.removeEventListener("scroll",this.handleScroll,!0)},e.prototype.createEventFromMouse=function(e,t){var n=0,r=0;return t?(this.origPageX=e.pageX,this.origPageY=e.pageY):(n=e.pageX-this.origPageX,r=e.pageY-this.origPageY),{origEvent:e,isTouch:!1,subjectEl:this.subjectEl,pageX:e.pageX,pageY:e.pageY,deltaX:n,deltaY:r}},e.prototype.createEventFromTouch=function(e,t){var n,r,i=e.touches,o=0,s=0;return i&&i.length?(n=i[0].pageX,r=i[0].pageY):(n=e.pageX,r=e.pageY),t?(this.origPageX=n,this.origPageY=r):(o=n-this.origPageX,s=r-this.origPageY),{origEvent:e,isTouch:!0,subjectEl:this.subjectEl,pageX:n,pageY:r,deltaX:o,deltaY:s}},e}();function Il(e){Ml&&e.preventDefault()}var Rl=function(){function e(){this.isVisible=!1,this.sourceEl=null,this.mirrorEl=null,this.sourceElRect=null,this.parentNode=document.body,this.zIndex=9999,this.revertDuration=0}return e.prototype.start=function(e,t,n){this.sourceEl=e,this.sourceElRect=this.sourceEl.getBoundingClientRect(),this.origScreenX=t-window.pageXOffset,this.origScreenY=n-window.pageYOffset,this.deltaX=0,this.deltaY=0,this.updateElPosition()},e.prototype.handleMove=function(e,t){this.deltaX=e-window.pageXOffset-this.origScreenX,this.deltaY=t-window.pageYOffset-this.origScreenY,this.updateElPosition()},e.prototype.setIsVisible=function(e){e?this.isVisible||(this.mirrorEl&&(this.mirrorEl.style.display=""),this.isVisible=e,this.updateElPosition()):this.isVisible&&(this.mirrorEl&&(this.mirrorEl.style.display="none"),this.isVisible=e)},e.prototype.stop=function(e,t){var n=this,r=function(){n.cleanup(),t()};e&&this.mirrorEl&&this.isVisible&&this.revertDuration&&(this.deltaX||this.deltaY)?this.doRevertAnimation(r,this.revertDuration):setTimeout(r,0)},e.prototype.doRevertAnimation=function(e,t){var n=this.mirrorEl,r=this.sourceEl.getBoundingClientRect();n.style.transition="top "+t+"ms,left "+t+"ms",Xe(n,{left:r.left,top:r.top}),function(e,t){var n=function(r){t(r),ot.forEach((function(t){e.removeEventListener(t,n)}))};ot.forEach((function(t){e.addEventListener(t,n)}))}(n,(function(){n.style.transition="",e()}))},e.prototype.cleanup=function(){this.mirrorEl&&(Ze(this.mirrorEl),this.mirrorEl=null),this.sourceEl=null},e.prototype.updateElPosition=function(){this.sourceEl&&this.isVisible&&Xe(this.getMirrorEl(),{left:this.sourceElRect.left+this.deltaX,top:this.sourceElRect.top+this.deltaY})},e.prototype.getMirrorEl=function(){var e=this.sourceElRect,t=this.mirrorEl;return t||((t=this.mirrorEl=this.sourceEl.cloneNode(!0)).classList.add("fc-unselectable"),t.classList.add("fc-event-dragging"),Xe(t,{position:"fixed",zIndex:this.zIndex,visibility:"",boxSizing:"border-box",width:e.right-e.left,height:e.bottom-e.top,right:"auto",bottom:"auto",margin:0}),this.parentNode.appendChild(t)),t},e}(),Nl=function(e){function t(t,n){var r=e.call(this)||this;return r.handleScroll=function(){r.scrollTop=r.scrollController.getScrollTop(),r.scrollLeft=r.scrollController.getScrollLeft(),r.handleScrollChange()},r.scrollController=t,r.doesListening=n,r.scrollTop=r.origScrollTop=t.getScrollTop(),r.scrollLeft=r.origScrollLeft=t.getScrollLeft(),r.scrollWidth=t.getScrollWidth(),r.scrollHeight=t.getScrollHeight(),r.clientWidth=t.getClientWidth(),r.clientHeight=t.getClientHeight(),r.clientRect=r.computeClientRect(),r.doesListening&&r.getEventTarget().addEventListener("scroll",r.handleScroll),r}return o(t,e),t.prototype.destroy=function(){this.doesListening&&this.getEventTarget().removeEventListener("scroll",this.handleScroll)},t.prototype.getScrollTop=function(){return this.scrollTop},t.prototype.getScrollLeft=function(){return this.scrollLeft},t.prototype.setScrollTop=function(e){this.scrollController.setScrollTop(e),this.doesListening||(this.scrollTop=Math.max(Math.min(e,this.getMaxScrollTop()),0),this.handleScrollChange())},t.prototype.setScrollLeft=function(e){this.scrollController.setScrollLeft(e),this.doesListening||(this.scrollLeft=Math.max(Math.min(e,this.getMaxScrollLeft()),0),this.handleScrollChange())},t.prototype.getClientWidth=function(){return this.clientWidth},t.prototype.getClientHeight=function(){return this.clientHeight},t.prototype.getScrollWidth=function(){return this.scrollWidth},t.prototype.getScrollHeight=function(){return this.scrollHeight},t.prototype.handleScrollChange=function(){},t}(_i),Pl=function(e){function t(t,n){return e.call(this,new wi(t),n)||this}return o(t,e),t.prototype.getEventTarget=function(){return this.scrollController.el},t.prototype.computeClientRect=function(){return mi(this.scrollController.el)},t}(Nl),Ll=function(e){function t(t){return e.call(this,new Ti,t)||this}return o(t,e),t.prototype.getEventTarget=function(){return window},t.prototype.computeClientRect=function(){return{left:this.scrollLeft,right:this.scrollLeft+this.clientWidth,top:this.scrollTop,bottom:this.scrollTop+this.clientHeight}},t.prototype.handleScrollChange=function(){this.clientRect=this.computeClientRect()},t}(Nl),Hl="function"==typeof performance?performance.now:Date.now,Yl=function(){function e(){var e=this;this.isEnabled=!0,this.scrollQuery=[window,".fc-scroller"],this.edgeThreshold=50,this.maxVelocity=300,this.pointerScreenX=null,this.pointerScreenY=null,this.isAnimating=!1,this.scrollCaches=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.animate=function(){if(e.isAnimating){var t=e.computeBestEdge(e.pointerScreenX+window.pageXOffset,e.pointerScreenY+window.pageYOffset);if(t){var n=Hl();e.handleSide(t,(n-e.msSinceRequest)/1e3),e.requestAnimation(n)}else e.isAnimating=!1}}}return e.prototype.start=function(e,t,n){this.isEnabled&&(this.scrollCaches=this.buildCaches(n),this.pointerScreenX=null,this.pointerScreenY=null,this.everMovedUp=!1,this.everMovedDown=!1,this.everMovedLeft=!1,this.everMovedRight=!1,this.handleMove(e,t))},e.prototype.handleMove=function(e,t){if(this.isEnabled){var n=e-window.pageXOffset,r=t-window.pageYOffset,i=null===this.pointerScreenY?0:r-this.pointerScreenY,o=null===this.pointerScreenX?0:n-this.pointerScreenX;i<0?this.everMovedUp=!0:i>0&&(this.everMovedDown=!0),o<0?this.everMovedLeft=!0:o>0&&(this.everMovedRight=!0),this.pointerScreenX=n,this.pointerScreenY=r,this.isAnimating||(this.isAnimating=!0,this.requestAnimation(Hl()))}},e.prototype.stop=function(){if(this.isEnabled){this.isAnimating=!1;for(var e=0,t=this.scrollCaches;e=0&&u>=0&&c>=0&&d>=0&&(c<=n&&this.everMovedUp&&s.canScrollUp()&&(!r||r.distance>c)&&(r={scrollCache:s,name:"top",distance:c}),d<=n&&this.everMovedDown&&s.canScrollDown()&&(!r||r.distance>d)&&(r={scrollCache:s,name:"bottom",distance:d}),l<=n&&this.everMovedLeft&&s.canScrollLeft()&&(!r||r.distance>l)&&(r={scrollCache:s,name:"left",distance:l}),u<=n&&this.everMovedRight&&s.canScrollRight()&&(!r||r.distance>u)&&(r={scrollCache:s,name:"right",distance:u}))}return r},e.prototype.buildCaches=function(e){return this.queryScrollEls(e).map((function(e){return e===window?new Ll(!1):new Pl(e,!1)}))},e.prototype.queryScrollEls=function(e){for(var t=[],n=0,r=this.scrollQuery;n=t*t&&r.handleDistanceSurpassed(e)}r.isDragging&&("scroll"!==e.origEvent.type&&(r.mirror.handleMove(e.pageX,e.pageY),r.autoScroller.handleMove(e.pageX,e.pageY)),r.emitter.trigger("dragmove",e))}},r.onPointerUp=function(e){r.isInteracting&&(r.isInteracting=!1,function(e){e.classList.remove("fc-unselectable"),e.removeEventListener("selectstart",rt)}(document.body),function(e){e.removeEventListener("contextmenu",rt)}(document.body),r.emitter.trigger("pointerup",e),r.isDragging&&(r.autoScroller.stop(),r.tryStopDrag(e)),r.delayTimeoutId&&(clearTimeout(r.delayTimeoutId),r.delayTimeoutId=null))};var i=r.pointer=new Al(t);return i.emitter.on("pointerdown",r.onPointerDown),i.emitter.on("pointermove",r.onPointerMove),i.emitter.on("pointerup",r.onPointerUp),n&&(i.selector=n),r.mirror=new Rl,r.autoScroller=new Yl,r}return o(t,e),t.prototype.destroy=function(){this.pointer.destroy(),this.onPointerUp({})},t.prototype.startDelay=function(e){var t=this;"number"==typeof this.delay?this.delayTimeoutId=setTimeout((function(){t.delayTimeoutId=null,t.handleDelayEnd(e)}),this.delay):this.handleDelayEnd(e)},t.prototype.handleDelayEnd=function(e){this.isDelayEnded=!0,this.tryStartDrag(e)},t.prototype.handleDistanceSurpassed=function(e){this.isDistanceSurpassed=!0,this.tryStartDrag(e)},t.prototype.tryStartDrag=function(e){this.isDelayEnded&&this.isDistanceSurpassed&&(this.pointer.wasTouchScroll&&!this.touchScrollAllowed||(this.isDragging=!0,this.mirrorNeedsRevert=!1,this.autoScroller.start(e.pageX,e.pageY,this.containerEl),this.emitter.trigger("dragstart",e),!1===this.touchScrollAllowed&&this.pointer.cancelTouchScroll()))},t.prototype.tryStopDrag=function(e){this.mirror.stop(this.mirrorNeedsRevert,this.stopDrag.bind(this,e))},t.prototype.stopDrag=function(e){this.isDragging=!1,this.emitter.trigger("dragend",e)},t.prototype.setIgnoreMove=function(e){this.pointer.shouldIgnoreMove=e},t.prototype.setMirrorIsVisible=function(e){this.mirror.setIsVisible(e)},t.prototype.setMirrorNeedsRevert=function(e){this.mirrorNeedsRevert=e},t.prototype.setAutoScrollEnabled=function(e){this.autoScroller.isEnabled=e},t}(qo),Vl=function(){function e(e){this.origRect=gi(e),this.scrollCaches=vi(e).map((function(e){return new Pl(e,!0)}))}return e.prototype.destroy=function(){for(var e=0,t=this.scrollCaches;e=0&&c=0&&di.layer)&&(m.componentId=o,m.context=s.context,m.rect.left+=l,m.rect.right+=l,m.rect.top+=u,m.rect.bottom+=u,i=m)}}}return i},e}();function Ul(e,t){return!e&&!t||Boolean(e)===Boolean(t)&&(n=e.dateSpan,r=t.dateSpan,i=n.range,o=r.range,(null===i.start?null:i.start.valueOf())===(null===o.start?null:o.start.valueOf())&&(null===i.end?null:i.end.valueOf())===(null===o.end?null:o.end.valueOf())&&n.allDay===r.allDay&&function(e,t){for(var n in t)if("range"!==n&&"allDay"!==n&&e[n]!==t[n])return!1;for(var n in e)if(!(n in t))return!1;return!0}(n,r));var n,r,i,o}function jl(e,t){for(var n,r,i={},o=0,a=t.pluginHooks.datePointTransforms;or.start)return{endDelta:a};return null}(s,e,r.subjectEl.classList.contains("fc-event-resizer-start"),a.range)));l&&(u=kr(o,i.getCurrentData().eventUiBases,l,i),d.mutatedEvents=u,ys(d,e.dateProfile,i)||(c=!0,l=null,u=null,d.mutatedEvents=null)),u?i.dispatch({type:"SET_EVENT_RESIZE",state:d}):i.dispatch({type:"UNSET_EVENT_RESIZE"}),c?ct():dt(),t||(l&&Ul(s,e)&&(l=null),n.validMutation=l,n.mutatedRelevantEvents=u)},n.handleDragEnd=function(e){var t=n.component.context,r=n.eventRange.def,i=n.eventRange.instance,o=new Lr(t,r,i),a=n.relevantEvents,l=n.mutatedRelevantEvents;if(t.emitter.trigger("eventResizeStop",{el:n.draggingSegEl,event:o,jsEvent:e.origEvent,view:t.viewApi}),n.validMutation){var u=new Lr(t,l.defs[r.defId],i?l.instances[i.instanceId]:null);t.dispatch({type:"MERGE_EVENTS",eventStore:l});var c={oldEvent:o,event:u,relatedEvents:Yr(l,t,i),revert:function(){t.dispatch({type:"MERGE_EVENTS",eventStore:a})}};t.emitter.trigger("eventResize",s(s({},c),{el:n.draggingSegEl,startDelta:n.validMutation.startDelta||Gt(0),endDelta:n.validMutation.endDelta||Gt(0),jsEvent:e.origEvent,view:t.viewApi})),t.emitter.trigger("eventChange",c)}else t.emitter.trigger("_noEventResize");n.draggingSeg=null,n.relevantEvents=null,n.validMutation=null};var r=t.component,i=n.dragging=new zl(t.el);i.pointer.selector=".fc-event-resizer",i.touchScrollAllowed=!1,i.autoScroller.isEnabled=r.context.options.dragScroll;var o=n.hitDragging=new Wl(n.dragging,Bo(t));return o.emitter.on("pointerdown",n.handlePointerDown),o.emitter.on("dragstart",n.handleDragStart),o.emitter.on("hitupdate",n.handleHitUpdate),o.emitter.on("dragend",n.handleDragEnd),n}return o(t,e),t.prototype.destroy=function(){this.dragging.destroy()},t.prototype.querySegEl=function(e){return Ge(e.subjectEl,".fc-event")},t}(Uo);var Gl=function(){function e(e){var t=this;this.context=e,this.isRecentPointerDateSelect=!1,this.matchesCancel=!1,this.matchesEvent=!1,this.onSelect=function(e){e.jsEvent&&(t.isRecentPointerDateSelect=!0)},this.onDocumentPointerDown=function(e){var n=t.context.options.unselectCancel,r=Qe(e.origEvent);t.matchesCancel=!!Ge(r,n),t.matchesEvent=!!Ge(r,ql.SELECTOR)},this.onDocumentPointerUp=function(e){var n=t.context,r=t.documentPointer,i=n.getCurrentData();if(!r.wasTouchScroll){if(i.dateSelection&&!t.isRecentPointerDateSelect){var o=n.options.unselectAuto;!o||o&&t.matchesCancel||n.calendarApi.unselect(e)}i.eventSelection&&!t.matchesEvent&&n.dispatch({type:"UNSELECT_EVENT"})}t.isRecentPointerDateSelect=!1};var n=this.documentPointer=new Al(document);n.shouldIgnoreMove=!0,n.shouldWatchScroll=!1,n.emitter.on("pointerdown",this.onDocumentPointerDown),n.emitter.on("pointerup",this.onDocumentPointerUp),e.emitter.on("select",this.onSelect)}return e.prototype.destroy=function(){this.context.emitter.off("select",this.onSelect),this.documentPointer.destroy()},e}(),$l={fixedMirrorParent:An},Kl={dateClick:An,eventDragStart:An,eventDragStop:An,eventDrop:An,eventResizeStart:An,eventResizeStop:An,eventResize:An,drop:An,eventReceive:An,eventLeave:An},Xl=function(){function e(e,t){var n=this;this.receivingContext=null,this.droppableEvent=null,this.suppliedDragMeta=null,this.dragMeta=null,this.handleDragStart=function(e){n.dragMeta=n.buildDragMeta(e.subjectEl)},this.handleHitUpdate=function(e,t,r){var i=n.hitDragging.dragging,o=null,a=null,l=!1,u={affectedEvents:{defs:{},instances:{}},mutatedEvents:{defs:{},instances:{}},isEvent:n.dragMeta.create};e&&(o=e.context,n.canDropElOnCalendar(r.subjectEl,o)&&(a=function(e,t,n){for(var r=s({},t.leftoverProps),i=0,o=n.pluginHooks.externalDefTransforms;i{document.dispatchEvent(new CustomEvent("kimai.calendar.changeDate",{detail:{view:this.toExternalViewName(e.view.type),date:e.start.toISOString().split("T")[0]}}))},views:{dayGrid:{dayMaxEventRows:this.options.dayLimit}},viewClassNames:()=>{document.querySelector(".fc-dayGridMonth-button").classList.remove("btn-icon"),document.querySelector(".fc-timeGridWeek-button").classList.remove("btn-icon"),document.querySelector(".fc-timeGridDay-button").classList.remove("btn-icon")},eventWillUnmount:e=>{if(null===e.event.source)return;if(!this.isKimaiSource(e.event))return;const t=r.AM.getInstance(e.element);null!==t&&t.dispose()},eventMouseEnter:e=>{const t=e.event;if(!this.isKimaiSource(t))return;const n=e.el,i=o.getFormattedDate(t.start)+" | "+o.formatTime(t.start)+" - "+(t.end?o.formatTime(t.end):""),s=this.renderEventPopoverContent(t);let a=r.AM.getInstance(n);null!==a?a.setContent({".popover-header":i,".popover-body":s}):a=new r.AM(n,{title:i,placement:"top",html:!0,content:s,trigger:"focus"}),a.show()},eventMouseLeave:e=>{this.isKimaiSource(e.event)&&this.hidePopover(e.el)},eventDidMount:e=>{e.el.addEventListener("contextmenu",(t=>{t.preventDefault();const n=e.event;if(!n.allDay){const e=this.options.url.actions(n.extendedProps.timesheet);i.get(e,{},(e=>{new Iu.A("calendar_contextMenu").createFromApi(t,e)}),(e=>{console.log("Failed to load actions for context menu",e)}))}}))},eventsSet:e=>{this._renderDayAndWeekSum(this.getCalendar().getCurrentData().viewSpec.type,e)}};if(!this.hasPermission("punch")&&this.hasPermission("create")&&void 0!==this.options.dragdrop){[].slice.call(document.querySelectorAll(this.options.dragdrop.container)).map((e=>new Jl(e,{itemSelector:this.options.dragdrop.items}))),l={...l,droppable:!0,drop:e=>{const t=e.draggedEl,n=t.parentElement;let r=JSON.parse(t.dataset.entry);const s=JSON.parse(n.dataset.routeReplacer);let l=n.dataset.route;for(const[e,t]of Object.entries(s))l=l.replace(e,r[t]);let u=e.date;if("dayGridMonth"===e.view.type){let e=this.options.defaultStartTime;if(null===e){const t=new Date;e=(t.getHours()<10?"0":"")+t.getHours()+":"+(t.getMinutes()<10?"0":"")+t.getMinutes()}u=o.addHumanDuration(u,e)}let c=o.addHumanDuration(u,this.options.slotDuration);this.hasPermission("punch")||(this.hasPermission("edit_begin")&&(r.begin=o.formatForAPI(u)),this.hasPermission("edit_end")&&(r.end=o.formatForAPI(c))),r=this.options.preparePayloadForUpdate(r),"PATCH"===n.dataset.method?i.patch(l,JSON.stringify(r),(e=>{const t=this.convertSourceForCalendar(e);this.getCalendar().addEvent(t,!0),a.success("action.update.success")})):i.post(l,JSON.stringify(r),(e=>{const t=this.convertSourceForCalendar(e);this.getCalendar().addEvent(t,!0),a.success("action.update.success")}))}}}!this.hasPermission("punch")&&this.hasPermission("create")&&(l={...l,dateClick:e=>{if("dayGridMonth"!==e.view.type)return;const t=this.options.url.create(e.dateStr);s.openUrlInModal(t)},selectable:!0,select:e=>{if("dayGridMonth"===e.view.type)return;const t=this.options.url.create(e.startStr,e.endStr);s.openUrlInModal(t)}}),this.hasPermission("edit")&&(l={...l,eventClick:e=>{const t=e.event;this.isKimaiSource(t)?(this.hidePopover(e.el),t.extendedProps.exported&&!this.hasPermission("edit_exported")||s.openUrlInModal(this.options.url.edit(t.id),(e=>{403!==e.status&&console.log(e)}))):e.jsEvent.preventDefault()}},this.hasPermission("punch")||(l={...l,dragRevertDuration:0,eventStartEditable:this.hasPermission("edit_begin"),eventDurationEditable:this.hasPermission("edit_end")||this.hasPermission("edit_duration"),eventDragStart:e=>{this.hidePopover(e.el)},eventDrop:e=>{this.changeHandler(e)},eventResizeStart:e=>{this.hidePopover(e.el)},eventResize:e=>{this.changeHandler(e)}})),void 0!==this.options.googleCalendarApiKey&&(l={...l,googleCalendarApiKey:this.options.googleCalendarApiKey});let u=[];for(const e of this.options.eventSources){let t={};if("timesheet"===e.type)t={...t,id:"kimai-"+e.id,events:(t,n,r)=>{const s=o.formatForAPI(t.start),a=o.formatForAPI(t.end);let l=e.url;l=l.replace("{from}",s),l=l.replace("__FROM__",s),l=l.replace("{to}",a),l=l.replace("__TO__",a),i.get(l,{},(e=>{let t=[];for(const n of e)t.push(this.convertSourceForCalendar(n));n(t)}),r)}};else if("google"===e.type)t={...t,id:"google-"+e.id,name:"google",editable:!1};else if("json"===e.type)t={...t,id:"json-"+e.id,editable:!1,events:(t,n,r)=>{const s=o.formatForAPI(t.start),a=o.formatForAPI(t.end);let l=e.url;l=l.replace("{from}",s),l=l.replace("__FROM__",s),l=l.replace("{to}",a),l=l.replace("__TO__",a),i.get(l,{},(e=>{let t=[];for(const n of e)t.push(n);n(t)}),r)}};else{if("ical"!==e.type){console.log("Unknown source type given, skipping to load events from: "+e.id);continue}t={...t,id:"ical-"+e.id,url:e.url,format:"ics",editable:!1}}void 0!==e.options&&(t={...t,...e.options}),u.push(t)}u.length>0&&(l={...l,eventSources:u}),this.calendar=new oa(t,l)}isKimaiSource(e){return null!==e&&(null!==e.source&&0===e.source.id.indexOf("kimai-"))}toExternalViewName(e){switch(e){case"timeGridDay":return"day";case"timeGridWeek":return"week";default:return"month"}}toInternalViewName(e){switch(e){case"day":case"agendaDay":case"timeGridDay":return"timeGridDay";case"week":case"agendaWeek":case"timeGridWeek":return"timeGridWeek";default:return"dayGridMonth"}}hasPermission(e){return this.options.permissions[e]}getCalendar(){return this.calendar}render(){this.calendar.render()}reloadEvents(){this.calendar.getEventSources().forEach((e=>e.refetch()))}convertSourceForCalendar(e){const t=this.kimai.getConfiguration().get("defaultColor");let n=e.activity.color;null!==n&&n!==t||(n=e.project.color,null!==n&&n!==t||(n=e.project.customer.color)),null===n&&(n=t);const r=this.kimai.getPlugin("date");let i=this.options.patterns.title;return i=i.replace("{project}",e.project.name),i=i.replace("{customer}",e.project.customer.name),i=i.replace("{description}",e.description??""),i=i.replace("{activity}",e.activity.name??""),i=null===e.end?i.replace("{duration}",""):i.replace("{duration}",r.formatDuration(e.duration)),""!==i&&null!==i||(i=e.activity.name),{id:e.id,timesheet:e.id,title:i,description:e.description,exported:e.exported,start:e.begin,end:e.end,activity:e.activity.name,project:e.project.name,customer:e.project.customer.name,tags:e.tags,color:n,textColor:Au.A.calculateContrastColor(n)}}renderEventPopoverContent(e){const t=e.extendedProps,n=this.kimai.getPlugin("escape");let r="";if(null!==t.tags&&t.tags.length>0)for(let e of t.tags)r+=''+n.escapeForHtml(e)+"";return'\n
\n
    \n
  • '+this.options.translations.customer+": "+n.escapeForHtml(t.customer)+"
  • \n
  • "+this.options.translations.project+": "+n.escapeForHtml(t.project)+"
  • \n
  • "+this.options.translations.activity+": "+n.escapeForHtml(t.activity)+"
  • \n
"+(null!==t.description||t.tags.length>0?"
":"")+(t.description?"
"+n.escapeForHtml(t.description)+"
":"")+r+"\n
"}hidePopover(e){let t=r.AM.getInstance(e);null!==t&&t.hide()}changeHandler(e){const t=e.event;if(t.extendedProps.exported&&!this.hasPermission("edit_exported"))return void e.revert();const n=this.kimai.getPlugin("api"),r=this.kimai.getPlugin("alert"),i=this.kimai.getPlugin("date");let o={begin:i.formatForAPI(t.start)};null!==t.end&&void 0!==t.end?o.end=i.formatForAPI(t.end):o.end=null;const s=this.options.url.update(t.id);n.patch(s,JSON.stringify(o),(()=>{r.success("action.update.success")}),(t=>{e.revert(),n.handleError("action.update.error",t)}))}_renderDayAndWeekSum(e,t){if("dayGridMonth"===e)return;const n=this.kimai.getPlugin("date"),r={};"timeGridWeek"===e&&document.querySelectorAll("th.fc-col-header-cell[data-date]").forEach((e=>{r[e.dataset.date]=0})),t.forEach((e=>{const t=Ru.c9.fromJSDate(e.start).toUTC(),n=t.toFormat("yyyy-MM-dd");if(r[n]||(r[n]=0),null!==e.end){const i=Ru.c9.fromJSDate(e.end).toUTC().diff(t,"hours").as("seconds");r[n]+=i}}));document.querySelectorAll(".fc-dailytotal").forEach((e=>e.remove()));for(const t in r){const i=r[t];if("timeGridWeek"===e){document.querySelectorAll(`th.fc-col-header-cell[data-date="${t}"]`).forEach((e=>{const t=document.createElement("div");t.classList.add("fc-dailytotal"),t.textContent=n.formatSeconds(i),e.appendChild(t)}))}}if("timeGridDay"===e){const e=document.querySelector("th.fc-day"),t=e.dataset.date;document.querySelectorAll(".fc-dailytotal").forEach((e=>e.remove()));const i=document.createElement("div");i.classList.add("fc-dailytotal"),i.textContent=n.formatSeconds(r[t]),e.appendChild(i)}}}},4729:function(e,t){"use strict";t.A={code:"it",week:{dow:1,doy:4},buttonText:{prev:"Prec",next:"Succ",today:"Oggi",month:"Mese",week:"Settimana",day:"Giorno",list:"Agenda"},weekText:"Sm",allDayText:"Tutto il giorno",moreLinkText:function(e){return"+altri "+e},noEventsText:"Non ci sono eventi da visualizzare"}},4773:function(e,t){"use strict";t.A={code:"vi",week:{dow:1,doy:4},buttonText:{prev:"Trước",next:"Tiếp",today:"Hôm nay",month:"Tháng",week:"Tuần",day:"Ngày",list:"Lịch biểu"},weekText:"Tu",allDayText:"Cả ngày",moreLinkText:function(e){return"+ thêm "+e},noEventsText:"Không có sự kiện để hiển thị"}},4836:function(e,t){"use strict";t.A={code:"pt",week:{dow:1,doy:4},buttonText:{prev:"Anterior",next:"Seguinte",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Agenda"},weekText:"Sem",allDayText:"Todo o dia",moreLinkText:"mais",noEventsText:"Não há eventos para mostrar"}},4853:function(e,t){"use strict";t.A={code:"en-gb",week:{dow:1,doy:4},buttonHints:{prev:"Previous $0",next:"Next $0",today:"This $0"},viewHint:"$0 view",navLinkHint:"Go to $0",moreLinkHint:function(e){return"Show ".concat(e," more event").concat(1===e?"":"s")}}},5179:function(e,t){"use strict";t.A={code:"ar",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"السابق",next:"التالي",today:"اليوم",month:"شهر",week:"أسبوع",day:"يوم",list:"أجندة"},weekText:"أسبوع",allDayText:"اليوم كله",moreLinkText:"أخرى",noEventsText:"أي أحداث لعرض"}},5431:function(e,t){"use strict";function n(e){return"Tag"===e||"Monat"===e?"r":"Jahr"===e?"s":""}var r={code:"de",week:{dow:1,doy:4},buttonText:{prev:"Zurück",next:"Vor",today:"Heute",year:"Jahr",month:"Monat",week:"Woche",day:"Tag",list:"Terminübersicht"},weekText:"KW",weekTextLong:"Woche",allDayText:"Ganztägig",moreLinkText:function(e){return"+ weitere "+e},noEventsText:"Keine Ereignisse anzuzeigen",buttonHints:{prev:function(e){return"Vorherige".concat(n(e)," ").concat(e)},next:function(e){return"Nächste".concat(n(e)," ").concat(e)},today:function(e){return"Tag"===e?"Heute":"Diese".concat(n(e)," ").concat(e)}},viewHint:function(e){return e+("Woche"===e?"n":"Monat"===e?"s":"es")+"ansicht"},navLinkHint:"Gehe zu $0",moreLinkHint:function(e){return"Zeige "+(1===e?"ein weiteres Ereignis":e+" weitere Ereignisse")},closeHint:"Schließen",timeHint:"Uhrzeit",eventHint:"Ereignis"};t.A=r},5506:function(e,t){"use strict";t.A={code:"nl",week:{dow:1,doy:4},buttonText:{prev:"Vorige",next:"Volgende",today:"Vandaag",year:"Jaar",month:"Maand",week:"Week",day:"Dag",list:"Agenda"},allDayText:"Hele dag",moreLinkText:"extra",noEventsText:"Geen evenementen om te laten zien"}},5690:function(e,t){"use strict";t.A={code:"hr",week:{dow:1,doy:7},buttonText:{prev:"Prijašnji",next:"Sljedeći",today:"Danas",month:"Mjesec",week:"Tjedan",day:"Dan",list:"Raspored"},weekText:"Tje",allDayText:"Cijeli dan",moreLinkText:function(e){return"+ još "+e},noEventsText:"Nema događaja za prikaz"}},6225:function(e){var t,n,r,i;(t=e.exports).foldLength=75,t.newLineChar="\r\n",t.helpers={updateTimezones:function(e){var n,r,i,o,s,a;if(!e||"vcalendar"!==e.name)return e;for(n=e.getAllSubcomponents(),r=[],i={},s=0;s0&&"\\"===e[n-1]))return n;n+=1}return-1},binsearchInsert:function(e,t,n){if(!e.length)return 0;for(var r,i,o=0,s=e.length-1;o<=s;)if((i=n(t,e[r=o+Math.floor((s-o)/2)]))<0)s=r-1;else{if(!(i>0))break;o=r+1}return i<0?r:i>0?r+1:r},dumpn:function(){t.debug&&("undefined"!=typeof console&&"log"in console?t.helpers.dumpn=function(e){console.log(e)}:t.helpers.dumpn=function(e){dump(e+"\n")},t.helpers.dumpn(arguments[0]))},clone:function(e,n){if(e&&"object"==typeof e){if(e instanceof Date)return new Date(e.getTime());if("clone"in e)return e.clone();if(Array.isArray(e)){for(var r=[],i=0;i65535?2:1:(n+=t.newLineChar+" "+r.substring(0,i),r=r.substring(i),i=o=0)}return n.substr(t.newLineChar.length+1)},pad2:function(e){switch("string"!=typeof e&&("number"==typeof e&&(e=parseInt(e)),e=String(e)),e.length){case 0:return"00";case 1:return"0"+e;default:return e}},trunc:function(e){return e<0?Math.ceil(e):Math.floor(e)},inherits:function(e,n,r){function i(){}i.prototype=e.prototype,n.prototype=new i,r&&t.helpers.extend(r,n.prototype)},extend:function(e,t){for(var n in e){var r=Object.getOwnPropertyDescriptor(e,n);r&&!Object.getOwnPropertyDescriptor(t,n)&&Object.defineProperty(t,n,r)}return t}},t.design=function(){"use strict";var e=/\\\\|\\,|\\[Nn]/g,n=/\\|,|\n/g;function r(e,t){return{matches:/.*/,fromICAL:function(t,n){return function(e,t,n){if(-1===e.indexOf("\\"))return e;n&&(t=new RegExp(t.source+"|\\\\"+n));return e.replace(t,p)}(t,e,n)},toICAL:function(e,n){var r=t;return n&&(r=new RegExp(r.source+"|"+n)),e.replace(r,(function(e){switch(e){case"\\":return"\\\\";case";":return"\\;";case",":return"\\,";case"\n":return"\\n";default:return e}}))}}}var i={defaultType:"text"},o={defaultType:"text",multiValue:","},s={defaultType:"text",structuredValue:";"},a={defaultType:"integer"},l={defaultType:"date-time",allowedTypes:["date-time","date"]},u={defaultType:"date-time"},c={defaultType:"uri"},d={defaultType:"utc-offset"},h={defaultType:"recur"},f={defaultType:"date-and-or-time",allowedTypes:["date-time","date","text"]};function p(e){switch(e){case"\\\\":return"\\";case"\\;":return";";case"\\,":return",";case"\\n":case"\\N":return"\n";default:return e}}var m={categories:o,url:c,version:i,uid:i},g={boolean:{values:["TRUE","FALSE"],fromICAL:function(e){return"TRUE"===e},toICAL:function(e){return e?"TRUE":"FALSE"}},float:{matches:/^[+-]?\d+\.\d+$/,fromICAL:function(e){var n=parseFloat(e);return t.helpers.isStrictlyNaN(n)?0:n},toICAL:function(e){return String(e)}},integer:{fromICAL:function(e){var n=parseInt(e);return t.helpers.isStrictlyNaN(n)?0:n},toICAL:function(e){return String(e)}},"utc-offset":{toICAL:function(e){return e.length<7?e.substr(0,3)+e.substr(4,2):e.substr(0,3)+e.substr(4,2)+e.substr(7,2)},fromICAL:function(e){return e.length<6?e.substr(0,3)+":"+e.substr(3,2):e.substr(0,3)+":"+e.substr(3,2)+":"+e.substr(5,2)},decorate:function(e){return t.UtcOffset.fromString(e)},undecorate:function(e){return e.toString()}}},v=t.helpers.extend(g,{text:r(/\\\\|\\;|\\,|\\[Nn]/g,/\\|;|,|\n/g),uri:{},binary:{decorate:function(e){return t.Binary.fromString(e)},undecorate:function(e){return e.toString()}},"cal-address":{},date:{decorate:function(e,n){return C.strict?t.Time.fromDateString(e,n):t.Time.fromString(e,n)},undecorate:function(e){return e.toString()},fromICAL:function(e){return!C.strict&&e.length>=15?v["date-time"].fromICAL(e):e.substr(0,4)+"-"+e.substr(4,2)+"-"+e.substr(6,2)},toICAL:function(e){var t=e.length;return 10==t?e.substr(0,4)+e.substr(5,2)+e.substr(8,2):t>=19?v["date-time"].toICAL(e):e}},"date-time":{fromICAL:function(e){if(C.strict||8!=e.length){var t=e.substr(0,4)+"-"+e.substr(4,2)+"-"+e.substr(6,2)+"T"+e.substr(9,2)+":"+e.substr(11,2)+":"+e.substr(13,2);return e[15]&&"Z"===e[15]&&(t+="Z"),t}return v.date.fromICAL(e)},toICAL:function(e){var t=e.length;if(10!=t||C.strict){if(t>=19){var n=e.substr(0,4)+e.substr(5,2)+e.substr(8,5)+e.substr(14,2)+e.substr(17,2);return e[19]&&"Z"===e[19]&&(n+="Z"),n}return e}return v.date.toICAL(e)},decorate:function(e,n){return C.strict?t.Time.fromDateTimeString(e,n):t.Time.fromString(e,n)},undecorate:function(e){return e.toString()}},duration:{decorate:function(e){return t.Duration.fromString(e)},undecorate:function(e){return e.toString()}},period:{fromICAL:function(e){var n=e.split("/");return n[0]=v["date-time"].fromICAL(n[0]),t.Duration.isValueString(n[1])||(n[1]=v["date-time"].fromICAL(n[1])),n},toICAL:function(e){return C.strict||10!=e[0].length?e[0]=v["date-time"].toICAL(e[0]):e[0]=v.date.toICAL(e[0]),t.Duration.isValueString(e[1])||(C.strict||10!=e[1].length?e[1]=v["date-time"].toICAL(e[1]):e[1]=v.date.toICAL(e[1])),e.join("/")},decorate:function(e,n){return t.Period.fromJSON(e,n,!C.strict)},undecorate:function(e){return e.toJSON()}},recur:{fromICAL:function(e){return t.Recur._stringToData(e,!0)},toICAL:function(e){var n="";for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){var i=e[r];"until"==r?i=i.length>10?v["date-time"].toICAL(i):v.date.toICAL(i):"wkst"==r?"number"==typeof i&&(i=t.Recur.numericDayToIcalDay(i)):Array.isArray(i)&&(i=i.join(",")),n+=r.toUpperCase()+"="+i+";"}return n.substr(0,n.length-1)},decorate:function(e){return t.Recur.fromData(e)},undecorate:function(e){return e.toJSON()}},time:{fromICAL:function(e){if(e.length<6)return e;var t=e.substr(0,2)+":"+e.substr(2,2)+":"+e.substr(4,2);return"Z"===e[6]&&(t+="Z"),t},toICAL:function(e){if(e.length<8)return e;var t=e.substr(0,2)+e.substr(3,2)+e.substr(6,2);return"Z"===e[8]&&(t+="Z"),t}}}),y=t.helpers.extend(m,{action:i,attach:{defaultType:"uri"},attendee:{defaultType:"cal-address"},calscale:i,class:i,comment:i,completed:u,contact:i,created:u,description:i,dtend:l,dtstamp:u,dtstart:l,due:l,duration:{defaultType:"duration"},exdate:{defaultType:"date-time",allowedTypes:["date-time","date"],multiValue:","},exrule:h,freebusy:{defaultType:"period",multiValue:","},geo:{defaultType:"float",structuredValue:";"},"last-modified":u,location:i,method:i,organizer:{defaultType:"cal-address"},"percent-complete":a,priority:a,prodid:i,"related-to":i,repeat:a,rdate:{defaultType:"date-time",allowedTypes:["date-time","date","period"],multiValue:",",detectType:function(e){return-1!==e.indexOf("/")?"period":-1===e.indexOf("T")?"date":"date-time"}},"recurrence-id":l,resources:o,"request-status":s,rrule:h,sequence:a,status:i,summary:i,transp:i,trigger:{defaultType:"duration",allowedTypes:["duration","date-time"]},tzoffsetfrom:d,tzoffsetto:d,tzurl:c,tzid:i,tzname:i}),b=t.helpers.extend(g,{text:r(e,n),uri:r(e,n),date:{decorate:function(e){return t.VCardTime.fromDateAndOrTimeString(e,"date")},undecorate:function(e){return e.toString()},fromICAL:function(e){return 8==e.length?v.date.fromICAL(e):"-"==e[0]&&6==e.length?e.substr(0,4)+"-"+e.substr(4):e},toICAL:function(e){return 10==e.length?v.date.toICAL(e):"-"==e[0]&&7==e.length?e.substr(0,4)+e.substr(5):e}},time:{decorate:function(e){return t.VCardTime.fromDateAndOrTimeString("T"+e,"time")},undecorate:function(e){return e.toString()},fromICAL:function(e){var t=b.time._splitZone(e,!0),n=t[0],r=t[1];return 6==r.length?r=r.substr(0,2)+":"+r.substr(2,2)+":"+r.substr(4,2):4==r.length&&"-"!=r[0]?r=r.substr(0,2)+":"+r.substr(2,2):5==r.length&&(r=r.substr(0,3)+":"+r.substr(3,2)),5!=n.length||"-"!=n[0]&&"+"!=n[0]||(n=n.substr(0,3)+":"+n.substr(3)),r+n},toICAL:function(e){var t=b.time._splitZone(e),n=t[0],r=t[1];return 8==r.length?r=r.substr(0,2)+r.substr(3,2)+r.substr(6,2):5==r.length&&"-"!=r[0]?r=r.substr(0,2)+r.substr(3,2):6==r.length&&(r=r.substr(0,3)+r.substr(4,2)),6!=n.length||"-"!=n[0]&&"+"!=n[0]||(n=n.substr(0,3)+n.substr(4)),r+n},_splitZone:function(e,t){var n,r,i=e.length-1,o=e.length-(t?5:6),s=e[o];return"Z"==e[i]?(n=e[i],r=e.substr(0,i)):e.length>6&&("-"==s||"+"==s)?(n=e.substr(o),r=e.substr(0,o)):(n="",r=e),[n,r]}},"date-time":{decorate:function(e){return t.VCardTime.fromDateAndOrTimeString(e,"date-time")},undecorate:function(e){return e.toString()},fromICAL:function(e){return b["date-and-or-time"].fromICAL(e)},toICAL:function(e){return b["date-and-or-time"].toICAL(e)}},"date-and-or-time":{decorate:function(e){return t.VCardTime.fromDateAndOrTimeString(e,"date-and-or-time")},undecorate:function(e){return e.toString()},fromICAL:function(e){var t=e.split("T");return(t[0]?b.date.fromICAL(t[0]):"")+(t[1]?"T"+b.time.fromICAL(t[1]):"")},toICAL:function(e){var t=e.split("T");return b.date.toICAL(t[0])+(t[1]?"T"+b.time.toICAL(t[1]):"")}},timestamp:v["date-time"],"language-tag":{matches:/^[a-zA-Z0-9-]+$/}}),_=t.helpers.extend(m,{adr:{defaultType:"text",structuredValue:";",multiValue:","},anniversary:f,bday:f,caladruri:c,caluri:c,clientpidmap:s,email:i,fburl:c,fn:i,gender:s,geo:c,impp:c,key:c,kind:i,lang:{defaultType:"language-tag"},logo:c,member:c,n:{defaultType:"text",structuredValue:";",multiValue:","},nickname:o,note:i,org:{defaultType:"text",structuredValue:";"},photo:c,related:c,rev:{defaultType:"timestamp"},role:i,sound:c,source:c,tel:{defaultType:"uri",allowedTypes:["uri","text"]},title:i,tz:{defaultType:"text",allowedTypes:["text","utc-offset","uri"]},xml:i}),w=t.helpers.extend(g,{binary:v.binary,date:b.date,"date-time":b["date-time"],"phone-number":{},uri:v.uri,text:v.text,time:v.time,vcard:v.text,"utc-offset":{toICAL:function(e){return e.substr(0,7)},fromICAL:function(e){return e.substr(0,7)},decorate:function(e){return t.UtcOffset.fromString(e)},undecorate:function(e){return e.toString()}}}),T=t.helpers.extend(m,{fn:i,n:{defaultType:"text",structuredValue:";",multiValue:","},nickname:o,photo:{defaultType:"binary",allowedTypes:["binary","uri"]},bday:{defaultType:"date-time",allowedTypes:["date-time","date"],detectType:function(e){return-1===e.indexOf("T")?"date":"date-time"}},adr:{defaultType:"text",structuredValue:";",multiValue:","},label:i,tel:{defaultType:"phone-number"},email:i,mailer:i,tz:{defaultType:"utc-offset",allowedTypes:["utc-offset","text"]},geo:{defaultType:"float",structuredValue:";"},title:i,role:i,logo:{defaultType:"binary",allowedTypes:["binary","uri"]},agent:{defaultType:"vcard",allowedTypes:["vcard","text","uri"]},org:s,note:o,prodid:i,rev:{defaultType:"date-time",allowedTypes:["date-time","date"],detectType:function(e){return-1===e.indexOf("T")?"date":"date-time"}},"sort-string":i,sound:{defaultType:"binary",allowedTypes:["binary","uri"]},class:i,key:{defaultType:"binary",allowedTypes:["binary","text"]}}),E={value:v,param:{cutype:{values:["INDIVIDUAL","GROUP","RESOURCE","ROOM","UNKNOWN"],allowXName:!0,allowIanaToken:!0},"delegated-from":{valueType:"cal-address",multiValue:",",multiValueSeparateDQuote:!0},"delegated-to":{valueType:"cal-address",multiValue:",",multiValueSeparateDQuote:!0},encoding:{values:["8BIT","BASE64"]},fbtype:{values:["FREE","BUSY","BUSY-UNAVAILABLE","BUSY-TENTATIVE"],allowXName:!0,allowIanaToken:!0},member:{valueType:"cal-address",multiValue:",",multiValueSeparateDQuote:!0},partstat:{values:["NEEDS-ACTION","ACCEPTED","DECLINED","TENTATIVE","DELEGATED","COMPLETED","IN-PROCESS"],allowXName:!0,allowIanaToken:!0},range:{values:["THISANDFUTURE"]},related:{values:["START","END"]},reltype:{values:["PARENT","CHILD","SIBLING"],allowXName:!0,allowIanaToken:!0},role:{values:["REQ-PARTICIPANT","CHAIR","OPT-PARTICIPANT","NON-PARTICIPANT"],allowXName:!0,allowIanaToken:!0},rsvp:{values:["TRUE","FALSE"]},"sent-by":{valueType:"cal-address"},tzid:{matches:/^\//},value:{values:["binary","boolean","cal-address","date","date-time","duration","float","integer","period","recur","text","time","uri","utc-offset"],allowXName:!0,allowIanaToken:!0}},property:y},D={value:b,param:{type:{valueType:"text",multiValue:","},value:{values:["text","uri","date","time","date-time","date-and-or-time","timestamp","boolean","integer","float","utc-offset","language-tag"],allowXName:!0,allowIanaToken:!0}},property:_},S={value:w,param:{type:{valueType:"text",multiValue:","},value:{values:["text","uri","date","date-time","phone-number","time","boolean","integer","float","utc-offset","vcard","binary"],allowXName:!0,allowIanaToken:!0}},property:T},C={strict:!0,defaultSet:E,defaultType:"unknown",components:{vcard:D,vcard3:S,vevent:E,vtodo:E,vjournal:E,valarm:E,vtimezone:E,daylight:E,standard:E},icalendar:E,vcard:D,vcard3:S,getDesignSet:function(e){return e&&e in C.components?C.components[e]:C.defaultSet}};return C}(),t.stringify=function(){"use strict";var e="\r\n",n="unknown",r=t.design,i=t.helpers;function o(t){"string"==typeof t[0]&&(t=[t]);for(var n=0,r=t.length,i="";n0&&("version"!==t[1][0][0]||"4.0"!==t[1][0][3])&&(c="vcard3"),n=n||r.getDesignSet(c);l1)throw new i("invalid ical body. component began but did not end");return t=null,1==n.length?n[0]:n}i.prototype=Error.prototype,o.property=function(e,t){var r={component:[[],[]],designSet:t||n.defaultSet};return o._handleContentLine(e,r),r.component[1][0]},o.component=function(e){return o(e)},o.ParserError=i,o._handleContentLine=function(e,t){var r,s,a,l,u,c,d=e.indexOf(":"),h=e.indexOf(";"),f={};if(-1!==h&&-1!==d&&h>d&&(h=-1),-1!==h){if(a=e.substring(0,h).toLowerCase(),-1==(u=o._parseParameters(e.substring(h),0,t.designSet))[2])throw new i("Invalid parameters in '"+e+"'");if(f=u[0],r=u[1].length+u[2]+h,-1===(s=e.substring(r).indexOf(":")))throw new i("Missing parameter value in '"+e+"'");l=e.substring(r+s+1)}else{if(-1===d)throw new i('invalid line (no token ";" or ":") "'+e+'"');if(a=e.substring(0,d).toLowerCase(),l=e.substring(d+1),"begin"===a){var p=[l.toLowerCase(),[],[]];return 1===t.stack.length?t.component.push(p):t.component[2].push(p),t.stack.push(t.component),t.component=p,void(t.designSet||(t.designSet=n.getDesignSet(t.component[0])))}if("end"===a)return void(t.component=t.stack.pop())}var m,g,v=!1,y=!1;a in t.designSet.property&&("multiValue"in(m=t.designSet.property[a])&&(v=m.multiValue),"structuredValue"in m&&(y=m.structuredValue),l&&"detectType"in m&&(c=m.detectType(l))),c||(c="value"in f?f.value.toLowerCase():m?m.defaultType:"unknown"),delete f.value,v&&y?g=[a,f,c,l=o._parseMultiValue(l,y,c,[],v,t.designSet,y)]:v?(g=[a,f,c],o._parseMultiValue(l,v,c,g,null,t.designSet,!1)):g=y?[a,f,c,l=o._parseMultiValue(l,y,c,[],null,t.designSet,y)]:[a,f,c,l=o._parseValue(l,c,t.designSet,!1)],"vcard"!==t.component[0]||0!==t.component[1].length||"version"===a&&"4.0"===l||(t.designSet=n.getDesignSet("vcard3")),t.component[1].push(g)},o._parseValue=function(e,t,n,r){return t in n.value&&"fromICAL"in n.value[t]?n.value[t].fromICAL(e,r):e},o._parseParameters=function(e,t,n){for(var s,a,l,u,c,d,h=t,f=0,p={},m=-1;!1!==f&&-1!==(f=r.unescapedIndexOf(e,"=",f+1));){if(0==(s=e.substr(h+1,f-h-1)).length)throw new i("Empty parameter name in '"+e+"'");if(d=!1,c=!1,u=(a=s.toLowerCase())in n.param&&n.param[a].valueType?n.param[a].valueType:"text",a in n.param&&(c=n.param[a].multiValue,n.param[a].multiValueSeparateDQuote&&(d=o._rfc6868Escape('"'+c+'"'))),'"'===e[f+1]){if(m=f+2,f=r.unescapedIndexOf(e,'"',m),c&&-1!=f)for(var g=!0;g;)e[f+1]==c&&'"'==e[f+2]?f=r.unescapedIndexOf(e,'"',f+3):g=!1;if(-1===f)throw new i('invalid line (no matching double quote) "'+e+'"');l=e.substr(m,f-m),-1===(h=r.unescapedIndexOf(e,";",f))&&(f=!1)}else{m=f+1;var v=r.unescapedIndexOf(e,";",m),y=r.unescapedIndexOf(e,":",m);-1!==y&&v>y?(v=y,f=!1):-1===v?(v=-1===y?e.length:y,f=!1):(h=v,f=v),l=e.substr(m,v-m)}if(l=o._rfc6868Escape(l),c){var b=d||c;l=o._parseMultiValue(l,b,u,[],null,n)}else l=o._parseValue(l,u,n);c&&a in p?Array.isArray(p[a])?p[a].push(l):p[a]=[p[a],l]:p[a]=l}return[p,l,m]},o._rfc6868Escape=function(e){return e.replace(/\^['n^]/g,(function(e){return s[e]}))};var s={"^'":'"',"^n":"\n","^^":"^"};return o._parseMultiValue=function(e,t,n,i,s,a,l){var u,c=0,d=0;if(0===t.length)return e;for(;-1!==(c=r.unescapedIndexOf(e,t,d));)u=e.substr(d,c-d),u=s?o._parseMultiValue(u,s,n,[],null,a,l):o._parseValue(u,n,a,l),i.push(u),d=c+t.length;return u=e.substr(d),u=s?o._parseMultiValue(u,s,n,[],null,a,l):o._parseValue(u,n,a,l),i.push(u),1==i.length?i[0]:i},o._eachLine=function(t,n){var r,i,o,s=t.length,a=t.search(e),l=a;do{o=(l=t.indexOf("\n",a)+1)>1&&"\r"===t[l-2]?2:1,0===l&&(l=s,o=0)," "===(i=t[a])||"\t"===i?r+=t.substr(a+1,l-a-(o+1)):(r&&n(null,r),r=t.substr(a,l-a-o)),a=l}while(l!==s);(r=r.trim()).length&&n(null,r)},o}(),t.Component=function(){"use strict";function e(e,t){"string"==typeof e&&(e=[e,[],[]]),this.jCal=e,this.parent=t||null}return e.prototype={_hydratedPropertyCount:0,_hydratedComponentCount:0,get name(){return this.jCal[0]},get _designSet(){return this.parent&&this.parent._designSet||t.design.getDesignSet(this.name)},_hydrateComponent:function(t){if(this._components||(this._components=[],this._hydratedComponentCount=0),this._components[t])return this._components[t];var n=new e(this.jCal[2][t],this);return this._hydratedComponentCount++,this._components[t]=n},_hydrateProperty:function(e){if(this._properties||(this._properties=[],this._hydratedPropertyCount=0),this._properties[e])return this._properties[e];var n=new t.Property(this.jCal[1][e],this);return this._hydratedPropertyCount++,this._properties[e]=n},getFirstSubcomponent:function(e){if(e)for(var t=0,n=this.jCal[2],r=n.length;t=0;o--)n&&i[o][0]!==n||this._removeObjectByIndex(e,r,o)},addSubcomponent:function(e){this._components||(this._components=[],this._hydratedComponentCount=0),e.parent&&e.parent.removeSubcomponent(e);var t=this.jCal[2].push(e.jCal);return this._components[t-1]=e,this._hydratedComponentCount++,e.parent=this,e},removeSubcomponent:function(e){var t=this._removeObject(2,"_components",e);return t&&this._hydratedComponentCount--,t},removeAllSubcomponents:function(e){var t=this._removeAllObjects(2,"_components",e);return this._hydratedComponentCount=0,t},addProperty:function(e){if(!(e instanceof t.Property))throw new TypeError("must instance of ICAL.Property");this._properties||(this._properties=[],this._hydratedPropertyCount=0),e.parent&&e.parent.removeProperty(e);var n=this.jCal[1].push(e.jCal);return this._properties[n-1]=e,this._hydratedPropertyCount++,e.parent=this,e},addPropertyWithValue:function(e,n){var r=new t.Property(e);return r.setValue(n),this.addProperty(r),r},updatePropertyWithValue:function(e,t){var n=this.getFirstProperty(e);return n?n.setValue(t):n=this.addPropertyWithValue(e,t),n},removeProperty:function(e){var t=this._removeObject(1,"_properties",e);return t&&this._hydratedPropertyCount--,t},removeAllProperties:function(e){var t=this._removeAllObjects(1,"_properties",e);return this._hydratedPropertyCount=0,t},toJSON:function(){return this.jCal},toString:function(){return t.stringify.component(this.jCal,this._designSet)}},e.fromString=function(n){return new e(t.parse.component(n))},e}(),t.Property=function(){"use strict";var e=t.design;function n(t,n){this._parent=n||null,"string"==typeof t?(this.jCal=[t,{},e.defaultType],this.jCal[2]=this.getDefaultType()):this.jCal=t,this._updateType()}return n.prototype={get type(){return this.jCal[2]},get name(){return this.jCal[0]},get parent(){return this._parent},set parent(t){var n=!this._parent||t&&t._designSet!=this._parent._designSet;return this._parent=t,this.type==e.defaultType&&n&&(this.jCal[2]=this.getDefaultType(),this._updateType()),t},get _designSet(){return this.parent?this.parent._designSet:e.defaultSet},_updateType:function(){var e=this._designSet;if(this.type in e.value){e.value[this.type];"decorate"in e.value[this.type]?this.isDecorated=!0:this.isDecorated=!1,this.name in e.property&&(this.isMultiValue="multiValue"in e.property[this.name],this.isStructuredValue="structuredValue"in e.property[this.name])}},_hydrateValue:function(e){return this._values&&this._values[e]?this._values[e]:this.jCal.length<=3+e?null:this.isDecorated?(this._values||(this._values=[]),this._values[e]=this._decorate(this.jCal[3+e])):this.jCal[3+e]},_decorate:function(e){return this._designSet.value[this.type].decorate(e,this)},_undecorate:function(e){return this._designSet.value[this.type].undecorate(e,this)},_setDecoratedValue:function(e,t){this._values||(this._values=[]),"object"==typeof e&&"icaltype"in e?(this.jCal[3+t]=this._undecorate(e),this._values[t]=e):(this.jCal[3+t]=e,this._values[t]=this._decorate(e))},getParameter:function(e){return e in this.jCal[1]?this.jCal[1][e]:void 0},getFirstParameter:function(e){var t=this.getParameter(e);return Array.isArray(t)?t[0]:t},setParameter:function(e,t){var n=e.toLowerCase();"string"==typeof t&&n in this._designSet.param&&"multiValue"in this._designSet.param[n]&&(t=[t]),this.jCal[1][e]=t},removeParameter:function(e){delete this.jCal[1][e]},getDefaultType:function(){var t=this.jCal[0],n=this._designSet;if(t in n.property){var r=n.property[t];if("defaultType"in r)return r.defaultType}return e.defaultType},resetType:function(e){this.removeAllValues(),this.jCal[2]=e,this._updateType()},getFirstValue:function(){return this._hydrateValue(0)},getValues:function(){var e=this.jCal.length-3;if(e<1)return[];for(var t=0,n=[];t0&&"object"==typeof e[0]&&"icaltype"in e[0]&&this.resetType(e[0].icaltype),this.isDecorated)for(;nn)-(n>t)},_normalize:function(){for(var e=this.toSeconds(),t=this.factor;e<-43200;)e+=97200;for(;e>50400;)e-=97200;this.fromSeconds(e),0==e&&(this.factor=t)},toICALString:function(){return t.design.icalendar.value["utc-offset"].toICAL(this.toString())},toString:function(){return(1==this.factor?"+":"-")+t.helpers.pad2(this.hours)+":"+t.helpers.pad2(this.minutes)}},e.fromString=function(e){var n={};return n.factor="+"===e[0]?1:-1,n.hours=t.helpers.strictParseInt(e.substr(1,2)),n.minutes=t.helpers.strictParseInt(e.substr(4,2)),new t.UtcOffset(n)},e.fromSeconds=function(t){var n=new e;return n.fromSeconds(t),n},e}(),t.Binary=function(){function e(e){this.value=e}return e.prototype={icaltype:"binary",decodeValue:function(){return this._b64_decode(this.value)},setEncodedValue:function(e){this.value=this._b64_encode(e)},_b64_encode:function(e){var t,n,r,i,o,s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",a=0,l=0,u="",c=[];if(!e)return e;do{t=(o=e.charCodeAt(a++)<<16|e.charCodeAt(a++)<<8|e.charCodeAt(a++))>>18&63,n=o>>12&63,r=o>>6&63,i=63&o,c[l++]=s.charAt(t)+s.charAt(n)+s.charAt(r)+s.charAt(i)}while(a>16&255,n=s>>8&255,r=255&s,c[u++]=64==i?String.fromCharCode(t):64==o?String.fromCharCode(t,n):String.fromCharCode(t,n,r)}while(ln)-(t=0?i=r:o=-1,-1==o&&-1!=i)break;if((r+=o)<0)return 0;if(r>=this.changes.length)break}var a=this.changes[i];if(a.utcOffset-a.prevUtcOffset<0&&i>0){var l=t.helpers.clone(a,!0);if(t.Timezone.adjust_change(l,0,0,0,l.prevUtcOffset),t.Timezone._compare_change_fn(n,l)<0){var u=this.changes[i-1];0!=a.is_daylight&&0==u.is_daylight&&(a=u)}}return a.utcOffset},_findNearbyChange:function(e){var n=t.helpers.binsearchInsert(this.changes,e,t.Timezone._compare_change_fn);return n>=this.changes.length?this.changes.length-1:n},_ensureCoverage:function(e){if(-1==t.Timezone._minimumExpansionYear){var n=t.Time.now();t.Timezone._minimumExpansionYear=n.year}var r=e;if(rt.Timezone.MAX_YEAR&&(r=t.Timezone.MAX_YEAR),!this.changes.length||this.expandedUntilYearn)&&h);)i.year=h.year,i.month=h.month,i.day=h.day,i.hour=h.hour,i.minute=h.minute,i.second=h.second,i.isDate=h.isDate,t.Timezone.adjust_change(i,0,0,0,-i.prevUtcOffset),r.push(i)}}else(i=a()).year=o.year,i.month=o.month,i.day=o.day,i.hour=o.hour,i.minute=o.minute,i.second=o.second,t.Timezone.adjust_change(i,0,0,0,-i.prevUtcOffset),r.push(i);return r},toString:function(){return this.tznames?this.tznames:this.tzid}},t.Timezone._compare_change_fn=function(e,t){return e.yeart.year?1:e.montht.month?1:e.dayt.day?1:e.hourt.hour?1:e.minutet.minute?1:e.secondt.second?1:0},t.Timezone.convert_time=function(e,n,r){if(e.isDate||n.tzid==r.tzid||n==t.Timezone.localTimezone||r==t.Timezone.localTimezone)return e.zone=r,e;var i=n.utcOffset(e);return e.adjust(0,0,0,-i),i=r.utcOffset(e),e.adjust(0,0,0,i),null},t.Timezone.fromData=function(e){return(new t.Timezone).fromData(e)},t.Timezone.utcTimezone=t.Timezone.fromData({tzid:"UTC"}),t.Timezone.localTimezone=t.Timezone.fromData({tzid:"floating"}),t.Timezone.adjust_change=function(e,n,r,i,o){return t.Time.prototype.adjust.call(e,n,r,i,o,e)},t.Timezone._minimumExpansionYear=-1,t.Timezone.MAX_YEAR=2035,t.Timezone.EXTRA_COVERAGE=5,t.TimezoneService=((i={get count(){return Object.keys(r).length},reset:function(){r=Object.create(null);var e=t.Timezone.utcTimezone;r.Z=e,r.UTC=e,r.GMT=e},has:function(e){return!!r[e]},get:function(e){return r[e]},register:function(e,n){if(e instanceof t.Component&&"vtimezone"===e.name&&(e=(n=new t.Timezone(e)).tzid),!(n instanceof t.Timezone))throw new TypeError("timezone must be ICAL.Timezone or ICAL.Component");r[e]=n},remove:function(e){return delete r[e]}}).reset(),i),t.Time=function(e,t){this.wrappedJSObject=this;var n=this._time=Object.create(null);n.year=0,n.month=1,n.day=1,n.hour=0,n.minute=0,n.second=0,n.isDate=!1,this.fromData(e,t)},t.Time._dowCache={},t.Time._wnCache={},t.Time.prototype={icalclass:"icaltime",_cachedUnixTime:null,get icaltype(){return this.isDate?"date":"date-time"},zone:null,_pendingNormalization:!1,clone:function(){return new t.Time(this._time,this.zone)},reset:function(){this.fromData(t.Time.epochTime),this.zone=t.Timezone.utcTimezone},resetTo:function(e,t,n,r,i,o,s){this.fromData({year:e,month:t,day:n,hour:r,minute:i,second:o,zone:s})},fromJSDate:function(e,n){return e?n?(this.zone=t.Timezone.utcTimezone,this.year=e.getUTCFullYear(),this.month=e.getUTCMonth()+1,this.day=e.getUTCDate(),this.hour=e.getUTCHours(),this.minute=e.getUTCMinutes(),this.second=e.getUTCSeconds()):(this.zone=t.Timezone.localTimezone,this.year=e.getFullYear(),this.month=e.getMonth()+1,this.day=e.getDate(),this.hour=e.getHours(),this.minute=e.getMinutes(),this.second=e.getSeconds()):this.reset(),this._cachedUnixTime=null,this},fromData:function(e,n){if(e)for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if("icaltype"===r)continue;this[r]=e[r]}if(n&&(this.zone=n),e&&!("isDate"in e)?this.isDate=!("hour"in e):e&&"isDate"in e&&(this.isDate=e.isDate),e&&"timezone"in e){var i=t.TimezoneService.get(e.timezone);this.zone=i||t.Timezone.localTimezone}return e&&"zone"in e&&(this.zone=e.zone),this.zone||(this.zone=t.Timezone.localTimezone),this._cachedUnixTime=null,this},dayOfWeek:function(e){var n=e||t.Time.SUNDAY,r=(this.year<<12)+(this.month<<8)+(this.day<<3)+n;if(r in t.Time._dowCache)return t.Time._dowCache[r];var i=this.day,o=this.month+(this.month<3?12:0),s=this.year-(this.month<3?1:0),a=i+s+t.helpers.trunc(26*(o+1)/10)+t.helpers.trunc(s/4);return a=((a+=6*t.helpers.trunc(s/100)+t.helpers.trunc(s/400))+7-n)%7+1,t.Time._dowCache[r]=a,a},dayOfYear:function(){var e=t.Time.isLeapYear(this.year)?1:0;return t.Time.daysInYearPassedMonth[e][this.month-1]+this.day},startOfWeek:function(e){var n=e||t.Time.SUNDAY,r=this.clone();return r.day-=(this.dayOfWeek()+7-n)%7,r.isDate=!0,r.hour=0,r.minute=0,r.second=0,r},endOfWeek:function(e){var n=e||t.Time.SUNDAY,r=this.clone();return r.day+=(7-this.dayOfWeek()+n-t.Time.SUNDAY)%7,r.isDate=!0,r.hour=0,r.minute=0,r.second=0,r},startOfMonth:function(){var e=this.clone();return e.day=1,e.isDate=!0,e.hour=0,e.minute=0,e.second=0,e},endOfMonth:function(){var e=this.clone();return e.day=t.Time.daysInMonth(e.month,e.year),e.isDate=!0,e.hour=0,e.minute=0,e.second=0,e},startOfYear:function(){var e=this.clone();return e.day=1,e.month=1,e.isDate=!0,e.hour=0,e.minute=0,e.second=0,e},endOfYear:function(){var e=this.clone();return e.day=31,e.month=12,e.isDate=!0,e.hour=0,e.minute=0,e.second=0,e},startDoyWeek:function(e){var n=e||t.Time.SUNDAY,r=this.dayOfWeek()-n;return r<0&&(r+=7),this.dayOfYear()-r},getDominicalLetter:function(){return t.Time.getDominicalLetter(this.year)},nthWeekDay:function(e,n){var r,i=t.Time.daysInMonth(this.month,this.year),o=n,s=0,a=this.clone();if(o>=0){a.day=1,0!=o&&o--,s=a.day;var l=e-a.dayOfWeek();l<0&&(l+=7),s+=l,s-=e,r=e}else a.day=i,o++,(r=a.dayOfWeek()-e)<0&&(r+=7),r=i-r;return s+(r+=7*o)},isNthWeekDay:function(e,t){var n=this.dayOfWeek();return 0===t&&n===e||this.nthWeekDay(e,t)===this.day},weekNumber:function(e){var n,r=(this.year<<12)+(this.month<<8)+(this.day<<3)+e;if(r in t.Time._wnCache)return t.Time._wnCache[r];var i=this.clone();i.isDate=!0;var o=this.year;12==i.month&&i.day>25?(n=t.Time.weekOneStarts(o+1,e),i.compare(n)<0?n=t.Time.weekOneStarts(o,e):o++):(n=t.Time.weekOneStarts(o,e),i.compare(n)<0&&(n=t.Time.weekOneStarts(--o,e)));var s=i.subtractDate(n).toSeconds()/86400,a=t.helpers.trunc(s/7)+1;return t.Time._wnCache[r]=a,a},addDuration:function(e){var t=e.isNegative?-1:1,n=this.second,r=this.minute,i=this.hour,o=this.day;n+=t*e.seconds,r+=t*e.minutes,i+=t*e.hours,o+=t*e.days,o+=7*t*e.weeks,this.second=n,this.minute=r,this.hour=i,this.day=o,this._cachedUnixTime=null},subtractDate:function(e){var n=this.toUnixTime()+this.utcOffset(),r=e.toUnixTime()+e.utcOffset();return t.Duration.fromSeconds(n-r)},subtractDateTz:function(e){var n=this.toUnixTime(),r=e.toUnixTime();return t.Duration.fromSeconds(n-r)},compare:function(e){var t=this.toUnixTime(),n=e.toUnixTime();return t>n?1:n>t?-1:0},compareDateOnlyTz:function(e,n){function r(e){return t.Time._cmp_attr(i,o,e)}var i=this.convertToZone(n),o=e.convertToZone(n),s=0;return 0!=(s=r("year"))||0!=(s=r("month"))||(s=r("day")),s},convertToZone:function(e){var n=this.clone(),r=this.zone.tzid==e.tzid;return this.isDate||r||t.Timezone.convert_time(n,this.zone,e),n.zone=e,n},utcOffset:function(){return this.zone==t.Timezone.localTimezone||this.zone==t.Timezone.utcTimezone?0:this.zone.utcOffset(this)},toICALString:function(){var e=this.toString();return e.length>10?t.design.icalendar.value["date-time"].toICAL(e):t.design.icalendar.value.date.toICAL(e)},toString:function(){var e=this.year+"-"+t.helpers.pad2(this.month)+"-"+t.helpers.pad2(this.day);return this.isDate||(e+="T"+t.helpers.pad2(this.hour)+":"+t.helpers.pad2(this.minute)+":"+t.helpers.pad2(this.second),this.zone===t.Timezone.utcTimezone&&(e+="Z")),e},toJSDate:function(){return this.zone==t.Timezone.localTimezone?this.isDate?new Date(this.year,this.month-1,this.day):new Date(this.year,this.month-1,this.day,this.hour,this.minute,this.second,0):new Date(1e3*this.toUnixTime())},_normalize:function(){return this._time.isDate,this._time.isDate&&(this._time.hour=0,this._time.minute=0,this._time.second=0),this.adjust(0,0,0,0),this},adjust:function(e,n,r,i,o){var s,a,l,u,c,d,h,f=0,p=0,m=o||this._time;if(m.isDate||(l=m.second+i,m.second=l%60,s=t.helpers.trunc(l/60),m.second<0&&(m.second+=60,s--),u=m.minute+r+s,m.minute=u%60,a=t.helpers.trunc(u/60),m.minute<0&&(m.minute+=60,a--),c=m.hour+n+a,m.hour=c%24,f=t.helpers.trunc(c/24),m.hour<0&&(m.hour+=24,f--)),m.month>12?p=t.helpers.trunc((m.month-1)/12):m.month<1&&(p=t.helpers.trunc(m.month/12)-1),m.year+=p,m.month-=12*p,(d=m.day+e+f)>0)for(;!(d<=(h=t.Time.daysInMonth(m.month,m.year)));)m.month++,m.month>12&&(m.year++,m.month=1),d-=h;else for(;d<=0;)1==m.month?(m.year--,m.month=12):m.month--,d+=t.Time.daysInMonth(m.month,m.year);return m.day=d,this._cachedUnixTime=null,this},fromUnixTime:function(e){this.zone=t.Timezone.utcTimezone;var n=t.Time.epochTime.clone();n.adjust(0,0,0,e),this.year=n.year,this.month=n.month,this.day=n.day,this.hour=n.hour,this.minute=n.minute,this.second=Math.floor(n.second),this._cachedUnixTime=null},toUnixTime:function(){if(null!==this._cachedUnixTime)return this._cachedUnixTime;var e=this.utcOffset(),t=Date.UTC(this.year,this.month-1,this.day,this.hour,this.minute,this.second-e);return this._cachedUnixTime=t/1e3,this._cachedUnixTime},toJSON:function(){for(var e,t=["year","month","day","hour","minute","second","isDate"],n=Object.create(null),r=0,i=t.length;r12||(r=[0,31,28,31,30,31,30,31,31,30,31,30,31][e],2==e&&(r+=t.Time.isLeapYear(n))),r},t.Time.isLeapYear=function(e){return e<=1752?e%4==0:e%4==0&&e%100!=0||e%400==0},t.Time.fromDayOfYear=function(e,n){var r=n,i=e,o=new t.Time;o.auto_normalize=!1;var s=t.Time.isLeapYear(r)?1:0;if(i<1)return r--,s=t.Time.isLeapYear(r)?1:0,i+=t.Time.daysInYearPassedMonth[s][12],t.Time.fromDayOfYear(i,r);if(i>t.Time.daysInYearPassedMonth[s][12])return s=t.Time.isLeapYear(r)?1:0,i-=t.Time.daysInYearPassedMonth[s][12],r++,t.Time.fromDayOfYear(i,r);o.year=r,o.isDate=!0;for(var a=11;a>=0;a--)if(i>t.Time.daysInYearPassedMonth[s][a]){o.month=a+1,o.day=i-t.Time.daysInYearPassedMonth[s][a];break}return o.auto_normalize=!0,o},t.Time.fromStringv2=function(e){return new t.Time({year:parseInt(e.substr(0,4),10),month:parseInt(e.substr(5,2),10),day:parseInt(e.substr(8,2),10),isDate:!0})},t.Time.fromDateString=function(e){return new t.Time({year:t.helpers.strictParseInt(e.substr(0,4)),month:t.helpers.strictParseInt(e.substr(5,2)),day:t.helpers.strictParseInt(e.substr(8,2)),isDate:!0})},t.Time.fromDateTimeString=function(e,n){if(e.length<19)throw new Error('invalid date-time value: "'+e+'"');var r;return e[19]&&"Z"===e[19]?r="Z":n&&(r=n.getParameter("tzid")),new t.Time({year:t.helpers.strictParseInt(e.substr(0,4)),month:t.helpers.strictParseInt(e.substr(5,2)),day:t.helpers.strictParseInt(e.substr(8,2)),hour:t.helpers.strictParseInt(e.substr(11,2)),minute:t.helpers.strictParseInt(e.substr(14,2)),second:t.helpers.strictParseInt(e.substr(17,2)),timezone:r})},t.Time.fromString=function(e,n){return e.length>10?t.Time.fromDateTimeString(e,n):t.Time.fromDateString(e)},t.Time.fromJSDate=function(e,n){return(new t.Time).fromJSDate(e,n)},t.Time.fromData=function(e,n){return(new t.Time).fromData(e,n)},t.Time.now=function(){return t.Time.fromJSDate(new Date,!1)},t.Time.weekOneStarts=function(e,n){var r=t.Time.fromData({year:e,month:1,day:1,isDate:!0}),i=r.dayOfWeek(),o=n||t.Time.DEFAULT_WEEK_START;return i>t.Time.THURSDAY&&(r.day+=7),o>t.Time.THURSDAY&&(r.day-=7),r.day-=i-o,r},t.Time.getDominicalLetter=function(e){var n="GFEDCBA",r=(e+(e/4|0)+(e/400|0)-(e/100|0)-1)%7;return t.Time.isLeapYear(e)?n[(r+6)%7]+n[r]:n[r]},t.Time.epochTime=t.Time.fromData({year:1970,month:1,day:1,hour:0,minute:0,second:0,isDate:!1,timezone:"Z"}),t.Time._cmp_attr=function(e,t,n){return e[n]>t[n]?1:e[n]4?r(u,f?1:3,2):null,second:4==d?r(u,2,2):6==d?r(u,4,2):8==d?r(u,6,2):null};return l="Z"==l?t.Timezone.utcTimezone:l&&":"==l[3]?t.UtcOffset.fromString(l):null,new t.VCardTime(p,l,n)},function(){var e={SU:t.Time.SUNDAY,MO:t.Time.MONDAY,TU:t.Time.TUESDAY,WE:t.Time.WEDNESDAY,TH:t.Time.THURSDAY,FR:t.Time.FRIDAY,SA:t.Time.SATURDAY},n={};for(var r in e)e.hasOwnProperty(r)&&(n[e[r]]=r);function i(e,n,r,i){var o=i;if("+"===i[0]&&(o=i.substr(1)),o=t.helpers.strictParseInt(o),void 0!==n&&i '+n);if(void 0!==r&&i>r)throw new Error(e+': invalid value "'+i+'" must be < '+n);return o}t.Recur=function(e){this.wrappedJSObject=this,this.parts={},e&&"object"==typeof e&&this.fromData(e)},t.Recur.prototype={parts:null,interval:1,wkst:t.Time.MONDAY,until:null,count:null,freq:null,icalclass:"icalrecur",icaltype:"recur",iterator:function(e){return new t.RecurIterator({rule:this,dtstart:e})},clone:function(){return new t.Recur(this.toJSON())},isFinite:function(){return!(!this.count&&!this.until)},isByCount:function(){return!(!this.count||this.until)},addComponent:function(e,t){var n=e.toUpperCase();n in this.parts?this.parts[n].push(t):this.parts[n]=[t]},setComponent:function(e,t){this.parts[e.toUpperCase()]=t.slice()},getComponent:function(e){var t=e.toUpperCase();return t in this.parts?this.parts[t].slice():[]},getNextOccurrence:function(e,t){var n,r=this.iterator(e);do{n=r.next()}while(n&&n.compare(t)<=0);return n&&t.zone&&(n.zone=t.zone),n},fromData:function(e){for(var n in e){var r=n.toUpperCase();r in u?Array.isArray(e[n])?this.parts[r]=e[n]:this.parts[r]=[e[n]]:this[n]=e[n]}this.interval&&"number"!=typeof this.interval&&l.INTERVAL(this.interval,this),this.wkst&&"number"!=typeof this.wkst&&(this.wkst=t.Recur.icalDayToNumericDay(this.wkst)),!this.until||this.until instanceof t.Time||(this.until=t.Time.fromString(this.until))},toJSON:function(){var e=Object.create(null);for(var n in e.freq=this.freq,this.count&&(e.count=this.count),this.interval>1&&(e.interval=this.interval),this.parts)if(this.parts.hasOwnProperty(n)){var r=this.parts[n];Array.isArray(r)&&1==r.length?e[n.toLowerCase()]=r[0]:e[n.toLowerCase()]=t.helpers.clone(this.parts[n])}return this.until&&(e.until=this.until.toString()),"wkst"in this&&this.wkst!==t.Time.DEFAULT_WEEK_START&&(e.wkst=t.Recur.numericDayToIcalDay(this.wkst)),e},toString:function(){var e="FREQ="+this.freq;for(var n in this.count&&(e+=";COUNT="+this.count),this.interval>1&&(e+=";INTERVAL="+this.interval),this.parts)this.parts.hasOwnProperty(n)&&(e+=";"+n+"="+this.parts[n]);return this.until&&(e+=";UNTIL="+this.until.toICALString()),"wkst"in this&&this.wkst!==t.Time.DEFAULT_WEEK_START&&(e+=";WKST="+t.Recur.numericDayToIcalDay(this.wkst)),e}},t.Recur.icalDayToNumericDay=function(n,r){var i=r||t.Time.SUNDAY;return(e[n]-i+7)%7+1},t.Recur.numericDayToIcalDay=function(e,r){var i=e+(r||t.Time.SUNDAY)-t.Time.SUNDAY;return i>7&&(i-=7),n[i]};var o=/^(SU|MO|TU|WE|TH|FR|SA)$/,s=/^([+-])?(5[0-3]|[1-4][0-9]|[1-9])?(SU|MO|TU|WE|TH|FR|SA)$/,a=["SECONDLY","MINUTELY","HOURLY","DAILY","WEEKLY","MONTHLY","YEARLY"],l={FREQ:function(e,t,n){if(-1===a.indexOf(e))throw new Error('invalid frequency "'+e+'" expected: "'+a.join(", ")+'"');t.freq=e},COUNT:function(e,n,r){n.count=t.helpers.strictParseInt(e)},INTERVAL:function(e,n,r){n.interval=t.helpers.strictParseInt(e),n.interval<1&&(n.interval=1)},UNTIL:function(e,n,r){e.length>10?n.until=t.design.icalendar.value["date-time"].fromICAL(e):n.until=t.design.icalendar.value.date.fromICAL(e),r||(n.until=t.Time.fromString(n.until))},WKST:function(e,n,r){if(!o.test(e))throw new Error('invalid WKST value "'+e+'"');n.wkst=t.Recur.icalDayToNumericDay(e)}},u={BYSECOND:i.bind(this,"BYSECOND",0,60),BYMINUTE:i.bind(this,"BYMINUTE",0,59),BYHOUR:i.bind(this,"BYHOUR",0,23),BYDAY:function(e){if(s.test(e))return e;throw new Error('invalid BYDAY value "'+e+'"')},BYMONTHDAY:i.bind(this,"BYMONTHDAY",-31,31),BYYEARDAY:i.bind(this,"BYYEARDAY",-366,366),BYWEEKNO:i.bind(this,"BYWEEKNO",-53,53),BYMONTH:i.bind(this,"BYMONTH",1,12),BYSETPOS:i.bind(this,"BYSETPOS",-366,366)};t.Recur.fromString=function(e){var n=t.Recur._stringToData(e,!1);return new t.Recur(n)},t.Recur.fromData=function(e){return new t.Recur(e)},t.Recur._stringToData=function(e,t){for(var n=Object.create(null),r=e.split(";"),i=r.length,o=0;o=0||r<0)&&(this.last.day+=r)}else{var i=t.Recur.numericDayToIcalDay(this.dtstart.dayOfWeek());e.BYDAY=[i]}if("YEARLY"==this.rule.freq){for(;this.expand_year_days(this.last.year),!(this.days.length>0);)this.increment_year(this.rule.interval);this._nextByYearDay()}if("MONTHLY"==this.rule.freq&&this.has_by_data("BYDAY")){var o=null,s=this.last.clone(),a=t.Time.daysInMonth(this.last.month,this.last.year);for(var l in this.by_data.BYDAY)if(this.by_data.BYDAY.hasOwnProperty(l)){this.last=s.clone();n=(u=this.ruleDayOfWeek(this.by_data.BYDAY[l]))[0];var u,c=u[1],d=this.last.nthWeekDay(c,n);if(n>=6||n<=-6)throw new Error("Malformed values in BYDAY part");if(d>a||d<=0){if(o&&o.month==s.month)continue;for(;d>a||d<=0;)this.increment_month(),a=t.Time.daysInMonth(this.last.month,this.last.year),d=this.last.nthWeekDay(c,n)}this.last.day=d,(!o||this.last.compare(o)<0)&&(o=this.last.clone())}if(this.last=o.clone(),this.has_by_data("BYMONTHDAY")&&this._byDayAndMonthDay(!0),this.last.day>a||0==this.last.day)throw new Error("Malformed values in BYDAY part")}else if(this.has_by_data("BYMONTHDAY")&&this.last.day<0){a=t.Time.daysInMonth(this.last.month,this.last.year);this.last.day=a+this.last.day+1}},next:function(){var e,t=this.last?this.last.clone():null;if(this.rule.count&&this.occurrence_number>=this.rule.count||this.rule.until&&this.last.compare(this.rule.until)>0)return this.completed=!0,null;if(0==this.occurrence_number&&this.last.compare(this.dtstart)>=0)return this.occurrence_number++,this.last;do{switch(e=1,this.rule.freq){case"SECONDLY":this.next_second();break;case"MINUTELY":this.next_minute();break;case"HOURLY":this.next_hour();break;case"DAILY":this.next_day();break;case"WEEKLY":this.next_week();break;case"MONTHLY":e=this.next_month();break;case"YEARLY":this.next_year();break;default:return null}}while(!this.check_contracting_rules()||this.last.compare(this.dtstart)<0||!e);if(0==this.last.compare(t))throw new Error("Same occurrence found twice, protecting you from death by recursion");return this.rule.until&&this.last.compare(this.rule.until)>0?(this.completed=!0,null):(this.occurrence_number++,this.last)},next_second:function(){return this.next_generic("BYSECOND","SECONDLY","second","minute")},increment_second:function(e){return this.increment_generic(e,"second",60,"minute")},next_minute:function(){return this.next_generic("BYMINUTE","MINUTELY","minute","hour","next_second")},increment_minute:function(e){return this.increment_generic(e,"minute",60,"hour")},next_hour:function(){return this.next_generic("BYHOUR","HOURLY","hour","monthday","next_minute")},increment_hour:function(e){this.increment_generic(e,"hour",24,"monthday")},next_day:function(){this.by_data;var e="DAILY"==this.rule.freq;return 0==this.next_hour()||(e?this.increment_monthday(this.rule.interval):this.increment_monthday(1)),0},next_week:function(){var e=0;if(0==this.next_weekday_by_week())return e;if(this.has_by_data("BYWEEKNO")){++this.by_indices.BYWEEKNO;this.by_indices.BYWEEKNO==this.by_data.BYWEEKNO.length&&(this.by_indices.BYWEEKNO=0,e=1),this.last.month=1,this.last.day=1;var t=this.by_data.BYWEEKNO[this.by_indices.BYWEEKNO];this.last.day+=7*t,e&&this.increment_year(1)}else this.increment_monthday(7*this.rule.interval);return e},normalizeByMonthDayRules:function(e,n,r){for(var i,o=t.Time.daysInMonth(n,e),s=[],a=0,l=r.length;ao)){if(i<0)i=o+(i+1);else if(0===i)continue;-1===s.indexOf(i)&&s.push(i)}return s.sort((function(e,t){return e-t}))},_byDayAndMonthDay:function(e){var n,r,i,o,s=this.by_data.BYDAY,a=0,l=s.length,u=0,c=this,d=this.last.day;function h(){for(o=t.Time.daysInMonth(c.last.month,c.last.year),n=c.normalizeByMonthDayRules(c.last.year,c.last.month,c.by_data.BYMONTHDAY),i=n.length;n[a]<=d&&(!e||n[a]!=d)&&ao)f();else{var m=n[a++];if(m>=r){d=m;for(var g=0;gn&&(this.last.day=1,this.increment_month(),this.is_day_in_byday(this.last)?this.has_by_data("BYSETPOS")&&!this.check_set_position(1)||(e=1):e=0)}else if(this.has_by_data("BYMONTHDAY")){this.by_indices.BYMONTHDAY++,this.by_indices.BYMONTHDAY>=this.by_data.BYMONTHDAY.length&&(this.by_indices.BYMONTHDAY=0,this.increment_month());n=t.Time.daysInMonth(this.last.month,this.last.year);(s=this.by_data.BYMONTHDAY[this.by_indices.BYMONTHDAY])<0&&(s=n+s+1),s>n?(this.last.day=1,e=this.is_day_in_byday(this.last)):this.last.day=s}else{this.increment_month();n=t.Time.daysInMonth(this.last.month,this.last.year);this.by_data.BYMONTHDAY[0]>n?e=0:this.last.day=this.by_data.BYMONTHDAY[0]}return e},next_weekday_by_week:function(){var e=0;if(0==this.next_hour())return e;if(!this.has_by_data("BYDAY"))return 1;for(;;){var n=new t.Time;this.by_indices.BYDAY++,this.by_indices.BYDAY==Object.keys(this.by_data.BYDAY).length&&(this.by_indices.BYDAY=0,e=1);var r=this.by_data.BYDAY[this.by_indices.BYDAY],i=this.ruleDayOfWeek(r)[1];(i-=this.rule.wkst)<0&&(i+=7),n.year=this.last.year,n.month=this.last.month,n.day=this.last.day;var o=n.startDoyWeek(this.rule.wkst);if(!(i+o<1)||e){var s=t.Time.fromDayOfYear(o+i,this.last.year);return this.last.year=s.year,this.last.month=s.month,this.last.day=s.day,e}}},next_year:function(){if(0==this.next_hour())return 0;if(++this.days_index==this.days.length){this.days_index=0;do{this.increment_year(this.rule.interval),this.expand_year_days(this.last.year)}while(0==this.days.length)}return this._nextByYearDay(),1},_nextByYearDay:function(){var e=this.days[this.days_index],n=this.last.year;e<1&&(e+=1,n+=1);var r=t.Time.fromDayOfYear(e,n);this.last.day=r.day,this.last.month=r.month},ruleDayOfWeek:function(e,n){var r=e.match(/([+-]?[0-9])?(MO|TU|WE|TH|FR|SA|SU)/);return r?[parseInt(r[1]||0,10),e=t.Recur.icalDayToNumericDay(r[2],n)]:[0,0]},next_generic:function(e,t,n,r,i){var o=e in this.by_data,s=this.rule.freq==t,a=0;if(i&&0==this[i]())return a;if(o){this.by_indices[e]++;this.by_indices[e];var l=this.by_data[e];this.by_indices[e]==l.length&&(this.by_indices[e]=0,a=1),this.last[n]=l[this.by_indices[e]]}else s&&this["increment_"+n](this.rule.interval);return o&&a&&s&&this["increment_"+r](1),a},increment_monthday:function(e){for(var n=0;nr&&(this.last.day-=r,this.increment_month())}},increment_month:function(){if(this.last.day=1,this.has_by_data("BYMONTH"))this.by_indices.BYMONTH++,this.by_indices.BYMONTH==this.by_data.BYMONTH.length&&(this.by_indices.BYMONTH=0,this.increment_year(1)),this.last.month=this.by_data.BYMONTH[this.by_indices.BYMONTH];else{"MONTHLY"==this.rule.freq?this.last.month+=this.rule.interval:this.last.month++,this.last.month--;var e=t.helpers.trunc(this.last.month/12);this.last.month%=12,this.last.month++,0!=e&&this.increment_year(e)}},increment_year:function(e){this.last.year+=e},increment_generic:function(e,n,r,i){this.last[n]+=e;var o=t.helpers.trunc(this.last[n]/r);this.last[n]%=r,0!=o&&this["increment_"+i](o)},has_by_data:function(e){return e in this.rule.parts},expand_year_days:function(e){var n=new t.Time;this.days=[];var r={},i=["BYDAY","BYWEEKNO","BYMONTHDAY","BYMONTH","BYYEARDAY"];for(var o in i)if(i.hasOwnProperty(o)){var s=i[o];s in this.rule.parts&&(r[s]=this.rule.parts[s])}if("BYMONTH"in r&&"BYWEEKNO"in r){var a=1,l={};n.year=e,n.isDate=!0;for(var u=0;u0?(M=P+7*(R-1))<=w&&this.days.push(D+M):(M=L+7*(R+1))>0&&this.days.push(D+M)}}this.days.sort((function(e,t){return e-t}))}else if(2==p&&"BYDAY"in r&&"BYMONTHDAY"in r){var H=this.expand_by_day(e);for(var Y in H)if(H.hasOwnProperty(Y)){k=H[Y];var z=t.Time.fromDayOfYear(k,e);this.by_data.BYMONTHDAY.indexOf(z.day)>=0&&this.days.push(k)}}else if(3==p&&"BYDAY"in r&&"BYMONTHDAY"in r&&"BYMONTH"in r){H=this.expand_by_day(e);for(var Y in H)if(H.hasOwnProperty(Y)){k=H[Y],z=t.Time.fromDayOfYear(k,e);this.by_data.BYMONTH.indexOf(z.month)>=0&&this.by_data.BYMONTHDAY.indexOf(z.day)>=0&&this.days.push(k)}}else if(2==p&&"BYDAY"in r&&"BYWEEKNO"in r){H=this.expand_by_day(e);for(var Y in H)if(H.hasOwnProperty(Y)){k=H[Y];var V=(z=t.Time.fromDayOfYear(k,e)).weekNumber(this.rule.wkst);this.by_data.BYWEEKNO.indexOf(V)&&this.days.push(k)}}else 3==p&&"BYDAY"in r&&"BYWEEKNO"in r&&"BYMONTHDAY"in r||(this.days=1==p&&"BYYEARDAY"in r?this.days.concat(this.by_data.BYYEARDAY):[]);return 0},expand_by_day:function(e){var t=[],n=this.last.clone();n.year=e,n.month=1,n.day=1,n.isDate=!0;var r=n.dayOfWeek();n.month=12,n.day=31,n.isDate=!0;var i=n.dayOfWeek(),o=n.dayOfYear();for(var s in this.by_data.BYDAY)if(this.by_data.BYDAY.hasOwnProperty(s)){var a=this.by_data.BYDAY[s],l=this.ruleDayOfWeek(a),u=l[0],c=l[1];if(0==u)for(var d=(c+7-r)%7+1;d<=o;d+=7)t.push(d);else if(u>0){var h;h=c>=r?c-r+1:c-r+8,t.push(h+7*(u-1))}else{var f;u=-u,f=c<=i?o-i+c:o-i+c-7,t.push(f-7*(u-1))}}return t},is_day_in_byday:function(e){for(var t in this.by_data.BYDAY)if(this.by_data.BYDAY.hasOwnProperty(t)){var n=this.by_data.BYDAY[t],r=this.ruleDayOfWeek(n),i=r[0],o=r[1],s=e.dayOfWeek();if(0==i&&o==s||e.nthWeekDay(o,i)==e.day)return 1}return 0},check_set_position:function(e){return!!this.has_by_data("BYSETPOS")&&-1!==this.by_data.BYSETPOS.indexOf(e)},sort_byday_rules:function(e){for(var t=0;tthis.ruleDayOfWeek(e[t],this.rule.wkst)[1]){var r=e[t];e[t]=e[n],e[n]=r}}},check_contract_restriction:function(t,n){var r=e._indexMap[t],i=e._expandMap[this.rule.freq][r],o=!1;if(t in this.by_data&&i==e.CONTRACT){var s=this.by_data[t];for(var a in s)if(s.hasOwnProperty(a)&&s[a]==n){o=!0;break}}else o=!0;return o},check_contracting_rules:function(){var e=this.last.dayOfWeek(),n=this.last.weekNumber(this.rule.wkst),r=this.last.dayOfYear();return this.check_contract_restriction("BYSECOND",this.last.second)&&this.check_contract_restriction("BYMINUTE",this.last.minute)&&this.check_contract_restriction("BYHOUR",this.last.hour)&&this.check_contract_restriction("BYDAY",t.Recur.numericDayToIcalDay(e))&&this.check_contract_restriction("BYWEEKNO",n)&&this.check_contract_restriction("BYMONTHDAY",this.last.day)&&this.check_contract_restriction("BYMONTH",this.last.month)&&this.check_contract_restriction("BYYEARDAY",r)},setup_defaults:function(t,n,r){var i=e._indexMap[t];return e._expandMap[this.rule.freq][i]!=e.CONTRACT&&(t in this.by_data||(this.by_data[t]=[r]),this.rule.freq!=n)?this.by_data[t][0]:r},toJSON:function(){var e=Object.create(null);return e.initialized=this.initialized,e.rule=this.rule.toJSON(),e.dtstart=this.dtstart.toJSON(),e.by_data=this.by_data,e.days=this.days,e.last=this.last.toJSON(),e.by_indices=this.by_indices,e.occurrence_number=this.occurrence_number,e}},e._indexMap={BYSECOND:0,BYMINUTE:1,BYHOUR:2,BYDAY:3,BYMONTHDAY:4,BYYEARDAY:5,BYWEEKNO:6,BYMONTH:7,BYSETPOS:8},e._expandMap={SECONDLY:[1,1,1,1,1,1,1,1],MINUTELY:[2,1,1,1,1,1,1,1],HOURLY:[2,2,1,1,1,1,1,1],DAILY:[2,2,2,1,1,1,1,1],WEEKLY:[2,2,2,2,3,3,1,1],MONTHLY:[2,2,2,2,2,3,3,1],YEARLY:[2,2,2,2,2,2,2,2]},e.UNKNOWN=0,e.CONTRACT=1,e.EXPAND=2,e.ILLEGAL=3,e}(),t.RecurExpansion=function(){function e(e){return t.helpers.formatClassType(e,t.Time)}function n(e,t){return e.compare(t)}function r(e){this.ruleDates=[],this.exDates=[],this.fromData(e)}return r.prototype={complete:!1,ruleIterators:null,ruleDates:null,exDates:null,ruleDateInc:0,exDateInc:0,exDate:null,ruleDate:null,dtstart:null,last:null,fromData:function(n){var r=t.helpers.formatClassType(n.dtstart,t.Time);if(!r)throw new Error(".dtstart (ICAL.Time) must be given");if(this.dtstart=r,n.component)this._init(n.component);else{if(this.last=e(n.last)||r.clone(),!n.ruleIterators)throw new Error(".ruleIterators or .component must be given");this.ruleIterators=n.ruleIterators.map((function(e){return t.helpers.formatClassType(e,t.RecurIterator)})),this.ruleDateInc=n.ruleDateInc,this.exDateInc=n.exDateInc,n.ruleDates&&(this.ruleDates=n.ruleDates.map(e),this.ruleDate=this.ruleDates[this.ruleDateInc]),n.exDates&&(this.exDates=n.exDates.map(e),this.exDate=this.exDates[this.exDateInc]),void 0!==n.complete&&(this.complete=n.complete)}},next:function(){for(var e,t,n,r=0;;){if(r++>500)throw new Error("max tries have occured, rule may be impossible to forfill.");if(t=this.ruleDate,e=this._nextRecurrenceIter(this.last),!t&&!e){this.complete=!0;break}if((!t||e&&t.compare(e.last)>0)&&(t=e.last.clone(),e.next()),this.ruleDate===t&&this._nextRuleDay(),this.last=t,!this.exDate||((n=this.exDate.compare(this.last))<0&&this._nextExDay(),0!==n))return this.last;this._nextExDay()}},toJSON:function(){function e(e){return e.toJSON()}var t=Object.create(null);return t.ruleIterators=this.ruleIterators.map(e),this.ruleDates&&(t.ruleDates=this.ruleDates.map(e)),this.exDates&&(t.exDates=this.exDates.map(e)),t.ruleDateInc=this.ruleDateInc,t.exDateInc=this.exDateInc,t.last=this.last.toJSON(),t.dtstart=this.dtstart.toJSON(),t.complete=this.complete,t},_extractDates:function(e,r){function i(e){o=t.helpers.binsearchInsert(s,e,n),s.splice(o,0,e)}for(var o,s=[],a=e.getAllProperties(r),l=a.length,u=0;u0)&&(r=t);return r}},r}(),t.Event=function(){function e(e,n){e instanceof t.Component||(n=e,e=null),this.component=e||new t.Component("vevent"),this._rangeExceptionCache=Object.create(null),this.exceptions=Object.create(null),this.rangeExceptions=[],n&&n.strictExceptions&&(this.strictExceptions=n.strictExceptions),n&&n.exceptions?n.exceptions.forEach(this.relateException,this):this.component.parent&&!this.isRecurrenceException()&&this.component.parent.getAllSubcomponents("vevent").forEach((function(e){e.hasProperty("recurrence-id")&&this.relateException(e)}),this)}function n(e,t){return e[0]>t[0]?1:t[0]>e[0]?-1:0}return e.prototype={THISANDFUTURE:"THISANDFUTURE",exceptions:null,strictExceptions:!1,relateException:function(e){if(this.isRecurrenceException())throw new Error("cannot relate exception to exceptions");if(e instanceof t.Component&&(e=new t.Event(e)),this.strictExceptions&&e.uid!==this.uid)throw new Error("attempted to relate unrelated exception");var r=e.recurrenceId.toString();if(this.exceptions[r]=e,e.modifiesFuture()){var i=[e.recurrenceId.toUnixTime(),r],o=t.helpers.binsearchInsert(this.rangeExceptions,i,n);this.rangeExceptions.splice(o,0,i)}},modifiesFuture:function(){return!!this.component.hasProperty("recurrence-id")&&this.component.getFirstProperty("recurrence-id").getParameter("range")===this.THISANDFUTURE},findRangeException:function(e){if(!this.rangeExceptions.length)return null;var r=e.toUnixTime(),i=t.helpers.binsearchInsert(this.rangeExceptions,[r],n);if((i-=1)<0)return null;var o=this.rangeExceptions[i];return r=0?d:1e3+d,(et({year:r,month:i,day:o,hour:24===a?0:a,minute:l,second:u,millisecond:0})-c)/6e4}equals(e){return"iana"===e.type&&e.name===this.name}get isValid(){return this.valid}}let j={};const B=new Map;function F(e,t={}){const n=JSON.stringify([e,t]);let r=B.get(n);return void 0===r&&(r=new Intl.DateTimeFormat(e,t),B.set(n,r)),r}const q=new Map;const Z=new Map;let G=null;const $=new Map;function K(e){let t=$.get(e);return void 0===t&&(t=new Intl.DateTimeFormat(e).resolvedOptions(),$.set(e,t)),t}const X=new Map;function J(e,t,n,r){const i=e.listingMode();return"error"===i?null:"en"===i?n(t):r(t)}class Q{constructor(e,t,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;const{padTo:r,floor:i,...o}=n;if(!t||Object.keys(o).length>0){const t={useGrouping:!1,...n};n.padTo>0&&(t.minimumIntegerDigits=n.padTo),this.inf=function(e,t={}){const n=JSON.stringify([e,t]);let r=q.get(n);return void 0===r&&(r=new Intl.NumberFormat(e,t),q.set(n,r)),r}(e,t)}}format(e){if(this.inf){const t=this.floor?Math.floor(e):e;return this.inf.format(t)}return qe(this.floor?Math.floor(e):Ke(e,3),this.padTo)}}class ee{constructor(e,t,n){let r;if(this.opts=n,this.originalZone=void 0,this.opts.timeZone)this.dt=e;else if("fixed"===e.zone.type){const t=e.offset/60*-1,n=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;0!==e.offset&&U.create(n).valid?(r=n,this.dt=e):(r="UTC",this.dt=0===e.offset?e:e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone)}else"system"===e.zone.type?this.dt=e:"iana"===e.zone.type?(this.dt=e,r=e.zone.name):(r="UTC",this.dt=e.setZone("UTC").plus({minutes:e.offset}),this.originalZone=e.zone);const i={...this.opts};i.timeZone=i.timeZone||r,this.dtf=F(t,i)}format(){return this.originalZone?this.formatToParts().map((({value:e})=>e)).join(""):this.dtf.format(this.dt.toJSDate())}formatToParts(){const e=this.dtf.formatToParts(this.dt.toJSDate());return this.originalZone?e.map((e=>{if("timeZoneName"===e.type){const t=this.originalZone.offsetName(this.dt.ts,{locale:this.dt.locale,format:this.opts.timeZoneName});return{...e,value:t}}return e})):e}resolvedOptions(){return this.dtf.resolvedOptions()}}class te{constructor(e,t,n){this.opts={style:"long",...n},!t&&Ve()&&(this.rtf=function(e,t={}){const{base:n,...r}=t,i=JSON.stringify([e,r]);let o=Z.get(i);return void 0===o&&(o=new Intl.RelativeTimeFormat(e,t),Z.set(i,o)),o}(e,n))}format(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,n="always",r=!1){const i={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},o=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===n&&o){const n="days"===e;switch(t){case 1:return n?"tomorrow":`next ${i[e][0]}`;case-1:return n?"yesterday":`last ${i[e][0]}`;case 0:return n?"today":`this ${i[e][0]}`}}const s=Object.is(t,-0)||t<0,a=Math.abs(t),l=1===a,u=i[e],c=r?l?u[1]:u[2]||u[1]:l?i[e][0]:e;return s?`${a} ${c} ago`:`in ${a} ${c}`}(t,e,this.opts.numeric,"long"!==this.opts.style)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}}const ne={firstDay:1,minimalDays:4,weekend:[6,7]};class re{static fromOpts(e){return re.create(e.locale,e.numberingSystem,e.outputCalendar,e.weekSettings,e.defaultToEN)}static create(e,t,n,r,i=!1){const o=e||we.defaultLocale,s=o||(i?"en-US":G||(G=(new Intl.DateTimeFormat).resolvedOptions().locale,G)),a=t||we.defaultNumberingSystem,l=n||we.defaultOutputCalendar,u=Be(r)||we.defaultWeekSettings;return new re(s,a,l,u,o)}static resetCache(){G=null,B.clear(),q.clear(),Z.clear(),$.clear(),X.clear()}static fromObject({locale:e,numberingSystem:t,outputCalendar:n,weekSettings:r}={}){return re.create(e,t,n,r)}constructor(e,t,n,r,i){const[o,s,a]=function(e){const t=e.indexOf("-x-");-1!==t&&(e=e.substring(0,t));const n=e.indexOf("-u-");if(-1===n)return[e];{let t,r;try{t=F(e).resolvedOptions(),r=e}catch(i){const o=e.substring(0,n);t=F(o).resolvedOptions(),r=o}const{numberingSystem:i,calendar:o}=t;return[r,i,o]}}(e);this.locale=o,this.numberingSystem=t||s||null,this.outputCalendar=n||a||null,this.weekSettings=r,this.intl=function(e,t,n){return n||t?(e.includes("-u-")||(e+="-u"),n&&(e+=`-ca-${n}`),t&&(e+=`-nu-${t}`),e):e}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=i,this.fastNumbersCached=null}get fastNumbers(){var e;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(e=this).numberingSystem||"latn"===e.numberingSystem)&&("latn"===e.numberingSystem||!e.locale||e.locale.startsWith("en")||"latn"===K(e.locale).numberingSystem)),this.fastNumbersCached}listingMode(){const e=this.isEnglish(),t=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return e&&t?"en":"intl"}clone(e){return e&&0!==Object.getOwnPropertyNames(e).length?re.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,Be(e.weekSettings)||this.weekSettings,e.defaultToEN||!1):this}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1){return J(this,e,ft,(()=>{const n="ja"===this.intl||this.intl.startsWith("ja-"),r=(t&=!n)?{month:e,day:"numeric"}:{month:e},i=t?"format":"standalone";if(!this.monthsCache[i][e]){const t=n?e=>this.dtFormatter(e,r).format():e=>this.extract(e,r,"month");this.monthsCache[i][e]=function(e){const t=[];for(let n=1;n<=12;n++){const r=br.utc(2009,n,1);t.push(e(r))}return t}(t)}return this.monthsCache[i][e]}))}weekdays(e,t=!1){return J(this,e,vt,(()=>{const n=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},r=t?"format":"standalone";return this.weekdaysCache[r][e]||(this.weekdaysCache[r][e]=function(e){const t=[];for(let n=1;n<=7;n++){const r=br.utc(2016,11,13+n);t.push(e(r))}return t}((e=>this.extract(e,n,"weekday")))),this.weekdaysCache[r][e]}))}meridiems(){return J(this,void 0,(()=>yt),(()=>{if(!this.meridiemCache){const e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[br.utc(2016,11,13,9),br.utc(2016,11,13,19)].map((t=>this.extract(t,e,"dayperiod")))}return this.meridiemCache}))}eras(e){return J(this,e,Tt,(()=>{const t={era:e};return this.eraCache[e]||(this.eraCache[e]=[br.utc(-40,1,1),br.utc(2017,1,1)].map((e=>this.extract(e,t,"era")))),this.eraCache[e]}))}extract(e,t,n){const r=this.dtFormatter(e,t).formatToParts().find((e=>e.type.toLowerCase()===n));return r?r.value:null}numberFormatter(e={}){return new Q(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new ee(e,this.intl,t)}relFormatter(e={}){return new te(this.intl,this.isEnglish(),e)}listFormatter(e={}){return function(e,t={}){const n=JSON.stringify([e,t]);let r=j[n];return r||(r=new Intl.ListFormat(e,t),j[n]=r),r}(this.intl,e)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||K(this.intl).locale.startsWith("en-us")}getWeekSettings(){return this.weekSettings?this.weekSettings:We()?function(e){let t=X.get(e);if(!t){const n=new Intl.Locale(e);t="getWeekInfo"in n?n.getWeekInfo():n.weekInfo,"minimalDays"in t||(t={...ne,...t}),X.set(e,t)}return t}(this.locale):ne}getStartOfWeek(){return this.getWeekSettings().firstDay}getMinDaysInFirstWeek(){return this.getWeekSettings().minimalDays}getWeekendDays(){return this.getWeekSettings().weekend}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}toString(){return`Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`}}let ie=null;class oe extends L{static get utcInstance(){return null===ie&&(ie=new oe(0)),ie}static instance(e){return 0===e?oe.utcInstance:new oe(e)}static parseSpecifier(e){if(e){const t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new oe(ot(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${lt(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${lt(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return lt(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return"fixed"===e.type&&e.fixed===this.fixed}get isValid(){return!0}}class se extends L{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function ae(e,t){if(He(e)||null===e)return t;if(e instanceof L)return e;if("string"==typeof e){const n=e.toLowerCase();return"default"===n?t:"local"===n||"system"===n?Y.instance:"utc"===n||"gmt"===n?oe.utcInstance:oe.parseSpecifier(n)||U.create(e)}return Ye(e)?oe.instance(e):"object"==typeof e&&"offset"in e&&"function"==typeof e.offset?e:new se(e)}const le={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},ue={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},ce=le.hanidec.replace(/[\[|\]]/g,"").split("");const de=new Map;function he({numberingSystem:e},t=""){const n=e||"latn";let r=de.get(n);void 0===r&&(r=new Map,de.set(n,r));let i=r.get(t);return void 0===i&&(i=new RegExp(`${le[n]}${t}`),r.set(t,i)),i}let fe,pe=()=>Date.now(),me="system",ge=null,ve=null,ye=null,be=60,_e=null;class we{static get now(){return pe}static set now(e){pe=e}static set defaultZone(e){me=e}static get defaultZone(){return ae(me,Y.instance)}static get defaultLocale(){return ge}static set defaultLocale(e){ge=e}static get defaultNumberingSystem(){return ve}static set defaultNumberingSystem(e){ve=e}static get defaultOutputCalendar(){return ye}static set defaultOutputCalendar(e){ye=e}static get defaultWeekSettings(){return _e}static set defaultWeekSettings(e){_e=Be(e)}static get twoDigitCutoffYear(){return be}static set twoDigitCutoffYear(e){be=e%100}static get throwOnInvalid(){return fe}static set throwOnInvalid(e){fe=e}static resetCaches(){re.resetCache(),U.resetCache(),br.resetCache(),de.clear()}}class Te{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}const Ee=[0,31,59,90,120,151,181,212,243,273,304,334],De=[0,31,60,91,121,152,182,213,244,274,305,335];function Se(e,t){return new Te("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function Ce(e,t,n){const r=new Date(Date.UTC(e,t-1,n));e<100&&e>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);const i=r.getUTCDay();return 0===i?7:i}function ke(e,t,n){return n+(Xe(e)?De:Ee)[t-1]}function xe(e,t){const n=Xe(e)?De:Ee,r=n.findIndex((e=>ent(r,t,n)?(l=r+1,u=1):l=r,{weekYear:l,weekNumber:u,weekday:a,...ut(e)}}function Ae(e,t=4,n=1){const{weekYear:r,weekNumber:i,weekday:o}=e,s=Oe(Ce(r,1,t),n),a=Je(r);let l,u=7*i+o-s-7+t;u<1?(l=r-1,u+=Je(l)):u>a?(l=r+1,u-=Je(r)):l=r;const{month:c,day:d}=xe(l,u);return{year:l,month:c,day:d,...ut(e)}}function Ie(e){const{year:t,month:n,day:r}=e;return{year:t,ordinal:ke(t,n,r),...ut(e)}}function Re(e){const{year:t,ordinal:n}=e,{month:r,day:i}=xe(t,n);return{year:t,month:r,day:i,...ut(e)}}function Ne(e,t){if(!He(e.localWeekday)||!He(e.localWeekNumber)||!He(e.localWeekYear)){if(!He(e.weekday)||!He(e.weekNumber)||!He(e.weekYear))throw new a("Cannot mix locale-based week fields with ISO-based week fields");return He(e.localWeekday)||(e.weekday=e.localWeekday),He(e.localWeekNumber)||(e.weekNumber=e.localWeekNumber),He(e.localWeekYear)||(e.weekYear=e.localWeekYear),delete e.localWeekday,delete e.localWeekNumber,delete e.localWeekYear,{minDaysInFirstWeek:t.getMinDaysInFirstWeek(),startOfWeek:t.getStartOfWeek()}}return{minDaysInFirstWeek:4,startOfWeek:1}}function Pe(e){const t=ze(e.year),n=Fe(e.month,1,12),r=Fe(e.day,1,Qe(e.year,e.month));return t?n?!r&&Se("day",e.day):Se("month",e.month):Se("year",e.year)}function Le(e){const{hour:t,minute:n,second:r,millisecond:i}=e,o=Fe(t,0,23)||24===t&&0===n&&0===r&&0===i,s=Fe(n,0,59),a=Fe(r,0,59),l=Fe(i,0,999);return o?s?a?!l&&Se("millisecond",i):Se("second",r):Se("minute",n):Se("hour",t)}function He(e){return void 0===e}function Ye(e){return"number"==typeof e}function ze(e){return"number"==typeof e&&e%1==0}function Ve(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function We(){try{return"undefined"!=typeof Intl&&!!Intl.Locale&&("weekInfo"in Intl.Locale.prototype||"getWeekInfo"in Intl.Locale.prototype)}catch(e){return!1}}function Ue(e,t,n){if(0!==e.length)return e.reduce(((e,r)=>{const i=[t(r),r];return e&&n(e[0],i[0])===e[0]?e:i}),null)[1]}function je(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Be(e){if(null==e)return null;if("object"!=typeof e)throw new u("Week settings must be an object");if(!Fe(e.firstDay,1,7)||!Fe(e.minimalDays,1,7)||!Array.isArray(e.weekend)||e.weekend.some((e=>!Fe(e,1,7))))throw new u("Invalid week settings");return{firstDay:e.firstDay,minimalDays:e.minimalDays,weekend:Array.from(e.weekend)}}function Fe(e,t,n){return ze(e)&&e>=t&&e<=n}function qe(e,t=2){let n;return n=e<0?"-"+(""+-e).padStart(t,"0"):(""+e).padStart(t,"0"),n}function Ze(e){return He(e)||null===e||""===e?void 0:parseInt(e,10)}function Ge(e){return He(e)||null===e||""===e?void 0:parseFloat(e)}function $e(e){if(!He(e)&&null!==e&&""!==e){const t=1e3*parseFloat("0."+e);return Math.floor(t)}}function Ke(e,t,n="round"){const r=10**t;switch(n){case"expand":return e>0?Math.ceil(e*r)/r:Math.floor(e*r)/r;case"trunc":return Math.trunc(e*r)/r;case"round":return Math.round(e*r)/r;case"floor":return Math.floor(e*r)/r;case"ceil":return Math.ceil(e*r)/r;default:throw new RangeError(`Value rounding ${n} is out of range`)}}function Xe(e){return e%4==0&&(e%100!=0||e%400==0)}function Je(e){return Xe(e)?366:365}function Qe(e,t){const n=function(e,t){return e-t*Math.floor(e/t)}(t-1,12)+1;return 2===n?Xe(e+(t-n)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][n-1]}function et(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(e.year,e.month-1,e.day)),+t}function tt(e,t,n){return-Oe(Ce(e,1,t),n)+t-1}function nt(e,t=4,n=1){const r=tt(e,t,n),i=tt(e+1,t,n);return(Je(e)-r+i)/7}function rt(e){return e>99?e:e>we.twoDigitCutoffYear?1900+e:2e3+e}function it(e,t,n,r=null){const i=new Date(e),o={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(o.timeZone=r);const s={timeZoneName:t,...o},a=new Intl.DateTimeFormat(n,s).formatToParts(i).find((e=>"timezonename"===e.type.toLowerCase()));return a?a.value:null}function ot(e,t){let n=parseInt(e,10);Number.isNaN(n)&&(n=0);const r=parseInt(t,10)||0;return 60*n+(n<0||Object.is(n,-0)?-r:r)}function st(e){const t=Number(e);if("boolean"==typeof e||""===e||!Number.isFinite(t))throw new u(`Invalid unit value ${e}`);return t}function at(e,t){const n={};for(const r in e)if(je(e,r)){const i=e[r];if(null==i)continue;n[t(r)]=st(i)}return n}function lt(e,t){const n=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),i=e>=0?"+":"-";switch(t){case"short":return`${i}${qe(n,2)}:${qe(r,2)}`;case"narrow":return`${i}${n}${r>0?`:${r}`:""}`;case"techie":return`${i}${qe(n,2)}${qe(r,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function ut(e){return function(e,t){return t.reduce(((t,n)=>(t[n]=e[n],t)),{})}(e,["hour","minute","second","millisecond"])}const ct=["January","February","March","April","May","June","July","August","September","October","November","December"],dt=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],ht=["J","F","M","A","M","J","J","A","S","O","N","D"];function ft(e){switch(e){case"narrow":return[...ht];case"short":return[...dt];case"long":return[...ct];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const pt=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],mt=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],gt=["M","T","W","T","F","S","S"];function vt(e){switch(e){case"narrow":return[...gt];case"short":return[...mt];case"long":return[...pt];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const yt=["AM","PM"],bt=["Before Christ","Anno Domini"],_t=["BC","AD"],wt=["B","A"];function Tt(e){switch(e){case"narrow":return[...wt];case"short":return[..._t];case"long":return[...bt];default:return null}}function Et(e,t){let n="";for(const r of e)r.literal?n+=r.val:n+=t(r.val);return n}const Dt={D:p,DD:m,DDD:v,DDDD:y,t:b,tt:_,ttt:w,tttt:T,T:E,TT:D,TTT:S,TTTT:C,f:k,ff:O,fff:I,ffff:N,F:x,FF:M,FFF:R,FFFF:P};class St{static create(e,t={}){return new St(e,t)}static parseFormat(e){let t=null,n="",r=!1;const i=[];for(let o=0;o0||r)&&i.push({literal:r||/^\s+$/.test(n),val:""===n?"'":n}),t=null,n="",r=!r):r||s===t?n+=s:(n.length>0&&i.push({literal:/^\s+$/.test(n),val:n}),n=s,t=s)}return n.length>0&&i.push({literal:r||/^\s+$/.test(n),val:n}),i}static macroTokenToFormatOpts(e){return Dt[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem());return this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}dtFormatter(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t})}formatDateTime(e,t){return this.dtFormatter(e,t).format()}formatDateTimeParts(e,t){return this.dtFormatter(e,t).formatToParts()}formatInterval(e,t){return this.dtFormatter(e.start,t).dtf.formatRange(e.start.toJSDate(),e.end.toJSDate())}resolvedOptions(e,t){return this.dtFormatter(e,t).resolvedOptions()}num(e,t=0,n){if(this.opts.forceSimple)return qe(e,t);const r={...this.opts};return t>0&&(r.padTo=t),n&&(r.signDisplay=n),this.loc.numberFormatter(r).format(e)}formatDateTimeFromString(e,t){const n="en"===this.loc.listingMode(),r=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,i=(t,n)=>this.loc.extract(e,t,n),o=t=>e.isOffsetFixed&&0===e.offset&&t.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,t.format):"",s=()=>n?function(e){return yt[e.hour<12?0:1]}(e):i({hour:"numeric",hourCycle:"h12"},"dayperiod"),a=(t,r)=>n?function(e,t){return ft(t)[e.month-1]}(e,t):i(r?{month:t}:{month:t,day:"numeric"},"month"),l=(t,r)=>n?function(e,t){return vt(t)[e.weekday-1]}(e,t):i(r?{weekday:t}:{weekday:t,month:"long",day:"numeric"},"weekday"),u=t=>{const n=St.macroTokenToFormatOpts(t);return n?this.formatWithSystemDefault(e,n):t},c=t=>n?function(e,t){return Tt(t)[e.year<0?0:1]}(e,t):i({era:t},"era");return Et(St.parseFormat(t),(t=>{switch(t){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12==0?12:e.hour%12);case"hh":return this.num(e.hour%12==0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return o({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return o({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return o({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return s();case"d":return r?i({day:"numeric"},"day"):this.num(e.day);case"dd":return r?i({day:"2-digit"},"day"):this.num(e.day,2);case"c":case"E":return this.num(e.weekday);case"ccc":return l("short",!0);case"cccc":return l("long",!0);case"ccccc":return l("narrow",!0);case"EEE":return l("short",!1);case"EEEE":return l("long",!1);case"EEEEE":return l("narrow",!1);case"L":return r?i({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return r?i({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return a("short",!0);case"LLLL":return a("long",!0);case"LLLLL":return a("narrow",!0);case"M":return r?i({month:"numeric"},"month"):this.num(e.month);case"MM":return r?i({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return a("short",!1);case"MMMM":return a("long",!1);case"MMMMM":return a("narrow",!1);case"y":return r?i({year:"numeric"},"year"):this.num(e.year);case"yy":return r?i({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return r?i({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return r?i({year:"numeric"},"year"):this.num(e.year,6);case"G":return c("short");case"GG":return c("long");case"GGGGG":return c("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"n":return this.num(e.localWeekNumber);case"nn":return this.num(e.localWeekNumber,2);case"ii":return this.num(e.localWeekYear.toString().slice(-2),2);case"iiii":return this.num(e.localWeekYear,4);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return u(t)}}))}formatDurationFromString(e,t){const n="negativeLargestOnly"===this.opts.signMode?-1:1,r=e=>{switch(e[0]){case"S":return"milliseconds";case"s":return"seconds";case"m":return"minutes";case"h":return"hours";case"d":return"days";case"w":return"weeks";case"M":return"months";case"y":return"years";default:return null}},i=St.parseFormat(t),o=i.reduce(((e,{literal:t,val:n})=>t?e:e.concat(n)),[]),s=e.shiftTo(...o.map(r).filter((e=>e)));return Et(i,((e,t)=>i=>{const o=r(i);if(o){const r=t.isNegativeDuration&&o!==t.largestUnit?n:1;let s;return s="negativeLargestOnly"===this.opts.signMode&&o!==t.largestUnit?"never":"all"===this.opts.signMode?"always":"auto",this.num(e.get(o)*r,i.length,s)}return i})(s,{isNegativeDuration:s<0,largestUnit:Object.keys(s.values)[0]}))}}const Ct=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/;function kt(...e){const t=e.reduce(((e,t)=>e+t.source),"");return RegExp(`^${t}$`)}function xt(...e){return t=>e.reduce((([e,n,r],i)=>{const[o,s,a]=i(t,r);return[{...e,...o},s||n,a]}),[{},null,1]).slice(0,2)}function Ot(e,...t){if(null==e)return[null,null];for(const[n,r]of t){const t=n.exec(e);if(t)return r(t)}return[null,null]}function Mt(...e){return(t,n)=>{const r={};let i;for(i=0;ivoid 0!==e&&(t||e&&c)?-e:e;return[{years:h(Ge(n)),months:h(Ge(r)),weeks:h(Ge(i)),days:h(Ge(o)),hours:h(Ge(s)),minutes:h(Ge(a)),seconds:h(Ge(l),"-0"===l),milliseconds:h($e(u),d)}]}const qt={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Zt(e,t,n,r,i,o,s){const a={year:2===t.length?rt(Ze(t)):Ze(t),month:dt.indexOf(n)+1,day:Ze(r),hour:Ze(i),minute:Ze(o)};return s&&(a.second=Ze(s)),e&&(a.weekday=e.length>3?pt.indexOf(e)+1:mt.indexOf(e)+1),a}const Gt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function $t(e){const[,t,n,r,i,o,s,a,l,u,c,d]=e,h=Zt(t,i,r,n,o,s,a);let f;return f=l?qt[l]:u?0:ot(c,d),[h,new oe(f)]}const Kt=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,Xt=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,Jt=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Qt(e){const[,t,n,r,i,o,s,a]=e;return[Zt(t,i,r,n,o,s,a),oe.utcInstance]}function en(e){const[,t,n,r,i,o,s,a]=e;return[Zt(t,a,n,r,i,o,s),oe.utcInstance]}const tn=kt(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,Nt),nn=kt(/(\d{4})-?W(\d\d)(?:-?(\d))?/,Nt),rn=kt(/(\d{4})-?(\d{3})/,Nt),on=kt(Rt),sn=xt((function(e,t){return[{year:zt(e,t),month:zt(e,t+1,1),day:zt(e,t+2,1)},null,t+3]}),Vt,Wt,Ut),an=xt(Pt,Vt,Wt,Ut),ln=xt(Lt,Vt,Wt,Ut),un=xt(Vt,Wt,Ut);const cn=xt(Vt);const dn=kt(/(\d{4})-(\d\d)-(\d\d)/,Yt),hn=kt(Ht),fn=xt(Vt,Wt,Ut);const pn="Invalid Duration",mn={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},gn={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...mn},vn=365.2425,yn=30.436875,bn={years:{quarters:4,months:12,weeks:52.1775,days:vn,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:4.3481250000000005,days:yn,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...mn},_n=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],wn=_n.slice(0).reverse();function Tn(e,t,n=!1){const r={values:n?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy,matrix:t.matrix||e.matrix};return new Cn(r)}function En(e,t){let n=t.milliseconds??0;for(const r of wn.slice(1))t[r]&&(n+=t[r]*e[r].milliseconds);return n}function Dn(e,t){const n=En(e,t)<0?-1:1;_n.reduceRight(((r,i)=>{if(He(t[i]))return r;if(r){const o=t[r]*n,s=e[i][r],a=Math.floor(o/s);t[i]+=a*n,t[r]-=a*s*n}return i}),null),_n.reduce(((n,r)=>{if(He(t[r]))return n;if(n){const i=t[n]%1;t[n]-=i,t[r]+=i*e[n][r]}return r}),null)}function Sn(e){const t={};for(const[n,r]of Object.entries(e))0!==r&&(t[n]=r);return t}class Cn{constructor(e){const t="longterm"===e.conversionAccuracy||!1;let n=t?bn:gn;e.matrix&&(n=e.matrix),this.values=e.values,this.loc=e.loc||re.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=n,this.isLuxonDuration=!0}static fromMillis(e,t){return Cn.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(null==e||"object"!=typeof e)throw new u("Duration.fromObject: argument expected to be an object, got "+(null===e?"null":typeof e));return new Cn({values:at(e,Cn.normalizeUnit),loc:re.fromObject(t),conversionAccuracy:t.conversionAccuracy,matrix:t.matrix})}static fromDurationLike(e){if(Ye(e))return Cn.fromMillis(e);if(Cn.isDuration(e))return e;if("object"==typeof e)return Cn.fromObject(e);throw new u(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){const[n]=function(e){return Ot(e,[Bt,Ft])}(e);return n?Cn.fromObject(n,t):Cn.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,t){const[n]=function(e){return Ot(e,[jt,cn])}(e);return n?Cn.fromObject(n,t):Cn.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new u("need to specify a reason the Duration is invalid");const n=e instanceof Te?e:new Te(e,t);if(we.throwOnInvalid)throw new s(n);return new Cn({invalid:n})}static normalizeUnit(e){const t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new l(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){const n={...t,floor:!1!==t.round&&!1!==t.floor};return this.isValid?St.create(this.loc,n).formatDurationFromString(this,e):pn}toHuman(e={}){if(!this.isValid)return pn;const t=!1!==e.showZeros,n=_n.map((n=>{const r=this.values[n];return He(r)||0===r&&!t?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:n.slice(0,-1)}).format(r)})).filter((e=>e));return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(n)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return 0!==this.years&&(e+=this.years+"Y"),0===this.months&&0===this.quarters||(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(e+=Ke(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;const t=this.toMillis();if(t<0||t>=864e5)return null;e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e,includeOffset:!1};return br.fromMillis(t,{zone:"UTC"}).toISOTime(e)}toJSON(){return this.toISO()}toString(){return this.toISO()}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Duration { values: ${JSON.stringify(this.values)} }`:`Duration { Invalid, reason: ${this.invalidReason} }`}toMillis(){return this.isValid?En(this.matrix,this.values):NaN}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;const t=Cn.fromDurationLike(e),n={};for(const e of _n)(je(t.values,e)||je(this.values,e))&&(n[e]=t.get(e)+this.get(e));return Tn(this,{values:n},!0)}minus(e){if(!this.isValid)return this;const t=Cn.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;const t={};for(const n of Object.keys(this.values))t[n]=st(e(this.values[n],n));return Tn(this,{values:t},!0)}get(e){return this[Cn.normalizeUnit(e)]}set(e){if(!this.isValid)return this;return Tn(this,{values:{...this.values,...at(e,Cn.normalizeUnit)}})}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:n,matrix:r}={}){return Tn(this,{loc:this.loc.clone({locale:e,numberingSystem:t}),matrix:r,conversionAccuracy:n})}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;const e=this.toObject();return Dn(this.matrix,e),Tn(this,{values:e},!0)}rescale(){if(!this.isValid)return this;return Tn(this,{values:Sn(this.normalize().shiftToAll().toObject())},!0)}shiftTo(...e){if(!this.isValid)return this;if(0===e.length)return this;e=e.map((e=>Cn.normalizeUnit(e)));const t={},n={},r=this.toObject();let i;for(const o of _n)if(e.indexOf(o)>=0){i=o;let e=0;for(const t in n)e+=this.matrix[t][o]*n[t],n[t]=0;Ye(r[o])&&(e+=r[o]);const s=Math.trunc(e);t[o]=s,n[o]=(1e3*e-1e3*s)/1e3}else Ye(r[o])&&(n[o]=r[o]);for(const e in n)0!==n[e]&&(t[i]+=e===i?n[e]:n[e]/this.matrix[i][e]);return Dn(this.matrix,t),Tn(this,{values:t},!0)}shiftToAll(){return this.isValid?this.shiftTo("years","months","weeks","days","hours","minutes","seconds","milliseconds"):this}negate(){if(!this.isValid)return this;const e={};for(const t of Object.keys(this.values))e[t]=0===this.values[t]?0:-this.values[t];return Tn(this,{values:e},!0)}removeZeros(){if(!this.isValid)return this;return Tn(this,{values:Sn(this.values)},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid)return!1;if(!this.loc.equals(e.loc))return!1;for(const r of _n)if(t=this.values[r],n=e.values[r],!(void 0===t||0===t?void 0===n||0===n:t===n))return!1;var t,n;return!0}}const kn="Invalid Interval";class xn{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,t=null){if(!e)throw new u("need to specify a reason the Interval is invalid");const n=e instanceof Te?e:new Te(e,t);if(we.throwOnInvalid)throw new o(n);return new xn({invalid:n})}static fromDateTimes(e,t){const n=_r(e),r=_r(t),i=function(e,t){return e&&e.isValid?t&&t.isValid?te}isBefore(e){return!!this.isValid&&this.e<=e}contains(e){return!!this.isValid&&(this.s<=e&&this.e>e)}set({start:e,end:t}={}){return this.isValid?xn.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];const t=e.map(_r).filter((e=>this.contains(e))).sort(((e,t)=>e.toMillis()-t.toMillis())),n=[];let{s:r}=this,i=0;for(;r+this.e?this.e:e;n.push(xn.fromDateTimes(r,o)),r=o,i+=1}return n}splitBy(e){const t=Cn.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];let n,{s:r}=this,i=1;const o=[];for(;re*i)));n=+e>+this.e?this.e:e,o.push(xn.fromDateTimes(r,n)),r=n,i+=1}return o}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e)}equals(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))}intersection(e){if(!this.isValid)return this;const t=this.s>e.s?this.s:e.s,n=this.e=n?null:xn.fromDateTimes(t,n)}union(e){if(!this.isValid)return this;const t=this.se.e?this.e:e.e;return xn.fromDateTimes(t,n)}static merge(e){const[t,n]=e.sort(((e,t)=>e.s-t.s)).reduce((([e,t],n)=>t?t.overlaps(n)||t.abutsStart(n)?[e,t.union(n)]:[e.concat([t]),n]:[e,n]),[[],null]);return n&&t.push(n),t}static xor(e){let t=null,n=0;const r=[],i=e.map((e=>[{time:e.s,type:"s"},{time:e.e,type:"e"}])),o=Array.prototype.concat(...i).sort(((e,t)=>e.time-t.time));for(const e of o)n+="s"===e.type?1:-1,1===n?t=e.time:(t&&+t!=+e.time&&r.push(xn.fromDateTimes(t,e.time)),t=null);return xn.merge(r)}difference(...e){return xn.xor([this].concat(e)).map((e=>this.intersection(e))).filter((e=>e&&!e.isEmpty()))}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:kn}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`:`Interval { Invalid, reason: ${this.invalidReason} }`}toLocaleString(e=p,t={}){return this.isValid?St.create(this.s.loc.clone(t),e).formatInterval(this):kn}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:kn}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:kn}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:kn}toFormat(e,{separator:t=" – "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:kn}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):Cn.invalid(this.invalidReason)}mapEndpoints(e){return xn.fromDateTimes(e(this.s),e(this.e))}}class On{static hasDST(e=we.defaultZone){const t=br.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return U.isValidZone(e)}static normalizeZone(e){return ae(e,we.defaultZone)}static getStartOfWeek({locale:e=null,locObj:t=null}={}){return(t||re.create(e)).getStartOfWeek()}static getMinimumDaysInFirstWeek({locale:e=null,locObj:t=null}={}){return(t||re.create(e)).getMinDaysInFirstWeek()}static getWeekendWeekdays({locale:e=null,locObj:t=null}={}){return(t||re.create(e)).getWeekendDays().slice()}static months(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null,outputCalendar:i="gregory"}={}){return(r||re.create(t,n,i)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null,outputCalendar:i="gregory"}={}){return(r||re.create(t,n,i)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null}={}){return(r||re.create(t,n,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null}={}){return(r||re.create(t,n,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return re.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return re.create(t,null,"gregory").eras(e)}static features(){return{relative:Ve(),localeWeek:We()}}}function Mn(e,t){const n=e=>e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=n(t)-n(e);return Math.floor(Cn.fromMillis(r).as("days"))}function An(e,t,n,r){let[i,o,s,a]=function(e,t,n){const r=[["years",(e,t)=>t.year-e.year],["quarters",(e,t)=>t.quarter-e.quarter+4*(t.year-e.year)],["months",(e,t)=>t.month-e.month+12*(t.year-e.year)],["weeks",(e,t)=>{const n=Mn(e,t);return(n-n%7)/7}],["days",Mn]],i={},o=e;let s,a;for(const[l,u]of r)n.indexOf(l)>=0&&(s=l,i[l]=u(e,t),a=o.plus(i),a>t?(i[l]--,(e=o.plus(i))>t&&(a=e,i[l]--,e=o.plus(i))):e=a);return[e,i,a,s]}(e,t,n);const l=t-i,u=n.filter((e=>["hours","minutes","seconds","milliseconds"].indexOf(e)>=0));0===u.length&&(s0?Cn.fromMillis(l,r).shiftTo(...u).plus(c):c}function In(e,t=(e=>e)){return{regex:e,deser:([e])=>t(function(e){let t=parseInt(e,10);if(isNaN(t)){t="";for(let n=0;n=n&&r<=i&&(t+=r-n)}}return parseInt(t,10)}return t}(e))}}const Rn=`[ ${String.fromCharCode(160)}]`,Nn=new RegExp(Rn,"g");function Pn(e){return e.replace(/\./g,"\\.?").replace(Nn,Rn)}function Ln(e){return e.replace(/\./g,"").replace(Nn," ").toLowerCase()}function Hn(e,t){return null===e?null:{regex:RegExp(e.map(Pn).join("|")),deser:([n])=>e.findIndex((e=>Ln(n)===Ln(e)))+t}}function Yn(e,t){return{regex:e,deser:([,e,t])=>ot(e,t),groups:t}}function zn(e){return{regex:e,deser:([e])=>e}}const Vn={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour12:{numeric:"h","2-digit":"hh"},hour24:{numeric:"H","2-digit":"HH"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"},timeZoneName:{long:"ZZZZZ",short:"ZZZ"}};let Wn=null;function Un(e,t){return Array.prototype.concat(...e.map((e=>function(e,t){if(e.literal)return e;const n=Fn(St.macroTokenToFormatOpts(e.val),t);return null==n||n.includes(void 0)?e:n}(e,t))))}class jn{constructor(e,t){if(this.locale=e,this.format=t,this.tokens=Un(St.parseFormat(t),e),this.units=this.tokens.map((t=>function(e,t){const n=he(t),r=he(t,"{2}"),i=he(t,"{3}"),o=he(t,"{4}"),s=he(t,"{6}"),a=he(t,"{1,2}"),l=he(t,"{1,3}"),u=he(t,"{1,6}"),c=he(t,"{1,9}"),d=he(t,"{2,4}"),h=he(t,"{4,6}"),f=e=>{return{regex:RegExp((t=e.val,t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:([e])=>e,literal:!0};var t},p=(p=>{if(e.literal)return f(p);switch(p.val){case"G":return Hn(t.eras("short"),0);case"GG":return Hn(t.eras("long"),0);case"y":return In(u);case"yy":case"kk":return In(d,rt);case"yyyy":case"kkkk":return In(o);case"yyyyy":return In(h);case"yyyyyy":return In(s);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return In(a);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return In(r);case"MMM":return Hn(t.months("short",!0),1);case"MMMM":return Hn(t.months("long",!0),1);case"LLL":return Hn(t.months("short",!1),1);case"LLLL":return Hn(t.months("long",!1),1);case"o":case"S":return In(l);case"ooo":case"SSS":return In(i);case"u":return zn(c);case"uu":return zn(a);case"uuu":case"E":case"c":return In(n);case"a":return Hn(t.meridiems(),0);case"EEE":return Hn(t.weekdays("short",!1),1);case"EEEE":return Hn(t.weekdays("long",!1),1);case"ccc":return Hn(t.weekdays("short",!0),1);case"cccc":return Hn(t.weekdays("long",!0),1);case"Z":case"ZZ":return Yn(new RegExp(`([+-]${a.source})(?::(${r.source}))?`),2);case"ZZZ":return Yn(new RegExp(`([+-]${a.source})(${r.source})?`),2);case"z":return zn(/[a-z_+-/]{1,256}?/i);case" ":return zn(/[^\S\n\r]/);default:return f(p)}})(e)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return p.token=e,p}(t,e))),this.disqualifyingUnit=this.units.find((e=>e.invalidReason)),!this.disqualifyingUnit){const[e,t]=[`^${(n=this.units).map((e=>e.regex)).reduce(((e,t)=>`${e}(${t.source})`),"")}$`,n];this.regex=RegExp(e,"i"),this.handlers=t}var n}explainFromTokens(e){if(this.isValid){const[t,n]=function(e,t,n){const r=e.match(t);if(r){const e={};let t=1;for(const i in n)if(je(n,i)){const o=n[i],s=o.groups?o.groups+1:1;!o.literal&&o.token&&(e[o.token.val[0]]=o.deser(r.slice(t,t+s))),t+=s}return[r,e]}return[r,{}]}(e,this.regex,this.handlers),[r,i,o]=n?function(e){let t,n=null;return He(e.z)||(n=U.create(e.z)),He(e.Z)||(n||(n=new oe(e.Z)),t=e.Z),He(e.q)||(e.M=3*(e.q-1)+1),He(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),He(e.u)||(e.S=$e(e.u)),[Object.keys(e).reduce(((t,n)=>{const r=(e=>{switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(n);return r&&(t[r]=e[n]),t}),{}),n,t]}(n):[null,null,void 0];if(je(n,"a")&&je(n,"H"))throw new a("Can't include meridiem when specifying 24-hour format");return{input:e,tokens:this.tokens,regex:this.regex,rawMatches:t,matches:n,result:r,zone:i,specificOffset:o}}return{input:e,tokens:this.tokens,invalidReason:this.invalidReason}}get isValid(){return!this.disqualifyingUnit}get invalidReason(){return this.disqualifyingUnit?this.disqualifyingUnit.invalidReason:null}}function Bn(e,t,n){return new jn(e,n).explainFromTokens(t)}function Fn(e,t){if(!e)return null;const n=St.create(t,e).dtFormatter((Wn||(Wn=br.fromMillis(1555555555555)),Wn)),r=n.formatToParts(),i=n.resolvedOptions();return r.map((t=>function(e,t,n){const{type:r,value:i}=e;if("literal"===r){const e=/^\s+$/.test(i);return{literal:!e,val:e?" ":i}}const o=t[r];let s=r;"hour"===r&&(s=null!=t.hour12?t.hour12?"hour12":"hour24":null!=t.hourCycle?"h11"===t.hourCycle||"h12"===t.hourCycle?"hour12":"hour24":n.hour12?"hour12":"hour24");let a=Vn[s];if("object"==typeof a&&(a=a[o]),a)return{literal:!1,val:a}}(t,e,i)))}const qn="Invalid DateTime",Zn=864e13;function Gn(e){return new Te("unsupported zone",`the zone "${e.name}" is not supported`)}function $n(e){return null===e.weekData&&(e.weekData=Me(e.c)),e.weekData}function Kn(e){return null===e.localWeekData&&(e.localWeekData=Me(e.c,e.loc.getMinDaysInFirstWeek(),e.loc.getStartOfWeek())),e.localWeekData}function Xn(e,t){const n={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new br({...n,...t,old:n})}function Jn(e,t,n){let r=e-60*t*1e3;const i=n.offset(r);if(t===i)return[r,t];r-=60*(i-t)*1e3;const o=n.offset(r);return i===o?[r,i]:[e-60*Math.min(i,o)*1e3,Math.max(i,o)]}function Qn(e,t){const n=new Date(e+=60*t*1e3);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function er(e,t,n){return Jn(et(e),t,n)}function tr(e,t){const n=e.o,r=e.c.year+Math.trunc(t.years),i=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),o={...e.c,year:r,month:i,day:Math.min(e.c.day,Qe(r,i))+Math.trunc(t.days)+7*Math.trunc(t.weeks)},s=Cn.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),a=et(o);let[l,u]=Jn(a,n,e.zone);return 0!==s&&(l+=s,u=e.zone.offset(l)),{ts:l,o:u}}function nr(e,t,n,r,i,o){const{setZone:s,zone:a}=n;if(e&&0!==Object.keys(e).length||t){const r=t||a,i=br.fromObject(e,{...n,zone:r,specificOffset:o});return s?i:i.setZone(a)}return br.invalid(new Te("unparsable",`the input "${i}" can't be parsed as ${r}`))}function rr(e,t,n=!0){return e.isValid?St.create(re.create("en-US"),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(e,t):null}function ir(e,t,n){const r=e.c.year>9999||e.c.year<0;let i="";if(r&&e.c.year>=0&&(i+="+"),i+=qe(e.c.year,r?6:4),"year"===n)return i;if(t){if(i+="-",i+=qe(e.c.month),"month"===n)return i;i+="-"}else if(i+=qe(e.c.month),"month"===n)return i;return i+=qe(e.c.day),i}function or(e,t,n,r,i,o,s){let a=!n||0!==e.c.millisecond||0!==e.c.second,l="";switch(s){case"day":case"month":case"year":break;default:if(l+=qe(e.c.hour),"hour"===s)break;if(t){if(l+=":",l+=qe(e.c.minute),"minute"===s)break;a&&(l+=":",l+=qe(e.c.second))}else{if(l+=qe(e.c.minute),"minute"===s)break;a&&(l+=qe(e.c.second))}if("second"===s)break;!a||r&&0===e.c.millisecond||(l+=".",l+=qe(e.c.millisecond,3))}return i&&(e.isOffsetFixed&&0===e.offset&&!o?l+="Z":e.o<0?(l+="-",l+=qe(Math.trunc(-e.o/60)),l+=":",l+=qe(Math.trunc(-e.o%60))):(l+="+",l+=qe(Math.trunc(e.o/60)),l+=":",l+=qe(Math.trunc(e.o%60)))),o&&(l+="["+e.zone.ianaName+"]"),l}const sr={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},ar={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},lr={ordinal:1,hour:0,minute:0,second:0,millisecond:0},ur=["year","month","day","hour","minute","second","millisecond"],cr=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],dr=["year","ordinal","hour","minute","second","millisecond"];function hr(e){const t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new l(e);return t}function fr(e){switch(e.toLowerCase()){case"localweekday":case"localweekdays":return"localWeekday";case"localweeknumber":case"localweeknumbers":return"localWeekNumber";case"localweekyear":case"localweekyears":return"localWeekYear";default:return hr(e)}}function pr(e,t){const n=ae(t.zone,we.defaultZone);if(!n.isValid)return br.invalid(Gn(n));const r=re.fromObject(t);let i,o;if(He(e.year))i=we.now();else{for(const t of ur)He(e[t])&&(e[t]=sr[t]);const t=Pe(e)||Le(e);if(t)return br.invalid(t);const r=function(e){if(void 0===vr&&(vr=we.now()),"iana"!==e.type)return e.offset(vr);const t=e.name;let n=yr.get(t);return void 0===n&&(n=e.offset(vr),yr.set(t,n)),n}(n);[i,o]=er(e,r,n)}return new br({ts:i,zone:n,loc:r,o:o})}function mr(e,t,n){const r=!!He(n.round)||n.round,i=He(n.rounding)?"trunc":n.rounding,o=(e,o)=>{e=Ke(e,r||n.calendary?0:2,n.calendary?"round":i);return t.loc.clone(n).relFormatter(n).format(e,o)},s=r=>n.calendary?t.hasSame(e,r)?0:t.startOf(r).diff(e.startOf(r),r).get(r):t.diff(e,r).get(r);if(n.unit)return o(s(n.unit),n.unit);for(const e of n.units){const t=s(e);if(Math.abs(t)>=1)return o(t,e)}return o(e>t?-0:0,n.units[n.units.length-1])}function gr(e){let t,n={};return e.length>0&&"object"==typeof e[e.length-1]?(n=e[e.length-1],t=Array.from(e).slice(0,e.length-1)):t=Array.from(e),[n,t]}let vr;const yr=new Map;class br{constructor(e){const t=e.zone||we.defaultZone;let n=e.invalid||(Number.isNaN(e.ts)?new Te("invalid input"):null)||(t.isValid?null:Gn(t));this.ts=He(e.ts)?we.now():e.ts;let r=null,i=null;if(!n){if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[r,i]=[e.old.c,e.old.o];else{const o=Ye(e.o)&&!e.old?e.o:t.offset(this.ts);r=Qn(this.ts,o),n=Number.isNaN(r.year)?new Te("invalid input"):null,r=n?null:r,i=n?null:o}}this._zone=t,this.loc=e.loc||re.create(),this.invalid=n,this.weekData=null,this.localWeekData=null,this.c=r,this.o=i,this.isLuxonDateTime=!0}static now(){return new br({})}static local(){const[e,t]=gr(arguments),[n,r,i,o,s,a,l]=t;return pr({year:n,month:r,day:i,hour:o,minute:s,second:a,millisecond:l},e)}static utc(){const[e,t]=gr(arguments),[n,r,i,o,s,a,l]=t;return e.zone=oe.utcInstance,pr({year:n,month:r,day:i,hour:o,minute:s,second:a,millisecond:l},e)}static fromJSDate(e,t={}){const n=(r=e,"[object Date]"===Object.prototype.toString.call(r)?e.valueOf():NaN);var r;if(Number.isNaN(n))return br.invalid("invalid input");const i=ae(t.zone,we.defaultZone);return i.isValid?new br({ts:n,zone:i,loc:re.fromObject(t)}):br.invalid(Gn(i))}static fromMillis(e,t={}){if(Ye(e))return e<-Zn||e>Zn?br.invalid("Timestamp out of range"):new br({ts:e,zone:ae(t.zone,we.defaultZone),loc:re.fromObject(t)});throw new u(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(Ye(e))return new br({ts:1e3*e,zone:ae(t.zone,we.defaultZone),loc:re.fromObject(t)});throw new u("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};const n=ae(t.zone,we.defaultZone);if(!n.isValid)return br.invalid(Gn(n));const r=re.fromObject(t),i=at(e,fr),{minDaysInFirstWeek:o,startOfWeek:s}=Ne(i,r),l=we.now(),u=He(t.specificOffset)?n.offset(l):t.specificOffset,c=!He(i.ordinal),d=!He(i.year),h=!He(i.month)||!He(i.day),f=d||h,p=i.weekYear||i.weekNumber;if((f||c)&&p)throw new a("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(h&&c)throw new a("Can't mix ordinal dates with month/day");const m=p||i.weekday&&!f;let g,v,y=Qn(l,u);m?(g=cr,v=ar,y=Me(y,o,s)):c?(g=dr,v=lr,y=Ie(y)):(g=ur,v=sr);let b=!1;for(const e of g){He(i[e])?i[e]=b?v[e]:y[e]:b=!0}const _=m?function(e,t=4,n=1){const r=ze(e.weekYear),i=Fe(e.weekNumber,1,nt(e.weekYear,t,n)),o=Fe(e.weekday,1,7);return r?i?!o&&Se("weekday",e.weekday):Se("week",e.weekNumber):Se("weekYear",e.weekYear)}(i,o,s):c?function(e){const t=ze(e.year),n=Fe(e.ordinal,1,Je(e.year));return t?!n&&Se("ordinal",e.ordinal):Se("year",e.year)}(i):Pe(i),w=_||Le(i);if(w)return br.invalid(w);const T=m?Ae(i,o,s):c?Re(i):i,[E,D]=er(T,u,n),S=new br({ts:E,zone:n,o:D,loc:r});return i.weekday&&f&&e.weekday!==S.weekday?br.invalid("mismatched weekday",`you can't specify both a weekday of ${i.weekday} and a date of ${S.toISO()}`):S.isValid?S:br.invalid(S.invalid)}static fromISO(e,t={}){const[n,r]=function(e){return Ot(e,[tn,sn],[nn,an],[rn,ln],[on,un])}(e);return nr(n,r,t,"ISO 8601",e)}static fromRFC2822(e,t={}){const[n,r]=function(e){return Ot(function(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e),[Gt,$t])}(e);return nr(n,r,t,"RFC 2822",e)}static fromHTTP(e,t={}){const[n,r]=function(e){return Ot(e,[Kt,Qt],[Xt,Qt],[Jt,en])}(e);return nr(n,r,t,"HTTP",t)}static fromFormat(e,t,n={}){if(He(e)||He(t))throw new u("fromFormat requires an input string and a format");const{locale:r=null,numberingSystem:i=null}=n,o=re.fromOpts({locale:r,numberingSystem:i,defaultToEN:!0}),[s,a,l,c]=function(e,t,n){const{result:r,zone:i,specificOffset:o,invalidReason:s}=Bn(e,t,n);return[r,i,o,s]}(o,e,t);return c?br.invalid(c):nr(s,a,n,`format ${t}`,e,l)}static fromString(e,t,n={}){return br.fromFormat(e,t,n)}static fromSQL(e,t={}){const[n,r]=function(e){return Ot(e,[dn,sn],[hn,fn])}(e);return nr(n,r,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new u("need to specify a reason the DateTime is invalid");const n=e instanceof Te?e:new Te(e,t);if(we.throwOnInvalid)throw new i(n);return new br({invalid:n})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}static parseFormatForOpts(e,t={}){const n=Fn(e,re.fromObject(t));return n?n.map((e=>e?e.val:null)).join(""):null}static expandFormat(e,t={}){return Un(St.parseFormat(e),re.fromObject(t)).map((e=>e.val)).join("")}static resetCache(){vr=void 0,yr.clear()}get(e){return this[e]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?$n(this).weekYear:NaN}get weekNumber(){return this.isValid?$n(this).weekNumber:NaN}get weekday(){return this.isValid?$n(this).weekday:NaN}get isWeekend(){return this.isValid&&this.loc.getWeekendDays().includes(this.weekday)}get localWeekday(){return this.isValid?Kn(this).weekday:NaN}get localWeekNumber(){return this.isValid?Kn(this).weekNumber:NaN}get localWeekYear(){return this.isValid?Kn(this).weekYear:NaN}get ordinal(){return this.isValid?Ie(this.c).ordinal:NaN}get monthShort(){return this.isValid?On.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?On.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?On.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?On.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}getPossibleOffsets(){if(!this.isValid||this.isOffsetFixed)return[this];const e=864e5,t=6e4,n=et(this.c),r=this.zone.offset(n-e),i=this.zone.offset(n+e),o=this.zone.offset(n-r*t),s=this.zone.offset(n-i*t);if(o===s)return[this];const a=n-o*t,l=n-s*t,u=Qn(a,o),c=Qn(l,s);return u.hour===c.hour&&u.minute===c.minute&&u.second===c.second&&u.millisecond===c.millisecond?[Xn(this,{ts:a}),Xn(this,{ts:l})]:[this]}get isInLeapYear(){return Xe(this.year)}get daysInMonth(){return Qe(this.year,this.month)}get daysInYear(){return this.isValid?Je(this.year):NaN}get weeksInWeekYear(){return this.isValid?nt(this.weekYear):NaN}get weeksInLocalWeekYear(){return this.isValid?nt(this.localWeekYear,this.loc.getMinDaysInFirstWeek(),this.loc.getStartOfWeek()):NaN}resolvedLocaleOptions(e={}){const{locale:t,numberingSystem:n,calendar:r}=St.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:n,outputCalendar:r}}toUTC(e=0,t={}){return this.setZone(oe.instance(e),t)}toLocal(){return this.setZone(we.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:n=!1}={}){if((e=ae(e,we.defaultZone)).equals(this.zone))return this;if(e.isValid){let r=this.ts;if(t||n){const t=e.offset(this.ts),n=this.toObject();[r]=er(n,t,e)}return Xn(this,{ts:r,zone:e})}return br.invalid(Gn(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:n}={}){return Xn(this,{loc:this.loc.clone({locale:e,numberingSystem:t,outputCalendar:n})})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;const t=at(e,fr),{minDaysInFirstWeek:n,startOfWeek:r}=Ne(t,this.loc),i=!He(t.weekYear)||!He(t.weekNumber)||!He(t.weekday),o=!He(t.ordinal),s=!He(t.year),l=!He(t.month)||!He(t.day),u=s||l,c=t.weekYear||t.weekNumber;if((u||o)&&c)throw new a("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(l&&o)throw new a("Can't mix ordinal dates with month/day");let d;i?d=Ae({...Me(this.c,n,r),...t},n,r):He(t.ordinal)?(d={...this.toObject(),...t},He(t.day)&&(d.day=Math.min(Qe(d.year,d.month),d.day))):d=Re({...Ie(this.c),...t});const[h,f]=er(d,this.o,this.zone);return Xn(this,{ts:h,o:f})}plus(e){if(!this.isValid)return this;return Xn(this,tr(this,Cn.fromDurationLike(e)))}minus(e){if(!this.isValid)return this;return Xn(this,tr(this,Cn.fromDurationLike(e).negate()))}startOf(e,{useLocaleWeeks:t=!1}={}){if(!this.isValid)return this;const n={},r=Cn.normalizeUnit(e);switch(r){case"years":n.month=1;case"quarters":case"months":n.day=1;case"weeks":case"days":n.hour=0;case"hours":n.minute=0;case"minutes":n.second=0;case"seconds":n.millisecond=0}if("weeks"===r)if(t){const e=this.loc.getStartOfWeek(),{weekday:t}=this;t=3&&(a+="T"),a+=or(this,s,t,n,r,i,o),a}toISODate({format:e="extended",precision:t="day"}={}){return this.isValid?ir(this,"extended"===e,hr(t)):null}toISOWeekDate(){return rr(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:n=!0,includePrefix:r=!1,extendedZone:i=!1,format:o="extended",precision:s="milliseconds"}={}){if(!this.isValid)return null;return s=hr(s),(r&&ur.indexOf(s)>=3?"T":"")+or(this,"extended"===o,t,e,n,i,s)}toRFC2822(){return rr(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return rr(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?ir(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:n=!0}={}){let r="HH:mm:ss.SSS";return(t||e)&&(n&&(r+=" "),t?r+="z":e&&(r+="ZZ")),rr(this,r,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():qn}[Symbol.for("nodejs.util.inspect.custom")](){return this.isValid?`DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`:`DateTime { Invalid, reason: ${this.invalidReason} }`}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};const t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",n={}){if(!this.isValid||!e.isValid)return Cn.invalid("created by diffing an invalid DateTime");const r={locale:this.locale,numberingSystem:this.numberingSystem,...n},i=(a=t,Array.isArray(a)?a:[a]).map(Cn.normalizeUnit),o=e.valueOf()>this.valueOf(),s=An(o?this:e,o?e:this,i,r);var a;return o?s.negate():s}diffNow(e="milliseconds",t={}){return this.diff(br.now(),e,t)}until(e){return this.isValid?xn.fromDateTimes(this,e):this}hasSame(e,t,n){if(!this.isValid)return!1;const r=e.valueOf(),i=this.setZone(e.zone,{keepLocalTime:!0});return i.startOf(t,n)<=r&&r<=i.endOf(t,n)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;const t=e.base||br.fromObject({},{zone:this.zone}),n=e.padding?thise.valueOf()),Math.min)}static max(...e){if(!e.every(br.isDateTime))throw new u("max requires all arguments be DateTimes");return Ue(e,(e=>e.valueOf()),Math.max)}static fromFormatExplain(e,t,n={}){const{locale:r=null,numberingSystem:i=null}=n;return Bn(re.fromOpts({locale:r,numberingSystem:i,defaultToEN:!0}),e,t)}static fromStringExplain(e,t,n={}){return br.fromFormatExplain(e,t,n)}static buildFormatParser(e,t={}){const{locale:n=null,numberingSystem:r=null}=t,i=re.fromOpts({locale:n,numberingSystem:r,defaultToEN:!0});return new jn(i,e)}static fromFormatParser(e,t,n={}){if(He(e)||He(t))throw new u("fromFormatParser requires an input string and a format parser");const{locale:r=null,numberingSystem:i=null}=n,o=re.fromOpts({locale:r,numberingSystem:i,defaultToEN:!0});if(!o.equals(t.locale))throw new u(`fromFormatParser called with a locale of ${o}, but the format parser was created for ${t.locale}`);const{result:s,zone:a,specificOffset:l,invalidReason:c}=t.explainFromTokens(e);return c?br.invalid(c):nr(s,a,n,`format ${t.format}`,e,l)}static get DATE_SHORT(){return p}static get DATE_MED(){return m}static get DATE_MED_WITH_WEEKDAY(){return g}static get DATE_FULL(){return v}static get DATE_HUGE(){return y}static get TIME_SIMPLE(){return b}static get TIME_WITH_SECONDS(){return _}static get TIME_WITH_SHORT_OFFSET(){return w}static get TIME_WITH_LONG_OFFSET(){return T}static get TIME_24_SIMPLE(){return E}static get TIME_24_WITH_SECONDS(){return D}static get TIME_24_WITH_SHORT_OFFSET(){return S}static get TIME_24_WITH_LONG_OFFSET(){return C}static get DATETIME_SHORT(){return k}static get DATETIME_SHORT_WITH_SECONDS(){return x}static get DATETIME_MED(){return O}static get DATETIME_MED_WITH_SECONDS(){return M}static get DATETIME_MED_WITH_WEEKDAY(){return A}static get DATETIME_FULL(){return I}static get DATETIME_FULL_WITH_SECONDS(){return R}static get DATETIME_HUGE(){return N}static get DATETIME_HUGE_WITH_SECONDS(){return P}}function _r(e){if(br.isDateTime(e))return e;if(e&&e.valueOf&&Ye(e.valueOf()))return br.fromJSDate(e);if(e&&"object"==typeof e)return br.fromObject(e);throw new u(`Unknown datetime argument: ${e}, of type ${typeof e}`)}},8333:function(e,t){"use strict";t.A={code:"fa",week:{dow:6,doy:12},direction:"rtl",buttonText:{prev:"قبلی",next:"بعدی",today:"امروز",month:"ماه",week:"هفته",day:"روز",list:"برنامه"},weekText:"هف",allDayText:"تمام روز",moreLinkText:function(e){return"بیش از "+e},noEventsText:"هیچ رویدادی به نمایش"}},8357:function(e,t){"use strict";t.A={code:"pt-br",buttonText:{prev:"Anterior",next:"Próximo",today:"Hoje",month:"Mês",week:"Semana",day:"Dia",list:"Lista"},weekText:"Sm",allDayText:"dia inteiro",moreLinkText:function(e){return"mais +"+e},noEventsText:"Não há eventos para mostrar"}},8366:function(e,t){"use strict";t.A={code:"eu",week:{dow:1,doy:7},buttonText:{prev:"Aur",next:"Hur",today:"Gaur",month:"Hilabetea",week:"Astea",day:"Eguna",list:"Agenda"},weekText:"As",allDayText:"Egun osoa",moreLinkText:"gehiago",noEventsText:"Ez dago ekitaldirik erakusteko"}},9336:function(e,t,n){"use strict";n.d(t,{aF:function(){return Wn},go:function(){return Kn},AM:function(){return yr},y8:function(){return jr},m_:function(){return mr}});var r={};n.r(r),n.d(r,{afterMain:function(){return E},afterRead:function(){return _},afterWrite:function(){return C},applyStyles:function(){return R},arrow:function(){return Q},auto:function(){return l},basePlacements:function(){return u},beforeMain:function(){return w},beforeRead:function(){return y},beforeWrite:function(){return D},bottom:function(){return o},clippingParents:function(){return h},computeStyles:function(){return re},createPopper:function(){return Re},createPopperBase:function(){return Ie},createPopperLite:function(){return Ne},detectOverflow:function(){return be},end:function(){return d},eventListeners:function(){return oe},flip:function(){return _e},hide:function(){return Ee},left:function(){return a},main:function(){return T},modifierPhases:function(){return k},offset:function(){return De},placements:function(){return v},popper:function(){return p},popperGenerator:function(){return Ae},popperOffsets:function(){return Se},preventOverflow:function(){return Ce},read:function(){return b},reference:function(){return m},right:function(){return s},start:function(){return c},top:function(){return i},variationPlacements:function(){return g},viewport:function(){return f},write:function(){return S}});var i="top",o="bottom",s="right",a="left",l="auto",u=[i,o,s,a],c="start",d="end",h="clippingParents",f="viewport",p="popper",m="reference",g=u.reduce((function(e,t){return e.concat([t+"-"+c,t+"-"+d])}),[]),v=[].concat(u,[l]).reduce((function(e,t){return e.concat([t,t+"-"+c,t+"-"+d])}),[]),y="beforeRead",b="read",_="afterRead",w="beforeMain",T="main",E="afterMain",D="beforeWrite",S="write",C="afterWrite",k=[y,b,_,w,T,E,D,S,C];function x(e){return e?(e.nodeName||"").toLowerCase():null}function O(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function M(e){return e instanceof O(e).Element||e instanceof Element}function A(e){return e instanceof O(e).HTMLElement||e instanceof HTMLElement}function I(e){return"undefined"!=typeof ShadowRoot&&(e instanceof O(e).ShadowRoot||e instanceof ShadowRoot)}var R={name:"applyStyles",enabled:!0,phase:"write",fn:function(e){var t=e.state;Object.keys(t.elements).forEach((function(e){var n=t.styles[e]||{},r=t.attributes[e]||{},i=t.elements[e];A(i)&&x(i)&&(Object.assign(i.style,n),Object.keys(r).forEach((function(e){var t=r[e];!1===t?i.removeAttribute(e):i.setAttribute(e,!0===t?"":t)})))}))},effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach((function(e){var r=t.elements[e],i=t.attributes[e]||{},o=Object.keys(t.styles.hasOwnProperty(e)?t.styles[e]:n[e]).reduce((function(e,t){return e[t]="",e}),{});A(r)&&x(r)&&(Object.assign(r.style,o),Object.keys(i).forEach((function(e){r.removeAttribute(e)})))}))}},requires:["computeStyles"]};function N(e){return e.split("-")[0]}var P=Math.max,L=Math.min,H=Math.round;function Y(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function z(){return!/^((?!chrome|android).)*safari/i.test(Y())}function V(e,t,n){void 0===t&&(t=!1),void 0===n&&(n=!1);var r=e.getBoundingClientRect(),i=1,o=1;t&&A(e)&&(i=e.offsetWidth>0&&H(r.width)/e.offsetWidth||1,o=e.offsetHeight>0&&H(r.height)/e.offsetHeight||1);var s=(M(e)?O(e):window).visualViewport,a=!z()&&n,l=(r.left+(a&&s?s.offsetLeft:0))/i,u=(r.top+(a&&s?s.offsetTop:0))/o,c=r.width/i,d=r.height/o;return{width:c,height:d,top:u,right:l+c,bottom:u+d,left:l,x:l,y:u}}function W(e){var t=V(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function U(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&I(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function j(e){return O(e).getComputedStyle(e)}function B(e){return["table","td","th"].indexOf(x(e))>=0}function F(e){return((M(e)?e.ownerDocument:e.document)||window.document).documentElement}function q(e){return"html"===x(e)?e:e.assignedSlot||e.parentNode||(I(e)?e.host:null)||F(e)}function Z(e){return A(e)&&"fixed"!==j(e).position?e.offsetParent:null}function G(e){for(var t=O(e),n=Z(e);n&&B(n)&&"static"===j(n).position;)n=Z(n);return n&&("html"===x(n)||"body"===x(n)&&"static"===j(n).position)?t:n||function(e){var t=/firefox/i.test(Y());if(/Trident/i.test(Y())&&A(e)&&"fixed"===j(e).position)return null;var n=q(e);for(I(n)&&(n=n.host);A(n)&&["html","body"].indexOf(x(n))<0;){var r=j(n);if("none"!==r.transform||"none"!==r.perspective||"paint"===r.contain||-1!==["transform","perspective"].indexOf(r.willChange)||t&&"filter"===r.willChange||t&&r.filter&&"none"!==r.filter)return n;n=n.parentNode}return null}(e)||t}function $(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function K(e,t,n){return P(e,L(t,n))}function X(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function J(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}var Q={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,l=e.options,c=n.elements.arrow,d=n.modifiersData.popperOffsets,h=N(n.placement),f=$(h),p=[a,s].indexOf(h)>=0?"height":"width";if(c&&d){var m=function(e,t){return X("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:J(e,u))}(l.padding,n),g=W(c),v="y"===f?i:a,y="y"===f?o:s,b=n.rects.reference[p]+n.rects.reference[f]-d[f]-n.rects.popper[p],_=d[f]-n.rects.reference[f],w=G(c),T=w?"y"===f?w.clientHeight||0:w.clientWidth||0:0,E=b/2-_/2,D=m[v],S=T-g[p]-m[y],C=T/2-g[p]/2+E,k=K(D,C,S),x=f;n.modifiersData[r]=((t={})[x]=k,t.centerOffset=k-C,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&U(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ee(e){return e.split("-")[1]}var te={top:"auto",right:"auto",bottom:"auto",left:"auto"};function ne(e){var t,n=e.popper,r=e.popperRect,l=e.placement,u=e.variation,c=e.offsets,h=e.position,f=e.gpuAcceleration,p=e.adaptive,m=e.roundOffsets,g=e.isFixed,v=c.x,y=void 0===v?0:v,b=c.y,_=void 0===b?0:b,w="function"==typeof m?m({x:y,y:_}):{x:y,y:_};y=w.x,_=w.y;var T=c.hasOwnProperty("x"),E=c.hasOwnProperty("y"),D=a,S=i,C=window;if(p){var k=G(n),x="clientHeight",M="clientWidth";if(k===O(n)&&"static"!==j(k=F(n)).position&&"absolute"===h&&(x="scrollHeight",M="scrollWidth"),l===i||(l===a||l===s)&&u===d)S=o,_-=(g&&k===C&&C.visualViewport?C.visualViewport.height:k[x])-r.height,_*=f?1:-1;if(l===a||(l===i||l===o)&&u===d)D=s,y-=(g&&k===C&&C.visualViewport?C.visualViewport.width:k[M])-r.width,y*=f?1:-1}var A,I=Object.assign({position:h},p&&te),R=!0===m?function(e,t){var n=e.x,r=e.y,i=t.devicePixelRatio||1;return{x:H(n*i)/i||0,y:H(r*i)/i||0}}({x:y,y:_},O(n)):{x:y,y:_};return y=R.x,_=R.y,f?Object.assign({},I,((A={})[S]=E?"0":"",A[D]=T?"0":"",A.transform=(C.devicePixelRatio||1)<=1?"translate("+y+"px, "+_+"px)":"translate3d("+y+"px, "+_+"px, 0)",A)):Object.assign({},I,((t={})[S]=E?_+"px":"",t[D]=T?y+"px":"",t.transform="",t))}var re={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(e){var t=e.state,n=e.options,r=n.gpuAcceleration,i=void 0===r||r,o=n.adaptive,s=void 0===o||o,a=n.roundOffsets,l=void 0===a||a,u={placement:N(t.placement),variation:ee(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:i,isFixed:"fixed"===t.options.strategy};null!=t.modifiersData.popperOffsets&&(t.styles.popper=Object.assign({},t.styles.popper,ne(Object.assign({},u,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:s,roundOffsets:l})))),null!=t.modifiersData.arrow&&(t.styles.arrow=Object.assign({},t.styles.arrow,ne(Object.assign({},u,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})},data:{}},ie={passive:!0};var oe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(e){var t=e.state,n=e.instance,r=e.options,i=r.scroll,o=void 0===i||i,s=r.resize,a=void 0===s||s,l=O(t.elements.popper),u=[].concat(t.scrollParents.reference,t.scrollParents.popper);return o&&u.forEach((function(e){e.addEventListener("scroll",n.update,ie)})),a&&l.addEventListener("resize",n.update,ie),function(){o&&u.forEach((function(e){e.removeEventListener("scroll",n.update,ie)})),a&&l.removeEventListener("resize",n.update,ie)}},data:{}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function ae(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var le={start:"end",end:"start"};function ue(e){return e.replace(/start|end/g,(function(e){return le[e]}))}function ce(e){var t=O(e);return{scrollLeft:t.pageXOffset,scrollTop:t.pageYOffset}}function de(e){return V(F(e)).left+ce(e).scrollLeft}function he(e){var t=j(e),n=t.overflow,r=t.overflowX,i=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+i+r)}function fe(e){return["html","body","#document"].indexOf(x(e))>=0?e.ownerDocument.body:A(e)&&he(e)?e:fe(q(e))}function pe(e,t){var n;void 0===t&&(t=[]);var r=fe(e),i=r===(null==(n=e.ownerDocument)?void 0:n.body),o=O(r),s=i?[o].concat(o.visualViewport||[],he(r)?r:[]):r,a=t.concat(s);return i?a:a.concat(pe(q(s)))}function me(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function ge(e,t,n){return t===f?me(function(e,t){var n=O(e),r=F(e),i=n.visualViewport,o=r.clientWidth,s=r.clientHeight,a=0,l=0;if(i){o=i.width,s=i.height;var u=z();(u||!u&&"fixed"===t)&&(a=i.offsetLeft,l=i.offsetTop)}return{width:o,height:s,x:a+de(e),y:l}}(e,n)):M(t)?function(e,t){var n=V(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(t,n):me(function(e){var t,n=F(e),r=ce(e),i=null==(t=e.ownerDocument)?void 0:t.body,o=P(n.scrollWidth,n.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),s=P(n.scrollHeight,n.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),a=-r.scrollLeft+de(e),l=-r.scrollTop;return"rtl"===j(i||n).direction&&(a+=P(n.clientWidth,i?i.clientWidth:0)-o),{width:o,height:s,x:a,y:l}}(F(e)))}function ve(e,t,n,r){var i="clippingParents"===t?function(e){var t=pe(q(e)),n=["absolute","fixed"].indexOf(j(e).position)>=0&&A(e)?G(e):e;return M(n)?t.filter((function(e){return M(e)&&U(e,n)&&"body"!==x(e)})):[]}(e):[].concat(t),o=[].concat(i,[n]),s=o[0],a=o.reduce((function(t,n){var i=ge(e,n,r);return t.top=P(i.top,t.top),t.right=L(i.right,t.right),t.bottom=L(i.bottom,t.bottom),t.left=P(i.left,t.left),t}),ge(e,s,r));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function ye(e){var t,n=e.reference,r=e.element,l=e.placement,u=l?N(l):null,h=l?ee(l):null,f=n.x+n.width/2-r.width/2,p=n.y+n.height/2-r.height/2;switch(u){case i:t={x:f,y:n.y-r.height};break;case o:t={x:f,y:n.y+n.height};break;case s:t={x:n.x+n.width,y:p};break;case a:t={x:n.x-r.width,y:p};break;default:t={x:n.x,y:n.y}}var m=u?$(u):null;if(null!=m){var g="y"===m?"height":"width";switch(h){case c:t[m]=t[m]-(n[g]/2-r[g]/2);break;case d:t[m]=t[m]+(n[g]/2-r[g]/2)}}return t}function be(e,t){void 0===t&&(t={});var n=t,r=n.placement,a=void 0===r?e.placement:r,l=n.strategy,c=void 0===l?e.strategy:l,d=n.boundary,g=void 0===d?h:d,v=n.rootBoundary,y=void 0===v?f:v,b=n.elementContext,_=void 0===b?p:b,w=n.altBoundary,T=void 0!==w&&w,E=n.padding,D=void 0===E?0:E,S=X("number"!=typeof D?D:J(D,u)),C=_===p?m:p,k=e.rects.popper,x=e.elements[T?C:_],O=ve(M(x)?x:x.contextElement||F(e.elements.popper),g,y,c),A=V(e.elements.reference),I=ye({reference:A,element:k,strategy:"absolute",placement:a}),R=me(Object.assign({},k,I)),N=_===p?R:A,P={top:O.top-N.top+S.top,bottom:N.bottom-O.bottom+S.bottom,left:O.left-N.left+S.left,right:N.right-O.right+S.right},L=e.modifiersData.offset;if(_===p&&L){var H=L[a];Object.keys(P).forEach((function(e){var t=[s,o].indexOf(e)>=0?1:-1,n=[i,o].indexOf(e)>=0?"y":"x";P[e]+=H[n]*t}))}return P}var _e={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var d=n.mainAxis,h=void 0===d||d,f=n.altAxis,p=void 0===f||f,m=n.fallbackPlacements,y=n.padding,b=n.boundary,_=n.rootBoundary,w=n.altBoundary,T=n.flipVariations,E=void 0===T||T,D=n.allowedAutoPlacements,S=t.options.placement,C=N(S),k=m||(C===S||!E?[ae(S)]:function(e){if(N(e)===l)return[];var t=ae(e);return[ue(e),t,ue(t)]}(S)),x=[S].concat(k).reduce((function(e,n){return e.concat(N(n)===l?function(e,t){void 0===t&&(t={});var n=t,r=n.placement,i=n.boundary,o=n.rootBoundary,s=n.padding,a=n.flipVariations,l=n.allowedAutoPlacements,c=void 0===l?v:l,d=ee(r),h=d?a?g:g.filter((function(e){return ee(e)===d})):u,f=h.filter((function(e){return c.indexOf(e)>=0}));0===f.length&&(f=h);var p=f.reduce((function(t,n){return t[n]=be(e,{placement:n,boundary:i,rootBoundary:o,padding:s})[N(n)],t}),{});return Object.keys(p).sort((function(e,t){return p[e]-p[t]}))}(t,{placement:n,boundary:b,rootBoundary:_,padding:y,flipVariations:E,allowedAutoPlacements:D}):n)}),[]),O=t.rects.reference,M=t.rects.popper,A=new Map,I=!0,R=x[0],P=0;P=0,V=z?"width":"height",W=be(t,{placement:L,boundary:b,rootBoundary:_,altBoundary:w,padding:y}),U=z?Y?s:a:Y?o:i;O[V]>M[V]&&(U=ae(U));var j=ae(U),B=[];if(h&&B.push(W[H]<=0),p&&B.push(W[U]<=0,W[j]<=0),B.every((function(e){return e}))){R=L,I=!1;break}A.set(L,B)}if(I)for(var F=function(e){var t=x.find((function(t){var n=A.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return R=t,"break"},q=E?3:1;q>0;q--){if("break"===F(q))break}t.placement!==R&&(t.modifiersData[r]._skip=!0,t.placement=R,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function we(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Te(e){return[i,s,o,a].some((function(t){return e[t]>=0}))}var Ee={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,i=t.rects.popper,o=t.modifiersData.preventOverflow,s=be(t,{elementContext:"reference"}),a=be(t,{altBoundary:!0}),l=we(s,r),u=we(a,i,o),c=Te(l),d=Te(u);t.modifiersData[n]={referenceClippingOffsets:l,popperEscapeOffsets:u,isReferenceHidden:c,hasPopperEscaped:d},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":c,"data-popper-escaped":d})}};var De={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.offset,l=void 0===o?[0,0]:o,u=v.reduce((function(e,n){return e[n]=function(e,t,n){var r=N(e),o=[a,i].indexOf(r)>=0?-1:1,l="function"==typeof n?n(Object.assign({},t,{placement:e})):n,u=l[0],c=l[1];return u=u||0,c=(c||0)*o,[a,s].indexOf(r)>=0?{x:c,y:u}:{x:u,y:c}}(n,t.rects,l),e}),{}),c=u[t.placement],d=c.x,h=c.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=d,t.modifiersData.popperOffsets.y+=h),t.modifiersData[r]=u}};var Se={name:"popperOffsets",enabled:!0,phase:"read",fn:function(e){var t=e.state,n=e.name;t.modifiersData[n]=ye({reference:t.rects.reference,element:t.rects.popper,strategy:"absolute",placement:t.placement})},data:{}};var Ce={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,l=n.mainAxis,u=void 0===l||l,d=n.altAxis,h=void 0!==d&&d,f=n.boundary,p=n.rootBoundary,m=n.altBoundary,g=n.padding,v=n.tether,y=void 0===v||v,b=n.tetherOffset,_=void 0===b?0:b,w=be(t,{boundary:f,rootBoundary:p,padding:g,altBoundary:m}),T=N(t.placement),E=ee(t.placement),D=!E,S=$(T),C="x"===S?"y":"x",k=t.modifiersData.popperOffsets,x=t.rects.reference,O=t.rects.popper,M="function"==typeof _?_(Object.assign({},t.rects,{placement:t.placement})):_,A="number"==typeof M?{mainAxis:M,altAxis:M}:Object.assign({mainAxis:0,altAxis:0},M),I=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,R={x:0,y:0};if(k){if(u){var H,Y="y"===S?i:a,z="y"===S?o:s,V="y"===S?"height":"width",U=k[S],j=U+w[Y],B=U-w[z],F=y?-O[V]/2:0,q=E===c?x[V]:O[V],Z=E===c?-O[V]:-x[V],X=t.elements.arrow,J=y&&X?W(X):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=Q[Y],ne=Q[z],re=K(0,x[V],J[V]),ie=D?x[V]/2-F-re-te-A.mainAxis:q-re-te-A.mainAxis,oe=D?-x[V]/2+F+re+ne+A.mainAxis:Z+re+ne+A.mainAxis,se=t.elements.arrow&&G(t.elements.arrow),ae=se?"y"===S?se.clientTop||0:se.clientLeft||0:0,le=null!=(H=null==I?void 0:I[S])?H:0,ue=U+oe-le,ce=K(y?L(j,U+ie-le-ae):j,U,y?P(B,ue):B);k[S]=ce,R[S]=ce-U}if(h){var de,he="x"===S?i:a,fe="x"===S?o:s,pe=k[C],me="y"===C?"height":"width",ge=pe+w[he],ve=pe-w[fe],ye=-1!==[i,a].indexOf(T),_e=null!=(de=null==I?void 0:I[C])?de:0,we=ye?ge:pe-x[me]-O[me]-_e+A.altAxis,Te=ye?pe+x[me]+O[me]-_e-A.altAxis:ve,Ee=y&&ye?function(e,t,n){var r=K(e,t,n);return r>n?n:r}(we,pe,Te):K(y?we:ge,pe,y?Te:ve);k[C]=Ee,R[C]=Ee-pe}t.modifiersData[r]=R}},requiresIfExists:["offset"]};function ke(e,t,n){void 0===n&&(n=!1);var r,i,o=A(t),s=A(t)&&function(e){var t=e.getBoundingClientRect(),n=H(t.width)/e.offsetWidth||1,r=H(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(t),a=F(t),l=V(e,s,n),u={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(o||!o&&!n)&&(("body"!==x(t)||he(a))&&(u=(r=t)!==O(r)&&A(r)?{scrollLeft:(i=r).scrollLeft,scrollTop:i.scrollTop}:ce(r)),A(t)?((c=V(t,!0)).x+=t.clientLeft,c.y+=t.clientTop):a&&(c.x=de(a))),{x:l.left+u.scrollLeft-c.x,y:l.top+u.scrollTop-c.y,width:l.width,height:l.height}}function xe(e){var t=new Map,n=new Set,r=[];function i(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&i(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||i(e)})),r}var Oe={placement:"bottom",modifiers:[],strategy:"absolute"};function Me(){for(var e=arguments.length,t=new Array(e),n=0;nPe.has(e)&&Pe.get(e).get(t)||null,remove(e,t){if(!Pe.has(e))return;const n=Pe.get(e);n.delete(t),0===n.size&&Pe.delete(e)}},He="transitionend",Ye=e=>(e&&window.CSS&&window.CSS.escape&&(e=e.replace(/#([^\s"#']+)/g,((e,t)=>`#${CSS.escape(t)}`))),e),ze=e=>{e.dispatchEvent(new Event(He))},Ve=e=>!(!e||"object"!=typeof e)&&(void 0!==e.jquery&&(e=e[0]),void 0!==e.nodeType),We=e=>Ve(e)?e.jquery?e[0]:e:"string"==typeof e&&e.length>0?document.querySelector(Ye(e)):null,Ue=e=>{if(!Ve(e)||0===e.getClientRects().length)return!1;const t="visible"===getComputedStyle(e).getPropertyValue("visibility"),n=e.closest("details:not([open])");if(!n)return t;if(n!==e){const t=e.closest("summary");if(t&&t.parentNode!==n)return!1;if(null===t)return!1}return t},je=e=>!e||e.nodeType!==Node.ELEMENT_NODE||(!!e.classList.contains("disabled")||(void 0!==e.disabled?e.disabled:e.hasAttribute("disabled")&&"false"!==e.getAttribute("disabled"))),Be=e=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof e.getRootNode){const t=e.getRootNode();return t instanceof ShadowRoot?t:null}return e instanceof ShadowRoot?e:e.parentNode?Be(e.parentNode):null},Fe=()=>{},qe=e=>{e.offsetHeight},Ze=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,Ge=[],$e=()=>"rtl"===document.documentElement.dir,Ke=e=>{var t;t=()=>{const t=Ze();if(t){const n=e.NAME,r=t.fn[n];t.fn[n]=e.jQueryInterface,t.fn[n].Constructor=e,t.fn[n].noConflict=()=>(t.fn[n]=r,e.jQueryInterface)}},"loading"===document.readyState?(Ge.length||document.addEventListener("DOMContentLoaded",(()=>{for(const e of Ge)e()})),Ge.push(t)):t()},Xe=(e,t=[],n=e)=>"function"==typeof e?e.call(...t):n,Je=(e,t,n=!0)=>{if(!n)return void Xe(e);const r=(e=>{if(!e)return 0;let{transitionDuration:t,transitionDelay:n}=window.getComputedStyle(e);const r=Number.parseFloat(t),i=Number.parseFloat(n);return r||i?(t=t.split(",")[0],n=n.split(",")[0],1e3*(Number.parseFloat(t)+Number.parseFloat(n))):0})(t)+5;let i=!1;const o=({target:n})=>{n===t&&(i=!0,t.removeEventListener(He,o),Xe(e))};t.addEventListener(He,o),setTimeout((()=>{i||ze(t)}),r)},Qe=(e,t,n,r)=>{const i=e.length;let o=e.indexOf(t);return-1===o?!n&&r?e[i-1]:e[0]:(o+=n?1:-1,r&&(o=(o+i)%i),e[Math.max(0,Math.min(o,i-1))])},et=/[^.]*(?=\..*)\.|.*/,tt=/\..*/,nt=/::\d+$/,rt={};let it=1;const ot={mouseenter:"mouseover",mouseleave:"mouseout"},st=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 at(e,t){return t&&`${t}::${it++}`||e.uidEvent||it++}function lt(e){const t=at(e);return e.uidEvent=t,rt[t]=rt[t]||{},rt[t]}function ut(e,t,n=null){return Object.values(e).find((e=>e.callable===t&&e.delegationSelector===n))}function ct(e,t,n){const r="string"==typeof t,i=r?n:t||n;let o=pt(e);return st.has(o)||(o=e),[r,i,o]}function dt(e,t,n,r,i){if("string"!=typeof t||!e)return;let[o,s,a]=ct(t,n,r);if(t in ot){const e=e=>function(t){if(!t.relatedTarget||t.relatedTarget!==t.delegateTarget&&!t.delegateTarget.contains(t.relatedTarget))return e.call(this,t)};s=e(s)}const l=lt(e),u=l[a]||(l[a]={}),c=ut(u,s,o?n:null);if(c)return void(c.oneOff=c.oneOff&&i);const d=at(s,t.replace(et,"")),h=o?function(e,t,n){return function r(i){const o=e.querySelectorAll(t);for(let{target:s}=i;s&&s!==this;s=s.parentNode)for(const a of o)if(a===s)return gt(i,{delegateTarget:s}),r.oneOff&&mt.off(e,i.type,t,n),n.apply(s,[i])}}(e,n,s):function(e,t){return function n(r){return gt(r,{delegateTarget:e}),n.oneOff&&mt.off(e,r.type,t),t.apply(e,[r])}}(e,s);h.delegationSelector=o?n:null,h.callable=s,h.oneOff=i,h.uidEvent=d,u[d]=h,e.addEventListener(a,h,o)}function ht(e,t,n,r,i){const o=ut(t[n],r,i);o&&(e.removeEventListener(n,o,Boolean(i)),delete t[n][o.uidEvent])}function ft(e,t,n,r){const i=t[n]||{};for(const[o,s]of Object.entries(i))o.includes(r)&&ht(e,t,n,s.callable,s.delegationSelector)}function pt(e){return e=e.replace(tt,""),ot[e]||e}const mt={on(e,t,n,r){dt(e,t,n,r,!1)},one(e,t,n,r){dt(e,t,n,r,!0)},off(e,t,n,r){if("string"!=typeof t||!e)return;const[i,o,s]=ct(t,n,r),a=s!==t,l=lt(e),u=l[s]||{},c=t.startsWith(".");if(void 0===o){if(c)for(const n of Object.keys(l))ft(e,l,n,t.slice(1));for(const[n,r]of Object.entries(u)){const i=n.replace(nt,"");a&&!t.includes(i)||ht(e,l,s,r.callable,r.delegationSelector)}}else{if(!Object.keys(u).length)return;ht(e,l,s,o,i?n:null)}},trigger(e,t,n){if("string"!=typeof t||!e)return null;const r=Ze();let i=null,o=!0,s=!0,a=!1;t!==pt(t)&&r&&(i=r.Event(t,n),r(e).trigger(i),o=!i.isPropagationStopped(),s=!i.isImmediatePropagationStopped(),a=i.isDefaultPrevented());const l=gt(new Event(t,{bubbles:o,cancelable:!0}),n);return a&&l.preventDefault(),s&&e.dispatchEvent(l),l.defaultPrevented&&i&&i.preventDefault(),l}};function gt(e,t={}){for(const[n,r]of Object.entries(t))try{e[n]=r}catch(t){Object.defineProperty(e,n,{configurable:!0,get:()=>r})}return e}function vt(e){if("true"===e)return!0;if("false"===e)return!1;if(e===Number(e).toString())return Number(e);if(""===e||"null"===e)return null;if("string"!=typeof e)return e;try{return JSON.parse(decodeURIComponent(e))}catch(t){return e}}function yt(e){return e.replace(/[A-Z]/g,(e=>`-${e.toLowerCase()}`))}const bt={setDataAttribute(e,t,n){e.setAttribute(`data-bs-${yt(t)}`,n)},removeDataAttribute(e,t){e.removeAttribute(`data-bs-${yt(t)}`)},getDataAttributes(e){if(!e)return{};const t={},n=Object.keys(e.dataset).filter((e=>e.startsWith("bs")&&!e.startsWith("bsConfig")));for(const r of n){let n=r.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1),t[n]=vt(e.dataset[r])}return t},getDataAttribute:(e,t)=>vt(e.getAttribute(`data-bs-${yt(t)}`))};class _t{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const n=Ve(t)?bt.getDataAttribute(t,"config"):{};return{...this.constructor.Default,..."object"==typeof n?n:{},...Ve(t)?bt.getDataAttributes(t):{},..."object"==typeof e?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[r,i]of Object.entries(t)){const t=e[r],o=Ve(t)?"element":null==(n=t)?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(i).test(o))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${r}" provided type "${o}" but expected type "${i}".`)}var n}}class wt extends _t{constructor(e,t){super(),(e=We(e))&&(this._element=e,this._config=this._getConfig(t),Le.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Le.remove(this._element,this.constructor.DATA_KEY),mt.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,n=!0){Je(e,t,n)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Le.get(We(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,"object"==typeof t?t:null)}static get VERSION(){return"5.3.8"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const Tt=e=>{let t=e.getAttribute("data-bs-target");if(!t||"#"===t){let n=e.getAttribute("href");if(!n||!n.includes("#")&&!n.startsWith("."))return null;n.includes("#")&&!n.startsWith("#")&&(n=`#${n.split("#")[1]}`),t=n&&"#"!==n?n.trim():null}return t?t.split(",").map((e=>Ye(e))).join(","):null},Et={find:(e,t=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(t,e)),findOne:(e,t=document.documentElement)=>Element.prototype.querySelector.call(t,e),children:(e,t)=>[].concat(...e.children).filter((e=>e.matches(t))),parents(e,t){const n=[];let r=e.parentNode.closest(t);for(;r;)n.push(r),r=r.parentNode.closest(t);return n},prev(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return[n];n=n.previousElementSibling}return[]},next(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return[n];n=n.nextElementSibling}return[]},focusableChildren(e){const t=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((e=>`${e}:not([tabindex^="-"])`)).join(",");return this.find(t,e).filter((e=>!je(e)&&Ue(e)))},getSelectorFromElement(e){const t=Tt(e);return t&&Et.findOne(t)?t:null},getElementFromSelector(e){const t=Tt(e);return t?Et.findOne(t):null},getMultipleElementsFromSelector(e){const t=Tt(e);return t?Et.find(t):[]}},Dt=(e,t="hide")=>{const n=`click.dismiss${e.EVENT_KEY}`,r=e.NAME;mt.on(document,n,`[data-bs-dismiss="${r}"]`,(function(n){if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),je(this))return;const i=Et.getElementFromSelector(this)||this.closest(`.${r}`);e.getOrCreateInstance(i)[t]()}))};class St extends wt{static get NAME(){return"alert"}close(){if(mt.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const e=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,e)}_destroyElement(){this._element.remove(),mt.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(e){return this.each((function(){const t=St.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}Dt(St,"close"),Ke(St);const Ct='[data-bs-toggle="button"]';class kt extends wt{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(e){return this.each((function(){const t=kt.getOrCreateInstance(this);"toggle"===e&&t[e]()}))}}mt.on(document,"click.bs.button.data-api",Ct,(e=>{e.preventDefault();const t=e.target.closest(Ct);kt.getOrCreateInstance(t).toggle()})),Ke(kt);const xt=".bs.swipe",Ot={endCallback:null,leftCallback:null,rightCallback:null},Mt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class At extends _t{constructor(e,t){super(),this._element=e,e&&At.isSupported()&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return Ot}static get DefaultType(){return Mt}static get NAME(){return"swipe"}dispose(){mt.off(this._element,xt)}_start(e){this._supportPointerEvents?this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX):this._deltaX=e.touches[0].clientX}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),Xe(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=40)return;const t=e/this._deltaX;this._deltaX=0,t&&Xe(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(mt.on(this._element,"pointerdown.bs.swipe",(e=>this._start(e))),mt.on(this._element,"pointerup.bs.swipe",(e=>this._end(e))),this._element.classList.add("pointer-event")):(mt.on(this._element,"touchstart.bs.swipe",(e=>this._start(e))),mt.on(this._element,"touchmove.bs.swipe",(e=>this._move(e))),mt.on(this._element,"touchend.bs.swipe",(e=>this._end(e))))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&("pen"===e.pointerType||"touch"===e.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const It="next",Rt="prev",Nt="left",Pt="right",Lt="slid.bs.carousel",Ht="carousel",Yt="active",zt=".active",Vt=".carousel-item",Wt={ArrowLeft:Pt,ArrowRight:Nt},Ut={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},jt={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Bt extends wt{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=Et.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===Ht&&this.cycle()}static get Default(){return Ut}static get DefaultType(){return jt}static get NAME(){return"carousel"}next(){this._slide(It)}nextWhenVisible(){!document.hidden&&Ue(this._element)&&this.next()}prev(){this._slide(Rt)}pause(){this._isSliding&&ze(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?mt.one(this._element,Lt,(()=>this.cycle())):this.cycle())}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding)return void mt.one(this._element,Lt,(()=>this.to(e)));const n=this._getItemIndex(this._getActive());if(n===e)return;const r=e>n?It:Rt;this._slide(r,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&mt.on(this._element,"keydown.bs.carousel",(e=>this._keydown(e))),"hover"===this._config.pause&&(mt.on(this._element,"mouseenter.bs.carousel",(()=>this.pause())),mt.on(this._element,"mouseleave.bs.carousel",(()=>this._maybeEnableCycle()))),this._config.touch&&At.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const e of Et.find(".carousel-item img",this._element))mt.on(e,"dragstart.bs.carousel",(e=>e.preventDefault()));const e={leftCallback:()=>this._slide(this._directionToOrder(Nt)),rightCallback:()=>this._slide(this._directionToOrder(Pt)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new At(this._element,e)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=Wt[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=Et.findOne(zt,this._indicatorsElement);t.classList.remove(Yt),t.removeAttribute("aria-current");const n=Et.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);n&&(n.classList.add(Yt),n.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const n=this._getActive(),r=e===It,i=t||Qe(this._getItems(),n,r,this._config.wrap);if(i===n)return;const o=this._getItemIndex(i),s=t=>mt.trigger(this._element,t,{relatedTarget:i,direction:this._orderToDirection(e),from:this._getItemIndex(n),to:o});if(s("slide.bs.carousel").defaultPrevented)return;if(!n||!i)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=i;const l=r?"carousel-item-start":"carousel-item-end",u=r?"carousel-item-next":"carousel-item-prev";i.classList.add(u),qe(i),n.classList.add(l),i.classList.add(l);this._queueCallback((()=>{i.classList.remove(l,u),i.classList.add(Yt),n.classList.remove(Yt,u,l),this._isSliding=!1,s(Lt)}),n,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return Et.findOne(".active.carousel-item",this._element)}_getItems(){return Et.find(Vt,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return $e()?e===Nt?Rt:It:e===Nt?It:Rt}_orderToDirection(e){return $e()?e===Rt?Nt:Pt:e===Rt?Pt:Nt}static jQueryInterface(e){return this.each((function(){const t=Bt.getOrCreateInstance(this,e);if("number"!=typeof e){if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}else t.to(e)}))}}mt.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",(function(e){const t=Et.getElementFromSelector(this);if(!t||!t.classList.contains(Ht))return;e.preventDefault();const n=Bt.getOrCreateInstance(t),r=this.getAttribute("data-bs-slide-to");return r?(n.to(r),void n._maybeEnableCycle()):"next"===bt.getDataAttribute(this,"slide")?(n.next(),void n._maybeEnableCycle()):(n.prev(),void n._maybeEnableCycle())})),mt.on(window,"load.bs.carousel.data-api",(()=>{const e=Et.find('[data-bs-ride="carousel"]');for(const t of e)Bt.getOrCreateInstance(t)})),Ke(Bt);const Ft="show",qt="collapse",Zt="collapsing",Gt='[data-bs-toggle="collapse"]',$t={parent:null,toggle:!0},Kt={parent:"(null|element)",toggle:"boolean"};class Xt extends wt{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const n=Et.find(Gt);for(const e of n){const t=Et.getSelectorFromElement(e),n=Et.find(t).filter((e=>e===this._element));null!==t&&n.length&&this._triggerArray.push(e)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return $t}static get DefaultType(){return Kt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((e=>e!==this._element)).map((e=>Xt.getOrCreateInstance(e,{toggle:!1})))),e.length&&e[0]._isTransitioning)return;if(mt.trigger(this._element,"show.bs.collapse").defaultPrevented)return;for(const t of e)t.hide();const t=this._getDimension();this._element.classList.remove(qt),this._element.classList.add(Zt),this._element.style[t]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const n=`scroll${t[0].toUpperCase()+t.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Zt),this._element.classList.add(qt,Ft),this._element.style[t]="",mt.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[t]=`${this._element[n]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(mt.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const e=this._getDimension();this._element.style[e]=`${this._element.getBoundingClientRect()[e]}px`,qe(this._element),this._element.classList.add(Zt),this._element.classList.remove(qt,Ft);for(const e of this._triggerArray){const t=Et.getElementFromSelector(e);t&&!this._isShown(t)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0;this._element.style[e]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Zt),this._element.classList.add(qt),mt.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(e=this._element){return e.classList.contains(Ft)}_configAfterMerge(e){return e.toggle=Boolean(e.toggle),e.parent=We(e.parent),e}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(Gt);for(const t of e){const e=Et.getElementFromSelector(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}}_getFirstLevelChildren(e){const t=Et.find(":scope .collapse .collapse",this._config.parent);return Et.find(e,this._config.parent).filter((e=>!t.includes(e)))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const n of e)n.classList.toggle("collapsed",!t),n.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return"string"==typeof e&&/show|hide/.test(e)&&(t.toggle=!1),this.each((function(){const n=Xt.getOrCreateInstance(this,t);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e]()}}))}}mt.on(document,"click.bs.collapse.data-api",Gt,(function(e){("A"===e.target.tagName||e.delegateTarget&&"A"===e.delegateTarget.tagName)&&e.preventDefault();for(const e of Et.getMultipleElementsFromSelector(this))Xt.getOrCreateInstance(e,{toggle:!1}).toggle()})),Ke(Xt);const Jt="dropdown",Qt="ArrowUp",en="ArrowDown",tn="click.bs.dropdown.data-api",nn="keydown.bs.dropdown.data-api",rn="show",on='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',sn=`${on}.show`,an=".dropdown-menu",ln=$e()?"top-end":"top-start",un=$e()?"top-start":"top-end",cn=$e()?"bottom-end":"bottom-start",dn=$e()?"bottom-start":"bottom-end",hn=$e()?"left-start":"right-start",fn=$e()?"right-start":"left-start",pn={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},mn={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class gn extends wt{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=Et.next(this._element,an)[0]||Et.prev(this._element,an)[0]||Et.findOne(an,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return pn}static get DefaultType(){return mn}static get NAME(){return Jt}toggle(){return this._isShown()?this.hide():this.show()}show(){if(je(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!mt.trigger(this._element,"show.bs.dropdown",e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(".navbar-nav"))for(const e of[].concat(...document.body.children))mt.on(e,"mouseover",Fe);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(rn),this._element.classList.add(rn),mt.trigger(this._element,"shown.bs.dropdown",e)}}hide(){if(je(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!mt.trigger(this._element,"hide.bs.dropdown",e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))mt.off(e,"mouseover",Fe);this._popper&&this._popper.destroy(),this._menu.classList.remove(rn),this._element.classList.remove(rn),this._element.setAttribute("aria-expanded","false"),bt.removeDataAttribute(this._menu,"popper"),mt.trigger(this._element,"hidden.bs.dropdown",e)}}_getConfig(e){if("object"==typeof(e=super._getConfig(e)).reference&&!Ve(e.reference)&&"function"!=typeof e.reference.getBoundingClientRect)throw new TypeError(`${Jt.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(void 0===r)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org/docs/v2/)");let e=this._element;"parent"===this._config.reference?e=this._parent:Ve(this._config.reference)?e=We(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=Re(e,this._menu,t)}_isShown(){return this._menu.classList.contains(rn)}_getPlacement(){const e=this._parent;if(e.classList.contains("dropend"))return hn;if(e.classList.contains("dropstart"))return fn;if(e.classList.contains("dropup-center"))return"top";if(e.classList.contains("dropdown-center"))return"bottom";const t="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return e.classList.contains("dropup")?t?un:ln:t?dn:cn}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(bt.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...Xe(this._config.popperConfig,[void 0,e])}}_selectMenuItem({key:e,target:t}){const n=Et.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((e=>Ue(e)));n.length&&Qe(n,t,e===en,!n.includes(t)).focus()}static jQueryInterface(e){return this.each((function(){const t=gn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}static clearMenus(e){if(2===e.button||"keyup"===e.type&&"Tab"!==e.key)return;const t=Et.find(sn);for(const n of t){const t=gn.getInstance(n);if(!t||!1===t._config.autoClose)continue;const r=e.composedPath(),i=r.includes(t._menu);if(r.includes(t._element)||"inside"===t._config.autoClose&&!i||"outside"===t._config.autoClose&&i)continue;if(t._menu.contains(e.target)&&("keyup"===e.type&&"Tab"===e.key||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const o={relatedTarget:t._element};"click"===e.type&&(o.clickEvent=e),t._completeHide(o)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),n="Escape"===e.key,r=[Qt,en].includes(e.key);if(!r&&!n)return;if(t&&!n)return;e.preventDefault();const i=this.matches(on)?this:Et.prev(this,on)[0]||Et.next(this,on)[0]||Et.findOne(on,e.delegateTarget.parentNode),o=gn.getOrCreateInstance(i);if(r)return e.stopPropagation(),o.show(),void o._selectMenuItem(e);o._isShown()&&(e.stopPropagation(),o.hide(),i.focus())}}mt.on(document,nn,on,gn.dataApiKeydownHandler),mt.on(document,nn,an,gn.dataApiKeydownHandler),mt.on(document,tn,gn.clearMenus),mt.on(document,"keyup.bs.dropdown.data-api",gn.clearMenus),mt.on(document,tn,on,(function(e){e.preventDefault(),gn.getOrCreateInstance(this).toggle()})),Ke(gn);const vn="backdrop",yn="show",bn="mousedown.bs.backdrop",_n={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},wn={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Tn extends _t{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return _n}static get DefaultType(){return wn}static get NAME(){return vn}show(e){if(!this._config.isVisible)return void Xe(e);this._append();const t=this._getElement();this._config.isAnimated&&qe(t),t.classList.add(yn),this._emulateAnimation((()=>{Xe(e)}))}hide(e){this._config.isVisible?(this._getElement().classList.remove(yn),this._emulateAnimation((()=>{this.dispose(),Xe(e)}))):Xe(e)}dispose(){this._isAppended&&(mt.off(this._element,bn),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add("fade"),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=We(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),mt.on(e,bn,(()=>{Xe(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(e){Je(e,this._getElement(),this._config.isAnimated)}}const En=".bs.focustrap",Dn="backward",Sn={autofocus:!0,trapElement:null},Cn={autofocus:"boolean",trapElement:"element"};class kn extends _t{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Sn}static get DefaultType(){return Cn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),mt.off(document,En),mt.on(document,"focusin.bs.focustrap",(e=>this._handleFocusin(e))),mt.on(document,"keydown.tab.bs.focustrap",(e=>this._handleKeydown(e))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,mt.off(document,En))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const n=Et.focusableChildren(t);0===n.length?t.focus():this._lastTabNavDirection===Dn?n[n.length-1].focus():n[0].focus()}_handleKeydown(e){"Tab"===e.key&&(this._lastTabNavDirection=e.shiftKey?Dn:"forward")}}const xn=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",On=".sticky-top",Mn="padding-right",An="margin-right";class In{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,Mn,(t=>t+e)),this._setElementAttributes(xn,Mn,(t=>t+e)),this._setElementAttributes(On,An,(t=>t-e))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,Mn),this._resetElementAttributes(xn,Mn),this._resetElementAttributes(On,An)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,n){const r=this.getWidth();this._applyManipulationCallback(e,(e=>{if(e!==this._element&&window.innerWidth>e.clientWidth+r)return;this._saveInitialAttribute(e,t);const i=window.getComputedStyle(e).getPropertyValue(t);e.style.setProperty(t,`${n(Number.parseFloat(i))}px`)}))}_saveInitialAttribute(e,t){const n=e.style.getPropertyValue(t);n&&bt.setDataAttribute(e,t,n)}_resetElementAttributes(e,t){this._applyManipulationCallback(e,(e=>{const n=bt.getDataAttribute(e,t);null!==n?(bt.removeDataAttribute(e,t),e.style.setProperty(t,n)):e.style.removeProperty(t)}))}_applyManipulationCallback(e,t){if(Ve(e))t(e);else for(const n of Et.find(e,this._element))t(n)}}const Rn=".bs.modal",Nn="hidden.bs.modal",Pn="show.bs.modal",Ln="modal-open",Hn="show",Yn="modal-static",zn={backdrop:!0,focus:!0,keyboard:!0},Vn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Wn extends wt{constructor(e,t){super(e,t),this._dialog=Et.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new In,this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Vn}static get NAME(){return"modal"}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown||this._isTransitioning)return;mt.trigger(this._element,Pn,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(Ln),this._adjustDialog(),this._backdrop.show((()=>this._showElement(e))))}hide(){if(!this._isShown||this._isTransitioning)return;mt.trigger(this._element,"hide.bs.modal").defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(Hn),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated()))}dispose(){mt.off(window,Rn),mt.off(this._dialog,Rn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Tn({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new kn({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=Et.findOne(".modal-body",this._dialog);t&&(t.scrollTop=0),qe(this._element),this._element.classList.add(Hn);this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,mt.trigger(this._element,"shown.bs.modal",{relatedTarget:e})}),this._dialog,this._isAnimated())}_addEventListeners(){mt.on(this._element,"keydown.dismiss.bs.modal",(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),mt.on(window,"resize.bs.modal",(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),mt.on(this._element,"mousedown.dismiss.bs.modal",(e=>{mt.one(this._element,"click.dismiss.bs.modal",(t=>{this._element===e.target&&this._element===t.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_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(Ln),this._resetAdjustments(),this._scrollBar.reset(),mt.trigger(this._element,Nn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(mt.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._element.style.overflowY;"hidden"===t||this._element.classList.contains(Yn)||(e||(this._element.style.overflowY="hidden"),this._element.classList.add(Yn),this._queueCallback((()=>{this._element.classList.remove(Yn),this._queueCallback((()=>{this._element.style.overflowY=t}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),n=t>0;if(n&&!e){const e=$e()?"paddingLeft":"paddingRight";this._element.style[e]=`${t}px`}if(!n&&e){const e=$e()?"paddingRight":"paddingLeft";this._element.style[e]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each((function(){const n=Wn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===n[e])throw new TypeError(`No method named "${e}"`);n[e](t)}}))}}mt.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(e){const t=Et.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&e.preventDefault(),mt.one(t,Pn,(e=>{e.defaultPrevented||mt.one(t,Nn,(()=>{Ue(this)&&this.focus()}))}));const n=Et.findOne(".modal.show");n&&Wn.getInstance(n).hide();Wn.getOrCreateInstance(t).toggle(this)})),Dt(Wn),Ke(Wn);const Un="show",jn="showing",Bn="hiding",Fn=".offcanvas.show",qn="hidePrevented.bs.offcanvas",Zn="hidden.bs.offcanvas",Gn={backdrop:!0,keyboard:!0,scroll:!1},$n={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Kn extends wt{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Gn}static get DefaultType(){return $n}static get NAME(){return"offcanvas"}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown)return;if(mt.trigger(this._element,"show.bs.offcanvas",{relatedTarget:e}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||(new In).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(jn);this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Un),this._element.classList.remove(jn),mt.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:e})}),this._element,!0)}hide(){if(!this._isShown)return;if(mt.trigger(this._element,"hide.bs.offcanvas").defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(Bn),this._backdrop.hide();this._queueCallback((()=>{this._element.classList.remove(Un,Bn),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new In).reset(),mt.trigger(this._element,Zn)}),this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=Boolean(this._config.backdrop);return new Tn({className:"offcanvas-backdrop",isVisible:e,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:e?()=>{"static"!==this._config.backdrop?this.hide():mt.trigger(this._element,qn)}:null})}_initializeFocusTrap(){return new kn({trapElement:this._element})}_addEventListeners(){mt.on(this._element,"keydown.dismiss.bs.offcanvas",(e=>{"Escape"===e.key&&(this._config.keyboard?this.hide():mt.trigger(this._element,qn))}))}static jQueryInterface(e){return this.each((function(){const t=Kn.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}mt.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(e){const t=Et.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&e.preventDefault(),je(this))return;mt.one(t,Zn,(()=>{Ue(this)&&this.focus()}));const n=Et.findOne(Fn);n&&n!==t&&Kn.getInstance(n).hide();Kn.getOrCreateInstance(t).toggle(this)})),mt.on(window,"load.bs.offcanvas.data-api",(()=>{for(const e of Et.find(Fn))Kn.getOrCreateInstance(e).show()})),mt.on(window,"resize.bs.offcanvas",(()=>{for(const e of Et.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(e).position&&Kn.getOrCreateInstance(e).hide()})),Dt(Kn),Ke(Kn);const Xn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Jn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,er=(e,t)=>{const n=e.nodeName.toLowerCase();return t.includes(n)?!Jn.has(n)||Boolean(Qn.test(e.nodeValue)):t.filter((e=>e instanceof RegExp)).some((e=>e.test(n)))};const tr={allowList:Xn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},nr={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},rr={entry:"(string|element|function|null)",selector:"(string|element)"};class ir extends _t{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return tr}static get DefaultType(){return nr}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((e=>this._resolvePossibleFunction(e))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[t,n]of Object.entries(this._config.content))this._setContent(e,n,t);const t=e.children[0],n=this._resolvePossibleFunction(this._config.extraClass);return n&&t.classList.add(...n.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,n]of Object.entries(e))super._typeCheckConfig({selector:t,entry:n},rr)}_setContent(e,t,n){const r=Et.findOne(n,e);r&&((t=this._resolvePossibleFunction(t))?Ve(t)?this._putElementInTemplate(We(t),r):this._config.html?r.innerHTML=this._maybeSanitize(t):r.textContent=t:r.remove())}_maybeSanitize(e){return this._config.sanitize?function(e,t,n){if(!e.length)return e;if(n&&"function"==typeof n)return n(e);const r=(new window.DOMParser).parseFromString(e,"text/html"),i=[].concat(...r.body.querySelectorAll("*"));for(const e of i){const n=e.nodeName.toLowerCase();if(!Object.keys(t).includes(n)){e.remove();continue}const r=[].concat(...e.attributes),i=[].concat(t["*"]||[],t[n]||[]);for(const t of r)er(t,i)||e.removeAttribute(t.nodeName)}return r.body.innerHTML}(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return Xe(e,[void 0,this])}_putElementInTemplate(e,t){if(this._config.html)return t.innerHTML="",void t.append(e);t.textContent=e.textContent}}const or=new Set(["sanitize","allowList","sanitizeFn"]),sr="fade",ar="show",lr=".modal",ur="hide.bs.modal",cr="hover",dr="focus",hr={AUTO:"auto",TOP:"top",RIGHT:$e()?"left":"right",BOTTOM:"bottom",LEFT:$e()?"right":"left"},fr={allowList:Xn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},pr={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class mr extends wt{constructor(e,t){if(void 0===r)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org/docs/v2/)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return fr}static get DefaultType(){return pr}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),mt.off(this._element.closest(lr),ur,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const e=mt.trigger(this._element,this.constructor.eventName("show")),t=(Be(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!t)return;this._disposePopper();const n=this._getTipElement();this._element.setAttribute("aria-describedby",n.getAttribute("id"));const{container:r}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(r.append(n),mt.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(n),n.classList.add(ar),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))mt.on(e,"mouseover",Fe);this._queueCallback((()=>{mt.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(!this._isShown())return;if(mt.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented)return;if(this._getTipElement().classList.remove(ar),"ontouchstart"in document.documentElement)for(const e of[].concat(...document.body.children))mt.off(e,"mouseover",Fe);this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,this._isHovered=null;this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),mt.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(sr,ar),t.classList.add(`bs-${this.constructor.NAME}-auto`);const n=(e=>{do{e+=Math.floor(1e6*Math.random())}while(document.getElementById(e));return e})(this.constructor.NAME).toString();return t.setAttribute("id",n),this._isAnimated()&&t.classList.add(sr),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new ir({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(sr)}_isShown(){return this.tip&&this.tip.classList.contains(ar)}_createPopper(e){const t=Xe(this._config.placement,[this,e,this._element]),n=hr[t.toUpperCase()];return Re(this._element,e,this._getPopperConfig(n))}_getOffset(){const{offset:e}=this._config;return"string"==typeof e?e.split(",").map((e=>Number.parseInt(e,10))):"function"==typeof e?t=>e(t,this._element):e}_resolvePossibleFunction(e){return Xe(e,[this._element,this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:e=>{this._getTipElement().setAttribute("data-popper-placement",e.state.placement)}}]};return{...t,...Xe(this._config.popperConfig,[void 0,t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if("click"===t)mt.on(this._element,this.constructor.eventName("click"),this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger.click=!(t._isShown()&&t._activeTrigger.click),t.toggle()}));else if("manual"!==t){const e=t===cr?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),n=t===cr?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");mt.on(this._element,e,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusin"===e.type?dr:cr]=!0,t._enter()})),mt.on(this._element,n,this._config.selector,(e=>{const t=this._initializeOnDelegatedTarget(e);t._activeTrigger["focusout"===e.type?dr:cr]=t._element.contains(e.relatedTarget),t._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},mt.on(this._element.closest(lr),ur,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=bt.getDataAttributes(this._element);for(const e of Object.keys(t))or.has(e)&&delete t[e];return e={...t,..."object"==typeof e&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=!1===e.container?document.body:We(e.container),"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),"number"==typeof e.title&&(e.title=e.title.toString()),"number"==typeof e.content&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,n]of Object.entries(this._config))this.constructor.Default[t]!==n&&(e[t]=n);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each((function(){const t=mr.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Ke(mr);const gr={...mr.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},vr={...mr.DefaultType,content:"(null|string|element|function)"};class yr extends mr{static get Default(){return gr}static get DefaultType(){return vr}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each((function(){const t=yr.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e]()}}))}}Ke(yr);const br="click.bs.scrollspy",_r="active",wr="[href]",Tr={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},Er={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Dr extends wt{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Tr}static get DefaultType(){return Er}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=We(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,"string"==typeof e.threshold&&(e.threshold=e.threshold.split(",").map((e=>Number.parseFloat(e)))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(mt.off(this._config.target,br),mt.on(this._config.target,br,wr,(e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const n=this._rootElement||window,r=t.offsetTop-this._element.offsetTop;if(n.scrollTo)return void n.scrollTo({top:r,behavior:"smooth"});n.scrollTop=r}})))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((e=>this._observerCallback(e)),e)}_observerCallback(e){const t=e=>this._targetLinks.get(`#${e.target.id}`),n=e=>{this._previousScrollData.visibleEntryTop=e.target.offsetTop,this._process(t(e))},r=(this._rootElement||document.documentElement).scrollTop,i=r>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=r;for(const o of e){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(o));continue}const e=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(i&&e){if(n(o),!r)return}else i||e||n(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=Et.find(wr,this._config.target);for(const t of e){if(!t.hash||je(t))continue;const e=Et.findOne(decodeURI(t.hash),this._element);Ue(e)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,e))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(_r),this._activateParents(e),mt.trigger(this._element,"activate.bs.scrollspy",{relatedTarget:e}))}_activateParents(e){if(e.classList.contains("dropdown-item"))Et.findOne(".dropdown-toggle",e.closest(".dropdown")).classList.add(_r);else for(const t of Et.parents(e,".nav, .list-group"))for(const e of Et.prev(t,".nav-link, .nav-item > .nav-link, .list-group-item"))e.classList.add(_r)}_clearActiveClass(e){e.classList.remove(_r);const t=Et.find("[href].active",e);for(const e of t)e.classList.remove(_r)}static jQueryInterface(e){return this.each((function(){const t=Dr.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}mt.on(window,"load.bs.scrollspy.data-api",(()=>{for(const e of Et.find('[data-bs-spy="scroll"]'))Dr.getOrCreateInstance(e)})),Ke(Dr);const Sr="ArrowLeft",Cr="ArrowRight",kr="ArrowUp",xr="ArrowDown",Or="Home",Mr="End",Ar="active",Ir="fade",Rr="show",Nr=".dropdown-toggle",Pr='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Lr=`.nav-link:not(.dropdown-toggle), .list-group-item:not(.dropdown-toggle), [role="tab"]:not(.dropdown-toggle), ${Pr}`;class Hr extends wt{constructor(e){super(e),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),mt.on(this._element,"keydown.bs.tab",(e=>this._keydown(e))))}static get NAME(){return"tab"}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),n=t?mt.trigger(t,"hide.bs.tab",{relatedTarget:e}):null;mt.trigger(e,"show.bs.tab",{relatedTarget:t}).defaultPrevented||n&&n.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){if(!e)return;e.classList.add(Ar),this._activate(Et.getElementFromSelector(e));this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),mt.trigger(e,"shown.bs.tab",{relatedTarget:t})):e.classList.add(Rr)}),e,e.classList.contains(Ir))}_deactivate(e,t){if(!e)return;e.classList.remove(Ar),e.blur(),this._deactivate(Et.getElementFromSelector(e));this._queueCallback((()=>{"tab"===e.getAttribute("role")?(e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),mt.trigger(e,"hidden.bs.tab",{relatedTarget:t})):e.classList.remove(Rr)}),e,e.classList.contains(Ir))}_keydown(e){if(![Sr,Cr,kr,xr,Or,Mr].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=this._getChildren().filter((e=>!je(e)));let n;if([Or,Mr].includes(e.key))n=t[e.key===Or?0:t.length-1];else{const r=[Cr,xr].includes(e.key);n=Qe(t,e.target,r,!0)}n&&(n.focus({preventScroll:!0}),Hr.getOrCreateInstance(n).show())}_getChildren(){return Et.find(Lr,this._parent)}_getActiveElem(){return this._getChildren().find((e=>this._elemIsActive(e)))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const e of t)this._setInitialAttributesOnChild(e)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),n=this._getOuterElement(e);e.setAttribute("aria-selected",t),n!==e&&this._setAttributeIfNotExists(n,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=Et.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){const n=this._getOuterElement(e);if(!n.classList.contains("dropdown"))return;const r=(e,r)=>{const i=Et.findOne(e,n);i&&i.classList.toggle(r,t)};r(Nr,Ar),r(".dropdown-menu",Rr),n.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,n){e.hasAttribute(t)||e.setAttribute(t,n)}_elemIsActive(e){return e.classList.contains(Ar)}_getInnerElement(e){return e.matches(Lr)?e:Et.findOne(Lr,e)}_getOuterElement(e){return e.closest(".nav-item, .list-group-item")||e}static jQueryInterface(e){return this.each((function(){const t=Hr.getOrCreateInstance(this);if("string"==typeof e){if(void 0===t[e]||e.startsWith("_")||"constructor"===e)throw new TypeError(`No method named "${e}"`);t[e]()}}))}}mt.on(document,"click.bs.tab",Pr,(function(e){["A","AREA"].includes(this.tagName)&&e.preventDefault(),je(this)||Hr.getOrCreateInstance(this).show()})),mt.on(window,"load.bs.tab",(()=>{for(const e of Et.find('.active[data-bs-toggle="tab"], .active[data-bs-toggle="pill"], .active[data-bs-toggle="list"]'))Hr.getOrCreateInstance(e)})),Ke(Hr);const Yr="hide",zr="show",Vr="showing",Wr={animation:"boolean",autohide:"boolean",delay:"number"},Ur={animation:!0,autohide:!0,delay:5e3};class jr extends wt{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Ur}static get DefaultType(){return Wr}static get NAME(){return"toast"}show(){if(mt.trigger(this._element,"show.bs.toast").defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");this._element.classList.remove(Yr),qe(this._element),this._element.classList.add(zr,Vr),this._queueCallback((()=>{this._element.classList.remove(Vr),mt.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation)}hide(){if(!this.isShown())return;if(mt.trigger(this._element,"hide.bs.toast").defaultPrevented)return;this._element.classList.add(Vr),this._queueCallback((()=>{this._element.classList.add(Yr),this._element.classList.remove(Vr,zr),mt.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(zr),super.dispose()}isShown(){return this._element.classList.contains(zr)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":this._hasMouseInteraction=t;break;case"focusin":case"focusout":this._hasKeyboardInteraction=t}if(t)return void this._clearTimeout();const n=e.relatedTarget;this._element===n||this._element.contains(n)||this._maybeScheduleHide()}_setListeners(){mt.on(this._element,"mouseover.bs.toast",(e=>this._onInteraction(e,!0))),mt.on(this._element,"mouseout.bs.toast",(e=>this._onInteraction(e,!1))),mt.on(this._element,"focusin.bs.toast",(e=>this._onInteraction(e,!0))),mt.on(this._element,"focusout.bs.toast",(e=>this._onInteraction(e,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each((function(){const t=jr.getOrCreateInstance(this,e);if("string"==typeof e){if(void 0===t[e])throw new TypeError(`No method named "${e}"`);t[e](this)}}))}}Dt(jr),Ke(jr)},9379:function(e,t){"use strict";t.A={code:"hu",week:{dow:1,doy:4},buttonText:{prev:"vissza",next:"előre",today:"ma",month:"Hónap",week:"Hét",day:"Nap",list:"Lista"},weekText:"Hét",allDayText:"Egész nap",moreLinkText:"további",noEventsText:"Nincs megjeleníthető esemény"}},9478:function(e,t){"use strict";t.A={code:"ko",buttonText:{prev:"이전달",next:"다음달",today:"오늘",month:"월",week:"주",day:"일",list:"일정목록"},weekText:"주",allDayText:"종일",moreLinkText:"개",noEventsText:"일정이 없습니다"}},9795:function(e,t){"use strict";t.A={code:"he",direction:"rtl",buttonText:{prev:"הקודם",next:"הבא",today:"היום",month:"חודש",week:"שבוע",day:"יום",list:"סדר יום"},allDayText:"כל היום",moreLinkText:"אחר",noEventsText:"אין אירועים להצגה",weekText:"שבוע"}},9997:function(e,t,n){"use strict";n.d(t,{A:function(){return r}});class r{static calculateContrastColor(e){"#"===e.slice(0,1)&&(e=e.slice(1)),3===e.length&&(e=e.split("").map((function(e){return e+e})).join(""));return(299*parseInt(e.substring(0,2),16)+587*parseInt(e.substring(2,4),16)+114*parseInt(e.substring(4,6),16))/1e3>=128?"#000000":"#ffffff"}}}},function(e){var t;t=6941,e(e.s=t)}]); \ No newline at end of file diff --git a/public/build/calendar.7415ab21.js.LICENSE.txt b/public/build/calendar.b2d70caa.js.LICENSE.txt similarity index 78% rename from public/build/calendar.7415ab21.js.LICENSE.txt rename to public/build/calendar.b2d70caa.js.LICENSE.txt index 2532478f5..a7c3b1548 100644 --- a/public/build/calendar.7415ab21.js.LICENSE.txt +++ b/public/build/calendar.b2d70caa.js.LICENSE.txt @@ -1,6 +1,6 @@ /*! - * Bootstrap v5.3.3 (https://getbootstrap.com/) - * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap v5.3.8 (https://getbootstrap.com/) + * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ diff --git a/public/build/chart.62631acc.js b/public/build/chart.62631acc.js deleted file mode 100644 index 5408b0069..000000000 --- a/public/build/chart.62631acc.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see chart.62631acc.js.LICENSE.txt */ -"use strict";(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[65],{5579:function(t,e,i){function s(t){return t+.5|0}const n=(t,e,i)=>Math.max(Math.min(t,i),e);function o(t){return n(s(2.55*t),0,255)}function a(t){return n(s(255*t),0,255)}function r(t){return n(s(t/2.55)/100,0,1)}function h(t){return n(s(100*t),0,100)}const l={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},c=[..."0123456789ABCDEF"],d=t=>c[15&t],u=t=>c[(240&t)>>4]+c[15&t],f=t=>(240&t)>>4==(15&t);function g(t){var e=(t=>f(t.r)&&f(t.g)&&f(t.b)&&f(t.a))(t)?d:u;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const p=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function m(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function x(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function b(t,e,i){const s=m(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function _(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,h,l;return n!==o&&(l=n-o,h=a>.5?l/(2-n-o):l/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),P.transparent=[0,0,0,0]);const e=P[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const C=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const A=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,O=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function T(t,e,i){if(t){let s=_(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=v(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function R(t,e){return t?Object.assign(e||{},t):t}function E(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=a(t[3]))):(e=R(t,{r:0,g:0,b:0,a:1})).a=a(e.a),e}function I(t){return"r"===t.charAt(0)?function(t){const e=C.exec(t);let i,s,a,r=255;if(e){if(e[7]!==i){const t=+e[7];r=e[8]?o(t):n(255*t,0,255)}return i=+e[1],s=+e[3],a=+e[5],i=255&(e[2]?o(i):n(i,0,255)),s=255&(e[4]?o(s):n(s,0,255)),a=255&(e[6]?o(a):n(a,0,255)),{r:i,g:s,b:a,a:r}}}(t):M(t)}class L{constructor(t){if(t instanceof L)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=E(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*l[s[1]],g:255&17*l[s[2]],b:255&17*l[s[3]],a:5===o?17*l[s[4]]:255}:7!==o&&9!==o||(n={r:l[s[1]]<<4|l[s[2]],g:l[s[3]]<<4|l[s[4]],b:l[s[5]]<<4|l[s[6]],a:9===o?l[s[7]]<<4|l[s[8]]:255})),i=n||D(t)||I(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=R(this._rgb);return t&&(t.a=r(t.a)),t}set rgb(t){this._rgb=E(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${r(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?g(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=_(t),i=e[0],s=h(e[1]),n=h(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${r(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,h=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-h,i.r=255&h*i.r+n*s.r+.5,i.g=255&h*i.g+n*s.g+.5,i.b=255&h*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=O(r(t.r)),n=O(r(t.g)),o=O(r(t.b));return{r:a(A(s+i*(O(r(e.r))-s))),g:a(A(n+i*(O(r(e.g))-n))),b:a(A(o+i*(O(r(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new L(this.rgb)}alpha(t){return this._rgb.a=a(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=s(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return T(this._rgb,2,t),this}darken(t){return T(this._rgb,2,-t),this}saturate(t){return T(this._rgb,1,t),this}desaturate(t){return T(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=_(t);i[0]=w(i[0]+e),i=v(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function z(){}const F=(()=>{let t=0;return()=>t++})();function B(t){return null==t}function W(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function H(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function V(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function j(t,e){return V(t)?t:e}function N(t,e){return void 0===t?e:t}const $=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function Y(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function U(t,e,i,s){let n,o,a;if(W(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;nt,x:t=>t.x,y:t=>t.y};function et(t,e){const i=tt[e]||(tt[e]=function(t){const e=function(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function it(t){return t.charAt(0).toUpperCase()+t.slice(1)}const st=t=>void 0!==t,nt=t=>"function"==typeof t,ot=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};const at=Math.PI,rt=2*at,ht=rt+at,lt=Number.POSITIVE_INFINITY,ct=at/180,dt=at/2,ut=at/4,ft=2*at/3,gt=Math.log10,pt=Math.sign;function mt(t,e,i){return Math.abs(t-e)h&&l=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Ot(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const Tt=(t,e,i,s)=>Ot(t,i,s?s=>{const n=t[s][e];return nt[s][e]Ot(t,i,(s=>t[s][e]>=i));const Et=["push","pop","shift","splice","unshift"];function It(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(Et.forEach((e=>{delete t[e]})),delete t._chartjs)}function Lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const zt="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function Ft(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,zt.call(window,(()=>{s=!1,t.apply(e,i)})))}}const Bt=t=>"start"===t?"left":"end"===t?"right":"center",Wt=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2;function Ht(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,_parsed:r}=t,h=a.axis,{min:l,max:c,minDefined:d,maxDefined:u}=a.getUserBounds();d&&(n=Ct(Math.min(Tt(r,h,l).lo,i?s:Tt(e,h,a.getPixelForValue(l)).lo),0,s-1)),o=u?Ct(Math.max(Tt(r,a.axis,c,!0).hi+1,i?0:Tt(e,h,a.getPixelForValue(c),!0).hi+1),n,s)-n:s-n}return{start:n,count:o}}function Vt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}const jt=t=>0===t||1===t,Nt=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*rt/i),$t=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*rt/i)+1,Yt={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*dt),easeOutSine:t=>Math.sin(t*dt),easeInOutSine:t=>-.5*(Math.cos(at*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>jt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>jt(t)?t:Nt(t,.075,.3),easeOutElastic:t=>jt(t)?t:$t(t,.075,.3),easeInOutElastic(t){const e=.1125;return jt(t)?t:t<.5?.5*Nt(2*t,e,.45):.5+.5*$t(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Yt.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Yt.easeInBounce(2*t):.5*Yt.easeOutBounce(2*t-1)+.5};function Ut(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Xt(t){return Ut(t)?t:new L(t)}function qt(t){return Ut(t)?t:new L(t).saturate(.5).darken(.1).hexString()}const Kt=["x","y","borderWidth","radius","tension"],Zt=["color","borderColor","backgroundColor"];const Gt=new Map;function Jt(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=Gt.get(i);return s||(s=new Intl.NumberFormat(t,e),Gt.set(i,s)),s}(e,i).format(t)}const Qt={values:t=>W(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=gt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),h={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(h,this.options.ticks.format),Jt(t,s,h)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(gt(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?Qt.numeric.call(this,t,e,i):""}};var te={formatters:Qt};const ee=Object.create(null),ie=Object.create(null);function se(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>qt(e.backgroundColor),this.hoverBorderColor=(t,e)=>qt(e.borderColor),this.hoverColor=(t,e)=>qt(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ne(this,t,e)}get(t){return se(this,t)}describe(t,e){return ne(ie,t,e)}override(t,e){return ne(ee,t,e)}route(t,e,i,s){const n=se(this,t),o=se(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return H(t)?Object.assign({},e,t):N(t,e)},set(t){this[a]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ae=new oe({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:Zt},numbers:{type:"number",properties:Kt}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:te.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function re(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function he(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/2,.5):0;return Math.round((e-n)*s)/s+n}function le(t,e){(e||t)&&((e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore())}function ce(t,e,i,s){de(t,e,i,s,null)}function de(t,e,i,s,n){let o,a,r,h,l,c,d,u;const f=e.pointStyle,g=e.rotation,p=e.radius;let m=(g||0)*ct;if(f&&"object"==typeof f&&(o=f.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,s),t.rotate(m),t.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),void t.restore();if(!(isNaN(p)||p<=0)){switch(t.beginPath(),f){default:n?t.ellipse(i,s,n/2,p,0,0,rt):t.arc(i,s,p,0,rt),t.closePath();break;case"triangle":c=n?n/2:p,t.moveTo(i+Math.sin(m)*c,s-Math.cos(m)*p),m+=ft,t.lineTo(i+Math.sin(m)*c,s-Math.cos(m)*p),m+=ft,t.lineTo(i+Math.sin(m)*c,s-Math.cos(m)*p),t.closePath();break;case"rectRounded":l=.516*p,h=p-l,a=Math.cos(m+ut)*h,d=Math.cos(m+ut)*(n?n/2-l:h),r=Math.sin(m+ut)*h,u=Math.sin(m+ut)*(n?n/2-l:h),t.arc(i-d,s-r,l,m-at,m-dt),t.arc(i+u,s-a,l,m-dt,m),t.arc(i+d,s+r,l,m,m+dt),t.arc(i-u,s+a,l,m+dt,m+at),t.closePath();break;case"rect":if(!g){h=Math.SQRT1_2*p,c=n?n/2:h,t.rect(i-c,s-h,2*c,2*h);break}m+=ut;case"rectRot":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+u,s-a),t.lineTo(i+d,s+r),t.lineTo(i-u,s+a),t.closePath();break;case"crossRot":m+=ut;case"cross":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"star":d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a),m+=ut,d=Math.cos(m)*(n?n/2:p),a=Math.cos(m)*p,r=Math.sin(m)*p,u=Math.sin(m)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"line":a=n?n/2:Math.cos(m)*p,r=Math.sin(m)*p,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r);break;case"dash":t.moveTo(i,s),t.lineTo(i+Math.cos(m)*(n?n/2:p),s+Math.sin(m)*p);break;case!1:t.closePath()}t.fill(),e.borderWidth>0&&t.stroke()}}function ue(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let h,l;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),B(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),h=0;hN(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function Se(t){return ke(t,{top:"y",right:"x",bottom:"y",left:"x"})}function Pe(t){return ke(t,["topLeft","topRight","bottomLeft","bottomRight"])}function De(t){const e=Se(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Ce(t,e){t=t||{},e=e||ae.font;let i=N(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=N(t.style,e.style);s&&!(""+s).match(we)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:N(t.family,e.family),lineHeight:Me(N(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:N(t.weight,e.weight),string:""};return n.string=function(t){return!t||B(t.size)||B(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n}function Ae(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;nt[0])){const o=i||t;void 0===s&&(s=je("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>Te([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>ze(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=je(Ie(o,t),i),void 0!==n)return Le(t,n)?He(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>Ne(t).includes(e),ownKeys:t=>Ne(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Re(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ee(t,s),setContext:e=>Re(t,e,i,s),override:n=>Re(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>ze(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];nt(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let h=e(o,a||s);r.delete(t),Le(t,h)&&(h=He(n._scopes,n,t,h));return h}(e,r,t,i));W(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(void 0!==o.index&&s(t))return e[o.index%e.length];if(H(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const h of i){const i=He(s,n,t,h);e.push(Re(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Le(e,r)&&(r=Re(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ee(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:nt(i)?i:()=>i,isIndexable:nt(s)?s:()=>s}}const Ie=(t,e)=>t?t+it(e):e,Le=(t,e)=>H(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function ze(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e)||"constructor"===e)return t[e];const s=i();return t[e]=s,s}function Fe(t,e,i){return nt(t)?t(e,i):t}const Be=(t,e)=>!0===t?e:"string"==typeof t?et(e,t):void 0;function We(t,e,i,s,n){for(const o of e){const e=Be(i,o);if(e){t.add(e);const o=Fe(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function He(t,e,i,s){const n=e._rootScopes,o=Fe(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let h=Ve(r,a,i,o||i,s);return null!==h&&((void 0===o||o===i||(h=Ve(r,a,o,h,s),null!==h))&&Te(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(W(n)&&H(i))return i;return n||{}}(e,i,s))))}function Ve(t,e,i,s,n){for(;i;)i=We(t,e,i,s,n);return i}function je(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function Ne(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function $e(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,h,l,c;for(r=0,h=s;re"x"===t?"y":"x";function qe(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=kt(o,n),h=kt(a,o);let l=r/(r+h),c=h/(r+h);l=isNaN(l)?0:l,c=isNaN(c)?0:c;const d=s*l,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Ke(t,e="x"){const i=Xe(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,h,l=Ue(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)Ke(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;ot.ownerDocument.defaultView.getComputedStyle(t,null);const ii=["top","right","bottom","left"];function si(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=ii[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ni(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=ei(i),o="border-box"===n.boxSizing,a=si(n,"padding"),r=si(n,"border","width"),{x:h,y:l,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,h=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,h=!0}return{x:a,y:r,box:h}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((h-d)/f*i.width/s),y:Math.round((l-u)/g*i.height/s)}}const oi=t=>Math.round(10*t)/10;function ai(t,e,i,s){const n=ei(t),o=si(n,"margin"),a=ti(n.maxWidth,t,"clientWidth")||lt,r=ti(n.maxHeight,t,"clientHeight")||lt,h=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=t&&Qe(t);if(o){const t=o.getBoundingClientRect(),a=ei(o),r=si(a,"border","width"),h=si(a,"padding");e=t.width-h.width-r.width,i=t.height-h.height-r.height,s=ti(a.maxWidth,o,"clientWidth"),n=ti(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||lt,maxHeight:n||lt}}(t,e,i);let{width:l,height:c}=h;if("content-box"===n.boxSizing){const t=si(n,"border","width"),e=si(n,"padding");l-=e.width+t.width,c-=e.height+t.height}l=Math.max(0,l-o.width),c=Math.max(0,s?l/s:c-o.height),l=oi(Math.min(l,a,h.maxWidth)),c=oi(Math.min(c,r,h.maxHeight)),l&&!c&&(c=oi(l/2));return(void 0!==e||void 0!==i)&&s&&h.height&&c>h.height&&(c=h.height,l=oi(Math.floor(c*s))),{width:l,height:c}}function ri(t,e,i){const s=e||1,n=Math.floor(t.height*s),o=Math.floor(t.width*s);t.height=Math.floor(t.height),t.width=Math.floor(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const hi=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};Je()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(t){}return t}();function li(t,e){const i=function(t,e){return ei(t).getPropertyValue(e)}(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function ci(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function di(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function ui(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ci(t,n,i),r=ci(n,o,i),h=ci(o,e,i),l=ci(a,r,i),c=ci(r,h,i);return ci(l,c,i)}function fi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function gi(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function pi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function mi(t){return"angle"===t?{between:Dt,compare:St,normalize:Pt}:{between:At,compare:(t,e)=>t-e,normalize:t=>t}}function xi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function bi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:h,normalize:l}=mi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=mi(s),h=e.length;let l,c,{start:d,end:u,loop:f}=t;if(f){for(d+=h,u+=h,l=0,c=h;lb||h(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||h(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=l(m[s]),p!==x&&(b=h(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(xi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(xi({start:_,end:d,loop:u,count:a,style:f})),g}function _i(t,e){const i=[],s=t.segments;for(let n=0;ns({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=zt.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var ki=new Mi;const Si="transparent",Pi={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Xt(t||Si),n=s.valid&&Xt(e||Si);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Di{constructor(t,e,i,s){const n=e[i];s=Ae([t.to,s,n,t.from]);const o=Ae([t.from,n,s]);this._active=!0,this._fn=t.fn||Pi[t.type||typeof o],this._easing=Yt[t.easing]||Yt.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Ae([t.to,e,s,t.from]),this._from=Ae([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const n=t[s];if(!H(n))return;const o={};for(const t of e)o[t]=n[t];(W(n.properties)&&n.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,o)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const h=o[r];if("$"===h.charAt(0))continue;if("options"===h){s.push(...this._animateOptions(t,e));continue}const l=e[h];let c=n[h];const d=i.get(h);if(c){if(d&&c.active()){c.update(d,l,a);continue}c.cancel()}d&&d.duration?(n[h]=c=new Di(d,t,h,l),s.push(c)):t[h]=l}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(ki.add(this._chart,i),!0):void 0}}function Ai(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Oi(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Li(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,h=o.axis,l=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Fi(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Bi=t=>"reset"===t||"none"===t,Wi=(t,e)=>e?t:Object.assign({},t);class Hi{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Ri(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Fi(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=N(i.xAxisID,zi(t,"x")),o=e.yAxisID=N(i.yAxisID,zi(t,"y")),a=e.rAxisID=N(i.rAxisID,zi(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),l=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&It(this._data,this),t._stacked&&Fi(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(H(e)){const t=this._cachedMeta;this._data=function(t,e){const{iScale:i,vScale:s}=e,n="x"===i.axis?"x":"y",o="x"===s.axis?"x":"y",a=Object.keys(t),r=new Array(a.length);let h,l,c;for(h=0,l=a.length;h{const e="_onData"+it(t),i=s[t];Object.defineProperty(s,t,{configurable:!0,enumerable:!1,value(...t){const n=i.apply(this,t);return s._chartjs.listeners.forEach((i=>{"function"==typeof i[e]&&i[e](...t)})),n}})})))),this._syncList=[],this._data=e}var s,n}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Ri(e.vScale,e),e.stack!==i.stack&&(s=!0,Fi(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&(Li(this,e._parsed),e._stacked=Ri(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,h,l,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,l=s;else{l=W(s[t])?this.parseArrayData(i,s,t,e):H(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===h[a]||d&&h[a]t&&!e.hidden&&e._stacked&&{keys:Oi(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:l,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!V(u[t.axis])||l>e||c=0;--d)if(!f()){this.updateRangeFromParsed(h,t,u,r);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Wi(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const h=new Ci(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(h)),h}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Bi(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Bi(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Bi(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;at-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const h=()=>{32767!==o&&-32768!==o&&(st(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(h=r,l=a),e[i.axis]=l,e._custom={barStart:h,barEnd:l,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Ni(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,h=[];let l,c,d,u;for(l=i,c=i+s;lt.x,i="left",s="right"):(e=t.baset.controller.options.grouped)),n=i.options.stacked,o=[],a=this._cachedMeta.controller.getParsed(e),r=a&&a[i.axis],h=t=>{const e=t._parsed.find((t=>t[i.axis]===r)),s=e&&e[t.vScale.axis];if(B(s)||isNaN(s))return!0};for(const i of s)if((void 0===e||!h(i))&&((!1===n||-1===o.indexOf(i.stack)||void 0===n&&void 0===i.stack)&&o.push(i.stack),i.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(d,e,a)*o,u===a&&(m-=d/2);const t=e.getPixelForDecimal(0),n=e.getPixelForDecimal(1),h=Math.min(t,n),f=Math.max(t,n);m=Math.max(Math.min(m,f),h),c=m+d,i&&!l&&(r._stacks[e.axis]._visualValues[s]=e.getValueForPixel(c)-e.getValueForPixel(m))}if(m===e.getPixelForValue(a)){const t=pt(d)*e.getLineWidthForValue(a)/2;m+=t,d-=t}return{size:d,base:m,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=N(s.maxBarThickness,1/0);let a,r;if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,h="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(H(i[t])){const{key:t="value"}=this._parsing;a=e=>+et(i[e],t)}for(n=t,o=t+e;nDt(t,r,h,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Dt(t,r,h,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,l,d),m=f(dt,c,u),x=g(at,l,d),b=g(at+dt,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),x=(i.width-o)/f,b=(i.height-o)/g,_=Math.max(Math.min(x,b)/2,0),y=$(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*c,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/rt)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,h=(a.left+a.right)/2,l=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?rt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Jt(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s0&&this.getParsed(e-1);for(let i=0;i=x){b.skip=!0;continue}const y=this.getParsed(i),v=B(y[u]),w=b[d]=o.getPixelForValue(y[d],i),M=b[u]=n||v?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,y,r):y[u],i);b.skip=isNaN(w)||isNaN(M)||v,b.stop=i>0&&Math.abs(y[d]-_[d])>p,g&&(b.parsed=y,b.raw=h.data[i]),c&&(b.options=l||this.resolveDataElementOptions(i,f.active?"active":s)),m||this.updateElement(f,i,b,s),_=y}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}class Ji extends Hi{static id="polarArea";static defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Jt(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return $e.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,h=r.xCenter,l=r.yCenter,c=r.getIndexAngle(0)-.5*at;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?yt(this.resolveDataElementOptions(t,e).angle||i):0}}class Qi extends Zi{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}}function ts(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const t=r._reversePixels?Rt:Tt;if(!s)return t(o,e,i);if(n._sharedOptions){const s=o[0],n="function"==typeof s.getRange&&s.getRange(e);if(n){const s=t(o,e,i-n),a=t(o,e,i+n);return{lo:s.lo,hi:a.hi}}}}return{lo:0,hi:o.length-1}}function es(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[a]&&t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:h}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var as={evaluateInteractionItems:es,modes:{index(t,e,i,s){const n=ni(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?is(t,n,o,s,a):ns(t,n,o,!1,s,a),h=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&h.push({element:i,datasetIndex:t.index,index:e})})),h):[]},dataset(t,e,i,s){const n=ni(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?is(t,n,o,s,a):ns(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tis(t,ni(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ni(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return ns(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>os(t,ni(e,t),"x",i.intersect,s),y:(t,e,i,s)=>os(t,ni(e,t),"y",i.intersect,s)}};const rs=["left","top","right","bottom"];function hs(t,e){return t.filter((t=>t.pos===e))}function ls(t,e){return t.filter((t=>-1===rs.indexOf(t.pos)&&t.box.axis===e))}function cs(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function ds(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!rs.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function ms(t,e,i,s){const n=[];let o,a,r,h,l,c;for(o=0,a=t.length,l=0;ot.box.fullSize)),!0),s=cs(hs(e,"left"),!0),n=cs(hs(e,"right")),o=cs(hs(e,"top"),!0),a=cs(hs(e,"bottom")),r=ls(e,"x"),h=ls(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(h).concat(a).concat(r),chartArea:hs(e,"chartArea"),vertical:s.concat(n).concat(h),horizontal:o.concat(a).concat(r)}}(t.boxes),h=r.vertical,l=r.horizontal;U(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=h.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);fs(u,De(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=ds(h.concat(l),d);ms(r.fullSize,f,d,g),ms(h,f,d,g),ms(l,f,d,g)&&ms(h,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(f),bs(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,bs(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},U(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};class ys{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class vs extends ys{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ws={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ms=t=>null===t||""===t;const ks=!!hi&&{passive:!0};function Ss(t,e,i){t&&t.canvas&&t.canvas.removeEventListener(e,i,ks)}function Ps(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Ds(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ps(i.addedNodes,s),e=e&&!Ps(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function Cs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||Ps(i.removedNodes,s),e=e&&!Ps(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const As=new Map;let Os=0;function Ts(){const t=window.devicePixelRatio;t!==Os&&(Os=t,As.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Rs(t,e,i){const s=t.canvas,n=s&&Qe(s);if(!n)return;const o=Ft(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){As.size||window.addEventListener("resize",Ts),As.set(t,e)}(t,o),a}function Es(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){As.delete(t),As.size||window.removeEventListener("resize",Ts)}(t)}function Is(t,e,i){const s=t.canvas,n=Ft((e=>{null!==t.ctx&&i(function(t,e){const i=ws[t.type]||t.type,{x:s,y:n}=ni(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t&&t.addEventListener(e,i,ks)}(s,e,n),n}class Ls extends ys{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ms(n)){const e=li(t,"width");void 0!==e&&(t.width=e)}if(Ms(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=li(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const s=i[t];B(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Ds,detach:Cs,resize:Rs}[e]||Is;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:Es,detach:Es,resize:Es}[e]||Ss)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return ai(t,e,i,s)}isAttached(t){const e=t&&Qe(t);return!(!e||!e.isConnected)}}class zs{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return bt(this.x)&&bt(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Fs(t,e){const i=t.options.ticks,s=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),n=Math.min(i.maxTicksLimit||s,s),o=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;in)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nt-e)).pop(),e}(s);for(let t=0,e=o.length-1;tn)return e}return Math.max(n,1)}(o,e,n);if(a>0){let t,i;const s=a>1?Math.round((h-r)/(a-1)):null;for(Bs(e,l,c,B(s)?0:r-s,r),t=0,i=a-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,Hs=(t,e)=>Math.min(e||t,t);function Vs(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return l}function Ns(t){return t.drawTicks?t.tickLength:0}function $s(t,e){if(!t.display)return 0;const i=Ce(t.font,e),s=De(t.padding);return(W(t.text)?t.text.length:1)*i.lineHeight+s.height}function Ys(t,e,i){let s=Bt(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class Us extends zs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=j(t,Number.POSITIVE_INFINITY),e=j(e,Number.NEGATIVE_INFINITY),i=j(i,Number.POSITIVE_INFINITY),s=j(s,Number.NEGATIVE_INFINITY),{min:j(t,i),max:j(e,s),minDefined:V(t),maxDefined:V(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,h=a.length;rs?s:i,s=n&&i>s?i:s,{min:j(i,j(s,i)),max:j(s,j(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Y(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=function(t,e,i){const{min:s,max:n}=t,o=$(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const l=this._getLabelSizes(),c=l.widest.width,d=l.highest.height,u=Ct(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ns(t.grid)-e.padding-$s(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),h=vt(Math.min(Math.asin(Ct((l.highest.height+6)/o,-1,1)),Math.asin(Ct(a/r,-1,1))-Math.asin(Ct(d/r,-1,1)))),h=Math.max(s,Math.min(n,h))),this.labelRotation=h}afterCalculateLabelRotation(){Y(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Y(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=$s(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ns(n)+o):(t.height=this.maxHeight,t.width=Ns(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,h=yt(this.labelRotation),l=Math.cos(h),c=Math.sin(h);if(a){const e=i.mirror?0:c*n.width+l*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:l*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,l)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,h="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?h?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-l+o)*this.width/(this.width-l),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Y(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:o[t]||0,height:a[t]||0});return{first:M(0),last:M(e-1),widest:M(v),highest:M(w),widths:o,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Ct(this._alignToPixels?he(this.chart,e,0):e,-32768,32767)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o,border:a}=s,r=n.offset,h=this.isHorizontal(),l=this.ticks.length+(r?1:0),c=Ns(n),d=[],u=a.setContext(this.getContext()),f=u.display?u.width:0,g=f/2,p=function(t){return he(i,t,f)};let m,x,b,_,y,v,w,M,k,S,P,D;if("top"===o)m=p(this.bottom),v=this.bottom-c,M=m-g,S=p(t.top)+g,D=t.bottom;else if("bottom"===o)m=p(this.top),S=t.top,D=p(t.bottom)-g,v=m+g,M=this.top+c;else if("left"===o)m=p(this.right),y=this.right-c,w=m-g,k=p(t.left)+g,P=t.right;else if("right"===o)m=p(this.left),k=t.left,P=p(t.right)-g,y=m+g,w=this.left+c;else if("x"===e){if("center"===o)m=p((t.top+t.bottom)/2+.5);else if(H(o)){const t=Object.keys(o)[0],e=o[t];m=p(this.chart.scales[t].getPixelForValue(e))}S=t.top,D=t.bottom,v=m+g,M=v+c}else if("y"===e){if("center"===o)m=p((t.left+t.right)/2);else if(H(o)){const t=Object.keys(o)[0],e=o[t];m=p(this.chart.scales[t].getPixelForValue(e))}y=m-g,w=y-c,k=t.left,P=t.right}const C=N(s.ticks.maxTicksLimit,l),A=Math.max(1,Math.ceil(l/C));for(x=0;x0&&(o-=s/2)}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}p.push({label:_,font:k,textOffset:D,options:{rotation:g,color:i,strokeColor:r,strokeWidth:l,textAlign:u,textBaseline:C,translation:[y,v],backdrop:d}})}return p}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-yt(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,h;return"left"===e?s?(h=this.right+n,"near"===i?r="left":"center"===i?(r="center",h+=a/2):(r="right",h+=a)):(h=this.right-o,"near"===i?r="right":"center"===i?(r="center",h-=a/2):(r="left",h=this.left)):"right"===e?s?(h=this.left+n,"near"===i?r="right":"center"===i?(r="center",h-=a/2):(r="left",h-=a)):(h=this.left+o,"near"===i?r="left":"center"===i?(r="center",h+=a/2):(r="right",h=this.right)):r="right",{textAlign:r,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),h=a.join(".");ae.route(o,n,h,r)}))}(e,t.defaultRoutes);t.descriptors&&ae.describe(e,t.descriptors)}(t,o,i),this.override&&ae.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ae[s]&&(delete ae[s][i],this.override&&delete ee[i])}}class qs{constructor(){this.controllers=new Xs(Hi,"datasets",!0),this.elements=new Xs(zs,"elements"),this.plugins=new Xs(Object,"plugins"),this.scales=new Xs(Us,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):U(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=it(t);Y(i["before"+s],[],i),e[t](i),Y(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Gs(t,e){return e||!1!==t?!0===t?{}:t:null}function Js(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function Qs(t,e){const i=ae.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function tn(t){if("x"===t||"y"===t||"r"===t)return t}function en(t,...e){if(tn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&tn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function sn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function nn(t,e){const i=ee[t.type]||{scales:{}},s=e.scales||{},n=Qs(t.type,e),o=Object.create(null);return Object.keys(s).forEach((e=>{const a=s[e];if(!H(a))return console.error(`Invalid scale configuration for scale: ${e}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const r=en(e,a,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return sn(t,"x",i[0])||sn(t,"y",i[0])}return{}}(e,t),ae.scales[a.type]),h=function(t,e){return t===e?"_index_":"_value_"}(r,n),l=i.scales||{};o[e]=J(Object.create(null),[{axis:r},a,l[r],l[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,a=i.indexAxis||Qs(n,e),r=(ee[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,a),n=i[e+"AxisID"]||e;o[n]=o[n]||Object.create(null),J(o[n],[{axis:e},s[n],r[t]])}))})),Object.keys(o).forEach((t=>{const e=o[t];J(e,[ae.scales[e.type],ae.scale])})),o}function on(t){const e=t.options||(t.options={});e.plugins=N(e.plugins,{}),e.scales=nn(t,e)}function an(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const rn=new Map,hn=new Set;function ln(t,e){let i=rn.get(t);return i||(i=e(),rn.set(t,i),hn.add(i)),i}const cn=(t,e,i)=>{const s=et(e,i);void 0!==s&&t.add(s)};class dn{constructor(t){this._config=function(t){return(t=t||{}).data=an(t.data),on(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=an(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),on(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return ln(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return ln(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return ln(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return ln(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>cn(r,t,e)))),e.forEach((t=>cn(r,s,t))),e.forEach((t=>cn(r,ee[n]||{},t))),e.forEach((t=>cn(r,ae,t))),e.forEach((t=>cn(r,ie,t)))}));const h=Array.from(r);return 0===h.length&&h.push(Object.create(null)),hn.has(e)&&o.set(e,h),h}chartOptionScopes(){const{options:t,type:e}=this;return[t,ee[e]||{},ae.datasets[e]||{},{type:e},ae,ie]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=un(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ee(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(nt(a)||fn(a))||o&&W(a))return!0}return!1}(o,e)){n.$shared=!1;r=Re(o,i=nt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=un(this._resolverCache,t,i);return H(e)?Re(n,e,void 0,s):n}}function un(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:Te(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const fn=t=>H(t)&&Object.getOwnPropertyNames(t).some((e=>nt(t[e])));const gn=["top","bottom","left","right","chartArea"];function pn(t,e){return"top"===t||"bottom"===t||-1===gn.indexOf(t)&&"x"===e}function mn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function xn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),Y(i&&i.onComplete,[t],e)}function bn(t){const e=t.chart,i=e.options.animation;Y(i&&i.onProgress,[t],e)}function _n(t){return Je()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const yn={},vn=t=>{const e=_n(t);return Object.values(yn).filter((t=>t.canvas===e)).pop()};function wn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}function Mn(t,e,i){return t.options.clip?t[i]:e[i]}class kn{static defaults=ae;static instances=yn;static overrides=ee;static registry=Ks;static version="4.4.7";static getChart=vn;static register(...t){Ks.add(...t),Sn()}static unregister(...t){Ks.remove(...t),Sn()}constructor(t,e){const i=this.config=new dn(e),s=_n(t),n=vn(s);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||function(t){return!Je()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?vs:Ls}(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,o.aspectRatio),r=a&&a.canvas,h=r&&r.height,l=r&&r.width;this.id=F(),this.ctx=a,this.canvas=r,this.width=l,this.height=h,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Zs,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=function(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}((t=>this.update(t)),o.resizeDelay||0),this._dataChanges=[],yn[this.id]=this,a&&r?(ki.listen(this,"complete",xn),ki.listen(this,"progress",bn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return B(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Ks}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ri(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return le(this.canvas,this.ctx),this}stop(){return ki.stop(this),this}resize(t,e){ki.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ri(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),Y(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){U(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=en(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),U(n,(e=>{const n=e.options,o=n.id,a=en(o,n),r=N(n.type,e.dtype);void 0!==n.position&&pn(n.position,a)===pn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(Ks.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),U(s,((t,e)=>{t||delete i[e]})),U(i,(t=>{_s.configure(this,t,t.options),_s.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(mn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){U(this.scales,(t=>{_s.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);ot(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){wn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;_s.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],U(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i=t._clip,s=!i.disabled,n=function(t,e){const{xScale:i,yScale:s}=t;return i&&s?{left:Mn(i,e,"left"),right:Mn(i,e,"right"),top:Mn(s,e,"top"),bottom:Mn(s,e,"bottom")}:e}(t,this.chartArea),o={meta:t,index:t.index,cancelable:!0};!1!==this.notifyPlugins("beforeDatasetDraw",o)&&(s&&fe(e,{left:!1===i.left?0:n.left-i.left,right:!1===i.right?this.width:n.right+i.right,top:!1===i.top?0:n.top-i.top,bottom:!1===i.bottom?this.height:n.bottom+i.bottom}),t.controller.draw(),s&&ge(e),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(t){return ue(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=as.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Oe(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);st(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),ki.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};U(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){U(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},U(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!X(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=function(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}(t),h=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,Y(n.onHover,[t,a,this],this),r&&Y(n.onClick,[t,a,this],this));const l=!X(a,s);return(l||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=h,l}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Sn(){return U(kn.instances,(t=>t._plugins.invalidate()))}function Pn(t,e,i,s){const n=ke(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return Ct(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Ct(n.innerStart,0,a),innerEnd:Ct(n.innerEnd,0,a)}}function Dn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Cn(t,e,i,s,n,o){const{x:a,y:r,startAngle:h,pixelMargin:l,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-l,0),u=c>0?c+s+i+l:0;let f=0;const g=n-h;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/at)/d)/2,m=h+p+f,x=n-p-f,{outerStart:b,outerEnd:_,innerStart:y,innerEnd:v}=Pn(e,u,d,x-m),w=d-b,M=d-_,k=m+b/w,S=x-_/M,P=u+y,D=u+v,C=m+y/P,A=x-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=Dn(M,S,a,r);t.arc(e.x,e.y,_,S,x+dt)}const i=Dn(D,x,a,r);if(t.lineTo(i.x,i.y),v>0){const e=Dn(D,A,a,r);t.arc(e.x,e.y,v,x+dt,A+Math.PI)}const s=(x-v/u+(m+y/u))/2;if(t.arc(a,r,u,x-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=Dn(P,C,a,r);t.arc(e.x,e.y,y,C+Math.PI,m-dt)}const n=Dn(w,m,a,r);if(t.lineTo(n.x,n.y),b>0){const e=Dn(w,k,a,r);t.arc(e.x,e.y,b,m-dt,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function An(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:h}=e,{borderWidth:l,borderJoinStyle:c,borderDash:d,borderDashOffset:u}=h,f="inner"===h.borderAlign;if(!l)return;t.setLineDash(d||[]),t.lineDashOffset=u,f?(t.lineWidth=2*l,t.lineJoin=c||"round"):(t.lineWidth=l,t.lineJoin=c||"bevel");let g=e.endAngle;if(o){Cn(t,e,i,s,g,n);for(let e=0;en?(l=n/h,t.arc(o,a,h,i+l,s-l,!0)):t.arc(o,a,n,i+dt,s-dt),t.closePath(),t.clip()}(t,e,g),o||(Cn(t,e,i,s,g,n),t.stroke())}class On extends zs{static id="arc";static defaults={borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0};static defaultRoutes={backgroundColor:"backgroundColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=Mt(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:l,circumference:c}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),d=(this.options.spacing+this.options.borderWidth)/2,u=N(c,r-a),f=Dt(n,a,r)&&a!==r,g=u>=rt||f,p=At(o,h+d,l+d);return g&&p}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:h}=this.options,l=(s+n)/2,c=(o+a+h+r)/2;return{x:e+Math.cos(l)*c,y:i+Math.sin(l)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>rt?Math.floor(i/rt):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(at,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let h=e.endAngle;if(o){Cn(t,e,i,s,h,n);for(let e=0;er&&o>r;return{count:s,start:h,loop:e.loop,ilen:l(a+(l?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(h&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function zn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?Ln:In}const Fn="function"==typeof Path2D;function Bn(t,e,i,s){Fn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Tn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=zn(e);for(const r of n)Tn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Wn extends zs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Ge(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=function(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);return yi(t,!0===s?[{start:a,end:r,loop:o}]:function(t,e,i,s){const n=t.length,o=[];let a,r=e,h=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?h.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,h.skip&&(e=a)),h=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,rt.replace("rgb(","rgba(").replace(")",", 0.5)")));function Gn(t){return Kn[t%Kn.length]}function Jn(t){return Zn[t%Zn.length]}function Qn(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof Zi?e=function(t,e){return t.backgroundColor=t.data.map((()=>Gn(e++))),e}(i,e):n instanceof Ji?e=function(t,e){return t.backgroundColor=t.data.map((()=>Jn(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Gn(e),t.backgroundColor=Jn(e),++e}(i,e))}}function to(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var eo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n,a=to(s)||(r=n)&&(r.borderColor||r.backgroundColor)||o&&to(o)||"rgba(0,0,0,0.1)"!==ae.borderColor||"rgba(0,0,0,0.1)"!==ae.backgroundColor;var r;if(!i.forceOverride&&a)return;const h=Qn(t);s.forEach(h)}};const io=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class so extends zs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=Y(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Ce(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=io(i,n);let h,l;e.font=s.string,this.isHorizontal()?(h=this.maxWidth,l=this._fitRows(o,n,a,r)+10):(l=this.maxHeight,h=this._fitCols(o,s,a,r)+10),this.width=Math.min(h,t.maxWidth||this.maxWidth),this.height=Math.min(l,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],h=this.lineWidths=[0],l=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-l;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||h[h.length-1]+g+2*a>o)&&(c+=l,h[h.length-(f>0?0:1)]=0,u+=l,d++),r[f]={left:0,top:u,row:d,width:g,height:s},h[h.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],h=this.columnSizes=[],l=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=no(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>l&&(c+=d+a,h.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,h.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=fi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=Wt(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=Wt(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=Wt(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=Wt(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;fe(t,this),this._draw(),ge(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ae.color,r=fi(t.rtl,this.left,this.width),h=Ce(o.font),{padding:l}=o,c=h.size,d=c/2;let u;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:f,boxHeight:g,itemHeight:p}=io(o,c),m=this.isHorizontal(),x=this._computeTitleHeight();u=m?{x:Wt(n,this.left+l,this.right-i[0]),y:this.top+l+x,line:0}:{x:this.left+l,y:Wt(n,this.top+x+l,this.bottom-e[0].height),line:0},gi(this.ctx,t.textDirection);const b=p+l;this.legendItems.forEach(((_,y)=>{s.strokeStyle=_.fontColor,s.fillStyle=_.fontColor;const v=s.measureText(_.text).width,w=r.textAlign(_.textAlign||(_.textAlign=o.textAlign)),M=f+d+v;let k=u.x,S=u.y;r.setWidth(this.width),m?y>0&&k+M+l>this.right&&(S=u.y+=b,u.line++,k=u.x=Wt(n,this.left+l,this.right-i[u.line])):y>0&&S+b>this.bottom&&(k=u.x=k+e[u.line].width+l,u.line++,S=u.y=Wt(n,this.top+x+l,this.bottom-e[u.line].height));if(function(t,e,i){if(isNaN(f)||f<=0||isNaN(g)||g<0)return;s.save();const n=N(i.lineWidth,1);if(s.fillStyle=N(i.fillStyle,a),s.lineCap=N(i.lineCap,"butt"),s.lineDashOffset=N(i.lineDashOffset,0),s.lineJoin=N(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=N(i.strokeStyle,a),s.setLineDash(N(i.lineDash,[])),o.usePointStyle){const a={radius:g*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},h=r.xPlus(t,f/2);de(s,a,h,e+d,o.pointStyleWidth&&f)}else{const o=e+Math.max((c-g)/2,0),a=r.leftForLtr(t,f),h=Pe(i.borderRadius);s.beginPath(),Object.values(h).some((t=>0!==t))?ye(s,{x:a,y:o,w:f,h:g,radius:h}):s.rect(a,o,f,g),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(k),S,_),k=((t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e)(w,k+f+d,m?k+M:this.right,t.rtl),function(t,e,i){_e(s,i.text,t,e+p/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(k),S,_),m)u.x+=M+l;else if("string"!=typeof _.text){const t=h.lineHeight;u.y+=no(_,t)+l}else u.y+=b})),pi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Ce(e.font),s=De(e.padding);if(!e.display)return;const n=fi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,h=s.top+r;let l,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+h,c=Wt(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);l=h+Wt(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=Wt(a,c,c+d);o.textAlign=n.textAlign(Bt(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,_e(o,e.text,u,l,i)}_computeTitleHeight(){const t=this.options.title,e=Ce(t.font),i=De(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(At(t,this.left,this.right)&&At(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const h=t.controller.getStyle(i?0:void 0),l=De(h.borderWidth);return{text:e[t.index].label,fillStyle:h.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:h.borderCapStyle,lineDash:h.borderDash,lineDashOffset:h.borderDashOffset,lineJoin:h.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:h.borderColor,pointStyle:s||h.pointStyle,rotation:h.rotation,textAlign:n||h.textAlign,borderRadius:a&&(r||h.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ao extends zs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=W(i.text)?i.text.length:1;this._padding=De(i.padding);const n=s*Ce(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,h,l,c=0;return this.isHorizontal()?(h=Wt(a,i,n),l=e+t,r=n-i):("left"===o.position?(h=i+t,l=Wt(a,s,e),c=-.5*at):(h=n-t,l=Wt(a,e,s),c=.5*at),r=s-e),{titleX:h,titleY:l,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Ce(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);_e(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:Bt(e.align),textBaseline:"middle",translation:[n,o]})}}var ro={id:"title",_element:ao,start(t,e,i){!function(t,e){const i=new ao({ctx:t.ctx,options:e,chart:t});_s.configure(t,i,e),_s.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;_s.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;_s.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};new WeakMap;const ho={average(t){if(!t.length)return!1;let e,i,s=new Set,n=0,o=0;for(e=0,i=t.length;et+e))/s.size,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i-1?t.split("\n"):t}function uo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function fo(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,h=Ce(e.bodyFont),l=Ce(e.titleFont),c=Ce(e.footerFont),d=o.length,u=n.length,f=s.length,g=De(e.padding);let p=g.height,m=0,x=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(x+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*l.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),x){p+=f*(e.displayColors?Math.max(r,h.lineHeight):h.lineHeight)+(x-f)*h.lineHeight+(x-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){m=Math.max(m,i.measureText(t).width+b)};return i.save(),i.font=l.string,U(t.title,_),i.font=h.string,U(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2+e.boxPadding:0,U(s,(t=>{U(t.before,_),U(t.lines,_),U(t.after,_)})),b=0,i.font=c.string,U(t.footer,_),i.restore(),m+=g.width,{width:m,height:p}}function go(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:h}}=t;let l="center";return"center"===s?l=n<=(r+h)/2?"left":"right":n<=o/2?l="left":n>=a-o/2&&(l="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(l,t,e,i)&&(l="center"),l}function po(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||go(t,e,i,s),yAlign:s}}function mo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:h}=i,l=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=Pe(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,h,l);return"center"===h?"left"===r?g+=l:"right"===r&&(g-=l):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:Ct(g,0,s.width-e.width),y:Ct(p,0,s.height-e.height)}}function xo(t,e,i){const s=De(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function bo(t){return lo([],co(t))}function _o(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const yo={beforeTitle:z,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=_o(i,t);lo(e.before,co(vo(n,"beforeLabel",this,t))),lo(e.lines,vo(n,"label",this,t)),lo(e.after,co(vo(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return bo(vo(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=vo(i,"beforeFooter",this,t),n=vo(i,"footer",this,t),o=vo(i,"afterFooter",this,t);let a=[];return a=lo(a,co(s)),a=lo(a,co(n)),a=lo(a,co(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,h=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(h=h.sort(((e,s)=>t.itemSort(e,s,i)))),U(h,(e=>{const i=_o(t.callbacks,e);s.push(vo(i,"labelColor",this,e)),n.push(vo(i,"labelPointStyle",this,e)),o.push(vo(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=h,h}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=ho[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=fo(this,i),a=Object.assign({},t,e),r=po(this.chart,i,a),h=mo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:h.x,y:h.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:h,bottomLeft:l,bottomRight:c}=Pe(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,l)+o:"right"===s?d+f-Math.max(h,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const h=fi(i.rtl,this.x,this.width);for(t.x=xo(this,i.titleAlign,i),e.textAlign=h.textAlign(i.titleAlign),e.textBaseline="middle",o=Ce(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,ye(t,{x:e,y:f,w:h,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),ye(t,{x:i,y:f+1,w:h-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,f,h,r),t.strokeRect(e,f,h,r),t.fillStyle=o.backgroundColor,t.fillRect(i,f+1,h-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:h,boxPadding:l}=i,c=Ce(i.bodyFont);let d=c.lineHeight,u=0;const f=fi(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let m,x,b,_,y,v,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=xo(this,p,i),e.fillStyle=i.bodyColor,U(this.beforeBody,g),u=a&&"right"!==p?"center"===o?h/2+l:h+2+l:0,_=0,v=s.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=ho[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=fo(this,t),a=Object.assign({},i,this._size),r=po(e,t,a),h=mo(t,a,r,e);s._to===h.x&&n._to===h.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=De(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),gi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),pi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!X(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!X(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=ho[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Mo={id:"tooltip",_element:wo,positioners:ho,afterInit(t,e,i){i&&(t.tooltip=new wo({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:yo},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};function ko(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function So(t){const e=this.getLabels();return t>=0&&tnull===t?null:Ct(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:ko(i,t,N(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return So.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Do(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:h,maxTicks:l,maxDigits:c,includeBounds:d}=t,u=n||1,f=l-1,{min:g,max:p}=e,m=!B(o),x=!B(a),b=!B(h),_=(p-g)/(c+1);let y,v,w,M,k=xt((p-g)/f/u)*u;if(k<1e-14&&!m&&!x)return[{value:g},{value:p}];M=Math.ceil(p/k)-Math.floor(g/k),M>f&&(k=xt(M*k/f/u)*u),B(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,w=Math.ceil(p/k)*k):(v=g,w=p),m&&x&&n&&function(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}((a-o)/n,k/1e3)?(M=Math.round(Math.min((a-o)/k,l)),k=(a-o)/M,v=o,w=a):b?(v=m?o:v,w=x?a:w,M=h-1,k=(w-v)/M):(M=(w-v)/k,M=mt(M,Math.round(M),k/1e3)?Math.round(M):Math.ceil(M));const S=Math.max(wt(k),wt(v));y=Math.pow(10,B(r)?S:r),v=Math.round(v*y)/y,w=Math.round(w*y)/y;let P=0;for(m&&(d&&v!==o?(i.push({value:o}),va)break;i.push({value:t})}return x&&d&&w!==a?i.length&&mt(i[i.length-1].value,a,Co(a,_,t))?i[i.length-1].value=a:i.push({value:a}):x&&w!==a||i.push({value:w}),i}function Co(t,e,{horizontal:i,minRotation:s}){const n=yt(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}class Ao extends Us{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return B(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=pt(s),e=pt(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=Do({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&_t(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Jt(t,this.chart.options.locale,this.options.ticks.format)}}class Oo extends Ao{static id="linear";static defaults={ticks:{callback:te.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=V(t)?t:0,this.max=V(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=yt(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}te.formatters.logarithmic;te.formatters.numeric;kn.register(On,Wn,qn,Vn,Ki,Zi,Gi,Qi,Po,Oo,oo,ro,Mo,eo),i.g.Chart=kn}},function(t){var e;e=5579,t(t.s=e)}]); \ No newline at end of file diff --git a/public/build/chart.bafa38e7.js b/public/build/chart.bafa38e7.js new file mode 100644 index 000000000..c856d07a5 --- /dev/null +++ b/public/build/chart.bafa38e7.js @@ -0,0 +1,2 @@ +/*! For license information please see chart.bafa38e7.js.LICENSE.txt */ +"use strict";(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[65],{3808:function(t,e,i){function s(t){return t+.5|0}const n=(t,e,i)=>Math.max(Math.min(t,i),e);function o(t){return n(s(2.55*t),0,255)}function a(t){return n(s(255*t),0,255)}function r(t){return n(s(t/2.55)/100,0,1)}function h(t){return n(s(100*t),0,100)}const l={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},c=[..."0123456789ABCDEF"],d=t=>c[15&t],u=t=>c[(240&t)>>4]+c[15&t],f=t=>(240&t)>>4==(15&t);function g(t){var e=(t=>f(t.r)&&f(t.g)&&f(t.b)&&f(t.a))(t)?d:u;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const p=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function x(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function m(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function b(t,e,i){const s=x(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function _(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,h,l;return n!==o&&(l=n-o,h=a>.5?l/(2-n-o):l/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),P.transparent=[0,0,0,0]);const e=P[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const A=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const C=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,O=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function R(t,e,i){if(t){let s=_(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=v(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function T(t,e){return t?Object.assign(e||{},t):t}function I(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=a(t[3]))):(e=T(t,{r:0,g:0,b:0,a:1})).a=a(e.a),e}function E(t){return"r"===t.charAt(0)?function(t){const e=A.exec(t);let i,s,a,r=255;if(e){if(e[7]!==i){const t=+e[7];r=e[8]?o(t):n(255*t,0,255)}return i=+e[1],s=+e[3],a=+e[5],i=255&(e[2]?o(i):n(i,0,255)),s=255&(e[4]?o(s):n(s,0,255)),a=255&(e[6]?o(a):n(a,0,255)),{r:i,g:s,b:a,a:r}}}(t):w(t)}class L{constructor(t){if(t instanceof L)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=I(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*l[s[1]],g:255&17*l[s[2]],b:255&17*l[s[3]],a:5===o?17*l[s[4]]:255}:7!==o&&9!==o||(n={r:l[s[1]]<<4|l[s[2]],g:l[s[3]]<<4|l[s[4]],b:l[s[5]]<<4|l[s[6]],a:9===o?l[s[7]]<<4|l[s[8]]:255})),i=n||D(t)||E(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=T(this._rgb);return t&&(t.a=r(t.a)),t}set rgb(t){this._rgb=I(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${r(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?g(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=_(t),i=e[0],s=h(e[1]),n=h(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${r(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,h=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-h,i.r=255&h*i.r+n*s.r+.5,i.g=255&h*i.g+n*s.g+.5,i.b=255&h*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=O(r(t.r)),n=O(r(t.g)),o=O(r(t.b));return{r:a(C(s+i*(O(r(e.r))-s))),g:a(C(n+i*(O(r(e.g))-n))),b:a(C(o+i*(O(r(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new L(this.rgb)}alpha(t){return this._rgb.a=a(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=s(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return R(this._rgb,2,t),this}darken(t){return R(this._rgb,2,-t),this}saturate(t){return R(this._rgb,1,t),this}desaturate(t){return R(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=_(t);i[0]=M(i[0]+e),i=v(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function z(){}const F=(()=>{let t=0;return()=>t++})();function B(t){return null==t}function W(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function H(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function V(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function j(t,e){return V(t)?t:e}function N(t,e){return void 0===t?e:t}const $=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function Y(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function U(t,e,i,s){let n,o,a;if(W(t))if(o=t.length,s)for(n=o-1;n>=0;n--)e.call(i,t[n],n);else for(n=0;nt,x:t=>t.x,y:t=>t.y};function et(t,e){const i=tt[e]||(tt[e]=function(t){const e=function(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function it(t){return t.charAt(0).toUpperCase()+t.slice(1)}const st=t=>void 0!==t,nt=t=>"function"==typeof t,ot=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};const at=Math.PI,rt=2*at,ht=rt+at,lt=Number.POSITIVE_INFINITY,ct=at/180,dt=at/2,ut=at/4,ft=2*at/3,gt=Math.log10,pt=Math.sign;function xt(t,e,i){return Math.abs(t-e)h&&l=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function Ot(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const Rt=(t,e,i,s)=>Ot(t,i,s?s=>{const n=t[s][e];return nt[s][e]Ot(t,i,(s=>t[s][e]>=i));const It=["push","pop","shift","splice","unshift"];function Et(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(It.forEach((e=>{delete t[e]})),delete t._chartjs)}function Lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const zt="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function Ft(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,zt.call(window,(()=>{s=!1,t.apply(e,i)})))}}const Bt=t=>"start"===t?"left":"end"===t?"right":"center",Wt=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2;function Ht(t,e,i){const s=e.length;let n=0,o=s;if(t._sorted){const{iScale:a,vScale:r,_parsed:h}=t,l=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null,c=a.axis,{min:d,max:u,minDefined:f,maxDefined:g}=a.getUserBounds();if(f){if(n=Math.min(Rt(h,c,d).lo,i?s:Rt(e,c,a.getPixelForValue(d)).lo),l){const t=h.slice(0,n+1).reverse().findIndex((t=>!B(t[r.axis])));n-=Math.max(0,t)}n=At(n,0,s-1)}if(g){let t=Math.max(Rt(h,a.axis,u,!0).hi+1,i?0:Rt(e,c,a.getPixelForValue(u),!0).hi+1);if(l){const e=h.slice(t-1).findIndex((t=>!B(t[r.axis])));t+=Math.max(0,e)}o=At(t,n,s)-n}else o=s-n}return{start:n,count:o}}function Vt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}const jt=t=>0===t||1===t,Nt=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*rt/i),$t=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*rt/i)+1,Yt={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*dt),easeOutSine:t=>Math.sin(t*dt),easeInOutSine:t=>-.5*(Math.cos(at*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>jt(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>jt(t)?t:Nt(t,.075,.3),easeOutElastic:t=>jt(t)?t:$t(t,.075,.3),easeInOutElastic(t){const e=.1125;return jt(t)?t:t<.5?.5*Nt(2*t,e,.45):.5+.5*$t(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-Yt.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*Yt.easeInBounce(2*t):.5*Yt.easeOutBounce(2*t-1)+.5};function Ut(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Xt(t){return Ut(t)?t:new L(t)}function qt(t){return Ut(t)?t:new L(t).saturate(.5).darken(.1).hexString()}const Kt=["x","y","borderWidth","radius","tension"],Jt=["color","borderColor","backgroundColor"];const Gt=new Map;function Zt(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=Gt.get(i);return s||(s=new Intl.NumberFormat(t,e),Gt.set(i,s)),s}(e,i).format(t)}const Qt={values:t=>W(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=gt(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),h={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(h,this.options.ticks.format),Zt(t,s,h)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(gt(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?Qt.numeric.call(this,t,e,i):""}};var te={formatters:Qt};const ee=Object.create(null),ie=Object.create(null);function se(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>qt(e.backgroundColor),this.hoverBorderColor=(t,e)=>qt(e.borderColor),this.hoverColor=(t,e)=>qt(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ne(this,t,e)}get(t){return se(this,t)}describe(t,e){return ne(ie,t,e)}override(t,e){return ne(ee,t,e)}route(t,e,i,s){const n=se(this,t),o=se(this,i),a="_"+e;Object.defineProperties(n,{[a]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[a],e=o[s];return H(t)?Object.assign({},e,t):N(t,e)},set(t){this[a]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ae=new oe({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:Jt},numbers:{type:"number",properties:Kt}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:te.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function re(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function he(t,e,i){const s=t.currentDevicePixelRatio,n=0!==i?Math.max(i/2,.5):0;return Math.round((e-n)*s)/s+n}function le(t,e){(e||t)&&((e=e||t.getContext("2d")).save(),e.resetTransform(),e.clearRect(0,0,t.width,t.height),e.restore())}function ce(t,e,i,s){de(t,e,i,s,null)}function de(t,e,i,s,n){let o,a,r,h,l,c,d,u;const f=e.pointStyle,g=e.rotation,p=e.radius;let x=(g||0)*ct;if(f&&"object"==typeof f&&(o=f.toString(),"[object HTMLImageElement]"===o||"[object HTMLCanvasElement]"===o))return t.save(),t.translate(i,s),t.rotate(x),t.drawImage(f,-f.width/2,-f.height/2,f.width,f.height),void t.restore();if(!(isNaN(p)||p<=0)){switch(t.beginPath(),f){default:n?t.ellipse(i,s,n/2,p,0,0,rt):t.arc(i,s,p,0,rt),t.closePath();break;case"triangle":c=n?n/2:p,t.moveTo(i+Math.sin(x)*c,s-Math.cos(x)*p),x+=ft,t.lineTo(i+Math.sin(x)*c,s-Math.cos(x)*p),x+=ft,t.lineTo(i+Math.sin(x)*c,s-Math.cos(x)*p),t.closePath();break;case"rectRounded":l=.516*p,h=p-l,a=Math.cos(x+ut)*h,d=Math.cos(x+ut)*(n?n/2-l:h),r=Math.sin(x+ut)*h,u=Math.sin(x+ut)*(n?n/2-l:h),t.arc(i-d,s-r,l,x-at,x-dt),t.arc(i+u,s-a,l,x-dt,x),t.arc(i+d,s+r,l,x,x+dt),t.arc(i-u,s+a,l,x+dt,x+at),t.closePath();break;case"rect":if(!g){h=Math.SQRT1_2*p,c=n?n/2:h,t.rect(i-c,s-h,2*c,2*h);break}x+=ut;case"rectRot":d=Math.cos(x)*(n?n/2:p),a=Math.cos(x)*p,r=Math.sin(x)*p,u=Math.sin(x)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+u,s-a),t.lineTo(i+d,s+r),t.lineTo(i-u,s+a),t.closePath();break;case"crossRot":x+=ut;case"cross":d=Math.cos(x)*(n?n/2:p),a=Math.cos(x)*p,r=Math.sin(x)*p,u=Math.sin(x)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"star":d=Math.cos(x)*(n?n/2:p),a=Math.cos(x)*p,r=Math.sin(x)*p,u=Math.sin(x)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a),x+=ut,d=Math.cos(x)*(n?n/2:p),a=Math.cos(x)*p,r=Math.sin(x)*p,u=Math.sin(x)*(n?n/2:p),t.moveTo(i-d,s-r),t.lineTo(i+d,s+r),t.moveTo(i+u,s-a),t.lineTo(i-u,s+a);break;case"line":a=n?n/2:Math.cos(x)*p,r=Math.sin(x)*p,t.moveTo(i-a,s-r),t.lineTo(i+a,s+r);break;case"dash":t.moveTo(i,s),t.lineTo(i+Math.cos(x)*(n?n/2:p),s+Math.sin(x)*p);break;case!1:t.closePath()}t.fill(),e.borderWidth>0&&t.stroke()}}function ue(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==o.strokeColor;let h,l;for(t.save(),t.font=n.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),B(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,o),h=0;hN(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=+o(t)||0;return i}function Se(t){return ke(t,{top:"y",right:"x",bottom:"y",left:"x"})}function Pe(t){return ke(t,["topLeft","topRight","bottomLeft","bottomRight"])}function De(t){const e=Se(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Ae(t,e){t=t||{},e=e||ae.font;let i=N(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=N(t.style,e.style);s&&!(""+s).match(Me)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:N(t.family,e.family),lineHeight:we(N(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:N(t.weight,e.weight),string:""};return n.string=function(t){return!t||B(t.size)||B(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}(n),n}function Ce(t,e,i,s){let n,o,a,r=!0;for(n=0,o=t.length;nt[0])){const o=i||t;void 0===s&&(s=je("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>Re([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>ze(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=je(Ee(o,t),i),void 0!==n)return Le(t,n)?He(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>Ne(t).includes(e),ownKeys:t=>Ne(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function Te(t,e,i,s){const n={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ie(t,s),setContext:e=>Te(t,e,i,s),override:n=>Te(t.override(n),e,i,s)};return new Proxy(n,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>ze(t,e,(()=>function(t,e,i){const{_proxy:s,_context:n,_subProxy:o,_descriptors:a}=t;let r=s[e];nt(r)&&a.isScriptable(e)&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let h=e(o,a||s);r.delete(t),Le(t,h)&&(h=He(n._scopes,n,t,h));return h}(e,r,t,i));W(r)&&r.length&&(r=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_descriptors:r}=i;if(void 0!==o.index&&s(t))return e[o.index%e.length];if(H(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const h of i){const i=He(s,n,t,h);e.push(Te(i,o,a&&a[t],r))}}return e}(e,r,t,a.isIndexable));Le(e,r)&&(r=Te(r,n,o&&o[e],a));return r}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ie(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:nt(i)?i:()=>i,isIndexable:nt(s)?s:()=>s}}const Ee=(t,e)=>t?t+it(e):e,Le=(t,e)=>H(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function ze(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e)||"constructor"===e)return t[e];const s=i();return t[e]=s,s}function Fe(t,e,i){return nt(t)?t(e,i):t}const Be=(t,e)=>!0===t?e:"string"==typeof t?et(e,t):void 0;function We(t,e,i,s,n){for(const o of e){const e=Be(i,o);if(e){t.add(e);const o=Fe(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function He(t,e,i,s){const n=e._rootScopes,o=Fe(e._fallback,i,s),a=[...t,...n],r=new Set;r.add(s);let h=Ve(r,a,i,o||i,s);return null!==h&&((void 0===o||o===i||(h=Ve(r,a,o,h,s),null!==h))&&Re(Array.from(r),[""],n,o,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const n=s[e];if(W(n)&&H(i))return i;return n||{}}(e,i,s))))}function Ve(t,e,i,s,n){for(;i;)i=We(t,e,i,s,n);return i}function je(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function Ne(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function $e(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,h,l,c;for(r=0,h=s;re"x"===t?"y":"x";function qe(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=kt(o,n),h=kt(a,o);let l=r/(r+h),c=h/(r+h);l=isNaN(l)?0:l,c=isNaN(c)?0:c;const d=s*l,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function Ke(t,e="x"){const i=Xe(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,h,l=Ue(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)Ke(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;ot.ownerDocument.defaultView.getComputedStyle(t,null);const ii=["top","right","bottom","left"];function si(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=ii[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}function ni(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=ei(i),o="border-box"===n.boxSizing,a=si(n,"padding"),r=si(n,"border","width"),{x:h,y:l,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,h=!1;if(((t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot))(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,h=!0}return{x:a,y:r,box:h}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((h-d)/f*i.width/s),y:Math.round((l-u)/g*i.height/s)}}const oi=t=>Math.round(10*t)/10;function ai(t,e,i,s){const n=ei(t),o=si(n,"margin"),a=ti(n.maxWidth,t,"clientWidth")||lt,r=ti(n.maxHeight,t,"clientHeight")||lt,h=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=t&&Qe(t);if(o){const t=o.getBoundingClientRect(),a=ei(o),r=si(a,"border","width"),h=si(a,"padding");e=t.width-h.width-r.width,i=t.height-h.height-r.height,s=ti(a.maxWidth,o,"clientWidth"),n=ti(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||lt,maxHeight:n||lt}}(t,e,i);let{width:l,height:c}=h;if("content-box"===n.boxSizing){const t=si(n,"border","width"),e=si(n,"padding");l-=e.width+t.width,c-=e.height+t.height}l=Math.max(0,l-o.width),c=Math.max(0,s?l/s:c-o.height),l=oi(Math.min(l,a,h.maxWidth)),c=oi(Math.min(c,r,h.maxHeight)),l&&!c&&(c=oi(l/2));return(void 0!==e||void 0!==i)&&s&&h.height&&c>h.height&&(c=h.height,l=oi(Math.floor(c*s))),{width:l,height:c}}function ri(t,e,i){const s=e||1,n=oi(t.height*s),o=oi(t.width*s);t.height=oi(t.height),t.width=oi(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const hi=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};Ze()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(t){}return t}();function li(t,e){const i=function(t,e){return ei(t).getPropertyValue(e)}(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function ci(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function di(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function ui(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=ci(t,n,i),r=ci(n,o,i),h=ci(o,e,i),l=ci(a,r,i),c=ci(r,h,i);return ci(l,c,i)}function fi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function gi(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function pi(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function xi(t){return"angle"===t?{between:Dt,compare:St,normalize:Pt}:{between:Ct,compare:(t,e)=>t-e,normalize:t=>t}}function mi({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function bi(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:h,normalize:l}=xi(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=xi(s),h=e.length;let l,c,{start:d,end:u,loop:f}=t;if(f){for(d+=h,u+=h,l=0,c=h;lb||h(n,m,p)&&0!==r(n,m),v=()=>!b||0===r(o,p)||h(o,m,p);for(let t=c,i=c;t<=d;++t)x=e[t%a],x.skip||(p=l(x[s]),p!==m&&(b=h(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(mi({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,m=p));return null!==_&&g.push(mi({start:_,end:d,loop:u,count:a,style:f})),g}function _i(t,e){const i=[],s=t.segments;for(let n=0;ns({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=zt.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var Pi=new Si;const Di="transparent",Ai={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Xt(t||Di),n=s.valid&&Xt(e||Di);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class Ci{constructor(t,e,i,s){const n=e[i];s=Ce([t.to,s,n,t.from]);const o=Ce([t.from,n,s]);this._active=!0,this._fn=t.fn||Ai[t.type||typeof o],this._easing=Yt[t.easing]||Yt.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Ce([t.to,e,s,t.from]),this._from=Ce([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const n=t[s];if(!H(n))return;const o={};for(const t of e)o[t]=n[t];(W(n.properties)&&n.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,o)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const h=o[r];if("$"===h.charAt(0))continue;if("options"===h){s.push(...this._animateOptions(t,e));continue}const l=e[h];let c=n[h];const d=i.get(h);if(c){if(d&&c.active()){c.update(d,l,a);continue}c.cancel()}d&&d.duration?(n[h]=c=new Ci(d,t,h,l),s.push(c)):t[h]=l}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(Pi.add(this._chart,i),!0):void 0}}function Ri(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Ti(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Fi(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,h=o.axis,l=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Wi(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Hi=t=>"reset"===t||"none"===t,Vi=(t,e)=>e?t:Object.assign({},t);class ji{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Ei(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Wi(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=N(i.xAxisID,Bi(t,"x")),o=e.yAxisID=N(i.yAxisID,Bi(t,"y")),a=e.rAxisID=N(i.rAxisID,Bi(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),l=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(l)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&Et(this._data,this),t._stacked&&Wi(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(H(e)){const t=this._cachedMeta;this._data=function(t,e){const{iScale:i,vScale:s}=e,n="x"===i.axis?"x":"y",o="x"===s.axis?"x":"y",a=Object.keys(t),r=new Array(a.length);let h,l,c;for(h=0,l=a.length;h{const e="_onData"+it(t),i=s[t];Object.defineProperty(s,t,{configurable:!0,enumerable:!1,value(...t){const n=i.apply(this,t);return s._chartjs.listeners.forEach((i=>{"function"==typeof i[e]&&i[e](...t)})),n}})})))),this._syncList=[],this._data=e}var s,n}addElements(){const t=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(t.dataset=new this.datasetElementType)}buildOrUpdateElements(t){const e=this._cachedMeta,i=this.getDataset();let s=!1;this._dataCheck();const n=e._stacked;e._stacked=Ei(e.vScale,e),e.stack!==i.stack&&(s=!0,Wi(e),e.stack=i.stack),this._resyncElements(t),(s||n!==e._stacked)&&(Fi(this,e._parsed),e._stacked=Ei(e.vScale,e))}configure(){const t=this.chart.config,e=t.datasetScopeKeys(this._type),i=t.getOptionScopes(this.getDataset(),e,!0);this.options=t.createResolver(i,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(t,e){const{_cachedMeta:i,_data:s}=this,{iScale:n,_stacked:o}=i,a=n.axis;let r,h,l,c=0===t&&e===s.length||i._sorted,d=t>0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,l=s;else{l=W(s[t])?this.parseArrayData(i,s,t,e):H(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const n=()=>null===h[a]||d&&h[a]t&&!e.hidden&&e._stacked&&{keys:Ti(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:l,max:c}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(a);let d,u;function f(){u=s[d];const e=u[a.axis];return!V(u[t.axis])||l>e||c=0;--d)if(!f()){this.updateRangeFromParsed(h,t,u,r);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Vi(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const h=new Oi(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(h)),h}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Hi(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Hi(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Hi(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;at-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const h=()=>{32767!==o&&-32768!==o&&(st(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(h=r,l=a),e[i.axis]=l,e._custom={barStart:h,barEnd:l,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Yi(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,h=[];let l,c,d,u;for(l=i,c=i+s;lt.x,i="left",s="right"):(e=t.baset.controller.options.grouped)),n=i.options.stacked,o=[],a=this._cachedMeta.controller.getParsed(e),r=a&&a[i.axis],h=t=>{const e=t._parsed.find((t=>t[i.axis]===r)),s=e&&e[t.vScale.axis];if(B(s)||isNaN(s))return!0};for(const i of s)if((void 0===e||!h(i))&&((!1===n||-1===o.indexOf(i.stack)||void 0===n&&void 0===i.stack)&&o.push(i.stack),i.index===t))break;return o.length||o.push(void 0),o}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter((i=>t[i].axis===e)).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const i of this.chart.data.datasets)t[N("x"===this.chart.options.indexAxis?i.xAxisID:i.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(d,e,a)*o,u===a&&(x-=d/2);const t=e.getPixelForDecimal(0),n=e.getPixelForDecimal(1),h=Math.min(t,n),f=Math.max(t,n);x=Math.max(Math.min(x,f),h),c=x+d,i&&!l&&(r._stacks[e.axis]._visualValues[s]=e.getValueForPixel(c)-e.getValueForPixel(x))}if(x===e.getPixelForValue(a)){const t=pt(d)*e.getLineWidthForValue(a)/2;x+=t,d-=t}return{size:d,base:x,head:c,center:c+d/2}}_calculateBarIndexPixels(t,e){const i=e.scale,s=this.options,n=s.skipNull,o=N(s.maxBarThickness,1/0);let a,r;const h=this._getAxisCount();if(e.grouped){const i=n?this._getStackCount(t):e.stackCount,l="flex"===s.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data,{labels:{pointStyle:i,textAlign:s,color:n,useBorderRadius:o,borderRadius:a}}=t.legend.options;return e.labels.length&&e.datasets.length?e.labels.map(((e,r)=>{const h=t.getDatasetMeta(0).controller.getStyle(r);return{text:e,fillStyle:h.backgroundColor,fontColor:n,hidden:!t.getDataVisibility(r),lineDash:h.borderDash,lineDashOffset:h.borderDashOffset,lineJoin:h.borderJoinStyle,lineWidth:h.borderWidth,strokeStyle:h.borderColor,textAlign:s,pointStyle:i,borderRadius:o&&(a||h.borderRadius),index:r}})):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,o,a=t=>+i[t];if(H(i[t])){const{key:t="value"}=this._parsing;a=e=>+et(i[e],t)}for(n=t,o=t+e;nDt(t,r,h,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>Dt(t,r,h,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,l,d),x=f(dt,c,u),m=g(at,l,d),b=g(at+dt,c,u);s=(p-m)/2,n=(x-b)/2,o=-(p+m)/2,a=-(x+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),m=(i.width-o)/f,b=(i.height-o)/g,_=Math.max(Math.min(m,b)/2,0),y=$(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=x*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*c,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/rt)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,h=(a.left+a.right)/2,l=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,x=this._getRotation();for(p=0;p0&&!isNaN(t)?rt*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Zt(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s0&&this.getParsed(e-1);for(let i=0;i=m){b.skip=!0;continue}const y=this.getParsed(i),v=B(y[u]),M=b[d]=o.getPixelForValue(y[d],i),w=b[u]=n||v?a.getBasePixel():a.getPixelForValue(r?this.applyStack(a,y,r):y[u],i);b.skip=isNaN(M)||isNaN(w)||v,b.stop=i>0&&Math.abs(y[d]-_[d])>p,g&&(b.parsed=y,b.raw=h.data[i]),c&&(b.options=l||this.resolveDataElementOptions(i,f.active?"active":s)),x||this.updateElement(f,i,b,s),_=y}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}}class ts extends ji{static id="polarArea";static defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data;if(e.labels.length&&e.datasets.length){const{labels:{pointStyle:i,color:s}}=t.legend.options;return e.labels.map(((e,n)=>{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=Zt(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return $e.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,h=r.xCenter,l=r.yCenter,c=r.getIndexAngle(0)-.5*at;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?yt(this.resolveDataElementOptions(t,e).angle||i):0}}class es extends Zi{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}}function is(t,e,i,s){const{controller:n,data:o,_sorted:a}=t,r=n._cachedMeta.iScale,h=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null;if(r&&e===r.axis&&"r"!==e&&a&&o.length){const a=r._reversePixels?Tt:Rt;if(!s){const s=a(o,e,i);if(h){const{vScale:e}=n._cachedMeta,{_parsed:i}=t,o=i.slice(0,s.lo+1).reverse().findIndex((t=>!B(t[e.axis])));s.lo-=Math.max(0,o);const a=i.slice(s.hi).findIndex((t=>!B(t[e.axis])));s.hi+=Math.max(0,a)}return s}if(n._sharedOptions){const t=o[0],s="function"==typeof t.getRange&&t.getRange(e);if(s){const t=a(o,e,i-s),n=a(o,e,i+s);return{lo:t.lo,hi:n.hi}}}}return{lo:0,hi:o.length-1}}function ss(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[a]&&t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:h}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var hs={evaluateInteractionItems:ss,modes:{index(t,e,i,s){const n=ni(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?ns(t,n,o,s,a):as(t,n,o,!1,s,a),h=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&h.push({element:i,datasetIndex:t.index,index:e})})),h):[]},dataset(t,e,i,s){const n=ni(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?ns(t,n,o,s,a):as(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tns(t,ni(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ni(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return as(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>rs(t,ni(e,t),"x",i.intersect,s),y:(t,e,i,s)=>rs(t,ni(e,t),"y",i.intersect,s)}};const ls=["left","top","right","bottom"];function cs(t,e){return t.filter((t=>t.pos===e))}function ds(t,e){return t.filter((t=>-1===ls.indexOf(t.pos)&&t.box.axis===e))}function us(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function fs(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!ls.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function bs(t,e,i,s){const n=[];let o,a,r,h,l,c;for(o=0,a=t.length,l=0;ot.box.fullSize)),!0),s=us(cs(e,"left"),!0),n=us(cs(e,"right")),o=us(cs(e,"top"),!0),a=us(cs(e,"bottom")),r=ds(e,"x"),h=ds(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(h).concat(a).concat(r),chartArea:cs(e,"chartArea"),vertical:s.concat(n).concat(h),horizontal:o.concat(a).concat(r)}}(t.boxes),h=r.vertical,l=r.horizontal;U(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=h.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),u=Object.assign({},n);ps(u,De(s));const f=Object.assign({maxPadding:u,w:o,h:a,x:n.left,y:n.top},n),g=fs(h.concat(l),d);bs(r.fullSize,f,d,g),bs(h,f,d,g),bs(l,f,d,g)&&bs(h,f,d,g),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(f),ys(r.leftAndTop,f,d,g),f.x+=f.w,f.y+=f.h,ys(r.rightAndBottom,f,d,g),t.chartArea={left:f.left,top:f.top,right:f.left+f.w,bottom:f.top+f.h,height:f.h,width:f.w},U(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(f.w,f.h,{left:0,top:0,right:0,bottom:0})}))}};class Ms{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class ws extends Ms{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ks={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},Ss=t=>null===t||""===t;const Ps=!!hi&&{passive:!0};function Ds(t,e,i){t&&t.canvas&&t.canvas.removeEventListener(e,i,Ps)}function As(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function Cs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||As(i.addedNodes,s),e=e&&!As(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function Os(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||As(i.removedNodes,s),e=e&&!As(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const Rs=new Map;let Ts=0;function Is(){const t=window.devicePixelRatio;t!==Ts&&(Ts=t,Rs.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Es(t,e,i){const s=t.canvas,n=s&&Qe(s);if(!n)return;const o=Ft(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){Rs.size||window.addEventListener("resize",Is),Rs.set(t,e)}(t,o),a}function Ls(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){Rs.delete(t),Rs.size||window.removeEventListener("resize",Is)}(t)}function zs(t,e,i){const s=t.canvas,n=Ft((e=>{null!==t.ctx&&i(function(t,e){const i=ks[t.type]||t.type,{x:s,y:n}=ni(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t&&t.addEventListener(e,i,Ps)}(s,e,n),n}class Fs extends Ms{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t.$chartjs={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",Ss(n)){const e=li(t,"width");void 0!==e&&(t.width=e)}if(Ss(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=li(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e.$chartjs)return!1;const i=e.$chartjs.initial;["height","width"].forEach((t=>{const s=i[t];B(s)?e.removeAttribute(t):e.setAttribute(t,s)}));const s=i.style||{};return Object.keys(s).forEach((t=>{e.style[t]=s[t]})),e.width=e.width,delete e.$chartjs,!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:Cs,detach:Os,resize:Es}[e]||zs;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:Ls,detach:Ls,resize:Ls}[e]||Ds)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return ai(t,e,i,s)}isAttached(t){const e=t&&Qe(t);return!(!e||!e.isConnected)}}class Bs{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){const{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return bt(this.x)&&bt(this.y)}getProps(t,e){const i=this.$animations;if(!e||!i)return this;const s={};return t.forEach((t=>{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ws(t,e){const i=t.options.ticks,s=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),n=Math.min(i.maxTicksLimit||s,s),o=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;in)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nt-e)).pop(),e}(s);for(let t=0,e=o.length-1;tn)return e}return Math.max(n,1)}(o,e,n);if(a>0){let t,i;const s=a>1?Math.round((h-r)/(a-1)):null;for(Hs(e,l,c,B(s)?0:r-s,r),t=0,i=a-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,js=(t,e)=>Math.min(e||t,t);function Ns(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return l}function Ys(t){return t.drawTicks?t.tickLength:0}function Us(t,e){if(!t.display)return 0;const i=Ae(t.font,e),s=De(t.padding);return(W(t.text)?t.text.length:1)*i.lineHeight+s.height}function Xs(t,e,i){let s=Bt(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class qs extends Bs{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=j(t,Number.POSITIVE_INFINITY),e=j(e,Number.NEGATIVE_INFINITY),i=j(i,Number.POSITIVE_INFINITY),s=j(s,Number.NEGATIVE_INFINITY),{min:j(t,i),max:j(e,s),minDefined:V(t),maxDefined:V(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,h=a.length;rs?s:i,s=n&&i>s?i:s,{min:j(i,j(s,i)),max:j(s,j(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Y(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=function(t,e,i){const{min:s,max:n}=t,o=$(e,(n-s)/2),a=(t,e)=>i&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const l=this._getLabelSizes(),c=l.widest.width,d=l.highest.height,u=At(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Ys(t.grid)-e.padding-Us(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),h=vt(Math.min(Math.asin(At((l.highest.height+6)/o,-1,1)),Math.asin(At(a/r,-1,1))-Math.asin(At(d/r,-1,1)))),h=Math.max(s,Math.min(n,h))),this.labelRotation=h}afterCalculateLabelRotation(){Y(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Y(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Us(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Ys(n)+o):(t.height=this.maxHeight,t.width=Ys(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,h=yt(this.labelRotation),l=Math.cos(h),c=Math.sin(h);if(a){const e=i.mirror?0:c*n.width+l*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:l*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,l)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,h="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,l=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?h?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-l+o)*this.width/(this.width-l),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Y(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:o[t]||0,height:a[t]||0});return{first:w(0),last:w(e-1),widest:w(v),highest:w(M),widths:o,heights:a}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return At(this._alignToPixels?he(this.chart,e,0):e,-32768,32767)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:o,border:a}=s,r=n.offset,h=this.isHorizontal(),l=this.ticks.length+(r?1:0),c=Ys(n),d=[],u=a.setContext(this.getContext()),f=u.display?u.width:0,g=f/2,p=function(t){return he(i,t,f)};let x,m,b,_,y,v,M,w,k,S,P,D;if("top"===o)x=p(this.bottom),v=this.bottom-c,w=x-g,S=p(t.top)+g,D=t.bottom;else if("bottom"===o)x=p(this.top),S=t.top,D=p(t.bottom)-g,v=x+g,w=this.top+c;else if("left"===o)x=p(this.right),y=this.right-c,M=x-g,k=p(t.left)+g,P=t.right;else if("right"===o)x=p(this.left),k=t.left,P=p(t.right)-g,y=x+g,M=this.left+c;else if("x"===e){if("center"===o)x=p((t.top+t.bottom)/2+.5);else if(H(o)){const t=Object.keys(o)[0],e=o[t];x=p(this.chart.scales[t].getPixelForValue(e))}S=t.top,D=t.bottom,v=x+g,w=v+c}else if("y"===e){if("center"===o)x=p((t.left+t.right)/2);else if(H(o)){const t=Object.keys(o)[0],e=o[t];x=p(this.chart.scales[t].getPixelForValue(e))}y=x-g,M=y-c,k=t.left,P=t.right}const A=N(s.ticks.maxTicksLimit,l),C=Math.max(1,Math.ceil(l/A));for(m=0;m0&&(o-=s/2)}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}p.push({label:_,font:k,textOffset:D,options:{rotation:g,color:i,strokeColor:r,strokeWidth:l,textAlign:u,textBaseline:A,translation:[y,v],backdrop:d}})}return p}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-yt(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,h;return"left"===e?s?(h=this.right+n,"near"===i?r="left":"center"===i?(r="center",h+=a/2):(r="right",h+=a)):(h=this.right-o,"near"===i?r="right":"center"===i?(r="center",h-=a/2):(r="left",h=this.left)):"right"===e?s?(h=this.left+n,"near"===i?r="right":"center"===i?(r="center",h-=a/2):(r="left",h-=a)):(h=this.left+o,"near"===i?r="left":"center"===i?(r="center",h+=a/2):(r="right",h=this.right)):r="right",{textAlign:r,x:h}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),h=a.join(".");ae.route(o,n,h,r)}))}(e,t.defaultRoutes);t.descriptors&&ae.describe(e,t.descriptors)}(t,o,i),this.override&&ae.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ae[s]&&(delete ae[s][i],this.override&&delete ee[i])}}class Js{constructor(){this.controllers=new Ks(ji,"datasets",!0),this.elements=new Ks(Bs,"elements"),this.plugins=new Ks(Object,"plugins"),this.scales=new Ks(qs,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):U(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=it(t);Y(i["before"+s],[],i),e[t](i),Y(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function Qs(t,e){return e||!1!==t?!0===t?{}:t:null}function tn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function en(t,e){const i=ae.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function sn(t){if("x"===t||"y"===t||"r"===t)return t}function nn(t,...e){if(sn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&sn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function on(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function an(t,e){const i=ee[t.type]||{scales:{}},s=e.scales||{},n=en(t.type,e),o=Object.create(null);return Object.keys(s).forEach((e=>{const a=s[e];if(!H(a))return console.error(`Invalid scale configuration for scale: ${e}`);if(a._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const r=nn(e,a,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return on(t,"x",i[0])||on(t,"y",i[0])}return{}}(e,t),ae.scales[a.type]),h=function(t,e){return t===e?"_index_":"_value_"}(r,n),l=i.scales||{};o[e]=Z(Object.create(null),[{axis:r},a,l[r],l[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,a=i.indexAxis||en(n,e),r=(ee[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,a),n=i[e+"AxisID"]||e;o[n]=o[n]||Object.create(null),Z(o[n],[{axis:e},s[n],r[t]])}))})),Object.keys(o).forEach((t=>{const e=o[t];Z(e,[ae.scales[e.type],ae.scale])})),o}function rn(t){const e=t.options||(t.options={});e.plugins=N(e.plugins,{}),e.scales=an(t,e)}function hn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const ln=new Map,cn=new Set;function dn(t,e){let i=ln.get(t);return i||(i=e(),ln.set(t,i),cn.add(i)),i}const un=(t,e,i)=>{const s=et(e,i);void 0!==s&&t.add(s)};class fn{constructor(t){this._config=function(t){return(t=t||{}).data=hn(t.data),rn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=hn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),rn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return dn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return dn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return dn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return dn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>un(r,t,e)))),e.forEach((t=>un(r,s,t))),e.forEach((t=>un(r,ee[n]||{},t))),e.forEach((t=>un(r,ae,t))),e.forEach((t=>un(r,ie,t)))}));const h=Array.from(r);return 0===h.length&&h.push(Object.create(null)),cn.has(e)&&o.set(e,h),h}chartOptionScopes(){const{options:t,type:e}=this;return[t,ee[e]||{},ae.datasets[e]||{},{type:e},ae,ie]}resolveNamedOptions(t,e,i,s=[""]){const n={$shared:!0},{resolver:o,subPrefixes:a}=gn(this._resolverCache,t,s);let r=o;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ie(t);for(const n of e){const e=i(n),o=s(n),a=(o||e)&&t[n];if(e&&(nt(a)||pn(a))||o&&W(a))return!0}return!1}(o,e)){n.$shared=!1;r=Te(o,i=nt(i)?i():i,this.createResolver(t,i,a))}for(const t of e)n[t]=r[t];return n}createResolver(t,e,i=[""],s){const{resolver:n}=gn(this._resolverCache,t,i);return H(e)?Te(n,e,void 0,s):n}}function gn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:Re(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const pn=t=>H(t)&&Object.getOwnPropertyNames(t).some((e=>nt(t[e])));const xn=["top","bottom","left","right","chartArea"];function mn(t,e){return"top"===t||"bottom"===t||-1===xn.indexOf(t)&&"x"===e}function bn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function _n(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),Y(i&&i.onComplete,[t],e)}function yn(t){const e=t.chart,i=e.options.animation;Y(i&&i.onProgress,[t],e)}function vn(t){return Ze()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Mn={},wn=t=>{const e=vn(t);return Object.values(Mn).filter((t=>t.canvas===e)).pop()};function kn(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class Sn{static defaults=ae;static instances=Mn;static overrides=ee;static registry=Gs;static version="4.5.1";static getChart=wn;static register(...t){Gs.add(...t),Pn()}static unregister(...t){Gs.remove(...t),Pn()}constructor(t,e){const i=this.config=new fn(e),s=vn(t),n=wn(s);if(n)throw new Error("Canvas is already in use. Chart with ID '"+n.id+"' must be destroyed before the canvas with ID '"+n.canvas.id+"' can be reused.");const o=i.createResolver(i.chartOptionScopes(),this.getContext());this.platform=new(i.platform||function(t){return!Ze()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?ws:Fs}(s)),this.platform.updateConfig(i);const a=this.platform.acquireContext(s,o.aspectRatio),r=a&&a.canvas,h=r&&r.height,l=r&&r.width;this.id=F(),this.ctx=a,this.canvas=r,this.width=l,this.height=h,this._options=o,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new Zs,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=function(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}((t=>this.update(t)),o.resizeDelay||0),this._dataChanges=[],Mn[this.id]=this,a&&r?(Pi.listen(this,"complete",_n),Pi.listen(this,"progress",yn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:s,_aspectRatio:n}=this;return B(t)?e&&n?n:s?i/s:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return Gs}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ri(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return le(this.canvas,this.ctx),this}stop(){return Pi.stop(this),this}resize(t,e){Pi.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ri(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),Y(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){U(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=nn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),U(n,(e=>{const n=e.options,o=n.id,a=nn(o,n),r=N(n.type,e.dtype);void 0!==n.position&&mn(n.position,a)===mn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(Gs.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),U(s,((t,e)=>{t||delete i[e]})),U(i,(t=>{vs.configure(this,t,t.options),vs.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(bn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){U(this.scales,(t=>{vs.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);ot(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){kn(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;vs.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],U(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i={meta:t,index:t.index,cancelable:!0},s=ki(this,t);!1!==this.notifyPlugins("beforeDatasetDraw",i)&&(s&&fe(e,s),t.controller.draw(),s&&ge(e),i.cancelable=!1,this.notifyPlugins("afterDatasetDraw",i))}isPointInArea(t){return ue(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=hs.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Oe(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);st(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),Pi.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};U(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){U(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},U(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!X(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=function(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}(t),h=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,Y(n.onHover,[t,a,this],this),r&&Y(n.onClick,[t,a,this],this));const l=!X(a,s);return(l||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=h,l}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Pn(){return U(Sn.instances,(t=>t._plugins.invalidate()))}function Dn(t,e,i,s){const n=ke(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return At(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:At(n.innerStart,0,a),innerEnd:At(n.innerEnd,0,a)}}function An(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Cn(t,e,i,s,n,o){const{x:a,y:r,startAngle:h,pixelMargin:l,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-l,0),u=c>0?c+s+i+l:0;let f=0;const g=n-h;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/at)/d)/2,x=h+p+f,m=n-p-f,{outerStart:b,outerEnd:_,innerStart:y,innerEnd:v}=Dn(e,u,d,m-x),M=d-b,w=d-_,k=x+b/M,S=m-_/w,P=u+y,D=u+v,A=x+y/P,C=m-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=An(w,S,a,r);t.arc(e.x,e.y,_,S,m+dt)}const i=An(D,m,a,r);if(t.lineTo(i.x,i.y),v>0){const e=An(D,C,a,r);t.arc(e.x,e.y,v,m+dt,C+Math.PI)}const s=(m-v/u+(x+y/u))/2;if(t.arc(a,r,u,m-v/u,s,!0),t.arc(a,r,u,s,x+y/u,!0),y>0){const e=An(P,A,a,r);t.arc(e.x,e.y,y,A+Math.PI,x-dt)}const n=An(M,x,a,r);if(t.lineTo(n.x,n.y),b>0){const e=An(M,k,a,r);t.arc(e.x,e.y,b,x-dt,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function On(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:h}=e,{borderWidth:l,borderJoinStyle:c,borderDash:d,borderDashOffset:u,borderRadius:f}=h,g="inner"===h.borderAlign;if(!l)return;t.setLineDash(d||[]),t.lineDashOffset=u,g?(t.lineWidth=2*l,t.lineJoin=c||"round"):(t.lineWidth=l,t.lineJoin=c||"bevel");let p=e.endAngle;if(o){Cn(t,e,i,s,p,n);for(let e=0;en?(l=n/h,t.arc(o,a,h,i+l,s-l,!0)):t.arc(o,a,n,i+dt,s-dt),t.closePath(),t.clip()}(t,e,p),h.selfJoin&&p-a>=at&&0===f&&"miter"!==c&&function(t,e,i){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:h}=e,{borderWidth:l,borderJoinStyle:c}=h,d=Math.min(l/a,Pt(s-i));if(t.beginPath(),t.arc(n,o,a-l/2,s+d/2,i-d/2),r>0){const e=Math.min(l/r,Pt(s-i));t.arc(n,o,r+l/2,i-e/2,s+e/2,!0)}else{const e=Math.min(l/2,a*Pt(s-i));if("round"===c)t.arc(n,o,e,i-at/2,s+at/2,!0);else if("bevel"===c){const a=2*e*e,r=-a*Math.cos(i+at/2)+n,h=-a*Math.sin(i+at/2)+o,l=a*Math.cos(s+at/2)+n,c=a*Math.sin(s+at/2)+o;t.lineTo(r,h),t.lineTo(l,c)}}t.closePath(),t.moveTo(0,0),t.rect(0,0,t.canvas.width,t.canvas.height),t.clip("evenodd")}(t,e,p),o||(Cn(t,e,i,s,p,n),t.stroke())}class Rn extends Bs{static id="arc";static defaults={borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:"backgroundColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=wt(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:l,circumference:c}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),d=(this.options.spacing+this.options.borderWidth)/2,u=N(c,r-a),f=Dt(n,a,r)&&a!==r,g=u>=rt||f,p=Ct(o,h+d,l+d);return g&&p}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:h}=this.options,l=(s+n)/2,c=(o+a+h+r)/2;return{x:e+Math.cos(l)*c,y:i+Math.sin(l)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>rt?Math.floor(i/rt):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(at,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let h=e.endAngle;if(o){Cn(t,e,i,s,h,n);for(let e=0;er&&o>r;return{count:s,start:h,loop:e.loop,ilen:l(a+(l?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(x,g),t.lineTo(x,f),t.lineTo(x,p))};for(h&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),x=(m*x+e)/++m):(_(),t.lineTo(e,i),u=s,m=0,f=g=i),p=i}_()}function Fn(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?zn:Ln}const Bn="function"==typeof Path2D;function Wn(t,e,i,s){Bn&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Tn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=Fn(e);for(const r of n)Tn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class Hn extends Bs{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;Ge(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=function(t,e){const i=t.points,s=t.options.spanGaps,n=i.length;if(!n)return[];const o=!!t._loop,{start:a,end:r}=function(t,e,i,s){let n=0,o=e-1;if(i&&!s)for(;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);return yi(t,!0===s?[{start:a,end:r,loop:o}]:function(t,e,i,s){const n=t.length,o=[];let a,r=e,h=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?h.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,h.skip&&(e=a)),h=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,rt.replace("rgb(","rgba(").replace(")",", 0.5)")));function Zn(t){return Jn[t%Jn.length]}function Qn(t){return Gn[t%Gn.length]}function to(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof Zi?e=function(t,e){return t.backgroundColor=t.data.map((()=>Zn(e++))),e}(i,e):n instanceof ts?e=function(t,e){return t.backgroundColor=t.data.map((()=>Qn(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Zn(e),t.backgroundColor=Qn(e),++e}(i,e))}}function eo(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var io={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n,a=eo(s)||(r=n)&&(r.borderColor||r.backgroundColor)||o&&eo(o)||"rgba(0,0,0,0.1)"!==ae.borderColor||"rgba(0,0,0,0.1)"!==ae.backgroundColor;var r;if(!i.forceOverride&&a)return;const h=to(t);s.forEach(h)}};const so=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class no extends Bs{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=Y(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Ae(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=so(i,n);let h,l;e.font=s.string,this.isHorizontal()?(h=this.maxWidth,l=this._fitRows(o,n,a,r)+10):(l=this.maxHeight,h=this._fitCols(o,s,a,r)+10),this.width=Math.min(h,t.maxWidth||this.maxWidth),this.height=Math.min(l,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],h=this.lineWidths=[0],l=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-l;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||h[h.length-1]+g+2*a>o)&&(c+=l,h[h.length-(f>0?0:1)]=0,u+=l,d++),r[f]={left:0,top:u,row:d,width:g,height:s},h[h.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],h=this.columnSizes=[],l=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:x}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=oo(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+x+2*a>l&&(c+=d+a,h.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:x},d=Math.max(d,p),u+=x+a})),c+=d,h.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=fi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=Wt(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=Wt(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=Wt(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=Wt(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;fe(t,this),this._draw(),ge(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ae.color,r=fi(t.rtl,this.left,this.width),h=Ae(o.font),{padding:l}=o,c=h.size,d=c/2;let u;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:f,boxHeight:g,itemHeight:p}=so(o,c),x=this.isHorizontal(),m=this._computeTitleHeight();u=x?{x:Wt(n,this.left+l,this.right-i[0]),y:this.top+l+m,line:0}:{x:this.left+l,y:Wt(n,this.top+m+l,this.bottom-e[0].height),line:0},gi(this.ctx,t.textDirection);const b=p+l;this.legendItems.forEach(((_,y)=>{s.strokeStyle=_.fontColor,s.fillStyle=_.fontColor;const v=s.measureText(_.text).width,M=r.textAlign(_.textAlign||(_.textAlign=o.textAlign)),w=f+d+v;let k=u.x,S=u.y;r.setWidth(this.width),x?y>0&&k+w+l>this.right&&(S=u.y+=b,u.line++,k=u.x=Wt(n,this.left+l,this.right-i[u.line])):y>0&&S+b>this.bottom&&(k=u.x=k+e[u.line].width+l,u.line++,S=u.y=Wt(n,this.top+m+l,this.bottom-e[u.line].height));if(function(t,e,i){if(isNaN(f)||f<=0||isNaN(g)||g<0)return;s.save();const n=N(i.lineWidth,1);if(s.fillStyle=N(i.fillStyle,a),s.lineCap=N(i.lineCap,"butt"),s.lineDashOffset=N(i.lineDashOffset,0),s.lineJoin=N(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=N(i.strokeStyle,a),s.setLineDash(N(i.lineDash,[])),o.usePointStyle){const a={radius:g*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},h=r.xPlus(t,f/2);de(s,a,h,e+d,o.pointStyleWidth&&f)}else{const o=e+Math.max((c-g)/2,0),a=r.leftForLtr(t,f),h=Pe(i.borderRadius);s.beginPath(),Object.values(h).some((t=>0!==t))?ye(s,{x:a,y:o,w:f,h:g,radius:h}):s.rect(a,o,f,g),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(k),S,_),k=((t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e)(M,k+f+d,x?k+w:this.right,t.rtl),function(t,e,i){_e(s,i.text,t,e+p/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(k),S,_),x)u.x+=w+l;else if("string"!=typeof _.text){const t=h.lineHeight;u.y+=oo(_,t)+l}else u.y+=b})),pi(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Ae(e.font),s=De(e.padding);if(!e.display)return;const n=fi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,h=s.top+r;let l,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),l=this.top+h,c=Wt(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);l=h+Wt(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=Wt(a,c,c+d);o.textAlign=n.textAlign(Bt(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,_e(o,e.text,u,l,i)}_computeTitleHeight(){const t=this.options.title,e=Ae(t.font),i=De(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(Ct(t,this.left,this.right)&&Ct(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const h=t.controller.getStyle(i?0:void 0),l=De(h.borderWidth);return{text:e[t.index].label,fillStyle:h.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:h.borderCapStyle,lineDash:h.borderDash,lineDashOffset:h.borderDashOffset,lineJoin:h.borderJoinStyle,lineWidth:(l.width+l.height)/4,strokeStyle:h.borderColor,pointStyle:s||h.pointStyle,rotation:h.rotation,textAlign:n||h.textAlign,borderRadius:a&&(r||h.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class ro extends Bs{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=W(i.text)?i.text.length:1;this._padding=De(i.padding);const n=s*Ae(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=n:this.width=n}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,h,l,c=0;return this.isHorizontal()?(h=Wt(a,i,n),l=e+t,r=n-i):("left"===o.position?(h=i+t,l=Wt(a,s,e),c=-.5*at):(h=n-t,l=Wt(a,e,s),c=.5*at),r=s-e),{titleX:h,titleY:l,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Ae(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);_e(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:Bt(e.align),textBaseline:"middle",translation:[n,o]})}}var ho={id:"title",_element:ro,start(t,e,i){!function(t,e){const i=new ro({ctx:t.ctx,options:e,chart:t});vs.configure(t,i,e),vs.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;vs.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;vs.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};new WeakMap;const lo={average(t){if(!t.length)return!1;let e,i,s=new Set,n=0,o=0;for(e=0,i=t.length;et+e))/s.size,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i-1?t.split("\n"):t}function fo(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function go(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,h=Ae(e.bodyFont),l=Ae(e.titleFont),c=Ae(e.footerFont),d=o.length,u=n.length,f=s.length,g=De(e.padding);let p=g.height,x=0,m=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(m+=t.beforeBody.length+t.afterBody.length,d&&(p+=d*l.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),m){p+=f*(e.displayColors?Math.max(r,h.lineHeight):h.lineHeight)+(m-f)*h.lineHeight+(m-1)*e.bodySpacing}u&&(p+=e.footerMarginTop+u*c.lineHeight+(u-1)*e.footerSpacing);let b=0;const _=function(t){x=Math.max(x,i.measureText(t).width+b)};return i.save(),i.font=l.string,U(t.title,_),i.font=h.string,U(t.beforeBody.concat(t.afterBody),_),b=e.displayColors?a+2+e.boxPadding:0,U(s,(t=>{U(t.before,_),U(t.lines,_),U(t.after,_)})),b=0,i.font=c.string,U(t.footer,_),i.restore(),x+=g.width,{width:x,height:p}}function po(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:h}}=t;let l="center";return"center"===s?l=n<=(r+h)/2?"left":"right":n<=o/2?l="left":n>=a-o/2&&(l="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(l,t,e,i)&&(l="center"),l}function xo(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||po(t,e,i,s),yAlign:s}}function mo(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:h}=i,l=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=Pe(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,h,l);return"center"===h?"left"===r?g+=l:"right"===r&&(g-=l):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:At(g,0,s.width-e.width),y:At(p,0,s.height-e.height)}}function bo(t,e,i){const s=De(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function _o(t){return co([],uo(t))}function yo(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const vo={beforeTitle:z,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=yo(i,t);co(e.before,uo(Mo(n,"beforeLabel",this,t))),co(e.lines,Mo(n,"label",this,t)),co(e.after,uo(Mo(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return _o(Mo(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Mo(i,"beforeFooter",this,t),n=Mo(i,"footer",this,t),o=Mo(i,"afterFooter",this,t);let a=[];return a=co(a,uo(s)),a=co(a,uo(n)),a=co(a,uo(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,h=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(h=h.sort(((e,s)=>t.itemSort(e,s,i)))),U(h,(e=>{const i=yo(t.callbacks,e);s.push(Mo(i,"labelColor",this,e)),n.push(Mo(i,"labelPointStyle",this,e)),o.push(Mo(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=h,h}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=lo[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=go(this,i),a=Object.assign({},t,e),r=xo(this.chart,i,a),h=mo(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:h.x,y:h.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:h,bottomLeft:l,bottomRight:c}=Pe(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,x,m,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,x=p-o,b=_+o,y=_-o):(p=d+f,x=p+o,b=_-o,y=_+o),m=p):(x="left"===s?d+Math.max(r,l)+o:"right"===s?d+f-Math.max(h,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=x-o,m=x+o):(b=u+g,_=b+o,p=x+o,m=x-o),y=b),{x1:p,x2:x,x3:m,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const h=fi(i.rtl,this.x,this.width);for(t.x=bo(this,i.titleAlign,i),e.textAlign=h.textAlign(i.titleAlign),e.textBaseline="middle",o=Ae(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,ye(t,{x:e,y:f,w:h,h:r,radius:a}),t.fill(),t.stroke(),t.fillStyle=o.backgroundColor,t.beginPath(),ye(t,{x:i,y:f+1,w:h-2,h:r-2,radius:a}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,f,h,r),t.strokeRect(e,f,h,r),t.fillStyle=o.backgroundColor,t.fillRect(i,f+1,h-2,r-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:h,boxPadding:l}=i,c=Ae(i.bodyFont);let d=c.lineHeight,u=0;const f=fi(i.rtl,this.x,this.width),g=function(i){e.fillText(i,f.x(t.x+u),t.y+d/2),t.y+=d+n},p=f.textAlign(o);let x,m,b,_,y,v,M;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=bo(this,p,i),e.fillStyle=i.bodyColor,U(this.beforeBody,g),u=a&&"right"!==p?"center"===o?h/2+l:h+2+l:0,_=0,v=s.length;_0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=lo[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=go(this,t),a=Object.assign({},i,this._size),r=xo(e,t,a),h=mo(t,a,r,e);s._to===h.x&&n._to===h.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,h))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=De(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),gi(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),pi(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!X(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!X(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=lo[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var ko={id:"tooltip",_element:wo,positioners:lo,afterInit(t,e,i){i&&(t.tooltip=new wo({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:vo},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};function So(t,e,i,s){const n=t.indexOf(e);if(-1===n)return((t,e,i,s)=>("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function Po(t){const e=this.getLabels();return t>=0&&tnull===t?null:At(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:So(i,t,N(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return Po.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}}function Ao(t,e){const i=[],{bounds:s,step:n,min:o,max:a,precision:r,count:h,maxTicks:l,maxDigits:c,includeBounds:d}=t,u=n||1,f=l-1,{min:g,max:p}=e,x=!B(o),m=!B(a),b=!B(h),_=(p-g)/(c+1);let y,v,M,w,k=mt((p-g)/f/u)*u;if(k<1e-14&&!x&&!m)return[{value:g},{value:p}];w=Math.ceil(p/k)-Math.floor(g/k),w>f&&(k=mt(w*k/f/u)*u),B(r)||(y=Math.pow(10,r),k=Math.ceil(k*y)/y),"ticks"===s?(v=Math.floor(g/k)*k,M=Math.ceil(p/k)*k):(v=g,M=p),x&&m&&n&&function(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}((a-o)/n,k/1e3)?(w=Math.round(Math.min((a-o)/k,l)),k=(a-o)/w,v=o,M=a):b?(v=x?o:v,M=m?a:M,w=h-1,k=(M-v)/w):(w=(M-v)/k,w=xt(w,Math.round(w),k/1e3)?Math.round(w):Math.ceil(w));const S=Math.max(Mt(k),Mt(v));y=Math.pow(10,B(r)?S:r),v=Math.round(v*y)/y,M=Math.round(M*y)/y;let P=0;for(x&&(d&&v!==o?(i.push({value:o}),va)break;i.push({value:t})}return m&&d&&M!==a?i.length&&xt(i[i.length-1].value,a,Co(a,_,t))?i[i.length-1].value=a:i.push({value:a}):m&&M!==a||i.push({value:M}),i}function Co(t,e,{horizontal:i,minRotation:s}){const n=yt(s),o=(i?Math.sin(n):Math.cos(n))||.001,a=.75*e*(""+t).length;return Math.min(e/o,a)}class Oo extends qs{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return B(t)||("number"==typeof t||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){const{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds();let{min:s,max:n}=this;const o=t=>s=e?s:t,a=t=>n=i?n:t;if(t){const t=pt(s),e=pt(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const s=Ao({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&_t(s,this,"value"),t.reverse?(s.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),s}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Zt(t,this.chart.options.locale,this.options.ticks.format)}}class Ro extends Oo{static id="linear";static defaults={ticks:{callback:te.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=V(t)?t:0,this.max=V(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=yt(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}te.formatters.logarithmic;te.formatters.numeric;Sn.register(Rn,Hn,Kn,jn,Gi,Zi,Qi,es,Do,Ro,ao,ho,ko,io),i.g.Chart=Sn}},function(t){var e;e=3808,t(t.s=e)}]); \ No newline at end of file diff --git a/public/build/chart.62631acc.js.LICENSE.txt b/public/build/chart.bafa38e7.js.LICENSE.txt similarity index 79% rename from public/build/chart.62631acc.js.LICENSE.txt rename to public/build/chart.bafa38e7.js.LICENSE.txt index 6f5e214c1..073057509 100644 --- a/public/build/chart.62631acc.js.LICENSE.txt +++ b/public/build/chart.bafa38e7.js.LICENSE.txt @@ -6,8 +6,8 @@ */ /*! - * Chart.js v4.4.7 + * Chart.js v4.5.1 * https://www.chartjs.org - * (c) 2024 Chart.js Contributors + * (c) 2025 Chart.js Contributors * Released under the MIT License */ diff --git a/public/build/dashboard.6ce7ac9c.js b/public/build/dashboard.6ce7ac9c.js new file mode 100644 index 000000000..40d67a0c0 --- /dev/null +++ b/public/build/dashboard.6ce7ac9c.js @@ -0,0 +1,2 @@ +/*! For license information please see dashboard.6ce7ac9c.js.LICENSE.txt */ +"use strict";(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[945],{51:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DDElement=void 0;const s=i(9354),o=i(6060),n=i(7540);class r{constructor(e){this.el=e}static init(e){return e.ddElement||(e.ddElement=new r(e)),e.ddElement}on(e,t){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.on(e,t):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.on(e,t):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.on(e,t),this}off(e){return this.ddDraggable&&["drag","dragstart","dragstop"].indexOf(e)>-1?this.ddDraggable.off(e):this.ddDroppable&&["drop","dropover","dropout"].indexOf(e)>-1?this.ddDroppable.off(e):this.ddResizable&&["resizestart","resize","resizestop"].indexOf(e)>-1&&this.ddResizable.off(e),this}setupDraggable(e){return this.ddDraggable?this.ddDraggable.updateOption(e):this.ddDraggable=new o.DDDraggable(this.el,e),this}cleanDraggable(){return this.ddDraggable&&(this.ddDraggable.destroy(),delete this.ddDraggable),this}setupResizable(e){return this.ddResizable?this.ddResizable.updateOption(e):this.ddResizable=new s.DDResizable(this.el,e),this}cleanResizable(){return this.ddResizable&&(this.ddResizable.destroy(),delete this.ddResizable),this}setupDroppable(e){return this.ddDroppable?this.ddDroppable.updateOption(e):this.ddDroppable=new n.DDDroppable(this.el,e),this}cleanDroppable(){return this.ddDroppable&&(this.ddDroppable.destroy(),delete this.ddDroppable),this}}t.DDElement=r},241:function(e,t,i){i.r(t)},1120:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.pointerleave=t.pointerenter=t.pointerdown=t.touchend=t.touchmove=t.touchstart=t.isTouch=void 0;const s=i(1432);t.isTouch="undefined"!=typeof window&&"undefined"!=typeof document&&("ontouchstart"in document||"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0);class o{}function n(e,t){if(e.touches.length>1)return;e.cancelable&&e.preventDefault();const i=e.changedTouches[0],s=document.createEvent("MouseEvents");s.initMouseEvent(t,!0,!0,window,1,i.screenX,i.screenY,i.clientX,i.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(s)}function r(e,t){e.cancelable&&e.preventDefault();const i=document.createEvent("MouseEvents");i.initMouseEvent(t,!0,!0,window,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(i)}t.touchstart=function(e){o.touchHandled||(o.touchHandled=!0,n(e,"mousedown"))},t.touchmove=function(e){o.touchHandled&&n(e,"mousemove")},t.touchend=function(e){if(!o.touchHandled)return;o.pointerLeaveTimeout&&(window.clearTimeout(o.pointerLeaveTimeout),delete o.pointerLeaveTimeout);const t=!!s.DDManager.dragElement;n(e,"mouseup"),t||n(e,"click"),o.touchHandled=!1},t.pointerdown=function(e){e.target.releasePointerCapture(e.pointerId)},t.pointerenter=function(e){s.DDManager.dragElement&&r(e,"mouseenter")},t.pointerleave=function(e){s.DDManager.dragElement&&(o.pointerLeaveTimeout=window.setTimeout((()=>{delete o.pointerLeaveTimeout,r(e,"mouseleave")}),10))}},1432:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DDManager=void 0;t.DDManager=class{}},1661:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.Utils=t.obsoleteAttr=t.obsoleteOptsDel=t.obsoleteOpts=t.obsolete=void 0,t.obsolete=function(e,t,i,s,o){let n=(...n)=>(console.warn("gridstack.js: Function `"+i+"` is deprecated in "+o+" and has been replaced with `"+s+"`. It will be **removed** in a future release"),t.apply(e,n));return n.prototype=t.prototype,n},t.obsoleteOpts=function(e,t,i,s){void 0!==e[t]&&(e[i]=e[t],console.warn("gridstack.js: Option `"+t+"` is deprecated in "+s+" and has been replaced with `"+i+"`. It will be **removed** in a future release"))},t.obsoleteOptsDel=function(e,t,i,s){void 0!==e[t]&&console.warn("gridstack.js: Option `"+t+"` is deprecated in "+i+s)},t.obsoleteAttr=function(e,t,i,s){let o=e.getAttribute(t);null!==o&&(e.setAttribute(i,o),console.warn("gridstack.js: attribute `"+t+"`="+o+" is deprecated on this object in "+s+" and has been replaced with `"+i+"`. It will be **removed** in a future release"))};class i{static getElements(e){if("string"==typeof e){let t=document.querySelectorAll(e);return t.length||"."===e[0]||"#"===e[0]||(t=document.querySelectorAll("."+e),t.length||(t=document.querySelectorAll("#"+e))),Array.from(t)}return[e]}static getElement(e){if("string"==typeof e){if(!e.length)return null;if("#"===e[0])return document.getElementById(e.substring(1));if("."===e[0]||"["===e[0])return document.querySelector(e);if(!isNaN(+e[0]))return document.getElementById(e);let t=document.querySelector(e);return t||(t=document.getElementById(e)),t||(t=document.querySelector("."+e)),t}return e}static isIntercepted(e,t){return!(e.y>=t.y+t.h||e.y+e.h<=t.y||e.x+e.w<=t.x||e.x>=t.x+t.w)}static isTouching(e,t){return i.isIntercepted(e,{x:t.x-.5,y:t.y-.5,w:t.w+1,h:t.h+1})}static areaIntercept(e,t){let i=e.x>t.x?e.x:t.x,s=e.x+e.wt.y?e.y:t.y,n=e.y+e.hMath.max(t.x+t.w,e)),0)||12,-1===t?e.sort(((e,t)=>t.x+t.y*i-(e.x+e.y*i))):e.sort(((e,t)=>e.x+e.y*i-(t.x+t.y*i)))}static createStylesheet(e,t,i){let s=document.createElement("style");const o=null==i?void 0:i.nonce;return o&&(s.nonce=o),s.setAttribute("type","text/css"),s.setAttribute("gs-style-id",e),s.styleSheet?s.styleSheet.cssText="":s.appendChild(document.createTextNode("")),t?t.insertBefore(s,t.firstChild):(t=document.getElementsByTagName("head")[0]).appendChild(s),s.sheet}static removeStylesheet(e){let t=document.querySelector("STYLE[gs-style-id="+e+"]");t&&t.parentNode&&t.remove()}static addCSSRule(e,t,i){"function"==typeof e.addRule?e.addRule(t,i):"function"==typeof e.insertRule&&e.insertRule(`${t}{${i}}`)}static toBool(e){return"boolean"==typeof e?e:"string"==typeof e?!(""===(e=e.toLowerCase())||"no"===e||"false"===e||"0"===e):Boolean(e)}static toNumber(e){return null===e||0===e.length?void 0:Number(e)}static parseHeight(e){let t,i="px";if("string"==typeof e){let s=e.match(/^(-[0-9]+\.[0-9]+|[0-9]*\.[0-9]+|-[0-9]+|[0-9]+)(px|em|rem|vh|vw|%)?$/);if(!s)throw new Error("Invalid height");i=s[2]||"px",t=parseFloat(s[1])}else t=e;return{h:t,unit:i}}static defaults(e,...t){return t.forEach((t=>{for(const i in t){if(!t.hasOwnProperty(i))return;null===e[i]||void 0===e[i]?e[i]=t[i]:"object"==typeof t[i]&&"object"==typeof e[i]&&this.defaults(e[i],t[i])}})),e}static same(e,t){if("object"!=typeof e)return e==t;if(typeof e!=typeof t)return!1;if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const i in e)if(e[i]!==t[i])return!1;return!0}static copyPos(e,t,i=!1){return e.x=t.x,e.y=t.y,e.w=t.w,e.h=t.h,i&&(t.minW&&(e.minW=t.minW),t.minH&&(e.minH=t.minH),t.maxW&&(e.maxW=t.maxW),t.maxH&&(e.maxH=t.maxH)),e}static samePos(e,t){return e&&t&&e.x===t.x&&e.y===t.y&&e.w===t.w&&e.h===t.h}static removeInternalAndSame(e,t){if("object"==typeof e&&"object"==typeof t)for(let i in e){let s=e[i];if("_"===i[0]||s===t[i])delete e[i];else if(s&&"object"==typeof s&&void 0!==t[i]){for(let e in s)s[e]!==t[i][e]&&"_"!==e[0]||delete s[e];Object.keys(s).length||delete e[i]}}}static removeInternalForSave(e,t=!0){for(let t in e)"_"!==t[0]&&null!==e[t]&&void 0!==e[t]||delete e[t];delete e.grid,t&&delete e.el,e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,e.locked||delete e.locked,1!==e.w&&e.w!==e.minW||delete e.w,1!==e.h&&e.h!==e.minH||delete e.h}static closestUpByClass(e,t){for(;e;){if(e.classList.contains(t))return e;e=e.parentElement}return null}static throttle(e,t){let i=!1;return(...s)=>{i||(i=!0,setTimeout((()=>{e(...s),i=!1}),t))}}static removePositioningStyles(e){let t=e.style;t.position&&t.removeProperty("position"),t.left&&t.removeProperty("left"),t.top&&t.removeProperty("top"),t.width&&t.removeProperty("width"),t.height&&t.removeProperty("height")}static getScrollElement(e){if(!e)return document.scrollingElement||document.documentElement;const t=getComputedStyle(e);return/(auto|scroll)/.test(t.overflow+t.overflowY)?e:this.getScrollElement(e.parentElement)}static updateScrollPosition(e,t,i){let s=e.getBoundingClientRect(),o=window.innerHeight||document.documentElement.clientHeight;if(s.top<0||s.bottom>o){let n=s.bottom-o,r=s.top,l=this.getScrollElement(e);if(null!==l){let a=l.scrollTop;s.top<0&&i<0?e.offsetHeight>o?l.scrollTop+=i:l.scrollTop+=Math.abs(r)>Math.abs(i)?i:r:i>0&&(e.offsetHeight>o?l.scrollTop+=i:l.scrollTop+=n>i?i:n),t.top+=l.scrollTop-a}}}static updateScrollResize(e,t,i){const s=this.getScrollElement(t),o=s.clientHeight,n=s===this.getScrollElement()?0:s.getBoundingClientRect().top,r=e.clientY-n,l=r>o-i;re===o))&&(s[o]=i.cloneDeep(e[o]));return s}static cloneNode(e){const t=e.cloneNode(!0);return t.removeAttribute("id"),t}static appendTo(e,t){let i;i="string"==typeof t?document.querySelector(t):t,i&&i.appendChild(e)}static addElStyles(e,t){if(t instanceof Object)for(const i in t)t.hasOwnProperty(i)&&(Array.isArray(t[i])?t[i].forEach((t=>{e.style[i]=t})):e.style[i]=t[i])}static initEvent(e,t){const i={type:t.type},s={button:0,which:0,buttons:1,bubbles:!0,cancelable:!0,target:t.target?t.target:e.target};return e.dataTransfer&&(i.dataTransfer=e.dataTransfer),["altKey","ctrlKey","metaKey","shiftKey"].forEach((t=>i[t]=e[t])),["pageX","pageY","clientX","clientY","screenX","screenY"].forEach((t=>i[t]=e[t])),Object.assign(Object.assign({},i),s)}static simulateMouseEvent(e,t,i){const s=document.createEvent("MouseEvents");s.initMouseEvent(t,!0,!0,window,1,e.screenX,e.screenY,e.clientX,e.clientY,e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,0,e.target),(i||e.target).dispatchEvent(s)}}t.Utils=i},3531:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.GridStackEngine=void 0;const s=i(1661);class o{constructor(e={}){this.addedNodes=[],this.removedNodes=[],this.column=e.column||12,this.maxRow=e.maxRow,this._float=e.float,this.nodes=e.nodes||[],this.onChange=e.onChange}batchUpdate(e=!0){return!!this.batchMode===e||(this.batchMode=e,e?(this._prevFloat=this._float,this._float=!0,this.saveInitial()):(this._float=this._prevFloat,delete this._prevFloat,this._packNodes()._notify())),this}_useEntireRowArea(e,t){return(!this.float||this.batchMode&&!this._prevFloat)&&!this._hasLocked&&(!e._moving||e._skipDown||t.y<=e.y)}_fixCollisions(e,t=e,i,o={}){if(this.sortNodes(-1),!(i=i||this.collide(e,t)))return!1;if(e._moving&&!o.nested&&!this.float&&this.swap(e,i))return!0;let n=t;this._useEntireRowArea(e,t)&&(n={x:0,w:this.column,y:t.y,h:t.h},i=this.collide(e,n,o.skip));let r=!1,l={nested:!0,pack:!1};for(;i=i||this.collide(e,n,o.skip);){let n;if(i.locked||e._moving&&!e._skipDown&&t.y>e.y&&!this.float&&(!this.collide(i,Object.assign(Object.assign({},i),{y:e.y}),e)||!this.collide(i,Object.assign(Object.assign({},i),{y:t.y-i.h}),e))?(e._skipDown=e._skipDown||t.y>e.y,n=this.moveNode(e,Object.assign(Object.assign(Object.assign({},t),{y:i.y+i.h}),l)),i.locked&&n?s.Utils.copyPos(t,e):!i.locked&&n&&o.pack&&(this._packNodes(),t.y=i.y+i.h,s.Utils.copyPos(e,t)),r=r||n):n=this.moveNode(i,Object.assign(Object.assign(Object.assign({},i),{y:t.y+t.h,skip:e}),l)),!n)return r;i=void 0}return r}collide(e,t=e,i){return this.nodes.find((o=>o!==e&&o!==i&&s.Utils.isIntercepted(o,t)))}collideAll(e,t=e,i){return this.nodes.filter((o=>o!==e&&o!==i&&s.Utils.isIntercepted(o,t)))}directionCollideCoverage(e,t,i){if(!t.rect||!e._rect)return;let s,o=e._rect,n=Object.assign({},t.rect);return n.y>o.y?(n.h+=n.y-o.y,n.y=o.y):n.h+=o.y-n.y,n.x>o.x?(n.w+=n.x-o.x,n.x=o.x):n.w+=o.x-n.x,i.forEach((e=>{if(e.locked||!e._rect)return;let t=e._rect,i=Number.MAX_VALUE,r=Number.MAX_VALUE,l=.5;o.yt.y+t.h&&(i=(t.y+t.h-n.y)/t.h),o.xt.x+t.w&&(r=(t.x+t.w-n.x)/t.w);let a=Math.min(r,i);a>l&&(l=a,s=e)})),t.collide=s,s}cacheRects(e,t,i,s,o,n){return this.nodes.forEach((r=>r._rect={y:r.y*t+i,x:r.x*e+n,w:r.w*e-n-s,h:r.h*t-i-o})),this}swap(e,t){if(!t||t.locked||!e||e.locked)return!1;function i(){let i=t.x,s=t.y;return t.x=e.x,t.y=e.y,e.h!=t.h?(e.x=i,e.y=t.y+t.h):e.w!=t.w?(e.x=t.x+t.w,e.y=s):(e.x=i,e.y=s),e._dirty=t._dirty=!0,!0}let o;if(e.w===t.w&&e.h===t.h&&(e.x===t.x||e.y===t.y)&&(o=s.Utils.isTouching(e,t)))return i();if(!1!==o){if(e.w===t.w&&e.x===t.x&&(o||(o=s.Utils.isTouching(e,t)))){if(t.y{e.locked||(e.autoPosition=!0),this.addNode(e,!1),e._dirty=!0})),this.batchUpdate(!1)}set float(e){this._float!==e&&(this._float=e||!1,e||this._packNodes()._notify())}get float(){return this._float||!1}sortNodes(e){return this.nodes=s.Utils.sort(this.nodes,e,this.column),this}_packNodes(){return this.batchMode||(this.sortNodes(),this.float?this.nodes.forEach((e=>{if(e._updating||void 0===e._orig||e.y===e._orig.y)return;let t=e.y;for(;t>e._orig.y;){--t,this.collide(e,{x:e.x,y:t,w:e.w,h:e.h})||(e._dirty=!0,e.y=t)}})):this.nodes.forEach(((e,t)=>{if(!e.locked)for(;e.y>0;){let i=0===t?0:e.y-1;if(!(0===t||!this.collide(e,{x:e.x,y:i,w:e.w,h:e.h})))break;e._dirty=e.y!==i,e.y=i}}))),this}prepareNode(e,t){(e=e||{})._id=e._id||o._idSeq++,void 0!==e.x&&void 0!==e.y&&null!==e.x&&null!==e.y||(e.autoPosition=!0);let i={x:0,y:0,w:1,h:1};return s.Utils.defaults(e,i),e.autoPosition||delete e.autoPosition,e.noResize||delete e.noResize,e.noMove||delete e.noMove,"string"==typeof e.x&&(e.x=Number(e.x)),"string"==typeof e.y&&(e.y=Number(e.y)),"string"==typeof e.w&&(e.w=Number(e.w)),"string"==typeof e.h&&(e.h=Number(e.h)),isNaN(e.x)&&(e.x=i.x,e.autoPosition=!0),isNaN(e.y)&&(e.y=i.y,e.autoPosition=!0),isNaN(e.w)&&(e.w=i.w),isNaN(e.h)&&(e.h=i.h),this.nodeBoundFix(e,t)}nodeBoundFix(e,t){let i=e._orig||s.Utils.copyPos({},e);e.maxW&&(e.w=Math.min(e.w,e.maxW)),e.maxH&&(e.h=Math.min(e.h,e.maxH)),e.minW&&e.minW<=this.column&&(e.w=Math.max(e.w,e.minW)),e.minH&&(e.h=Math.max(e.h,e.minH));if((1===this.column||e.x+e.w>this.column)&&this.column<12&&!this._inColumnResize&&e._id&&-1===this.findCacheLayout(e,12)){let t=Object.assign({},e);t.autoPosition?(delete t.x,delete t.y):t.x=Math.min(11,t.x),t.w=Math.min(12,t.w),this.cacheOneLayout(t,12)}return e.w>this.column?e.w=this.column:e.w<1&&(e.w=1),this.maxRow&&e.h>this.maxRow?e.h=this.maxRow:e.h<1&&(e.h=1),e.x<0&&(e.x=0),e.y<0&&(e.y=0),e.x+e.w>this.column&&(t?e.w=this.column-e.x:e.x=this.column-e.w),this.maxRow&&e.y+e.h>this.maxRow&&(t?e.h=this.maxRow-e.y:e.y=this.maxRow-e.h),s.Utils.samePos(e,i)||(e._dirty=!0),e}getDirtyNodes(e){return e?this.nodes.filter((e=>e._dirty&&!s.Utils.samePos(e,e._orig))):this.nodes.filter((e=>e._dirty))}_notify(e){if(this.batchMode||!this.onChange)return this;let t=(e||[]).concat(this.getDirtyNodes());return this.onChange(t),this}cleanNodes(){return this.batchMode||this.nodes.forEach((e=>{delete e._dirty,delete e._lastTried})),this}saveInitial(){return this.nodes.forEach((e=>{e._orig=s.Utils.copyPos({},e),delete e._dirty})),this._hasLocked=this.nodes.some((e=>e.locked)),this}restoreInitial(){return this.nodes.forEach((e=>{s.Utils.samePos(e,e._orig)||(s.Utils.copyPos(e,e._orig),e._dirty=!0)})),this._notify(),this}findEmptyPosition(e,t=this.nodes,i=this.column){t=s.Utils.sort(t,-1,i);let o=!1;for(let n=0;!o;++n){let r=n%i,l=Math.floor(n/i);if(r+e.w>i)continue;let a={x:r,y:l,w:e.w,h:e.h};t.find((e=>s.Utils.isIntercepted(a,e)))||(e.x=r,e.y=l,delete e.autoPosition,o=!0)}return o}addNode(e,t=!1){let i=this.nodes.find((t=>t._id===e._id));return i||(delete(e=this._inColumnResize?this.nodeBoundFix(e):this.prepareNode(e))._temporaryRemoved,delete e._removeDOM,e.autoPosition&&this.findEmptyPosition(e)&&delete e.autoPosition,this.nodes.push(e),t&&this.addedNodes.push(e),this._fixCollisions(e),this.batchMode||this._packNodes()._notify(),e)}removeNode(e,t=!0,i=!1){return this.nodes.find((t=>t===e))?(i&&this.removedNodes.push(e),t&&(e._removeDOM=!0),this.nodes=this.nodes.filter((t=>t!==e)),this._packNodes()._notify([e])):this}removeAll(e=!0){return delete this._layouts,0===this.nodes.length?this:(e&&this.nodes.forEach((e=>e._removeDOM=!0)),this.removedNodes=this.nodes,this.nodes=[],this._notify(this.removedNodes))}moveNodeCheck(e,t){if(!this.changedPosConstrain(e,t))return!1;if(t.pack=!0,!this.maxRow)return this.moveNode(e,t);let i,n=new o({column:this.column,float:this.float,nodes:this.nodes.map((t=>t===e?(i=Object.assign({},t),i):Object.assign({},t)))});if(!i)return!1;let r=n.moveNode(i,t)&&n.getRow()<=this.maxRow;if(!r&&!t.resizing&&t.collide){let i=t.collide.el.gridstackNode;if(this.swap(e,i))return this._notify(),!0}return!!r&&(n.nodes.filter((e=>e._dirty)).forEach((e=>{let t=this.nodes.find((t=>t._id===e._id));t&&(s.Utils.copyPos(t,e),t._dirty=!0)})),this._notify(),!0)}willItFit(e){if(delete e._willFitPos,!this.maxRow)return!0;let t=new o({column:this.column,float:this.float,nodes:this.nodes.map((e=>Object.assign({},e)))}),i=Object.assign({},e);return this.cleanupNode(i),delete i.el,delete i._id,delete i.content,delete i.grid,t.addNode(i),t.getRow()<=this.maxRow&&(e._willFitPos=s.Utils.copyPos({},i),!0)}changedPosConstrain(e,t){return t.w=t.w||e.w,t.h=t.h||e.h,e.x!==t.x||e.y!==t.y||(e.maxW&&(t.w=Math.min(t.w,e.maxW)),e.maxH&&(t.h=Math.min(t.h,e.maxH)),e.minW&&(t.w=Math.max(t.w,e.minW)),e.minH&&(t.h=Math.max(t.h,e.minH)),e.w!==t.w||e.h!==t.h)}moveNode(e,t){var i,o;if(!e||!t)return!1;let n;void 0===t.pack&&(n=t.pack=!0),"number"!=typeof t.x&&(t.x=e.x),"number"!=typeof t.y&&(t.y=e.y),"number"!=typeof t.w&&(t.w=e.w),"number"!=typeof t.h&&(t.h=e.h);let r=e.w!==t.w||e.h!==t.h,l=s.Utils.copyPos({},e,!0);if(s.Utils.copyPos(l,t),l=this.nodeBoundFix(l,r),s.Utils.copyPos(t,l),s.Utils.samePos(e,t))return!1;let a=s.Utils.copyPos({},e),h=this.collideAll(e,l,t.skip),d=!0;if(h.length){let r=e._moving&&!t.nested,a=r?this.directionCollideCoverage(e,t,h):h[0];if(r&&a&&(null===(o=null===(i=e.grid)||void 0===i?void 0:i.opts)||void 0===o?void 0:o.subGridDynamic)&&!e.grid._isTemp){let i=s.Utils.areaIntercept(t.rect,a._rect),o=s.Utils.area(t.rect),n=s.Utils.area(a._rect);i/(o.8&&(a.grid.makeSubGrid(a.el,void 0,e),a=void 0)}a?d=!this._fixCollisions(e,l,a,t):(d=!1,n&&delete t.pack)}return d&&(e._dirty=!0,s.Utils.copyPos(e,l)),t.pack&&this._packNodes()._notify(),!s.Utils.samePos(e,a)}getRow(){return this.nodes.reduce(((e,t)=>Math.max(e,t.y+t.h)),0)}beginUpdate(e){return e._updating||(e._updating=!0,delete e._skipDown,this.batchMode||this.saveInitial()),this}endUpdate(){let e=this.nodes.find((e=>e._updating));return e&&(delete e._updating,delete e._skipDown),this}save(e=!0){var t;let i=null===(t=this._layouts)||void 0===t?void 0:t.length,o=i&&this.column!==i-1?this._layouts[i-1]:null,n=[];return this.sortNodes(),this.nodes.forEach((t=>{let i=null==o?void 0:o.find((e=>e._id===t._id)),r=Object.assign({},t);i&&(r.x=i.x,r.y=i.y,r.w=i.w),s.Utils.removeInternalForSave(r,!e),n.push(r)})),n}layoutsNodesChange(e){return!this._layouts||this._inColumnResize||this._layouts.forEach(((t,i)=>{if(!t||i===this.column)return this;if(i{if(!e._orig)return;let i=t.find((t=>t._id===e._id));i&&(e.y!==e._orig.y&&(i.y+=e.y-e._orig.y),e.x!==e._orig.x&&(i.x=Math.round(e.x*s)),e.w!==e._orig.w&&(i.w=Math.round(e.w*s)))}))}})),this}updateNodeWidths(e,t,i,o="moveScale"){var n;if(!this.nodes.length||!t||e===t)return this;this.cacheLayout(this.nodes,e),this.batchUpdate();let r=[],l=!1;if(1===t&&(null==i?void 0:i.length)){l=!0;let e=0;i.forEach((t=>{t.x=0,t.w=1,t.y=Math.max(t.y,e),e=t.y+t.h})),r=i,i=[]}else i=s.Utils.sort(this.nodes,-1,e);let a=[];if(t>e){a=this._layouts[t]||[];let s=this._layouts.length-1;!a.length&&e!==s&&(null===(n=this._layouts[s])||void 0===n?void 0:n.length)&&(e=s,this._layouts[s].forEach((e=>{let t=i.find((t=>t._id===e._id));t&&(t.x=e.x,t.y=e.y,t.w=e.w)})))}if(a.forEach((e=>{let t=i.findIndex((t=>t._id===e._id));-1!==t&&((e.autoPosition||isNaN(e.x)||isNaN(e.y))&&this.findEmptyPosition(e,r),e.autoPosition||(i[t].x=e.x,i[t].y=e.y,i[t].w=e.w,r.push(i[t])),i.splice(t,1))})),i.length)if("function"==typeof o)o(t,e,r,i);else if(!l){let s=t/e,n="move"===o||"moveScale"===o,l="scale"===o||"moveScale"===o;i.forEach((i=>{i.x=1===t?0:n?Math.round(i.x*s):Math.min(i.x,t-1),i.w=1===t||1===e?1:l?Math.round(i.w*s)||1:Math.min(i.w,t),r.push(i)})),i=[]}return l||(r=s.Utils.sort(r,-1,t)),this._inColumnResize=!0,this.nodes=[],r.forEach((e=>{this.addNode(e,!1),delete e._orig})),this.batchUpdate(!1),delete this._inColumnResize,this}cacheLayout(e,t,i=!1){let s=[];return e.forEach(((e,t)=>{e._id=e._id||o._idSeq++,s[t]={x:e.x,y:e.y,w:e.w,_id:e._id}})),this._layouts=i?[]:this._layouts||[],this._layouts[t]=s,this}cacheOneLayout(e,t){e._id=e._id||o._idSeq++;let i={x:e.x,y:e.y,w:e.w,_id:e._id};e.autoPosition&&(delete i.x,delete i.y,i.autoPosition=!0),this._layouts=this._layouts||[],this._layouts[t]=this._layouts[t]||[];let s=this.findCacheLayout(e,t);return-1===s?this._layouts[t].push(i):this._layouts[t][s]=i,this}findCacheLayout(e,t){var i,s,o;return null!==(o=null===(s=null===(i=this._layouts)||void 0===i?void 0:i[t])||void 0===s?void 0:s.findIndex((t=>t._id===e._id)))&&void 0!==o?o:-1}cleanupNode(e){for(let t in e)"_"===t[0]&&"_id"!==t&&delete e[t];return this}}t.GridStackEngine=o,o._idSeq=1},3668:function(e,t,i){var s=this&&this.__createBinding||(Object.create?function(e,t,i,s){void 0===s&&(s=i),Object.defineProperty(e,s,{enumerable:!0,get:function(){return t[i]}})}:function(e,t,i,s){void 0===s&&(s=i),e[s]=t[i]}),o=this&&this.__exportStar||function(e,t){for(var i in e)"default"===i||t.hasOwnProperty(i)||s(t,e,i)};Object.defineProperty(t,"__esModule",{value:!0}),t.GridStack=void 0;const n=i(3531),r=i(1661),l=i(3777),a=i(7939),h=i(1120),d=i(1432),g=new a.DDGridStack;o(i(3777),t),o(i(1661),t),o(i(3531),t),o(i(7939),t);class u{constructor(e,t={}){var i,s;this._gsEventHandler={},this._extraDragRow=0,this.el=e,t=t||{},e.classList.contains("grid-stack")||this.el.classList.add("grid-stack"),t.row&&(t.minRow=t.maxRow=t.row,delete t.row);let o=r.Utils.toNumber(e.getAttribute("gs-row"));"auto"===t.column&&delete t.column;let a=t;void 0!==a.minWidth&&(t.oneColumnSize=t.oneColumnSize||a.minWidth,delete a.minWidth),void 0!==t.alwaysShowResizeHandle&&(t._alwaysShowResizeHandle=t.alwaysShowResizeHandle);let g=Object.assign(Object.assign({},r.Utils.cloneDeep(l.gridDefaults)),{column:r.Utils.toNumber(e.getAttribute("gs-column"))||l.gridDefaults.column,minRow:o||(r.Utils.toNumber(e.getAttribute("gs-min-row"))||l.gridDefaults.minRow),maxRow:o||(r.Utils.toNumber(e.getAttribute("gs-max-row"))||l.gridDefaults.maxRow),staticGrid:r.Utils.toBool(e.getAttribute("gs-static"))||l.gridDefaults.staticGrid,draggable:{handle:(t.handleClass?"."+t.handleClass:t.handle?t.handle:"")||l.gridDefaults.draggable.handle},removableOptions:{accept:t.itemClass?"."+t.itemClass:l.gridDefaults.removableOptions.accept}});e.getAttribute("gs-animate")&&(g.animate=r.Utils.toBool(e.getAttribute("gs-animate"))),this.opts=r.Utils.defaults(t,g),t=null,this._initMargin(),1!==this.opts.column&&!this.opts.disableOneColumnMode&&this._widthOrContainer()<=this.opts.oneColumnSize&&(this._prevColumn=this.getColumn(),this.opts.column=1),"auto"===this.opts.rtl&&(this.opts.rtl="rtl"===e.style.direction),this.opts.rtl&&this.el.classList.add("grid-stack-rtl");let p=null===(i=r.Utils.closestUpByClass(this.el,l.gridDefaults.itemClass))||void 0===i?void 0:i.gridstackNode;p&&(p.subGrid=this,this.parentGridItem=p,this.el.classList.add("grid-stack-nested"),p.el.classList.add("grid-stack-sub-grid")),this._isAutoCellHeight="auto"===this.opts.cellHeight,this._isAutoCellHeight||"initial"===this.opts.cellHeight?this.cellHeight(void 0,!1):("number"==typeof this.opts.cellHeight&&this.opts.cellHeightUnit&&this.opts.cellHeightUnit!==l.gridDefaults.cellHeightUnit&&(this.opts.cellHeight=this.opts.cellHeight+this.opts.cellHeightUnit,delete this.opts.cellHeightUnit),this.cellHeight(this.opts.cellHeight,!1)),"mobile"===this.opts.alwaysShowResizeHandle&&(this.opts.alwaysShowResizeHandle=h.isTouch),this._styleSheetClass="grid-stack-instance-"+n.GridStackEngine._idSeq++,this.el.classList.add(this._styleSheetClass),this._setStaticClass();let c=this.opts.engineClass||u.engineClass||n.GridStackEngine;if(this.engine=new c({column:this.getColumn(),float:this.opts.float,maxRow:this.opts.maxRow,onChange:e=>{let t=0;this.engine.nodes.forEach((e=>{t=Math.max(t,e.y+e.h)})),e.forEach((e=>{let t=e.el;t&&(e._removeDOM?(t&&t.remove(),delete e._removeDOM):this._writePosAttr(t,e))})),this._updateStyles(!1,t)}}),this.opts.auto&&(this.batchUpdate(),this.getGridItems().forEach((e=>this._prepareElement(e))),this.batchUpdate(!1)),this.opts.children){let e=this.opts.children;delete this.opts.children,e.length&&this.load(e)}this.setAnimation(this.opts.animate),this._updateStyles(),12!=this.opts.column&&this.el.classList.add("grid-stack-"+this.opts.column),this.opts.dragIn&&u.setupDragIn(this.opts.dragIn,this.opts.dragInOptions),delete this.opts.dragIn,delete this.opts.dragInOptions,this.opts.subGridDynamic&&!d.DDManager.pauseDrag&&(d.DDManager.pauseDrag=!0),void 0!==(null===(s=this.opts.draggable)||void 0===s?void 0:s.pause)&&(d.DDManager.pauseDrag=this.opts.draggable.pause),this._setupRemoveDrop(),this._setupAcceptWidget(),this._updateWindowResizeEvent()}static init(e={},t=".grid-stack"){let i=u.getGridElement(t);return i?(i.gridstack||(i.gridstack=new u(i,r.Utils.cloneDeep(e))),i.gridstack):("string"==typeof t?console.error('GridStack.initAll() no grid was found with selector "'+t+'" - element missing or wrong selector ?\nNote: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.'):console.error("GridStack.init() no grid element was passed."),null)}static initAll(e={},t=".grid-stack"){let i=[];return u.getGridElements(t).forEach((t=>{t.gridstack||(t.gridstack=new u(t,r.Utils.cloneDeep(e)),delete e.dragIn,delete e.dragInOptions),i.push(t.gridstack)})),0===i.length&&console.error('GridStack.initAll() no grid was found with selector "'+t+'" - element missing or wrong selector ?\nNote: ".grid-stack" is required for proper CSS styling and drag/drop, and is the default selector.'),i}static addGrid(e,t={}){if(!e)return null;let i=e;if(!e.classList.contains("grid-stack")||t.addRemoveCB)if(t.addRemoveCB)i=t.addRemoveCB(e,t,!0,!0);else{let s=document.implementation.createHTMLDocument("");s.body.innerHTML=`
`,i=s.body.children[0],e.appendChild(i)}return u.init(t,i)}static registerEngine(e){u.engineClass=e}get placeholder(){if(!this._placeholder){let e=document.createElement("div");e.className="placeholder-content",this.opts.placeholderText&&(e.innerHTML=this.opts.placeholderText),this._placeholder=document.createElement("div"),this._placeholder.classList.add(this.opts.placeholderClass,l.gridDefaults.itemClass,this.opts.itemClass),this.placeholder.appendChild(e)}return this._placeholder}addWidget(e,t){let i,s;if("string"==typeof e){let t=document.implementation.createHTMLDocument("");t.body.innerHTML=e,i=t.body.children[0]}else if(0===arguments.length||1===arguments.length&&(void 0!==(o=e).el||void 0!==o.x||void 0!==o.y||void 0!==o.w||void 0!==o.h||void 0!==o.content))if(s=t=e,null==s?void 0:s.el)i=s.el;else if(this.opts.addRemoveCB)i=this.opts.addRemoveCB(this.el,t,!0,!1);else{let e=(null==t?void 0:t.content)||"",s=document.implementation.createHTMLDocument("");s.body.innerHTML=`
${e}
`,i=s.body.children[0]}else i=e;var o;if(!i)return;let n=this._readAttr(i);return t=r.Utils.cloneDeep(t)||{},r.Utils.defaults(t,n),s=this.engine.prepareNode(t),this._writeAttr(i,t),this._insertNotAppend?this.el.prepend(i):this.el.appendChild(i),this._prepareElement(i,!0,t),this._updateContainerHeight(),s.subGrid&&this.makeSubGrid(s.el,void 0,void 0,!1),this._prevColumn&&1===this.opts.column&&(this._ignoreLayoutsNodeChange=!0),this._triggerAddEvent(),this._triggerChangeEvent(),delete this._ignoreLayoutsNodeChange,i}makeSubGrid(e,t,i,s=!0){var o,n,l;let a,h=e.gridstackNode;if(h||(h=this.makeWidget(e).gridstackNode),null===(o=h.subGrid)||void 0===o?void 0:o.el)return h.subGrid;let d,g=this;for(;g&&!a;)a=null===(n=g.opts)||void 0===n?void 0:n.subGrid,g=null===(l=g.parentGridItem)||void 0===l?void 0:l.grid;t=r.Utils.cloneDeep(Object.assign(Object.assign(Object.assign({},a||{}),{children:void 0}),t||h.subGrid)),h.subGrid=t,"auto"===t.column&&(d=!0,t.column=Math.max(h.w||1,(null==i?void 0:i.w)||1),t.disableOneColumnMode=!0);let p,c,m=h.el.querySelector(".grid-stack-item-content");if(s){if(this._removeDD(h.el),c=Object.assign(Object.assign({},h),{x:0,y:0}),r.Utils.removeInternalForSave(c),delete c.subGrid,h.content&&(c.content=h.content,delete h.content),this.opts.addRemoveCB)p=this.opts.addRemoveCB(this.el,c,!0,!1);else{let e=document.implementation.createHTMLDocument("");e.body.innerHTML='
',p=e.body.children[0],p.appendChild(m),e.body.innerHTML='
',m=e.body.children[0],h.el.appendChild(m)}this._prepareDragDropByNode(h)}if(i){let e=d?t.column:h.w,s=h.h+i.h,o=h.el.style;o.transition="none",this.update(h.el,{w:e,h:s}),setTimeout((()=>o.transition=null))}this.opts.addRemoveCB&&(t.addRemoveCB=t.addRemoveCB||this.opts.addRemoveCB);let v=h.subGrid=u.addGrid(m,t);return(null==i?void 0:i._moving)&&(v._isTemp=!0),d&&(v._autoColumn=!0),s&&v.addWidget(p,c),i&&(i._moving?window.setTimeout((()=>r.Utils.simulateMouseEvent(i._event,"mouseenter",v.el)),0):v.addWidget(h.el,h)),v}removeAsSubGrid(e){var t;let i=null===(t=this.parentGridItem)||void 0===t?void 0:t.grid;i&&(i.batchUpdate(),i.removeWidget(this.parentGridItem.el,!0,!0),this.engine.nodes.forEach((e=>{e.x+=this.parentGridItem.x,e.y+=this.parentGridItem.y,i.addWidget(e.el,e)})),i.batchUpdate(!1),this.parentGridItem&&delete this.parentGridItem.subGrid,delete this.parentGridItem,e&&window.setTimeout((()=>r.Utils.simulateMouseEvent(e._event,"mouseenter",i.el)),0))}save(e=!0,t=!1){let i=this.engine.save(e);if(i.forEach((i=>{var s;if(e&&i.el&&!i.subGrid){let e=i.el.querySelector(".grid-stack-item-content");i.content=e?e.innerHTML:void 0,i.content||delete i.content}else if(e||delete i.content,null===(s=i.subGrid)||void 0===s?void 0:s.el){const s=i.subGrid.save(e,t);i.subGrid=t?s:{children:s}}delete i.el})),t){let e=r.Utils.cloneDeep(this.opts);e.marginBottom===e.marginTop&&e.marginRight===e.marginLeft&&e.marginTop===e.marginRight&&(e.margin=e.marginTop,delete e.marginTop,delete e.marginRight,delete e.marginBottom,delete e.marginLeft),e.rtl===("rtl"===this.el.style.direction)&&(e.rtl="auto"),this._isAutoCellHeight&&(e.cellHeight="auto"),this._autoColumn&&(e.column="auto",delete e.disableOneColumnMode);const t=e._alwaysShowResizeHandle;return delete e._alwaysShowResizeHandle,void 0!==t?e.alwaysShowResizeHandle=t:delete e.alwaysShowResizeHandle,r.Utils.removeInternalAndSame(e,l.gridDefaults),e.children=i,e}return i}load(e,t=this.opts.addRemoveCB||!0){let i=u.Utils.sort([...e],-1,this._prevColumn||this.getColumn());this._insertNotAppend=!0,this._prevColumn&&this._prevColumn!==this.opts.column&&i.some((e=>e.x+e.w>this.opts.column))&&(this._ignoreLayoutsNodeChange=!0,this.engine.cacheLayout(i,this._prevColumn,!0));const s=this.opts.addRemoveCB;"function"==typeof t&&(this.opts.addRemoveCB=t);let o=[];if(this.batchUpdate(),t){[...this.engine.nodes].forEach((e=>{i.find((t=>e.id===t.id))||(this.opts.addRemoveCB&&this.opts.addRemoveCB(this.el,e,!1,!1),o.push(e),this.removeWidget(e.el,!0,!1))}))}return i.forEach((e=>{let i=e.id||0===e.id?this.engine.nodes.find((t=>t.id===e.id)):void 0;if(i){if(this.update(i.el,e),e.subGrid&&e.subGrid.children){let t=i.el.querySelector(".grid-stack");t&&t.gridstack&&(t.gridstack.load(e.subGrid.children),this._insertNotAppend=!0)}}else t&&this.addWidget(e)})),this.engine.removedNodes=o,this.batchUpdate(!1),delete this._ignoreLayoutsNodeChange,delete this._insertNotAppend,s?this.opts.addRemoveCB=s:delete this.opts.addRemoveCB,this}batchUpdate(e=!0){return this.engine.batchUpdate(e),e||(this._triggerRemoveEvent(),this._triggerAddEvent(),this._triggerChangeEvent()),this}getCellHeight(e=!1){if(this.opts.cellHeight&&"auto"!==this.opts.cellHeight&&(!e||!this.opts.cellHeightUnit||"px"===this.opts.cellHeightUnit))return this.opts.cellHeight;let t=this.el.querySelector("."+this.opts.itemClass);if(t){let e=r.Utils.toNumber(t.getAttribute("gs-h"));return Math.round(t.offsetHeight/e)}let i=parseInt(this.el.getAttribute("gs-current-row"));return i?Math.round(this.el.getBoundingClientRect().height/i):this.opts.cellHeight}cellHeight(e,t=!0){if(t&&void 0!==e&&this._isAutoCellHeight!==("auto"===e)&&(this._isAutoCellHeight="auto"===e,this._updateWindowResizeEvent()),"initial"!==e&&"auto"!==e||(e=void 0),void 0===e){let t=-this.opts.marginRight-this.opts.marginLeft+this.opts.marginTop+this.opts.marginBottom;e=this.cellWidth()+t}let i=r.Utils.parseHeight(e);return this.opts.cellHeightUnit===i.unit&&this.opts.cellHeight===i.h||(this.opts.cellHeightUnit=i.unit,this.opts.cellHeight=i.h,t&&this._updateStyles(!0)),this}cellWidth(){return this._widthOrContainer()/this.getColumn()}_widthOrContainer(){return this.el.clientWidth||this.el.parentElement.clientWidth||window.innerWidth}compact(){return this.engine.compact(),this._triggerChangeEvent(),this}column(e,t="moveScale"){if(e<1||this.opts.column===e)return this;let i,s=this.getColumn();return 1===e?this._prevColumn=s:delete this._prevColumn,this.el.classList.remove("grid-stack-"+s),this.el.classList.add("grid-stack-"+e),this.opts.column=this.engine.column=e,1===e&&this.opts.oneColumnModeDomSort&&(i=[],this.getGridItems().forEach((e=>{e.gridstackNode&&i.push(e.gridstackNode)})),i.length||(i=void 0)),this.engine.updateNodeWidths(s,e,i,t),this._isAutoCellHeight&&this.cellHeight(),this._ignoreLayoutsNodeChange=!0,this._triggerChangeEvent(),delete this._ignoreLayoutsNodeChange,this}getColumn(){return this.opts.column}getGridItems(){return Array.from(this.el.children).filter((e=>e.matches("."+this.opts.itemClass)&&!e.matches("."+this.opts.placeholderClass)))}destroy(e=!0){if(this.el)return this._updateWindowResizeEvent(!0),this.setStatic(!0,!1),this.setAnimation(!1),e?this.el.parentNode.removeChild(this.el):(this.removeAll(e),this.el.classList.remove(this._styleSheetClass)),this._removeStylesheet(),this.el.removeAttribute("gs-current-row"),this.parentGridItem&&delete this.parentGridItem.subGrid,delete this.parentGridItem,delete this.opts,delete this._placeholder,delete this.engine,delete this.el.gridstack,delete this.el,this}float(e){return this.opts.float!==e&&(this.opts.float=this.engine.float=e,this._triggerChangeEvent()),this}getFloat(){return this.engine.float}getCellFromPixel(e,t=!1){let i,s=this.el.getBoundingClientRect();i=t?{top:s.top+document.documentElement.scrollTop,left:s.left}:{top:this.el.offsetTop,left:this.el.offsetLeft};let o=e.left-i.left,n=e.top-i.top,r=s.width/this.getColumn(),l=s.height/parseInt(this.el.getAttribute("gs-current-row"));return{x:Math.floor(o/r),y:Math.floor(n/l)}}getRow(){return Math.max(this.engine.getRow(),this.opts.minRow)}isAreaEmpty(e,t,i,s){return this.engine.isAreaEmpty(e,t,i,s)}makeWidget(e){let t=u.getElement(e);return this._prepareElement(t,!0),this._updateContainerHeight(),this._triggerAddEvent(),this._triggerChangeEvent(),t}on(e,t){if(-1!==e.indexOf(" ")){return e.split(" ").forEach((e=>this.on(e,t))),this}if("change"===e||"added"===e||"removed"===e||"enable"===e||"disable"===e){let i="enable"===e||"disable"===e;this._gsEventHandler[e]=i?e=>t(e):e=>t(e,e.detail),this.el.addEventListener(e,this._gsEventHandler[e])}else"drag"===e||"dragstart"===e||"dragstop"===e||"resizestart"===e||"resize"===e||"resizestop"===e||"dropped"===e?this._gsEventHandler[e]=t:console.log("GridStack.on("+e+') event not supported, but you can still use $(".grid-stack").on(...) while jquery-ui is still used internally.');return this}off(e){if(-1!==e.indexOf(" ")){return e.split(" ").forEach((e=>this.off(e))),this}return"change"!==e&&"added"!==e&&"removed"!==e&&"enable"!==e&&"disable"!==e||this._gsEventHandler[e]&&this.el.removeEventListener(e,this._gsEventHandler[e]),delete this._gsEventHandler[e],this}removeWidget(e,t=!0,i=!0){return u.getElements(e).forEach((e=>{if(e.parentElement&&e.parentElement!==this.el)return;let s=e.gridstackNode;s||(s=this.engine.nodes.find((t=>e===t.el))),s&&(delete e.gridstackNode,this._removeDD(e),this.engine.removeNode(s,t,i),t&&e.parentElement&&e.remove())})),i&&(this._triggerRemoveEvent(),this._triggerChangeEvent()),this}removeAll(e=!0){return this.engine.nodes.forEach((e=>{delete e.el.gridstackNode,this._removeDD(e.el)})),this.engine.removeAll(e),this._triggerRemoveEvent(),this}setAnimation(e){return e?this.el.classList.add("grid-stack-animate"):this.el.classList.remove("grid-stack-animate"),this}setStatic(e,t=!0,i=!0){return this.opts.staticGrid===e||(this.opts.staticGrid=e,this._setupRemoveDrop(),this._setupAcceptWidget(),this.engine.nodes.forEach((s=>{this._prepareDragDropByNode(s),s.subGrid&&i&&s.subGrid.setStatic(e,t,i)})),t&&this._setStaticClass()),this}update(e,t){if(arguments.length>2){console.warn("gridstack.ts: `update(el, x, y, w, h)` is deprecated. Use `update(el, {x, w, content, ...})`. It will be removed soon");let i=arguments,s=1;return t={x:i[s++],y:i[s++],w:i[s++],h:i[s++]},this.update(e,t)}return u.getElements(e).forEach((e=>{if(!e||!e.gridstackNode)return;let i=e.gridstackNode,s=r.Utils.cloneDeep(t);delete s.autoPosition;let o,n=["x","y","w","h"];if(n.some((e=>void 0!==s[e]&&s[e]!==i[e]))&&(o={},n.forEach((e=>{o[e]=void 0!==s[e]?s[e]:i[e],delete s[e]}))),!o&&(s.minW||s.minH||s.maxW||s.maxH)&&(o={}),s.content){let t=e.querySelector(".grid-stack-item-content");t&&t.innerHTML!==s.content&&(t.innerHTML=s.content),delete s.content}let l=!1,a=!1;for(const e in s)"_"!==e[0]&&i[e]!==s[e]&&(i[e]=s[e],l=!0,a=a||!this.opts.staticGrid&&("noResize"===e||"noMove"===e||"locked"===e));o&&(this.engine.cleanNodes().beginUpdate(i).moveNode(i,o),this._updateContainerHeight(),this._triggerChangeEvent(),this.engine.endUpdate()),l&&this._writeAttr(e,i),a&&this._prepareDragDropByNode(i)})),this}margin(e){if(!("string"==typeof e&&e.split(" ").length>1)){let t=r.Utils.parseHeight(e);if(this.opts.marginUnit===t.unit&&this.opts.margin===t.h)return}return this.opts.margin=e,this.opts.marginTop=this.opts.marginBottom=this.opts.marginLeft=this.opts.marginRight=void 0,this._initMargin(),this._updateStyles(!0),this}getMargin(){return this.opts.margin}willItFit(e){if(arguments.length>1){console.warn("gridstack.ts: `willItFit(x,y,w,h,autoPosition)` is deprecated. Use `willItFit({x, y,...})`. It will be removed soon");let e=arguments,t=0,i={x:e[t++],y:e[t++],w:e[t++],h:e[t++],autoPosition:e[t++]};return this.willItFit(i)}return this.engine.willItFit(e)}_triggerChangeEvent(){if(this.engine.batchMode)return this;let e=this.engine.getDirtyNodes(!0);return e&&e.length&&(this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(e),this._triggerEvent("change",e)),this.engine.saveInitial(),this}_triggerAddEvent(){return this.engine.batchMode||this.engine.addedNodes&&this.engine.addedNodes.length>0&&(this._ignoreLayoutsNodeChange||this.engine.layoutsNodesChange(this.engine.addedNodes),this.engine.addedNodes.forEach((e=>{delete e._dirty})),this._triggerEvent("added",this.engine.addedNodes),this.engine.addedNodes=[]),this}_triggerRemoveEvent(){return this.engine.batchMode||this.engine.removedNodes&&this.engine.removedNodes.length>0&&(this._triggerEvent("removed",this.engine.removedNodes),this.engine.removedNodes=[]),this}_triggerEvent(e,t){let i=t?new CustomEvent(e,{bubbles:!1,detail:t}):new Event(e);return this.el.dispatchEvent(i),this}_removeStylesheet(){return this._styles&&(r.Utils.removeStylesheet(this._styleSheetClass),delete this._styles),this}_updateStyles(e=!1,t){if(e&&this._removeStylesheet(),t||(t=this.getRow()),this._updateContainerHeight(),0===this.opts.cellHeight)return this;let i=this.opts.cellHeight,s=this.opts.cellHeightUnit,o=`.${this._styleSheetClass} > .${this.opts.itemClass}`;if(!this._styles){let e=this.opts.styleInHead?void 0:this.el.parentNode;if(this._styles=r.Utils.createStylesheet(this._styleSheetClass,e,{nonce:this.opts.nonce}),!this._styles)return this;this._styles._max=0,r.Utils.addCSSRule(this._styles,o,`min-height: ${i}${s}`);let t=this.opts.marginTop+this.opts.marginUnit,n=this.opts.marginBottom+this.opts.marginUnit,l=this.opts.marginRight+this.opts.marginUnit,a=this.opts.marginLeft+this.opts.marginUnit,h=`${o} > .grid-stack-item-content`,d=`.${this._styleSheetClass} > .grid-stack-placeholder > .placeholder-content`;r.Utils.addCSSRule(this._styles,h,`top: ${t}; right: ${l}; bottom: ${n}; left: ${a};`),r.Utils.addCSSRule(this._styles,d,`top: ${t}; right: ${l}; bottom: ${n}; left: ${a};`),r.Utils.addCSSRule(this._styles,`${o} > .ui-resizable-ne`,`right: ${l}`),r.Utils.addCSSRule(this._styles,`${o} > .ui-resizable-e`,`right: ${l}`),r.Utils.addCSSRule(this._styles,`${o} > .ui-resizable-se`,`right: ${l}; bottom: ${n}`),r.Utils.addCSSRule(this._styles,`${o} > .ui-resizable-nw`,`left: ${a}`),r.Utils.addCSSRule(this._styles,`${o} > .ui-resizable-w`,`left: ${a}`),r.Utils.addCSSRule(this._styles,`${o} > .ui-resizable-sw`,`left: ${a}; bottom: ${n}`)}if((t=t||this._styles._max)>this._styles._max){let e=e=>i*e+s;for(let i=this._styles._max+1;i<=t;i++){let t=e(i);r.Utils.addCSSRule(this._styles,`${o}[gs-y="${i-1}"]`,`top: ${e(i-1)}`),r.Utils.addCSSRule(this._styles,`${o}[gs-h="${i}"]`,`height: ${t}`),r.Utils.addCSSRule(this._styles,`${o}[gs-min-h="${i}"]`,`min-height: ${t}`),r.Utils.addCSSRule(this._styles,`${o}[gs-max-h="${i}"]`,`max-height: ${t}`)}this._styles._max=t}return this}_updateContainerHeight(){if(!this.engine||this.engine.batchMode)return this;let e=this.getRow()+this._extraDragRow;if(this.el.setAttribute("gs-current-row",String(e)),0===e)return this.el.style.removeProperty("min-height"),this;let t=this.opts.cellHeight,i=this.opts.cellHeightUnit;return t?(this.el.style.minHeight=e*t+i,this):this}_prepareElement(e,t=!1,i){e.classList.add(this.opts.itemClass),i=i||this._readAttr(e),e.gridstackNode=i,i.el=e,i.grid=this;let s=Object.assign({},i);return i=this.engine.addNode(i,t),r.Utils.same(i,s)||this._writeAttr(e,i),this._prepareDragDropByNode(i),this}_writePosAttr(e,t){return void 0!==t.x&&null!==t.x&&e.setAttribute("gs-x",String(t.x)),void 0!==t.y&&null!==t.y&&e.setAttribute("gs-y",String(t.y)),t.w&&e.setAttribute("gs-w",String(t.w)),t.h&&e.setAttribute("gs-h",String(t.h)),this}_writeAttr(e,t){if(!t)return this;this._writePosAttr(e,t);let i={autoPosition:"gs-auto-position",minW:"gs-min-w",minH:"gs-min-h",maxW:"gs-max-w",maxH:"gs-max-h",noResize:"gs-no-resize",noMove:"gs-no-move",locked:"gs-locked",id:"gs-id"};for(const s in i)t[s]?e.setAttribute(i[s],String(t[s])):e.removeAttribute(i[s]);return this}_readAttr(e){let t={};t.x=r.Utils.toNumber(e.getAttribute("gs-x")),t.y=r.Utils.toNumber(e.getAttribute("gs-y")),t.w=r.Utils.toNumber(e.getAttribute("gs-w")),t.h=r.Utils.toNumber(e.getAttribute("gs-h")),t.maxW=r.Utils.toNumber(e.getAttribute("gs-max-w")),t.minW=r.Utils.toNumber(e.getAttribute("gs-min-w")),t.maxH=r.Utils.toNumber(e.getAttribute("gs-max-h")),t.minH=r.Utils.toNumber(e.getAttribute("gs-min-h")),t.autoPosition=r.Utils.toBool(e.getAttribute("gs-auto-position")),t.noResize=r.Utils.toBool(e.getAttribute("gs-no-resize")),t.noMove=r.Utils.toBool(e.getAttribute("gs-no-move")),t.locked=r.Utils.toBool(e.getAttribute("gs-locked")),t.id=e.getAttribute("gs-id");for(const e in t){if(!t.hasOwnProperty(e))return;t[e]||0===t[e]||delete t[e]}return t}_setStaticClass(){let e=["grid-stack-static"];return this.opts.staticGrid?(this.el.classList.add(...e),this.el.setAttribute("gs-static","true")):(this.el.classList.remove(...e),this.el.removeAttribute("gs-static")),this}onParentResize(){if(!this.el||!this.el.clientWidth)return;let e=!1;if(this._autoColumn&&this.parentGridItem)this.opts.column!==this.parentGridItem.w&&(e=!0,this.column(this.parentGridItem.w,"none"));else{let t=!this.opts.disableOneColumnMode&&this.el.clientWidth<=this.opts.oneColumnSize;1===this.opts.column!==t&&(e=!0,this.opts.animate&&this.setAnimation(!1),this.column(t?1:this._prevColumn),this.opts.animate&&this.setAnimation(!0))}return this._isAutoCellHeight&&(!e&&this.opts.cellHeightThrottle?(this._cellHeightThrottle||(this._cellHeightThrottle=r.Utils.throttle((()=>this.cellHeight()),this.opts.cellHeightThrottle)),this._cellHeightThrottle()):this.cellHeight()),this.engine.nodes.forEach((e=>{e.subGrid&&e.subGrid.onParentResize()})),this}_updateWindowResizeEvent(e=!1){const t=(this._isAutoCellHeight||!this.opts.disableOneColumnMode)&&!this.parentGridItem;return e||!t||this._windowResizeBind?!e&&t||!this._windowResizeBind||(window.removeEventListener("resize",this._windowResizeBind),delete this._windowResizeBind):(this._windowResizeBind=this.onParentResize.bind(this),window.addEventListener("resize",this._windowResizeBind)),this}static getElement(e=".grid-stack-item"){return r.Utils.getElement(e)}static getElements(e=".grid-stack-item"){return r.Utils.getElements(e)}static getGridElement(e){return u.getElement(e)}static getGridElements(e){return r.Utils.getElements(e)}_initMargin(){let e,t=0,i=[];return"string"==typeof this.opts.margin&&(i=this.opts.margin.split(" ")),2===i.length?(this.opts.marginTop=this.opts.marginBottom=i[0],this.opts.marginLeft=this.opts.marginRight=i[1]):4===i.length?(this.opts.marginTop=i[0],this.opts.marginRight=i[1],this.opts.marginBottom=i[2],this.opts.marginLeft=i[3]):(e=r.Utils.parseHeight(this.opts.margin),this.opts.marginUnit=e.unit,t=this.opts.margin=e.h),void 0===this.opts.marginTop?this.opts.marginTop=t:(e=r.Utils.parseHeight(this.opts.marginTop),this.opts.marginTop=e.h,delete this.opts.margin),void 0===this.opts.marginBottom?this.opts.marginBottom=t:(e=r.Utils.parseHeight(this.opts.marginBottom),this.opts.marginBottom=e.h,delete this.opts.margin),void 0===this.opts.marginRight?this.opts.marginRight=t:(e=r.Utils.parseHeight(this.opts.marginRight),this.opts.marginRight=e.h,delete this.opts.margin),void 0===this.opts.marginLeft?this.opts.marginLeft=t:(e=r.Utils.parseHeight(this.opts.marginLeft),this.opts.marginLeft=e.h,delete this.opts.margin),this.opts.marginUnit=e.unit,this.opts.marginTop===this.opts.marginBottom&&this.opts.marginLeft===this.opts.marginRight&&this.opts.marginTop===this.opts.marginRight&&(this.opts.margin=this.opts.marginTop),this}static getDD(){return g}static setupDragIn(e,t){void 0!==(null==t?void 0:t.pause)&&(d.DDManager.pauseDrag=t.pause),"string"==typeof e&&(t=Object.assign(Object.assign({},l.dragInDefaultOptions),t||{}),r.Utils.getElements(e).forEach((e=>{g.isDraggable(e)||g.dragIn(e,t)})))}movable(e,t){return this.opts.staticGrid||u.getElements(e).forEach((e=>{let i=e.gridstackNode;i&&(t?delete i.noMove:i.noMove=!0,this._prepareDragDropByNode(i))})),this}resizable(e,t){return this.opts.staticGrid||u.getElements(e).forEach((e=>{let i=e.gridstackNode;i&&(t?delete i.noResize:i.noResize=!0,this._prepareDragDropByNode(i))})),this}disable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!1,e),this.enableResize(!1,e),this._triggerEvent("disable"),this}enable(e=!0){if(!this.opts.staticGrid)return this.enableMove(!0,e),this.enableResize(!0,e),this._triggerEvent("enable"),this}enableMove(e,t=!0){return this.opts.staticGrid||(this.opts.disableDrag=!e,this.engine.nodes.forEach((i=>{this.movable(i.el,e),i.subGrid&&t&&i.subGrid.enableMove(e,t)}))),this}enableResize(e,t=!0){return this.opts.staticGrid||(this.opts.disableResize=!e,this.engine.nodes.forEach((i=>{this.resizable(i.el,e),i.subGrid&&t&&i.subGrid.enableResize(e,t)}))),this}_removeDD(e){return g.draggable(e,"destroy").resizable(e,"destroy"),e.gridstackNode&&delete e.gridstackNode._initDD,delete e.ddElement,this}_setupAcceptWidget(){if(this.opts.staticGrid||!this.opts.acceptWidgets&&!this.opts.removable)return g.droppable(this.el,"destroy"),this;let e,t,i=(i,s,o)=>{let n=s.gridstackNode;if(!n)return;o=o||s;let l=this.el.getBoundingClientRect(),{top:a,left:h}=o.getBoundingClientRect();h-=l.left,a-=l.top;let d={position:{top:a,left:h}};if(n._temporaryRemoved){if(n.x=Math.max(0,Math.round(h/t)),n.y=Math.max(0,Math.round(a/e)),delete n.autoPosition,this.engine.nodeBoundFix(n),!this.engine.willItFit(n)){if(n.autoPosition=!0,!this.engine.willItFit(n))return void g.off(s,"drag");n._willFitPos&&(r.Utils.copyPos(n,n._willFitPos),delete n._willFitPos)}this._onStartMoving(o,i,d,n,t,e)}else this._dragOrResize(o,i,d,n,t,e)};return g.droppable(this.el,{accept:e=>{let t=e.gridstackNode;if((null==t?void 0:t.grid)===this)return!0;if(!this.opts.acceptWidgets)return!1;let i=!0;if("function"==typeof this.opts.acceptWidgets)i=this.opts.acceptWidgets(e);else{let t=!0===this.opts.acceptWidgets?".grid-stack-item":this.opts.acceptWidgets;i=e.matches(t)}if(i&&t&&this.opts.maxRow){let e={w:t.w,h:t.h,minW:t.minW,minH:t.minH};i=this.engine.willItFit(e)}return i}}).on(this.el,"dropover",((s,o,n)=>{let r=o.gridstackNode;if((null==r?void 0:r.grid)===this&&!r._temporaryRemoved)return!1;if((null==r?void 0:r.grid)&&r.grid!==this&&!r._temporaryRemoved){r.grid._leave(o,n)}t=this.cellWidth(),e=this.getCellHeight(!0),r||(r=this._readAttr(o)),r.grid||(r._isExternal=!0,o.gridstackNode=r),n=n||o;let l=r.w||Math.round(n.offsetWidth/t)||1,a=r.h||Math.round(n.offsetHeight/e)||1;return r.grid&&r.grid!==this?(o._gridstackNodeOrig||(o._gridstackNodeOrig=r),o.gridstackNode=r=Object.assign(Object.assign({},r),{w:l,h:a,grid:this}),this.engine.cleanupNode(r).nodeBoundFix(r),r._initDD=r._isExternal=r._temporaryRemoved=!0):(r.w=l,r.h=a,r._temporaryRemoved=!0),this._itemRemoving(r.el,!1),g.on(o,"drag",i),i(s,o,n),!1})).on(this.el,"dropout",((e,t,i)=>{let s=t.gridstackNode;return!!s&&(s.grid&&s.grid!==this||(this._leave(t,i),this._isTemp&&this.removeAsSubGrid(s)),!1)})).on(this.el,"drop",((e,t,i)=>{var s,o;let n=t.gridstackNode;if((null==n?void 0:n.grid)===this&&!n._isExternal)return!1;let a=!!this.placeholder.parentElement;this.placeholder.remove();let h=t._gridstackNodeOrig;if(delete t._gridstackNodeOrig,a&&(null==h?void 0:h.grid)&&h.grid!==this){let e=h.grid;e.engine.removedNodes.push(h),e._triggerRemoveEvent()._triggerChangeEvent(),e.parentGridItem&&!e.engine.nodes.length&&e.opts.subGridDynamic&&e.removeAsSubGrid()}if(!n)return!1;if(a&&(this.engine.cleanupNode(n),n.grid=this),g.off(t,"drag"),i!==t?(i.remove(),t.gridstackNode=h,a&&(t=t.cloneNode(!0))):(t.remove(),this._removeDD(t)),!a)return!1;t.gridstackNode=n,n.el=t;let d=null===(o=null===(s=n.subGrid)||void 0===s?void 0:s.el)||void 0===o?void 0:o.gridstack;return r.Utils.copyPos(n,this._readAttr(this.placeholder)),r.Utils.removePositioningStyles(t),this._writeAttr(t,n),t.classList.add(l.gridDefaults.itemClass,this.opts.itemClass),this.el.appendChild(t),d&&(d.parentGridItem=n,d.opts.styleInHead||d._updateStyles(!0)),this._updateContainerHeight(),this.engine.addedNodes.push(n),this._triggerAddEvent(),this._triggerChangeEvent(),this.engine.endUpdate(),this._gsEventHandler.dropped&&this._gsEventHandler.dropped(Object.assign(Object.assign({},e),{type:"dropped"}),h&&h.grid?h:void 0,n),window.setTimeout((()=>{n.el&&n.el.parentElement?this._prepareDragDropByNode(n):this.engine.removeNode(n),delete n.grid._isTemp})),!1})),this}_itemRemoving(e,t){let i=e?e.gridstackNode:void 0;i&&i.grid&&(t?i._isAboutToRemove=!0:delete i._isAboutToRemove,t?e.classList.add("grid-stack-item-removing"):e.classList.remove("grid-stack-item-removing"))}_setupRemoveDrop(){if(!this.opts.staticGrid&&"string"==typeof this.opts.removable){let e=document.querySelector(this.opts.removable);if(!e)return this;g.isDroppable(e)||g.droppable(e,this.opts.removableOptions).on(e,"dropover",((e,t)=>this._itemRemoving(t,!0))).on(e,"dropout",((e,t)=>this._itemRemoving(t,!1)))}return this}_prepareDragDropByNode(e){let t=e.el;const i=e.noMove||this.opts.disableDrag,s=e.noResize||this.opts.disableResize;if(this.opts.staticGrid||i&&s)return e._initDD&&(this._removeDD(t),delete e._initDD),t.classList.add("ui-draggable-disabled","ui-resizable-disabled"),this;if(!e._initDD){let i,s,o=(o,n)=>{this._gsEventHandler[o.type]&&this._gsEventHandler[o.type](o,o.target),i=this.cellWidth(),s=this.getCellHeight(!0),this._onStartMoving(t,o,n,e,i,s)},n=(o,n)=>{this._dragOrResize(t,o,n,e,i,s)},l=i=>{this.placeholder.remove(),delete e._moving,delete e._event,delete e._lastTried;let s=i.target;if(s.gridstackNode&&s.gridstackNode.grid===this){if(e.el=s,e._isAboutToRemove){let o=t.gridstackNode.grid;o._gsEventHandler[i.type]&&o._gsEventHandler[i.type](i,s),this._removeDD(t),o.engine.removedNodes.push(e),o._triggerRemoveEvent(),delete t.gridstackNode,delete e.el,t.remove()}else r.Utils.removePositioningStyles(s),e._temporaryRemoved?(r.Utils.copyPos(e,e._orig),this._writePosAttr(s,e),this.engine.addNode(e)):this._writePosAttr(s,e),this._gsEventHandler[i.type]&&this._gsEventHandler[i.type](i,s);this._extraDragRow=0,this._updateContainerHeight(),this._triggerChangeEvent(),this.engine.endUpdate()}};g.draggable(t,{start:o,stop:l,drag:n}).resizable(t,{start:o,stop:l,resize:n}),e._initDD=!0}return g.draggable(t,i?"disable":"enable").resizable(t,s?"disable":"enable"),this}_onStartMoving(e,t,i,s,o,n){this.engine.cleanNodes().beginUpdate(s),this._writePosAttr(this.placeholder,s),this.el.appendChild(this.placeholder),s.el=this.placeholder,s._lastUiPosition=i.position,s._prevYPix=i.position.top,s._moving="dragstart"===t.type,delete s._lastTried,"dropover"===t.type&&s._temporaryRemoved&&(this.engine.addNode(s),s._moving=!0),this.engine.cacheRects(o,n,this.opts.marginTop,this.opts.marginRight,this.opts.marginBottom,this.opts.marginLeft),"resizestart"===t.type&&(g.resizable(e,"option","minWidth",o*(s.minW||1)).resizable(e,"option","minHeight",n*(s.minH||1)),s.maxW&&g.resizable(e,"option","maxWidth",o*s.maxW),s.maxH&&g.resizable(e,"option","maxHeight",n*s.maxH))}_dragOrResize(e,t,i,s,o,n){let l,a=Object.assign({},s._orig),h=this.opts.marginLeft,d=this.opts.marginRight,g=this.opts.marginTop,u=this.opts.marginBottom,p=Math.round(.1*n),c=Math.round(.1*o);if(h=Math.min(h,c),d=Math.min(d,c),g=Math.min(g,p),u=Math.min(u,p),"drag"===t.type){if(s._temporaryRemoved)return;let t=i.position.top-s._prevYPix;s._prevYPix=i.position.top,!1!==this.opts.draggable.scroll&&r.Utils.updateScrollPosition(e,i.position,t);let l=i.position.left+(i.position.left>s._lastUiPosition.left?-d:h),p=i.position.top+(i.position.top>s._lastUiPosition.top?-u:g);a.x=Math.round(l/o),a.y=Math.round(p/n);let c=this._extraDragRow;if(this.engine.collide(s,a)){let e=this.getRow(),t=Math.max(0,a.y+s.h-e);this.opts.maxRow&&e+t>this.opts.maxRow&&(t=Math.max(0,this.opts.maxRow-e)),this._extraDragRow=t}else this._extraDragRow=0;if(this._extraDragRow!==c&&this._updateContainerHeight(),s.x===a.x&&s.y===a.y)return}else if("resize"===t.type){if(a.x<0)return;if(r.Utils.updateScrollResize(t,e,n),a.w=Math.round((i.size.width-h)/o),a.h=Math.round((i.size.height-g)/n),s.w===a.w&&s.h===a.h)return;if(s._lastTried&&s._lastTried.w===a.w&&s._lastTried.h===a.h)return;let d=i.position.left+h,u=i.position.top+g;a.x=Math.round(d/o),a.y=Math.round(u/n),l=!0}s._event=t,s._lastTried=a;let m={x:i.position.left+h,y:i.position.top+g,w:(i.size?i.size.width:s.w*o)-h-d,h:(i.size?i.size.height:s.h*n)-g-u};if(this.engine.moveNodeCheck(s,Object.assign(Object.assign({},a),{cellWidth:o,cellHeight:n,rect:m,resizing:l}))){s._lastUiPosition=i.position,this.engine.cacheRects(o,n,g,d,u,h),delete s._skipDown,l&&s.subGrid&&s.subGrid.onParentResize(),this._extraDragRow=0,this._updateContainerHeight();let e=t.target;this._writePosAttr(e,s),this._gsEventHandler[t.type]&&this._gsEventHandler[t.type](t,e)}}_leave(e,t){let i=e.gridstackNode;i&&(g.off(e,"drag"),i._temporaryRemoved||(i._temporaryRemoved=!0,this.engine.removeNode(i),i.el=i._isExternal&&t?t:e,!0===this.opts.removable&&this._itemRemoving(e,!0),e._gridstackNodeOrig?(e.gridstackNode=e._gridstackNodeOrig,delete e._gridstackNodeOrig):i._isExternal&&(delete i.el,delete e.gridstackNode,this.engine.restoreInitial())))}commit(){return r.obsolete(this,this.batchUpdate(!1),"commit","batchUpdate","5.2"),this}}t.GridStack=u,u.Utils=r.Utils,u.Engine=n.GridStackEngine,u.GDRev="7.3.0"},3777:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.dragInDefaultOptions=t.gridDefaults=void 0,t.gridDefaults={alwaysShowResizeHandle:"mobile",animate:!0,auto:!0,cellHeight:"auto",cellHeightThrottle:100,cellHeightUnit:"px",column:12,draggable:{handle:".grid-stack-item-content",appendTo:"body",scroll:!0},handle:".grid-stack-item-content",itemClass:"grid-stack-item",margin:10,marginUnit:"px",maxRow:0,minRow:0,oneColumnSize:768,placeholderClass:"grid-stack-placeholder",placeholderText:"",removableOptions:{accept:".grid-stack-item"},resizable:{handles:"se"},rtl:"auto"},t.dragInDefaultOptions={handle:".grid-stack-item-content",appendTo:"body"}},5037:function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.DDBaseImplement=void 0;t.DDBaseImplement=class{constructor(){this._eventRegister={}}get disabled(){return this._disabled}on(e,t){this._eventRegister[e]=t}off(e){delete this._eventRegister[e]}enable(){this._disabled=!1}disable(){this._disabled=!0}destroy(){delete this._eventRegister}triggerEvent(e,t){if(!this.disabled&&this._eventRegister&&this._eventRegister[e])return this._eventRegister[e](t)}}},6060:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DDDraggable=void 0;const s=i(1432),o=i(1661),n=i(5037),r=i(1120);class l extends n.DDBaseImplement{constructor(e,t={}){super(),this.el=e,this.option=t;let i=t.handle.substring(1);this.dragEl=e.classList.contains(i)?e:e.querySelector(t.handle)||e,this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this.enable()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){!1!==this.disabled&&(super.enable(),this.dragEl.addEventListener("mousedown",this._mouseDown),r.isTouch&&(this.dragEl.addEventListener("touchstart",r.touchstart),this.dragEl.addEventListener("pointerdown",r.pointerdown)),this.el.classList.remove("ui-draggable-disabled"),this.el.classList.add("ui-draggable"))}disable(e=!1){!0!==this.disabled&&(super.disable(),this.dragEl.removeEventListener("mousedown",this._mouseDown),r.isTouch&&(this.dragEl.removeEventListener("touchstart",r.touchstart),this.dragEl.removeEventListener("pointerdown",r.pointerdown)),this.el.classList.remove("ui-draggable"),e||this.el.classList.add("ui-draggable-disabled"))}destroy(){this.dragTimeout&&window.clearTimeout(this.dragTimeout),delete this.dragTimeout,this.dragging&&this._mouseUp(this.mouseDownEvent),this.disable(!0),delete this.el,delete this.helper,delete this.option,super.destroy()}updateOption(e){return Object.keys(e).forEach((t=>this.option[t]=e[t])),this}_mouseDown(e){if(s.DDManager.mouseHandled)return;if(0!==e.button)return!0;const t=e.target.nodeName.toLowerCase();return["input","textarea","button","select","option"].find((e=>e===t))||e.target.closest('[contenteditable="true"]')||(this.mouseDownEvent=e,delete this.dragging,delete s.DDManager.dragElement,delete s.DDManager.dropElement,document.addEventListener("mousemove",this._mouseMove,!0),document.addEventListener("mouseup",this._mouseUp,!0),r.isTouch&&(this.dragEl.addEventListener("touchmove",r.touchmove),this.dragEl.addEventListener("touchend",r.touchend)),e.preventDefault(),document.activeElement&&document.activeElement.blur(),s.DDManager.mouseHandled=!0),!0}_callDrag(e){if(!this.dragging)return;const t=o.Utils.initEvent(e,{target:this.el,type:"drag"});this.option.drag&&this.option.drag(t,this.ui()),this.triggerEvent("drag",t)}_mouseMove(e){var t;let i=this.mouseDownEvent;if(this.dragging)if(this._dragFollow(e),s.DDManager.pauseDrag){const t=Number.isInteger(s.DDManager.pauseDrag)?s.DDManager.pauseDrag:100;this.dragTimeout&&window.clearTimeout(this.dragTimeout),this.dragTimeout=window.setTimeout((()=>this._callDrag(e)),t)}else this._callDrag(e);else if(Math.abs(e.x-i.x)+Math.abs(e.y-i.y)>3){this.dragging=!0,s.DDManager.dragElement=this;let i=null===(t=this.el.gridstackNode)||void 0===t?void 0:t.grid;i?s.DDManager.dropElement=i.el.ddElement.ddDroppable:delete s.DDManager.dropElement,this.helper=this._createHelper(e),this._setupHelperContainmentStyle(),this.dragOffset=this._getDragOffset(e,this.el,this.helperContainment);const n=o.Utils.initEvent(e,{target:this.el,type:"dragstart"});this._setupHelperStyle(e),this.option.start&&this.option.start(n,this.ui()),this.triggerEvent("dragstart",n)}return e.preventDefault(),!0}_mouseUp(e){var t;if(document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),r.isTouch&&(this.dragEl.removeEventListener("touchmove",r.touchmove,!0),this.dragEl.removeEventListener("touchend",r.touchend,!0)),this.dragging){delete this.dragging,(null===(t=s.DDManager.dropElement)||void 0===t?void 0:t.el)===this.el.parentElement&&delete s.DDManager.dropElement,this.helperContainment.style.position=this.parentOriginStylePosition||null,this.helper===this.el?this._removeHelperStyle():this.helper.remove();const i=o.Utils.initEvent(e,{target:this.el,type:"dragstop"});this.option.stop&&this.option.stop(i),this.triggerEvent("dragstop",i),s.DDManager.dropElement&&s.DDManager.dropElement.drop(e)}delete this.helper,delete this.mouseDownEvent,delete s.DDManager.dragElement,delete s.DDManager.dropElement,delete s.DDManager.mouseHandled,e.preventDefault()}_createHelper(e){let t=this.el;return"function"==typeof this.option.helper?t=this.option.helper(e):"clone"===this.option.helper&&(t=o.Utils.cloneNode(this.el)),document.body.contains(t)||o.Utils.appendTo(t,"parent"===this.option.appendTo?this.el.parentNode:this.option.appendTo),t===this.el&&(this.dragElementOriginStyle=l.originStyleProp.map((e=>this.el.style[e]))),t}_setupHelperStyle(e){this.helper.classList.add("ui-draggable-dragging");const t=this.helper.style;return t.pointerEvents="none",t["min-width"]=0,t.width=this.dragOffset.width+"px",t.height=this.dragOffset.height+"px",t.willChange="left, top",t.position="fixed",this._dragFollow(e),t.transition="none",setTimeout((()=>{this.helper&&(t.transition=null)}),0),this}_removeHelperStyle(){var e;this.helper.classList.remove("ui-draggable-dragging");let t=null===(e=this.helper)||void 0===e?void 0:e.gridstackNode;if(!(null==t?void 0:t._isAboutToRemove)&&this.dragElementOriginStyle){let e=this.helper,t=this.dragElementOriginStyle.transition||null;e.style.transition=this.dragElementOriginStyle.transition="none",l.originStyleProp.forEach((t=>e.style[t]=this.dragElementOriginStyle[t]||null)),setTimeout((()=>e.style.transition=t),50)}return delete this.dragElementOriginStyle,this}_dragFollow(e){let t=0,i=0;const s=this.helper.style,o=this.dragOffset;s.left=e.clientX+o.offsetLeft-t+"px",s.top=e.clientY+o.offsetTop-i+"px"}_setupHelperContainmentStyle(){return this.helperContainment=this.helper.parentElement,"fixed"!==this.helper.style.position&&(this.parentOriginStylePosition=this.helperContainment.style.position,window.getComputedStyle(this.helperContainment).position.match(/static/)&&(this.helperContainment.style.position="relative")),this}_getDragOffset(e,t,i){let s=0,n=0;if(i){const e=document.createElement("div");o.Utils.addElStyles(e,{opacity:"0",position:"fixed",top:"0px",left:"0px",width:"1px",height:"1px",zIndex:"-999999"}),i.appendChild(e);const t=e.getBoundingClientRect();i.removeChild(e),s=t.left,n=t.top}const r=t.getBoundingClientRect();return{left:r.left,top:r.top,offsetLeft:-e.clientX+r.left-s,offsetTop:-e.clientY+r.top-n,width:r.width,height:r.height}}ui(){const e=this.el.parentElement.getBoundingClientRect(),t=this.helper.getBoundingClientRect();return{position:{top:t.top-e.top,left:t.left-e.left}}}}t.DDDraggable=l,l.originStyleProp=["transition","pointerEvents","position","left","top","minWidth","willChange"]},6839:function(e,t,i){var s=i(3668);i(8692),i(241),i.g.GridStack=s.GridStack},7540:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DDDroppable=void 0;const s=i(1432),o=i(5037),n=i(1661),r=i(1120);class l extends o.DDBaseImplement{constructor(e,t={}){super(),this.el=e,this.option=t,this._mouseEnter=this._mouseEnter.bind(this),this._mouseLeave=this._mouseLeave.bind(this),this.enable(),this._setupAccept()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){!1!==this.disabled&&(super.enable(),this.el.classList.add("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),this.el.addEventListener("mouseenter",this._mouseEnter),this.el.addEventListener("mouseleave",this._mouseLeave),r.isTouch&&(this.el.addEventListener("pointerenter",r.pointerenter),this.el.addEventListener("pointerleave",r.pointerleave)))}disable(e=!1){!0!==this.disabled&&(super.disable(),this.el.classList.remove("ui-droppable"),e||this.el.classList.add("ui-droppable-disabled"),this.el.removeEventListener("mouseenter",this._mouseEnter),this.el.removeEventListener("mouseleave",this._mouseLeave),r.isTouch&&(this.el.removeEventListener("pointerenter",r.pointerenter),this.el.removeEventListener("pointerleave",r.pointerleave)))}destroy(){this.disable(!0),this.el.classList.remove("ui-droppable"),this.el.classList.remove("ui-droppable-disabled"),super.destroy()}updateOption(e){return Object.keys(e).forEach((t=>this.option[t]=e[t])),this._setupAccept(),this}_mouseEnter(e){if(!s.DDManager.dragElement)return;if(!this._canDrop(s.DDManager.dragElement.el))return;e.preventDefault(),e.stopPropagation(),s.DDManager.dropElement&&s.DDManager.dropElement!==this&&s.DDManager.dropElement._mouseLeave(e),s.DDManager.dropElement=this;const t=n.Utils.initEvent(e,{target:this.el,type:"dropover"});this.option.over&&this.option.over(t,this._ui(s.DDManager.dragElement)),this.triggerEvent("dropover",t),this.el.classList.add("ui-droppable-over")}_mouseLeave(e){var t;if(!s.DDManager.dragElement||s.DDManager.dropElement!==this)return;e.preventDefault(),e.stopPropagation();const i=n.Utils.initEvent(e,{target:this.el,type:"dropout"});if(this.option.out&&this.option.out(i,this._ui(s.DDManager.dragElement)),this.triggerEvent("dropout",i),s.DDManager.dropElement===this){let i;delete s.DDManager.dropElement;let o=this.el.parentElement;for(;!i&&o;)i=null===(t=o.ddElement)||void 0===t?void 0:t.ddDroppable,o=o.parentElement;i&&i._mouseEnter(e)}}drop(e){e.preventDefault();const t=n.Utils.initEvent(e,{target:this.el,type:"drop"});this.option.drop&&this.option.drop(t,this._ui(s.DDManager.dragElement)),this.triggerEvent("drop",t)}_canDrop(e){return e&&(!this.accept||this.accept(e))}_setupAccept(){return this.option.accept?("string"==typeof this.option.accept?this.accept=e=>e.matches(this.option.accept):this.accept=this.option.accept,this):this}_ui(e){return Object.assign({draggable:e.el},e.ui())}}t.DDDroppable=l},7939:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DDGridStack=void 0;const s=i(1661),o=i(1432),n=i(51);t.DDGridStack=class{resizable(e,t,i,s){return this._getDDElements(e).forEach((e=>{if("disable"===t||"enable"===t)e.ddResizable&&e.ddResizable[t]();else if("destroy"===t)e.ddResizable&&e.cleanResizable();else if("option"===t)e.setupResizable({[i]:s});else{const i=e.el.gridstackNode.grid;let s=e.el.getAttribute("gs-resize-handles")?e.el.getAttribute("gs-resize-handles"):i.opts.resizable.handles,o=!i.opts.alwaysShowResizeHandle;e.setupResizable(Object.assign(Object.assign(Object.assign({},i.opts.resizable),{handles:s,autoHide:o}),{start:t.start,stop:t.stop,resize:t.resize}))}})),this}draggable(e,t,i,s){return this._getDDElements(e).forEach((e=>{if("disable"===t||"enable"===t)e.ddDraggable&&e.ddDraggable[t]();else if("destroy"===t)e.ddDraggable&&e.cleanDraggable();else if("option"===t)e.setupDraggable({[i]:s});else{const i=e.el.gridstackNode.grid;e.setupDraggable(Object.assign(Object.assign({},i.opts.draggable),{start:t.start,stop:t.stop,drag:t.drag}))}})),this}dragIn(e,t){return this._getDDElements(e).forEach((e=>e.setupDraggable(t))),this}droppable(e,t,i,s){return"function"!=typeof t.accept||t._accept||(t._accept=t.accept,t.accept=e=>t._accept(e)),this._getDDElements(e).forEach((e=>{"disable"===t||"enable"===t?e.ddDroppable&&e.ddDroppable[t]():"destroy"===t?e.ddDroppable&&e.cleanDroppable():"option"===t?e.setupDroppable({[i]:s}):e.setupDroppable(t)})),this}isDroppable(e){return!(!(e&&e.ddElement&&e.ddElement.ddDroppable)||e.ddElement.ddDroppable.disabled)}isDraggable(e){return!(!(e&&e.ddElement&&e.ddElement.ddDraggable)||e.ddElement.ddDraggable.disabled)}isResizable(e){return!(!(e&&e.ddElement&&e.ddElement.ddResizable)||e.ddElement.ddResizable.disabled)}on(e,t,i){return this._getDDElements(e).forEach((e=>e.on(t,(e=>{i(e,o.DDManager.dragElement?o.DDManager.dragElement.el:e.target,o.DDManager.dragElement?o.DDManager.dragElement.helper:null)})))),this}off(e,t){return this._getDDElements(e).forEach((e=>e.off(t))),this}_getDDElements(e,t=!0){let i=s.Utils.getElements(e);if(!i.length)return[];let o=i.map((e=>e.ddElement||(t?n.DDElement.init(e):null)));return t||o.filter((e=>e)),o}}},8692:function(e,t,i){i.r(t)},9101:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DDResizableHandle=void 0;const s=i(1120);class o{constructor(e,t,i){this.moving=!1,this.host=e,this.dir=t,this.option=i,this._mouseDown=this._mouseDown.bind(this),this._mouseMove=this._mouseMove.bind(this),this._mouseUp=this._mouseUp.bind(this),this._init()}_init(){const e=document.createElement("div");return e.classList.add("ui-resizable-handle"),e.classList.add(`${o.prefix}${this.dir}`),e.style.zIndex="100",e.style.userSelect="none",this.el=e,this.host.appendChild(this.el),this.el.addEventListener("mousedown",this._mouseDown),s.isTouch&&(this.el.addEventListener("touchstart",s.touchstart),this.el.addEventListener("pointerdown",s.pointerdown)),this}destroy(){return this.moving&&this._mouseUp(this.mouseDownEvent),this.el.removeEventListener("mousedown",this._mouseDown),s.isTouch&&(this.el.removeEventListener("touchstart",s.touchstart),this.el.removeEventListener("pointerdown",s.pointerdown)),this.host.removeChild(this.el),delete this.el,delete this.host,this}_mouseDown(e){this.mouseDownEvent=e,document.addEventListener("mousemove",this._mouseMove,!0),document.addEventListener("mouseup",this._mouseUp,!0),s.isTouch&&(this.el.addEventListener("touchmove",s.touchmove),this.el.addEventListener("touchend",s.touchend)),e.stopPropagation(),e.preventDefault()}_mouseMove(e){let t=this.mouseDownEvent;this.moving?this._triggerEvent("move",e):Math.abs(e.x-t.x)+Math.abs(e.y-t.y)>2&&(this.moving=!0,this._triggerEvent("start",this.mouseDownEvent),this._triggerEvent("move",e)),e.stopPropagation(),e.preventDefault()}_mouseUp(e){this.moving&&this._triggerEvent("stop",e),document.removeEventListener("mousemove",this._mouseMove,!0),document.removeEventListener("mouseup",this._mouseUp,!0),s.isTouch&&(this.el.removeEventListener("touchmove",s.touchmove),this.el.removeEventListener("touchend",s.touchend)),delete this.moving,delete this.mouseDownEvent,e.stopPropagation(),e.preventDefault()}_triggerEvent(e,t){return this.option[e]&&this.option[e](t),this}}t.DDResizableHandle=o,o.prefix="ui-resizable-"},9354:function(e,t,i){Object.defineProperty(t,"__esModule",{value:!0}),t.DDResizable=void 0;const s=i(9101),o=i(5037),n=i(1661),r=i(1432);class l extends o.DDBaseImplement{constructor(e,t={}){super(),this._ui=()=>{const e=this.el.parentElement.getBoundingClientRect(),t={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},i=this.temporalRect||t;return{position:{left:i.left-e.left,top:i.top-e.top},size:{width:i.width,height:i.height}}},this.el=e,this.option=t,this._mouseOver=this._mouseOver.bind(this),this._mouseOut=this._mouseOut.bind(this),this.enable(),this._setupAutoHide(this.option.autoHide),this._setupHandlers()}on(e,t){super.on(e,t)}off(e){super.off(e)}enable(){super.enable(),this.el.classList.add("ui-resizable"),this.el.classList.remove("ui-resizable-disabled"),this._setupAutoHide(this.option.autoHide)}disable(){super.disable(),this.el.classList.add("ui-resizable-disabled"),this.el.classList.remove("ui-resizable"),this._setupAutoHide(!1)}destroy(){this._removeHandlers(),this._setupAutoHide(!1),this.el.classList.remove("ui-resizable"),delete this.el,super.destroy()}updateOption(e){let t=e.handles&&e.handles!==this.option.handles,i=e.autoHide&&e.autoHide!==this.option.autoHide;return Object.keys(e).forEach((t=>this.option[t]=e[t])),t&&(this._removeHandlers(),this._setupHandlers()),i&&this._setupAutoHide(this.option.autoHide),this}_setupAutoHide(e){return e?(this.el.classList.add("ui-resizable-autohide"),this.el.addEventListener("mouseover",this._mouseOver),this.el.addEventListener("mouseout",this._mouseOut)):(this.el.classList.remove("ui-resizable-autohide"),this.el.removeEventListener("mouseover",this._mouseOver),this.el.removeEventListener("mouseout",this._mouseOut),r.DDManager.overResizeElement===this&&delete r.DDManager.overResizeElement),this}_mouseOver(e){r.DDManager.overResizeElement||r.DDManager.dragElement||(r.DDManager.overResizeElement=this,this.el.classList.remove("ui-resizable-autohide"))}_mouseOut(e){r.DDManager.overResizeElement===this&&(delete r.DDManager.overResizeElement,this.el.classList.add("ui-resizable-autohide"))}_setupHandlers(){let e=this.option.handles||"e,s,se";return"all"===e&&(e="n,e,s,w,se,sw,ne,nw"),this.handlers=e.split(",").map((e=>e.trim())).map((e=>new s.DDResizableHandle(this.el,e,{start:e=>{this._resizeStart(e)},stop:e=>{this._resizeStop(e)},move:t=>{this._resizing(t,e)}}))),this}_resizeStart(e){this.originalRect=this.el.getBoundingClientRect(),this.scrollEl=n.Utils.getScrollElement(this.el),this.scrollY=this.scrollEl.scrollTop,this.scrolled=0,this.startEvent=e,this._setupHelper(),this._applyChange();const t=n.Utils.initEvent(e,{type:"resizestart",target:this.el});return this.option.start&&this.option.start(t,this._ui()),this.el.classList.add("ui-resizable-resizing"),this.triggerEvent("resizestart",t),this}_resizing(e,t){this.scrolled=this.scrollEl.scrollTop-this.scrollY,this.temporalRect=this._getChange(e,t),this._applyChange();const i=n.Utils.initEvent(e,{type:"resize",target:this.el});return this.option.resize&&this.option.resize(i,this._ui()),this.triggerEvent("resize",i),this}_resizeStop(e){const t=n.Utils.initEvent(e,{type:"resizestop",target:this.el});return this.option.stop&&this.option.stop(t),this.el.classList.remove("ui-resizable-resizing"),this.triggerEvent("resizestop",t),this._cleanHelper(),delete this.startEvent,delete this.originalRect,delete this.temporalRect,delete this.scrollY,delete this.scrolled,this}_setupHelper(){return this.elOriginStyleVal=l._originStyleProp.map((e=>this.el.style[e])),this.parentOriginStylePosition=this.el.parentElement.style.position,window.getComputedStyle(this.el.parentElement).position.match(/static/)&&(this.el.parentElement.style.position="relative"),this.el.style.position="absolute",this.el.style.opacity="0.8",this}_cleanHelper(){return l._originStyleProp.forEach(((e,t)=>{this.el.style[e]=this.elOriginStyleVal[t]||null})),this.el.parentElement.style.position=this.parentOriginStylePosition||null,this}_getChange(e,t){const i=this.startEvent,s={width:this.originalRect.width,height:this.originalRect.height+this.scrolled,left:this.originalRect.left,top:this.originalRect.top-this.scrolled},o=e.clientX-i.clientX,n=e.clientY-i.clientY;t.indexOf("e")>-1?s.width+=o:t.indexOf("w")>-1&&(s.width-=o,s.left+=o),t.indexOf("s")>-1?s.height+=n:t.indexOf("n")>-1&&(s.height-=n,s.top+=n);const r=this._constrainSize(s.width,s.height);return Math.round(s.width)!==Math.round(r.width)&&(t.indexOf("w")>-1&&(s.left+=s.width-r.width),s.width=r.width),Math.round(s.height)!==Math.round(r.height)&&(t.indexOf("n")>-1&&(s.top+=s.height-r.height),s.height=r.height),s}_constrainSize(e,t){const i=this.option.maxWidth||Number.MAX_SAFE_INTEGER,s=this.option.minWidth||e,o=this.option.maxHeight||Number.MAX_SAFE_INTEGER,n=this.option.minHeight||t;return{width:Math.min(i,Math.max(s,e)),height:Math.min(o,Math.max(n,t))}}_applyChange(){let e={left:0,top:0,width:0,height:0};if("absolute"===this.el.style.position){const t=this.el.parentElement,{left:i,top:s}=t.getBoundingClientRect();e={left:i,top:s,width:0,height:0}}return this.temporalRect?(Object.keys(this.temporalRect).forEach((t=>{const i=this.temporalRect[t];this.el.style[t]=i-e[t]+"px"})),this):this}_removeHandlers(){return this.handlers.forEach((e=>e.destroy())),delete this.handlers,this}}t.DDResizable=l,l._originStyleProp=["width","height","position","left","top","opacity","zIndex"]}},function(e){var t;t=6839,e(e.s=t)}]); \ No newline at end of file diff --git a/public/build/dashboard.6ce7ac9c.js.LICENSE.txt b/public/build/dashboard.6ce7ac9c.js.LICENSE.txt new file mode 100644 index 000000000..363224081 --- /dev/null +++ b/public/build/dashboard.6ce7ac9c.js.LICENSE.txt @@ -0,0 +1,7 @@ +/*! + * GridStack 7.3.0 + * https://gridstackjs.com/ + * + * Copyright (c) 2021-2022 Alain Dumesny + * see root license https://github.com/gridstack/gridstack.js/tree/master/LICENSE + */ diff --git a/public/build/entrypoints.json b/public/build/entrypoints.json index c49917a39..5487f0f51 100644 --- a/public/build/entrypoints.json +++ b/public/build/entrypoints.json @@ -2,25 +2,25 @@ "entrypoints": { "app": { "js": [ - "/build/runtime.1440a7f0.js", - "/build/app.1bb6240b.js" + "/build/runtime.6c399d29.js", + "/build/app.9662939e.js" ], "css": [ - "/build/app.079f3158.css" + "/build/app.c18ba3c6.css" ] }, "app-rtl": { "js": [ - "/build/runtime.1440a7f0.js", - "/build/app-rtl.7a875ca7.js" + "/build/runtime.6c399d29.js", + "/build/app-rtl.15853b82.js" ], "css": [ - "/build/app-rtl.f2a83683.css" + "/build/app-rtl.2003dce5.css" ] }, "export-pdf": { "js": [ - "/build/runtime.1440a7f0.js", + "/build/runtime.6c399d29.js", "/build/export-pdf.395749ab.js" ], "css": [ @@ -29,16 +29,16 @@ }, "invoice": { "js": [ - "/build/runtime.1440a7f0.js", - "/build/invoice.773af9c4.js" + "/build/runtime.6c399d29.js", + "/build/invoice.42b319e4.js" ], "css": [ - "/build/invoice.595f2ed8.css" + "/build/invoice.36018785.css" ] }, "invoice-pdf": { "js": [ - "/build/runtime.1440a7f0.js", + "/build/runtime.6c399d29.js", "/build/invoice-pdf.26d98626.js" ], "css": [ @@ -47,34 +47,56 @@ }, "chart": { "js": [ - "/build/runtime.1440a7f0.js", - "/build/chart.62631acc.js" + "/build/runtime.6c399d29.js", + "/build/chart.bafa38e7.js" ] }, "calendar": { "js": [ - "/build/runtime.1440a7f0.js", - "/build/calendar.7415ab21.js" + "/build/runtime.6c399d29.js", + "/build/calendar.b2d70caa.js" ], "css": [ "/build/calendar.d757753e.css" ] + }, + "dashboard": { + "js": [ + "/build/runtime.6c399d29.js", + "/build/dashboard.6ce7ac9c.js" + ], + "css": [ + "/build/dashboard.b7129fa1.css" + ] + }, + "highlight": { + "js": [ + "/build/runtime.6c399d29.js", + "/build/highlight.13d5d50e.js" + ], + "css": [ + "/build/highlight.98bf3927.css" + ] } }, "integrity": { - "/build/runtime.1440a7f0.js": "sha384-aX7qq4dPkl9vztZOIlBKii2dw2xiScUgZRgReqtcRQiC9wU+Mp2msgHYC8qaHlwU", - "/build/app.1bb6240b.js": "sha384-4vRnLowDOAgphyVkUYMBjAzipSFZYiB7EA+DZqyJclCUXeDRAJsfJQxfowwAOtzC", - "/build/app.079f3158.css": "sha384-t+fIci9AGsrOKYFgljugvKDSz0SHtY8THfqdVTeTLi3CFeN6Ozw9sCbT+hzFphSI", - "/build/app-rtl.7a875ca7.js": "sha384-T7gLI61h9dGeMgzo63vKu4GiDOeLPct9zSUHrceNbhSwIdUmSSNoZ1+d7fKhJJ4/", - "/build/app-rtl.f2a83683.css": "sha384-ac4ikgEEEgKbWhUyO22ns7W5a68gpbNXt0CmCvSPdAlOWBygWmoeCNWnYW3iajWm", + "/build/runtime.6c399d29.js": "sha384-/rm616f12czi8l/27GvWXtb3g608vJZf2XTUKxqCRI4tsa2vUHP+BW90edTok5zC", + "/build/app.9662939e.js": "sha384-bRL78SVI1wjTweqKeb+ZSSbA78i6By89S8/xx+55zmbOVtF1TCu3lf3pvdki5ZVJ", + "/build/app.c18ba3c6.css": "sha384-qkIgqLzngG2NchdFVImbGMU49lWlZg6Y9D0z2P0u1j2NQstDicA4KqIkkNYcpErm", + "/build/app-rtl.15853b82.js": "sha384-UnKKgLMu9FnRT+CFE0no/+UiUks012bYriQdUWa6f02mo6Lswl947mPybjvKL503", + "/build/app-rtl.2003dce5.css": "sha384-pl8GyGo8sRRw1zLh9D42ZAvo450onfxeszZWocUUuzq70jAOwOlaoPYh/yyc20U7", "/build/export-pdf.395749ab.js": "sha384-3Hjvmu4FC/0dhHnR8kyRBU7k2xMNy1lxBpGgOkrw8PxXnwyQDM8/5bQmkJbjVT1+", "/build/export-pdf.d8a6c23b.css": "sha384-ztepocHE4rnGE9eKZ4kL6jTKaePUyiwiB9TjJjstjpf/ckcKg1HedrEOOk/8ElJg", - "/build/invoice.773af9c4.js": "sha384-QmMqYJ0RP2WOYU7D4lLzKCBFDL6vCvZHQc7wf8K8N+hdCuTJwq1P0GuY81f30/SY", - "/build/invoice.595f2ed8.css": "sha384-pPD6gjc24k+qRscW+AS0trqN2MrBI7l0YbFvIjudaoOG0fWHuxpbGBP7P3E1er5a", + "/build/invoice.42b319e4.js": "sha384-xxK7sCe/ZhTjMPFPeX1xvILURxNRZz2hJHZxAGVaw9zE6TC++2/6y2eKqg8cz852", + "/build/invoice.36018785.css": "sha384-jukM9uZ6pexDxXKgZThSxiqXimzsxzniBMHz08N9x8ryXZYkM5r/ZgaainCV0+J6", "/build/invoice-pdf.26d98626.js": "sha384-gwNzQiU1y6qU/M9DPGiNW0MVZkLctEHk37sCES2X9ov+zugEaDABdkMjKBYOC9lz", "/build/invoice-pdf.2b749265.css": "sha384-DXXgkz2WWnrWnfBnXX5fmfPQSPb98upMnWxYKwTGYS04EhrPIWfDCutB2unIrWh7", - "/build/chart.62631acc.js": "sha384-L4evSO0OZiQt+jTqfMR70M2Vid7Hl5YdPocC6syhSoBRavlf7Az9/Ldh4YJUuwAU", - "/build/calendar.7415ab21.js": "sha384-+iYr7VnMIxSQMERlaruX2Ktp6gWmGSyCxfUAaeSDkoninXdUdiKBjlcZZwhHhZWU", - "/build/calendar.d757753e.css": "sha384-cTmQMgHYjd2gfObFWmEUph7qQLCyXaIkneSf+bQ2mqVmZwqOB+pJOm/UYTyTjALJ" + "/build/chart.bafa38e7.js": "sha384-Ays2qGKvOqs4NSeN/zJOPcrnzIEC/uYSCIkC3kN0KQye+mA5Lq7UkfjZDjulvFUX", + "/build/calendar.b2d70caa.js": "sha384-FS7Q9iCWHpo2Nzk0tmNvnuTbxJKLdbXFba9F6WcXfHbKFAS2Q+lW29H9Mv+ap5kA", + "/build/calendar.d757753e.css": "sha384-cTmQMgHYjd2gfObFWmEUph7qQLCyXaIkneSf+bQ2mqVmZwqOB+pJOm/UYTyTjALJ", + "/build/dashboard.6ce7ac9c.js": "sha384-5BOoyjZx/ZKr9IbogWfT/aBRHx7XA1fePADdUpUNlSF/rqVo3taXLLcrIoaDZ+8b", + "/build/dashboard.b7129fa1.css": "sha384-2nn5hLA+3YedgHYBpge62S8Losj8aoPwK9Zk9EvN1xEYatvOUQ7H3rIR2UUJAGOS", + "/build/highlight.13d5d50e.js": "sha384-+RqBBPIzp5YQpbBeHgVNXzHiewK1PZtizPh4in1PlBU6RcT1bDleW3QSJMDeBnPO", + "/build/highlight.98bf3927.css": "sha384-YgweSwDwN0dI4DEmh478xYVw/TewJYvCO1QTbWHpaHFDPuLrZvYMR0Tc+QfFxVPE" } } \ No newline at end of file diff --git a/public/build/fonts/fa-brands-400.26b80c88.ttf b/public/build/fonts/fa-brands-400.1815e004.ttf similarity index 98% rename from public/build/fonts/fa-brands-400.26b80c88.ttf rename to public/build/fonts/fa-brands-400.1815e004.ttf index c739a3965..0f82a8360 100644 Binary files a/public/build/fonts/fa-brands-400.26b80c88.ttf and b/public/build/fonts/fa-brands-400.1815e004.ttf differ diff --git a/public/build/fonts/fa-brands-400.c210719e.woff2 b/public/build/fonts/fa-brands-400.c210719e.woff2 new file mode 100644 index 000000000..3c5cf97ec Binary files /dev/null and b/public/build/fonts/fa-brands-400.c210719e.woff2 differ diff --git a/public/build/fonts/fa-brands-400.fdbb5585.woff2 b/public/build/fonts/fa-brands-400.fdbb5585.woff2 deleted file mode 100644 index cb888623c..000000000 Binary files a/public/build/fonts/fa-brands-400.fdbb5585.woff2 and /dev/null differ diff --git a/public/build/fonts/fa-regular-400.4f6a2dab.woff2 b/public/build/fonts/fa-regular-400.4f6a2dab.woff2 deleted file mode 100644 index fc0a2168a..000000000 Binary files a/public/build/fonts/fa-regular-400.4f6a2dab.woff2 and /dev/null differ diff --git a/public/build/fonts/fa-regular-400.89999bdf.woff2 b/public/build/fonts/fa-regular-400.89999bdf.woff2 new file mode 100644 index 000000000..57d917965 Binary files /dev/null and b/public/build/fonts/fa-regular-400.89999bdf.woff2 differ diff --git a/public/build/fonts/fa-regular-400.05fdd87b.ttf b/public/build/fonts/fa-regular-400.914997e1.ttf similarity index 98% rename from public/build/fonts/fa-regular-400.05fdd87b.ttf rename to public/build/fonts/fa-regular-400.914997e1.ttf index 314040946..9ee1919dc 100644 Binary files a/public/build/fonts/fa-regular-400.05fdd87b.ttf and b/public/build/fonts/fa-regular-400.914997e1.ttf differ diff --git a/public/build/fonts/fa-solid-900.2463b90d.woff2 b/public/build/fonts/fa-solid-900.2463b90d.woff2 new file mode 100644 index 000000000..16721020f Binary files /dev/null and b/public/build/fonts/fa-solid-900.2463b90d.woff2 differ diff --git a/public/build/fonts/fa-solid-900.ad1782c7.ttf b/public/build/fonts/fa-solid-900.2582b0e4.ttf similarity index 99% rename from public/build/fonts/fa-solid-900.ad1782c7.ttf rename to public/build/fonts/fa-solid-900.2582b0e4.ttf index f3b468e5b..1c10972ec 100644 Binary files a/public/build/fonts/fa-solid-900.ad1782c7.ttf and b/public/build/fonts/fa-solid-900.2582b0e4.ttf differ diff --git a/public/build/fonts/fa-solid-900.83a538a0.woff2 b/public/build/fonts/fa-solid-900.83a538a0.woff2 deleted file mode 100644 index 42eaaa697..000000000 Binary files a/public/build/fonts/fa-solid-900.83a538a0.woff2 and /dev/null differ diff --git a/public/build/highlight.13d5d50e.js b/public/build/highlight.13d5d50e.js new file mode 100644 index 000000000..5efc79ae4 --- /dev/null +++ b/public/build/highlight.13d5d50e.js @@ -0,0 +1 @@ +(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[21],{114:function(e){e.exports=function(e){const n=e.regex,t=n.concat(/[\p{L}_]/u,n.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),a={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},r=e.inherit(i,{begin:/\(/,end:/\)/}),s=e.inherit(e.APOS_STRING_MODE,{className:"string"}),o=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),l={endsWithParent:!0,illegal:/`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,o,s,r,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,r,o,s]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},a,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[o]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:/)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:n.concat(//,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:t,relevance:0,starts:l}]},{className:"tag",begin:n.concat(/<\//,n.lookahead(n.concat(t,/>/))),contains:[{className:"name",begin:t,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}},283:function(e){e.exports=function(e){return{aliases:["pycon"],contains:[{className:"meta.prompt",starts:{end:/ |$/,starts:{end:"$",subLanguage:"python"}},variants:[{begin:/^>>>(?=[ ]|$)/},{begin:/^\.\.\.(?=[ ]|$)/}]}]}}},315:function(e){e.exports=function(e){const n=e.regex,t=e.COMMENT("--","$"),a=["abs","acos","array_agg","asin","atan","avg","cast","ceil","ceiling","coalesce","corr","cos","cosh","count","covar_pop","covar_samp","cume_dist","dense_rank","deref","element","exp","extract","first_value","floor","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","last_value","lead","listagg","ln","log","log10","lower","max","min","mod","nth_value","ntile","nullif","percent_rank","percentile_cont","percentile_disc","position","position_regex","power","rank","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","row_number","sin","sinh","sqrt","stddev_pop","stddev_samp","substring","substring_regex","sum","tan","tanh","translate","translate_regex","treat","trim","trim_array","unnest","upper","value_of","var_pop","var_samp","width_bucket"],i=a,r=["abs","acos","all","allocate","alter","and","any","are","array","array_agg","array_max_cardinality","as","asensitive","asin","asymmetric","at","atan","atomic","authorization","avg","begin","begin_frame","begin_partition","between","bigint","binary","blob","boolean","both","by","call","called","cardinality","cascaded","case","cast","ceil","ceiling","char","char_length","character","character_length","check","classifier","clob","close","coalesce","collate","collect","column","commit","condition","connect","constraint","contains","convert","copy","corr","corresponding","cos","cosh","count","covar_pop","covar_samp","create","cross","cube","cume_dist","current","current_catalog","current_date","current_default_transform_group","current_path","current_role","current_row","current_schema","current_time","current_timestamp","current_path","current_role","current_transform_group_for_type","current_user","cursor","cycle","date","day","deallocate","dec","decimal","decfloat","declare","default","define","delete","dense_rank","deref","describe","deterministic","disconnect","distinct","double","drop","dynamic","each","element","else","empty","end","end_frame","end_partition","end-exec","equals","escape","every","except","exec","execute","exists","exp","external","extract","false","fetch","filter","first_value","float","floor","for","foreign","frame_row","free","from","full","function","fusion","get","global","grant","group","grouping","groups","having","hold","hour","identity","in","indicator","initial","inner","inout","insensitive","insert","int","integer","intersect","intersection","interval","into","is","join","json_array","json_arrayagg","json_exists","json_object","json_objectagg","json_query","json_table","json_table_primitive","json_value","lag","language","large","last_value","lateral","lead","leading","left","like","like_regex","listagg","ln","local","localtime","localtimestamp","log","log10","lower","match","match_number","match_recognize","matches","max","member","merge","method","min","minute","mod","modifies","module","month","multiset","national","natural","nchar","nclob","new","no","none","normalize","not","nth_value","ntile","null","nullif","numeric","octet_length","occurrences_regex","of","offset","old","omit","on","one","only","open","or","order","out","outer","over","overlaps","overlay","parameter","partition","pattern","per","percent","percent_rank","percentile_cont","percentile_disc","period","portion","position","position_regex","power","precedes","precision","prepare","primary","procedure","ptf","range","rank","reads","real","recursive","ref","references","referencing","regr_avgx","regr_avgy","regr_count","regr_intercept","regr_r2","regr_slope","regr_sxx","regr_sxy","regr_syy","release","result","return","returns","revoke","right","rollback","rollup","row","row_number","rows","running","savepoint","scope","scroll","search","second","seek","select","sensitive","session_user","set","show","similar","sin","sinh","skip","smallint","some","specific","specifictype","sql","sqlexception","sqlstate","sqlwarning","sqrt","start","static","stddev_pop","stddev_samp","submultiset","subset","substring","substring_regex","succeeds","sum","symmetric","system","system_time","system_user","table","tablesample","tan","tanh","then","time","timestamp","timezone_hour","timezone_minute","to","trailing","translate","translate_regex","translation","treat","trigger","trim","trim_array","true","truncate","uescape","union","unique","unknown","unnest","update","upper","user","using","value","values","value_of","var_pop","var_samp","varbinary","varchar","varying","versioning","when","whenever","where","width_bucket","window","with","within","without","year","add","asc","collation","desc","final","first","last","view"].filter((e=>!a.includes(e))),s={match:n.concat(/\b/,n.either(...i),/\s*\(/),relevance:0,keywords:{built_in:i}};function o(e){return n.concat(/\b/,n.either(...e.map((e=>e.replace(/\s+/,"\\s+")))),/\b/)}const l={scope:"keyword",match:o(["create table","insert into","primary key","foreign key","not null","alter table","add constraint","grouping sets","on overflow","character set","respect nulls","ignore nulls","nulls first","nulls last","depth first","breadth first"]),relevance:0};return{name:"SQL",case_insensitive:!0,illegal:/[{}]|<\//,keywords:{$pattern:/\b[\w\.]+/,keyword:function(e,{exceptions:n,when:t}={}){const a=t;return n=n||[],e.map((e=>e.match(/\|\d+$/)||n.includes(e)?e:a(e)?`${e}|0`:e))}(r,{when:e=>e.length<3}),literal:["true","false","unknown"],type:["bigint","binary","blob","boolean","char","character","clob","date","dec","decfloat","decimal","float","int","integer","interval","nchar","nclob","national","numeric","real","row","smallint","time","timestamp","varchar","varying","varbinary"],built_in:["current_catalog","current_date","current_default_transform_group","current_path","current_role","current_schema","current_transform_group_for_type","current_user","session_user","system_time","system_user","current_time","localtime","current_timestamp","localtimestamp"]},contains:[{scope:"type",match:o(["double precision","large object","with timezone","without timezone"])},l,s,{scope:"variable",match:/@[a-z0-9][a-z0-9_]*/},{scope:"string",variants:[{begin:/'/,end:/'/,contains:[{match:/''/}]}]},{begin:/"/,end:/"/,contains:[{match:/""/}]},e.C_NUMBER_MODE,e.C_BLOCK_COMMENT_MODE,t,{scope:"operator",match:/[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,relevance:0}]}}},602:function(e){e.exports=function(e){const n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},t={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},a={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},i={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},r=e.inherit(a,{contains:[]}),s=e.inherit(i,{contains:[]});a.contains.push(s),i.contains.push(r);let o=[n,t];return[a,i,r,s].forEach((e=>{e.contains=e.contains.concat(o)})),o=o.concat(a,i),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:o},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:o}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},a,i,{className:"quote",begin:"^>\\s+",contains:o,end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{begin:"^[-\\*]{3,}",end:"$"},t,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}},621:function(e){e.exports=function(e){const n=["true","false","null"],t={scope:"literal",beginKeywords:n.join(" ")};return{name:"JSON",aliases:["jsonc"],keywords:{literal:n},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0},e.QUOTE_STRING_MODE,t,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}},722:function(e){e.exports=function(e){const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(decltype\\(auto\\)|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={className:"type",variants:[{begin:"\\b[a-z\\d_]*_t\\b"},{match:/\batomic_[a-z]{3,6}\b/}]},o={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={className:"number",variants:[{match:/\b(0b[01']+)/},{match:/(-?)\b([\d']+(\.[\d']*)?|\.[\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)/},{match:/(-?)\b(0[xX][a-fA-F0-9]+(?:'[a-fA-F0-9]+)*(?:\.[a-fA-F0-9]*(?:'[a-fA-F0-9]*)*)?(?:[pP][-+]?[0-9]+)?(l|L)?(u|U)?)/},{match:/(-?)\b\d+(?:'\d+)*(?:\.\d*(?:'\d*)*)?(?:[eE][-+]?\d+)?/}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef elifdef elifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={keyword:["asm","auto","break","case","continue","default","do","else","enum","extern","for","fortran","goto","if","inline","register","restrict","return","sizeof","typeof","typeof_unqual","struct","switch","typedef","union","volatile","while","_Alignas","_Alignof","_Atomic","_Generic","_Noreturn","_Static_assert","_Thread_local","alignas","alignof","noreturn","static_assert","thread_local","_Pragma"],type:["float","double","signed","unsigned","int","short","long","char","void","_Bool","_BitInt","_Complex","_Imaginary","_Decimal32","_Decimal64","_Decimal96","_Decimal128","_Decimal64x","_Decimal128x","_Float16","_Float32","_Float64","_Float128","_Float32x","_Float64x","_Float128x","const","static","constexpr","complex","bool","imaginary"],literal:"true false NULL",built_in:"std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr"},b=[c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],m={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:u,contains:b.concat([{begin:/\(/,end:/\)/,keywords:u,contains:b.concat(["self"]),relevance:0}]),relevance:0},p={begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{begin:g,returnBegin:!0,contains:[e.inherit(d,{className:"title.function"})],relevance:0},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C",aliases:["h"],keywords:u,disableAutodetect:!0,illegal:"=]/,contains:[{beginKeywords:"final class struct"},e.TITLE_MODE]}]),exports:{preprocessor:c,strings:o,keywords:u}}}},943:function(e){e.exports=function(e){const n=/[a-zA-Z@][a-zA-Z0-9_]*/,t={$pattern:n,keyword:["@interface","@class","@protocol","@implementation"]};return{name:"Objective-C",aliases:["mm","objc","obj-c","obj-c++","objective-c++"],keywords:{"variable.language":["this","super"],$pattern:n,keyword:["while","export","sizeof","typedef","const","struct","for","union","volatile","static","mutable","if","do","return","goto","enum","else","break","extern","asm","case","default","register","explicit","typename","switch","continue","inline","readonly","assign","readwrite","self","@synchronized","id","typeof","nonatomic","IBOutlet","IBAction","strong","weak","copy","in","out","inout","bycopy","byref","oneway","__strong","__weak","__block","__autoreleasing","@private","@protected","@public","@try","@property","@end","@throw","@catch","@finally","@autoreleasepool","@synthesize","@dynamic","@selector","@optional","@required","@encode","@package","@import","@defs","@compatibility_alias","__bridge","__bridge_transfer","__bridge_retained","__bridge_retain","__covariant","__contravariant","__kindof","_Nonnull","_Nullable","_Null_unspecified","__FUNCTION__","__PRETTY_FUNCTION__","__attribute__","getter","setter","retain","unsafe_unretained","nonnull","nullable","null_unspecified","null_resettable","class","instancetype","NS_DESIGNATED_INITIALIZER","NS_UNAVAILABLE","NS_REQUIRES_SUPER","NS_RETURNS_INNER_POINTER","NS_INLINE","NS_AVAILABLE","NS_DEPRECATED","NS_ENUM","NS_OPTIONS","NS_SWIFT_UNAVAILABLE","NS_ASSUME_NONNULL_BEGIN","NS_ASSUME_NONNULL_END","NS_REFINED_FOR_SWIFT","NS_SWIFT_NAME","NS_SWIFT_NOTHROW","NS_DURING","NS_HANDLER","NS_ENDHANDLER","NS_VALUERETURN","NS_VOIDRETURN"],literal:["false","true","FALSE","TRUE","nil","YES","NO","NULL"],built_in:["dispatch_once_t","dispatch_queue_t","dispatch_sync","dispatch_async","dispatch_once"],type:["int","float","char","unsigned","signed","short","long","double","wchar_t","unichar","void","bool","BOOL","id|0","_Bool"]},illegal:"/,end:/$/,illegal:"\\n"},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"class",begin:"("+t.keyword.join("|")+")\\b",end:/(\{|$)/,excludeEnd:!0,keywords:t,contains:[e.UNDERSCORE_TITLE_MODE]},{begin:"\\."+e.UNDERSCORE_IDENT_RE,relevance:0}]}}},946:function(e){e.exports=function(e){const n=e.regex,t=/[dualxmsipngr]{0,12}/,a={$pattern:/[\w.]+/,keyword:["abs","accept","alarm","and","atan2","bind","binmode","bless","break","caller","chdir","chmod","chomp","chop","chown","chr","chroot","class","close","closedir","connect","continue","cos","crypt","dbmclose","dbmopen","defined","delete","die","do","dump","each","else","elsif","endgrent","endhostent","endnetent","endprotoent","endpwent","endservent","eof","eval","exec","exists","exit","exp","fcntl","field","fileno","flock","for","foreach","fork","format","formline","getc","getgrent","getgrgid","getgrnam","gethostbyaddr","gethostbyname","gethostent","getlogin","getnetbyaddr","getnetbyname","getnetent","getpeername","getpgrp","getpriority","getprotobyname","getprotobynumber","getprotoent","getpwent","getpwnam","getpwuid","getservbyname","getservbyport","getservent","getsockname","getsockopt","given","glob","gmtime","goto","grep","gt","hex","if","index","int","ioctl","join","keys","kill","last","lc","lcfirst","length","link","listen","local","localtime","log","lstat","lt","ma","map","method","mkdir","msgctl","msgget","msgrcv","msgsnd","my","ne","next","no","not","oct","open","opendir","or","ord","our","pack","package","pipe","pop","pos","print","printf","prototype","push","q|0","qq","quotemeta","qw","qx","rand","read","readdir","readline","readlink","readpipe","recv","redo","ref","rename","require","reset","return","reverse","rewinddir","rindex","rmdir","say","scalar","seek","seekdir","select","semctl","semget","semop","send","setgrent","sethostent","setnetent","setpgrp","setpriority","setprotoent","setpwent","setservent","setsockopt","shift","shmctl","shmget","shmread","shmwrite","shutdown","sin","sleep","socket","socketpair","sort","splice","split","sprintf","sqrt","srand","stat","state","study","sub","substr","symlink","syscall","sysopen","sysread","sysseek","system","syswrite","tell","telldir","tie","tied","time","times","tr","truncate","uc","ucfirst","umask","undef","unless","unlink","unpack","unshift","untie","until","use","utime","values","vec","wait","waitpid","wantarray","warn","when","while","write","x|0","xor","y|0"].join(" ")},i={className:"subst",begin:"[$@]\\{",end:"\\}",keywords:a},r={begin:/->\{/,end:/\}/},s={scope:"attr",match:/\s+:\s*\w+(\s*\(.*?\))?/},o={scope:"variable",variants:[{begin:/\$\d/},{begin:n.concat(/[$%@](?!")(\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/,"(?![A-Za-z])(?![@$%])")},{begin:/[$%@](?!")[^\s\w{=]|\$=/,relevance:0}],contains:[s]},l={className:"number",variants:[{match:/0?\.[0-9][0-9_]+\b/},{match:/\bv?(0|[1-9][0-9_]*(\.[0-9_]+)?|[1-9][0-9_]*)\b/},{match:/\b0[0-7][0-7_]*\b/},{match:/\b0x[0-9a-fA-F][0-9a-fA-F_]*\b/},{match:/\b0b[0-1][0-1_]*\b/}],relevance:0},c=[e.BACKSLASH_ESCAPE,i,o],d=[/!/,/\//,/\|/,/\?/,/'/,/"/,/#/],g=(e,a,i="\\1")=>{const r="\\1"===i?i:n.concat(i,a);return n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,r,/(?:\\.|[^\\\/])*?/,i,t)},u=(e,a,i)=>n.concat(n.concat("(?:",e,")"),a,/(?:\\.|[^\\\/])*?/,i,t),b=[o,e.HASH_COMMENT_MODE,e.COMMENT(/^=\w/,/=cut/,{endsWithParent:!0}),r,{className:"string",contains:c,variants:[{begin:"q[qwxr]?\\s*\\(",end:"\\)",relevance:5},{begin:"q[qwxr]?\\s*\\[",end:"\\]",relevance:5},{begin:"q[qwxr]?\\s*\\{",end:"\\}",relevance:5},{begin:"q[qwxr]?\\s*\\|",end:"\\|",relevance:5},{begin:"q[qwxr]?\\s*<",end:">",relevance:5},{begin:"qw\\s+q",end:"q",relevance:5},{begin:"'",end:"'",contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"'},{begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE]},{begin:/\{\w+\}/,relevance:0},{begin:"-?\\w+\\s*=>",relevance:0}]},l,{begin:"(\\/\\/|"+e.RE_STARTERS_RE+"|\\b(split|return|print|reverse|grep)\\b)\\s*",keywords:"split return print reverse grep",relevance:0,contains:[e.HASH_COMMENT_MODE,{className:"regexp",variants:[{begin:g("s|tr|y",n.either(...d,{capture:!0}))},{begin:g("s|tr|y","\\(","\\)")},{begin:g("s|tr|y","\\[","\\]")},{begin:g("s|tr|y","\\{","\\}")}],relevance:2},{className:"regexp",variants:[{begin:/(m|qr)\/\//,relevance:0},{begin:u("(?:m|qr)?",/\//,/\//)},{begin:u("m|qr",n.either(...d,{capture:!0}),/\1/)},{begin:u("m|qr",/\(/,/\)/)},{begin:u("m|qr",/\[/,/\]/)},{begin:u("m|qr",/\{/,/\}/)}]}]},{className:"function",beginKeywords:"sub method",end:"(\\s*\\(.*?\\))?[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s]},{className:"class",beginKeywords:"class",end:"[;{]",excludeEnd:!0,relevance:5,contains:[e.TITLE_MODE,s,l]},{begin:"-\\w\\b",relevance:0},{begin:"^__DATA__$",end:"^__END__$",subLanguage:"mojolicious",contains:[{begin:"^@@.*",end:"$",className:"comment"}]}];return i.contains=b,r.contains=b,{name:"Perl",aliases:["pl","pm"],keywords:a,contains:b}}},1117:function(e){e.exports=function(e){const n=e.regex,t=/[\p{XID_Start}_]\p{XID_Continue}*/u,a=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],i={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:a,built_in:["__import__","abs","all","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},r={className:"meta",begin:/^(>>>|\.\.\.) /},s={className:"subst",begin:/\{/,end:/\}/,keywords:i,illegal:/#/},o={begin:/\{\{/,relevance:0},l={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,r],relevance:10},{begin:/([fF][rR]|[rR][fF]|[fF])'''/,end:/'''/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"""/,end:/"""/,contains:[e.BACKSLASH_ESCAPE,r,o,s]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fF][rR]|[rR][fF]|[fF])'/,end:/'/,contains:[e.BACKSLASH_ESCAPE,o,s]},{begin:/([fF][rR]|[rR][fF]|[fF])"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,o,s]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},c="[0-9](_?[0-9])*",d=`(\\b(${c}))?\\.(${c})|\\b(${c})\\.`,g=`\\b|${a.join("|")}`,u={className:"number",relevance:0,variants:[{begin:`(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})`},{begin:`(${d})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${g})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${g})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})`},{begin:`\\b(${c})[jJ](?=${g})`}]},b={className:"comment",begin:n.lookahead(/# type:/),end:/$/,keywords:i,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},m={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:i,contains:["self",r,u,l,e.HASH_COMMENT_MODE]}]};return s.contains=[l,u,r],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:i,illegal:/(<\/|\?)|=>/,contains:[r,u,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},l,b,e.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[m]},{variants:[{match:[/\bclass/,/\s+/,t,/\s*/,/\(\s*/,t,/\s*\)/]},{match:[/\bclass/,/\s+/,t]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[u,m,l]}]}}},1329:function(e,n,t){"use strict";t.r(n)},1496:function(e){function n(e){return e?"string"==typeof e?e:e.source:null}function t(e){return a("(?=",e,")")}function a(...e){return e.map((e=>n(e))).join("")}function i(...e){const t=function(e){const n=e[e.length-1];return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}(e);return"("+(t.capture?"":"?:")+e.map((e=>n(e))).join("|")+")"}const r=e=>a(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(r),o=["init","self"].map(r),l=["Any","Self"],c=["actor","any","associatedtype","async","await",/as\?/,/as!/,"as","borrowing","break","case","catch","class","consume","consuming","continue","convenience","copy","default","defer","deinit","didSet","distributed","do","dynamic","each","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","isolated","nonisolated","lazy","let","macro","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","package","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],d=["false","nil","true"],g=["assignment","associativity","higherThan","left","lowerThan","none","right"],u=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warning"],b=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],m=i(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),p=i(m,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),f=a(m,p,"*"),h=i(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),_=i(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),y=a(h,_,"*"),E=a(/[A-Z]/,_,"*"),v=["attached","autoclosure",a(/convention\(/,i("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","freestanding","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",a(/objc\(/,y,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","resultBuilder","Sendable","testable","UIApplicationMain","unchecked","unknown","usableFromInline","warn_unqualified_access"],w=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"];e.exports=function(e){const n={match:/\s+/,relevance:0},m=e.COMMENT("/\\*","\\*/",{contains:["self"]}),h=[e.C_LINE_COMMENT_MODE,m],k={match:[/\./,i(...s,...o)],className:{2:"keyword"}},N={match:a(/\./,i(...c)),relevance:0},x=c.filter((e=>"string"==typeof e)).concat(["_|0"]),O={variants:[{className:"keyword",match:i(...c.filter((e=>"string"!=typeof e)).concat(l).map(r),...o)}]},A={$pattern:i(/\b\w+/,/#\w+/),keyword:x.concat(u),literal:d},M=[k,N,O],S=[{match:a(/\./,i(...b)),relevance:0},{className:"built_in",match:a(/\b/,i(...b),/(?=\()/)}],C={match:/->/,relevance:0},T=[C,{className:"operator",relevance:0,variants:[{match:f},{match:`\\.(\\.|${p})+`}]}],R="([0-9a-fA-F]_*)+",I={className:"number",relevance:0,variants:[{match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{match:`\\b0x(${R})(\\.(${R}))?([pP][+-]?(([0-9]_*)+))?\\b`},{match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},D=(e="")=>({className:"subst",variants:[{match:a(/\\/,e,/[0\\tnr"']/)},{match:a(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),L=(e="")=>({className:"subst",match:a(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),B=(e="")=>({className:"subst",label:"interpol",begin:a(/\\/,e,/\(/),end:/\)/}),z=(e="")=>({begin:a(e,/"""/),end:a(/"""/,e),contains:[D(e),L(e),B(e)]}),F=(e="")=>({begin:a(e,/"/),end:a(/"/,e),contains:[D(e),B(e)]}),$={className:"string",variants:[z(),z("#"),z("##"),z("###"),F(),F("#"),F("##"),F("###")]},j=[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}],U={begin:/\/[^\s](?=[^/\n]*\/)/,end:/\//,contains:j},P=e=>{const n=a(e,/\//),t=a(/\//,e);return{begin:n,end:t,contains:[...j,{scope:"comment",begin:`#(?!.*${t})`,end:/$/}]}},K={scope:"regexp",variants:[P("###"),P("##"),P("#"),U]},H={match:a(/`/,y,/`/)},q=[H,{className:"variable",match:/\$\d+/},{className:"variable",match:`\\$${_}+`}],Z=[{match:/(@|#(un)?)available/,scope:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:w,contains:[...T,I,$]}]}},{scope:"keyword",match:a(/@/,i(...v),t(i(/\(/,/\s+/)))},{scope:"meta",match:a(/@/,y)}],G={match:t(/\b[A-Z]/),relevance:0,contains:[{className:"type",match:a(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,_,"+")},{className:"type",match:E,relevance:0},{match:/[?!]+/,relevance:0},{match:/\.\.\./,relevance:0},{match:a(/\s+&\s+/,t(E)),relevance:0}]},W={begin://,keywords:A,contains:[...h,...M,...Z,C,G]};G.contains.push(W);const Q={begin:/\(/,end:/\)/,relevance:0,keywords:A,contains:["self",{match:a(y,/\s*:/),keywords:"_|0",relevance:0},...h,K,...M,...S,...T,I,$,...q,...Z,G]},X={begin://,keywords:"repeat each",contains:[...h,G]},V={begin:/\(/,end:/\)/,keywords:A,contains:[{begin:i(t(a(y,/\s*:/)),t(a(y,/\s+/,y,/\s*:/))),end:/:/,relevance:0,contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:y}]},...h,...M,...T,I,$,...Z,G,Q],endsParent:!0,illegal:/["']/},J={match:[/(func|macro)/,/\s+/,i(H.match,y,f)],className:{1:"keyword",3:"title.function"},contains:[X,V,n],illegal:[/\[/,/%/]},Y={match:[/\b(?:subscript|init[?!]?)/,/\s*(?=[<(])/],className:{1:"keyword"},contains:[X,V,n],illegal:/\[|%/},ee={match:[/operator/,/\s+/,f],className:{1:"keyword",3:"title"}},ne={begin:[/precedencegroup/,/\s+/,E],className:{1:"keyword",3:"title"},contains:[G],keywords:[...g,...d],end:/}/},te={begin:[/(struct|protocol|class|extension|enum|actor)/,/\s+/,y,/\s*/],beginScope:{1:"keyword",3:"title.class"},keywords:A,contains:[X,...M,{begin:/:/,end:/\{/,keywords:A,contains:[{scope:"title.class.inherited",match:E},...M],relevance:0}]};for(const e of $.variants){const n=e.contains.find((e=>"interpol"===e.label));n.keywords=A;const t=[...M,...S,...T,I,$,...q];n.contains=[...t,{begin:/\(/,end:/\)/,contains:["self",...t]}]}return{name:"Swift",keywords:A,contains:[...h,J,Y,{match:[/class\b/,/\s+/,/func\b/,/\s+/,/\b[A-Za-z_][A-Za-z0-9_]*\b/],scope:{1:"keyword",3:"keyword",5:"title.function"}},{match:[/class\b/,/\s+/,/var\b/],scope:{1:"keyword",3:"keyword"}},te,ee,ne,{beginKeywords:"import",end:/$/,contains:[...h],relevance:0},K,...M,...S,...T,I,$,...q,...Z,G,Q]}}},1533:function(e){e.exports=function(e){const n=e.regex,t={className:"number",relevance:0,variants:[{begin:/([+-]+)?[\d]+_[\d_]+/},{begin:e.NUMBER_RE}]},a=e.COMMENT();a.variants=[{begin:/;/,end:/$/},{begin:/#/,end:/$/}];const i={className:"variable",variants:[{begin:/\$[\w\d"][\w\d_]*/},{begin:/\$\{(.*?)\}/}]},r={className:"literal",begin:/\bon|off|true|false|yes|no\b/},s={className:"string",contains:[e.BACKSLASH_ESCAPE],variants:[{begin:"'''",end:"'''",relevance:10},{begin:'"""',end:'"""',relevance:10},{begin:'"',end:'"'},{begin:"'",end:"'"}]},o={begin:/\[/,end:/\]/,contains:[a,r,i,s,t,"self"],relevance:0},l=n.either(/[A-Za-z0-9_-]+/,/"(\\"|[^"])*"/,/'[^']*'/);return{name:"TOML, also INI",aliases:["toml"],case_insensitive:!0,illegal:/\S/,contains:[a,{className:"section",begin:/\[+/,end:/\]+/},{begin:n.concat(l,"(\\s*\\.\\s*",l,")*",n.lookahead(/\s*=\s*[^#\s]/)),className:"attr",starts:{end:/$/,contains:[a,o,r,i,s,t]}}]}}},1611:function(e){const n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();e.exports=function(e){const s=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}))(e),o=i,l=a,c="@[a-z-]+",d={className:"variable",begin:"(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b",relevance:0};return{name:"SCSS",case_insensitive:!0,illegal:"[=/|']",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,s.CSS_NUMBER_MODE,{className:"selector-id",begin:"#[A-Za-z0-9_-]+",relevance:0},{className:"selector-class",begin:"\\.[A-Za-z0-9_-]+",relevance:0},s.ATTRIBUTE_SELECTOR_MODE,{className:"selector-tag",begin:"\\b("+n.join("|")+")\\b",relevance:0},{className:"selector-pseudo",begin:":("+l.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+o.join("|")+")"},d,{begin:/\(/,end:/\)/,contains:[s.CSS_NUMBER_MODE]},s.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b"},{begin:/:/,end:/[;}{]/,relevance:0,contains:[s.BLOCK_COMMENT,d,s.HEXCOLOR,s.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,s.IMPORTANT,s.FUNCTION_DISPATCH]},{begin:"@(page|font-face)",keywords:{$pattern:c,keyword:"@page @font-face"}},{begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},contains:[{begin:c,className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"},d,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,s.HEXCOLOR,s.CSS_NUMBER_MODE]},s.FUNCTION_DISPATCH]}}},1726:function(e){e.exports=function(e){return{name:"PHP template",subLanguage:"xml",contains:[{begin:/<\?(php|=)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0},{begin:'b"',end:'"',skip:!0},{begin:"b'",end:"'",skip:!0},e.inherit(e.APOS_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0}),e.inherit(e.QUOTE_STRING_MODE,{illegal:null,className:null,contains:null,skip:!0})]}]}}},2838:function(e){var n="\\.([0-9](_*[0-9])*)",t="[0-9a-fA-F](_*[0-9a-fA-F])*",a={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${n})|\\.)?|(${n}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${n})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${n})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${t})\\.?|(${t})?\\.(${t}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${t})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};e.exports=function(e){const n={keyword:"abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual",built_in:"Byte Short Char Int Long Boolean Float Double Void Unit Nothing",literal:"true false null"},t={className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"@"},i={className:"subst",begin:/\$\{/,end:/\}/,contains:[e.C_NUMBER_MODE]},r={className:"variable",begin:"\\$"+e.UNDERSCORE_IDENT_RE},s={className:"string",variants:[{begin:'"""',end:'"""(?=[^"])',contains:[r,i]},{begin:"'",end:"'",illegal:/\n/,contains:[e.BACKSLASH_ESCAPE]},{begin:'"',end:'"',illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,r,i]}]};i.contains.push(s);const o={className:"meta",begin:"@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*"+e.UNDERSCORE_IDENT_RE+")?"},l={className:"meta",begin:"@"+e.UNDERSCORE_IDENT_RE,contains:[{begin:/\(/,end:/\)/,contains:[e.inherit(s,{className:"string"}),"self"]}]},c=a,d=e.COMMENT("/\\*","\\*/",{contains:[e.C_BLOCK_COMMENT_MODE]}),g={variants:[{className:"type",begin:e.UNDERSCORE_IDENT_RE},{begin:/\(/,end:/\)/,contains:[]}]},u=g;return u.variants[1].contains=[g],g.variants[1].contains=[u],{name:"Kotlin",aliases:["kt","kts"],keywords:n,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"}]}),e.C_LINE_COMMENT_MODE,d,{className:"keyword",begin:/\b(break|continue|return|this)\b/,starts:{contains:[{className:"symbol",begin:/@\w+/}]}},t,o,l,{className:"function",beginKeywords:"fun",end:"[(]|$",returnBegin:!0,excludeEnd:!0,keywords:n,relevance:5,contains:[{begin:e.UNDERSCORE_IDENT_RE+"\\s*\\(",returnBegin:!0,relevance:0,contains:[e.UNDERSCORE_TITLE_MODE]},{className:"type",begin://,keywords:"reified",relevance:0},{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:n,relevance:0,contains:[{begin:/:/,end:/[=,\/]/,endsWithParent:!0,contains:[g,e.C_LINE_COMMENT_MODE,d],relevance:0},e.C_LINE_COMMENT_MODE,d,o,l,s,e.C_NUMBER_MODE]},d]},{begin:[/class|interface|trait/,/\s+/,e.UNDERSCORE_IDENT_RE],beginScope:{3:"title.class"},keywords:"class interface trait",end:/[:\{(]|$/,excludeEnd:!0,illegal:"extends implements",contains:[{beginKeywords:"public protected internal private constructor"},e.UNDERSCORE_TITLE_MODE,{className:"type",begin://,excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:/[,:]\s*/,end:/[<\(,){\s]|$/,excludeBegin:!0,returnEnd:!0},o,l]},s,{className:"meta",begin:"^#!/usr/bin/env",end:"$",illegal:"\n"},c]}}},3094:function(e,n,t){var a=t(8416);a.registerLanguage("xml",t(114)),a.registerLanguage("bash",t(8641)),a.registerLanguage("c",t(722)),a.registerLanguage("cpp",t(6570)),a.registerLanguage("csharp",t(7120)),a.registerLanguage("css",t(8612)),a.registerLanguage("markdown",t(602)),a.registerLanguage("diff",t(8596)),a.registerLanguage("ruby",t(5015)),a.registerLanguage("go",t(9777)),a.registerLanguage("graphql",t(7474)),a.registerLanguage("ini",t(1533)),a.registerLanguage("java",t(4895)),a.registerLanguage("javascript",t(6035)),a.registerLanguage("json",t(621)),a.registerLanguage("kotlin",t(2838)),a.registerLanguage("less",t(8330)),a.registerLanguage("lua",t(3873)),a.registerLanguage("makefile",t(7667)),a.registerLanguage("perl",t(946)),a.registerLanguage("objectivec",t(943)),a.registerLanguage("php",t(3111)),a.registerLanguage("php-template",t(1726)),a.registerLanguage("plaintext",t(9040)),a.registerLanguage("python",t(1117)),a.registerLanguage("python-repl",t(283)),a.registerLanguage("r",t(8129)),a.registerLanguage("rust",t(5409)),a.registerLanguage("scss",t(1611)),a.registerLanguage("shell",t(8813)),a.registerLanguage("sql",t(315)),a.registerLanguage("swift",t(1496)),a.registerLanguage("yaml",t(5588)),a.registerLanguage("typescript",t(8640)),a.registerLanguage("vbnet",t(8928)),a.registerLanguage("wasm",t(9351)),a.HighlightJS=a,a.default=a,e.exports=a},3111:function(e){e.exports=function(e){const n=e.regex,t=/(?![A-Za-z0-9])(?![$])/,a=n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,t),i=n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,t),r=n.concat(/[A-Z]+/,t),s={scope:"variable",match:"\\$+"+a},o={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},l=e.inherit(e.APOS_STRING_MODE,{illegal:null}),c="[ \t\n]",d={scope:"string",variants:[e.inherit(e.QUOTE_STRING_MODE,{illegal:null,contains:e.QUOTE_STRING_MODE.contains.concat(o)}),l,{begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:e.QUOTE_STRING_MODE.contains.concat(o),"on:begin":(e,n)=>{n.data._beginMatch=e[1]||e[2]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}},e.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/})]},g={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},u=["false","null","true"],b=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],m=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],p={keyword:b,literal:(e=>{const n=[];return e.forEach((e=>{n.push(e),e.toLowerCase()===e?n.push(e.toUpperCase()):n.push(e.toLowerCase())})),n})(u),built_in:m},f=e=>e.map((e=>e.replace(/\|\d+$/,""))),h={variants:[{match:[/new/,n.concat(c,"+"),n.concat("(?!",f(m).join("\\b|"),"\\b)"),i],scope:{1:"keyword",4:"title.class"}}]},_=n.concat(a,"\\b(?!\\()"),y={variants:[{match:[n.concat(/::/,n.lookahead(/(?!class\b)/)),_],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[i,n.concat(/::/,n.lookahead(/(?!class\b)/)),_],scope:{1:"title.class",3:"variable.constant"}},{match:[i,n.concat("::",n.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[i,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},E={scope:"attr",match:n.concat(a,n.lookahead(":"),n.lookahead(/(?!::)/))},v={relevance:0,begin:/\(/,end:/\)/,keywords:p,contains:[E,s,y,e.C_BLOCK_COMMENT_MODE,d,g,h]},w={relevance:0,match:[/\b/,n.concat("(?!fn\\b|function\\b|",f(b).join("\\b|"),"|",f(m).join("\\b|"),"\\b)"),a,n.concat(c,"*"),n.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[v]};v.contains.push(w);const k=[E,y,e.C_BLOCK_COMMENT_MODE,d,g,h],N={begin:n.concat(/#\[\s*\\?/,n.either(i,r)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:u,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:u,keyword:["new","array"]},contains:["self",...k]},...k,{scope:"meta",variants:[{match:i},{match:r}]}]};return{case_insensitive:!1,keywords:p,contains:[N,e.HASH_COMMENT_MODE,e.COMMENT("//","$"),e.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:e.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},{scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},{scope:"variable.language",match:/\$this\b/},s,w,y,{match:[/const/,/\s/,a],scope:{1:"keyword",3:"variable.constant"}},h,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},e.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:p,contains:["self",N,s,y,e.C_BLOCK_COMMENT_MODE,d,g]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[e.inherit(e.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},e.UNDERSCORE_TITLE_MODE]},d,g]}}},3873:function(e){e.exports=function(e){const n="\\[=*\\[",t="\\]=*\\]",a={begin:n,end:t,contains:["self"]},i=[e.COMMENT("--(?!\\[=*\\[)","$"),e.COMMENT("--\\[=*\\[",t,{contains:[a],relevance:10})];return{name:"Lua",aliases:["pluto"],keywords:{$pattern:e.UNDERSCORE_IDENT_RE,literal:"true false nil",keyword:"and break do else elseif end for goto if in local not or repeat return then until while",built_in:"_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove"},contains:i.concat([{className:"function",beginKeywords:"function",end:"\\)",contains:[e.inherit(e.TITLE_MODE,{begin:"([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*"}),{className:"params",begin:"\\(",endsWithParent:!0,contains:i}].concat(i)},e.C_NUMBER_MODE,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{className:"string",begin:n,end:t,contains:[a],relevance:5}])}}},4895:function(e){var n="\\.([0-9](_*[0-9])*)",t="[0-9a-fA-F](_*[0-9a-fA-F])*",a={className:"number",variants:[{begin:`(\\b([0-9](_*[0-9])*)((${n})|\\.)?|(${n}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:`\\b([0-9](_*[0-9])*)((${n})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${n})[fFdD]?\\b`},{begin:"\\b([0-9](_*[0-9])*)[fFdD]\\b"},{begin:`\\b0[xX]((${t})\\.?|(${t})?\\.(${t}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${t})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function i(e,n,t){return-1===t?"":e.replace(n,(a=>i(e,n,t-1)))}e.exports=function(e){const n=e.regex,t="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",r=t+i("(?:<"+t+"~~~(?:\\s*,\\s*"+t+"~~~)*>)?",/~~~/g,2),s={keyword:["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do","sealed","yield","permits","goto","when"],literal:["false","true","null"],type:["char","boolean","long","float","int","byte","short","double"],built_in:["super","this"]},o={className:"meta",begin:"@"+t,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},l={className:"params",begin:/\(/,end:/\)/,keywords:s,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:s,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,t],className:{1:"keyword",3:"title.class"}},{match:/non-sealed/,scope:"keyword"},{begin:[n.concat(/(?!else)/,t),/\s+/,t,/\s+/,/=(?!=)/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,t],className:{1:"keyword",3:"title.class"},contains:[l,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+r+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:s,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:s,relevance:0,contains:[o,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},a,o]}}},5015:function(e){e.exports=function(e){const n=e.regex,t="([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)",a=n.either(/\b([A-Z]+[a-z0-9]+)+/,/\b([A-Z]+[a-z0-9]+)+[A-Z]+/),i=n.concat(a,/(::\w+)*/),r={"variable.constant":["__FILE__","__LINE__","__ENCODING__"],"variable.language":["self","super"],keyword:["alias","and","begin","BEGIN","break","case","class","defined","do","else","elsif","end","END","ensure","for","if","in","module","next","not","or","redo","require","rescue","retry","return","then","undef","unless","until","when","while","yield","include","extend","prepend","public","private","protected","raise","throw"],built_in:["proc","lambda","attr_accessor","attr_reader","attr_writer","define_method","private_constant","module_function"],literal:["true","false","nil"]},s={className:"doctag",begin:"@[A-Za-z]+"},o={begin:"#<",end:">"},l=[e.COMMENT("#","$",{contains:[s]}),e.COMMENT("^=begin","^=end",{contains:[s],relevance:10}),e.COMMENT("^__END__",e.MATCH_NOTHING_RE)],c={className:"subst",begin:/#\{/,end:/\}/,keywords:r},d={className:"string",contains:[e.BACKSLASH_ESCAPE,c],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/`/,end:/`/},{begin:/%[qQwWx]?\(/,end:/\)/},{begin:/%[qQwWx]?\[/,end:/\]/},{begin:/%[qQwWx]?\{/,end:/\}/},{begin:/%[qQwWx]?/},{begin:/%[qQwWx]?\//,end:/\//},{begin:/%[qQwWx]?%/,end:/%/},{begin:/%[qQwWx]?-/,end:/-/},{begin:/%[qQwWx]?\|/,end:/\|/},{begin:/\B\?(\\\d{1,3})/},{begin:/\B\?(\\x[A-Fa-f0-9]{1,2})/},{begin:/\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/},{begin:/\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/},{begin:/\B\?\\(c|C-)[\x20-\x7e]/},{begin:/\B\?\\?\S/},{begin:n.concat(/<<[-~]?'?/,n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)),contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,contains:[e.BACKSLASH_ESCAPE,c]})]}]},g="[0-9](_?[0-9])*",u={className:"number",relevance:0,variants:[{begin:`\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b`},{begin:"\\b0[dD][0-9](_?[0-9])*r?i?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*r?i?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*r?i?\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b"},{begin:"\\b0(_?[0-7])+r?i?\\b"}]},b={variants:[{match:/\(\)/},{className:"params",begin:/\(/,end:/(?=\))/,excludeBegin:!0,endsParent:!0,keywords:r}]},m=[d,{variants:[{match:[/class\s+/,i,/\s+<\s+/,i]},{match:[/\b(class|module)\s+/,i]}],scope:{2:"title.class",4:"title.class.inherited"},keywords:r},{match:[/(include|extend)\s+/,i],scope:{2:"title.class"},keywords:r},{relevance:0,match:[i,/\.new[. (]/],scope:{1:"title.class"}},{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},{relevance:0,match:a,scope:"title.class"},{match:[/def/,/\s+/,t],scope:{1:"keyword",3:"title.function"},contains:[b]},{begin:e.IDENT_RE+"::"},{className:"symbol",begin:e.UNDERSCORE_IDENT_RE+"(!|\\?)?:",relevance:0},{className:"symbol",begin:":(?!\\s)",contains:[d,{begin:t}],relevance:0},u,{className:"variable",begin:"(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])"},{className:"params",begin:/\|(?!=)/,end:/\|/,excludeBegin:!0,excludeEnd:!0,relevance:0,keywords:r},{begin:"("+e.RE_STARTERS_RE+"|unless)\\s*",keywords:"unless",contains:[{className:"regexp",contains:[e.BACKSLASH_ESCAPE,c],illegal:/\n/,variants:[{begin:"/",end:"/[a-z]*"},{begin:/%r\{/,end:/\}[a-z]*/},{begin:"%r\\(",end:"\\)[a-z]*"},{begin:"%r!",end:"![a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}].concat(o,l),relevance:0}].concat(o,l);c.contains=m,b.contains=m;const p=[{begin:/^\s*=>/,starts:{end:"$",contains:m}},{className:"meta.prompt",begin:"^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])",starts:{end:"$",keywords:r,contains:m}}];return l.unshift(o),{name:"Ruby",aliases:["rb","gemspec","podspec","thor","irb"],keywords:r,illegal:/\/\*/,contains:[e.SHEBANG({binary:"ruby"})].concat(p).concat(l).concat(m)}}},5409:function(e){e.exports=function(e){const n=e.regex,t=/(r#)?/,a=n.concat(t,e.UNDERSCORE_IDENT_RE),i=n.concat(t,e.IDENT_RE),r={className:"title.function.invoke",relevance:0,begin:n.concat(/\b/,/(?!let|for|while|if|else|match\b)/,i,n.lookahead(/\s*\(/))},s="([ui](8|16|32|64|128|size)|f(32|64))?",o=["drop ","Copy","Send","Sized","Sync","Drop","Fn","FnMut","FnOnce","ToOwned","Clone","Debug","PartialEq","PartialOrd","Eq","Ord","AsRef","AsMut","Into","From","Default","Iterator","Extend","IntoIterator","DoubleEndedIterator","ExactSizeIterator","SliceConcatExt","ToString","assert!","assert_eq!","bitflags!","bytes!","cfg!","col!","concat!","concat_idents!","debug_assert!","debug_assert_eq!","env!","eprintln!","panic!","file!","format!","format_args!","include_bytes!","include_str!","line!","local_data_key!","module_path!","option_env!","print!","println!","select!","stringify!","try!","unimplemented!","unreachable!","vec!","write!","writeln!","macro_rules!","assert_ne!","debug_assert_ne!"],l=["i8","i16","i32","i64","i128","isize","u8","u16","u32","u64","u128","usize","f32","f64","str","char","bool","Box","Option","Result","String","Vec"];return{name:"Rust",aliases:["rs"],keywords:{$pattern:e.IDENT_RE+"!?",type:l,keyword:["abstract","as","async","await","become","box","break","const","continue","crate","do","dyn","else","enum","extern","false","final","fn","for","if","impl","in","let","loop","macro","match","mod","move","mut","override","priv","pub","ref","return","self","Self","static","struct","super","trait","true","try","type","typeof","union","unsafe","unsized","use","virtual","where","while","yield"],literal:["true","false","Some","None","Ok","Err"],built_in:o},illegal:""},r]}}},5588:function(e){e.exports=function(e){const n="true false yes no null",t="[\\w#;/?:@&=+$,.~*'()[\\]]+",a={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(a,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),r={className:"number",begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b"},s={end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},o={begin:/\{/,end:/\}/,contains:[s],illegal:"\\n",relevance:0},l={begin:"\\[",end:"\\]",contains:[s],illegal:"\\n",relevance:0},c=[{className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+t},{className:"type",begin:"!<"+t+">"},{className:"type",begin:"!"+t},{className:"type",begin:"!!"+t},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},r,{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},o,l,{className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},a],d=[...c];return d.pop(),d.push(i),s.contains=d,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:c}}},6035:function(e){const n="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],a=["true","false","null","undefined","NaN","Infinity"],i=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],r=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],s=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],l=[].concat(s,i,r);e.exports=function(e){const c=e.regex,d=n,g="<>",u="",b={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const t=e[0].length+e.index,a=e.input[t];if("<"===a||","===a)return void n.ignoreMatch();let i;">"===a&&(((e,{after:n})=>{const t="`${e}\\s*\\(`)),c.concat("(?!",R.join("|"),")")),d,c.lookahead(/\s*\(/)),className:"title.function",relevance:0};var R;const I={begin:c.concat(/\./,c.lookahead(c.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},D={match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},A]},L="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",B={match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(L)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[A]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:m,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:S},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,y,E,v,w,k,{match:/\$\d+/},h,S,{scope:"attr",match:d+c.lookahead(":"),relevance:0},B,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[k,e.REGEXP_MODE,{className:"function",begin:L,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:m,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:g,end:u},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin,"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},C,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[A,e.inherit(e.TITLE_MODE,{begin:d,className:"title.function"})]},{match:/\.\.\./,relevance:0},I,{match:"\\$"+d,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[A]},T,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},M,D,{match:/\$[(.]/}]}}},6491:function(e,n,t){t(1329);const a=t(3094);t.g.hljs=a},6570:function(e){e.exports=function(e){const n=e.regex,t=e.COMMENT("//","$",{contains:[{begin:/\\\n/}]}),a="decltype\\(auto\\)",i="[a-zA-Z_]\\w*::",r="(?!struct)(decltype\\(auto\\)|"+n.optional(i)+"[a-zA-Z_]\\w*"+n.optional("<[^<>]+>")+")",s={className:"type",begin:"\\b[a-z\\d_]*_t\\b"},o={className:"string",variants:[{begin:'(u8?|U|L)?"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},{begin:"(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)",end:"'",illegal:"."},e.END_SAME_AS_BEGIN({begin:/(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/,end:/\)([^()\\ ]{0,16})"/})]},l={className:"number",variants:[{begin:"[+-]?(?:(?:[0-9](?:'?[0-9])*\\.(?:[0-9](?:'?[0-9])*)?|\\.[0-9](?:'?[0-9])*)(?:[Ee][+-]?[0-9](?:'?[0-9])*)?|[0-9](?:'?[0-9])*[Ee][+-]?[0-9](?:'?[0-9])*|0[Xx](?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*(?:\\.(?:[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)?)?|\\.[0-9A-Fa-f](?:'?[0-9A-Fa-f])*)[Pp][+-]?[0-9](?:'?[0-9])*)(?:[Ff](?:16|32|64|128)?|(BF|bf)16|[Ll]|)"},{begin:"[+-]?\\b(?:0[Bb][01](?:'?[01])*|0[Xx][0-9A-Fa-f](?:'?[0-9A-Fa-f])*|0(?:'?[0-7])*|[1-9](?:'?[0-9])*)(?:[Uu](?:LL?|ll?)|[Uu][Zz]?|(?:LL?|ll?)[Uu]?|[Zz][Uu]|)"}],relevance:0},c={className:"meta",begin:/#\s*[a-z]+\b/,end:/$/,keywords:{keyword:"if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include"},contains:[{begin:/\\\n/,relevance:0},e.inherit(o,{className:"string"}),{className:"string",begin:/<.*?>/},t,e.C_BLOCK_COMMENT_MODE]},d={className:"title",begin:n.optional(i)+e.IDENT_RE,relevance:0},g=n.optional(i)+e.IDENT_RE+"\\s*\\(",u={type:["bool","char","char16_t","char32_t","char8_t","double","float","int","long","short","void","wchar_t","unsigned","signed","const","static"],keyword:["alignas","alignof","and","and_eq","asm","atomic_cancel","atomic_commit","atomic_noexcept","auto","bitand","bitor","break","case","catch","class","co_await","co_return","co_yield","compl","concept","const_cast|10","consteval","constexpr","constinit","continue","decltype","default","delete","do","dynamic_cast|10","else","enum","explicit","export","extern","false","final","for","friend","goto","if","import","inline","module","mutable","namespace","new","noexcept","not","not_eq","nullptr","operator","or","or_eq","override","private","protected","public","reflexpr","register","reinterpret_cast|10","requires","return","sizeof","static_assert","static_cast|10","struct","switch","synchronized","template","this","thread_local","throw","transaction_safe","transaction_safe_dynamic","true","try","typedef","typeid","typename","union","using","virtual","volatile","while","xor","xor_eq"],literal:["NULL","false","nullopt","nullptr","true"],built_in:["_Pragma"],_type_hints:["any","auto_ptr","barrier","binary_semaphore","bitset","complex","condition_variable","condition_variable_any","counting_semaphore","deque","false_type","flat_map","flat_set","future","imaginary","initializer_list","istringstream","jthread","latch","lock_guard","multimap","multiset","mutex","optional","ostringstream","packaged_task","pair","promise","priority_queue","queue","recursive_mutex","recursive_timed_mutex","scoped_lock","set","shared_future","shared_lock","shared_mutex","shared_timed_mutex","shared_ptr","stack","string_view","stringstream","timed_mutex","thread","true_type","tuple","unique_lock","unique_ptr","unordered_map","unordered_multimap","unordered_multiset","unordered_set","variant","vector","weak_ptr","wstring","wstring_view"]},b={className:"function.dispatch",relevance:0,keywords:{_hint:["abort","abs","acos","apply","as_const","asin","atan","atan2","calloc","ceil","cerr","cin","clog","cos","cosh","cout","declval","endl","exchange","exit","exp","fabs","floor","fmod","forward","fprintf","fputs","free","frexp","fscanf","future","invoke","isalnum","isalpha","iscntrl","isdigit","isgraph","islower","isprint","ispunct","isspace","isupper","isxdigit","labs","launder","ldexp","log","log10","make_pair","make_shared","make_shared_for_overwrite","make_tuple","make_unique","malloc","memchr","memcmp","memcpy","memset","modf","move","pow","printf","putchar","puts","realloc","scanf","sin","sinh","snprintf","sprintf","sqrt","sscanf","std","stderr","stdin","stdout","strcat","strchr","strcmp","strcpy","strcspn","strlen","strncat","strncmp","strncpy","strpbrk","strrchr","strspn","strstr","swap","tan","tanh","terminate","to_underlying","tolower","toupper","vfprintf","visit","vprintf","vsprintf"]},begin:n.concat(/\b/,/(?!decltype)/,/(?!if)/,/(?!for)/,/(?!switch)/,/(?!while)/,e.IDENT_RE,n.lookahead(/(<[^<>]+>|)\s*\(/))},m=[b,c,s,t,e.C_BLOCK_COMMENT_MODE,l,o],p={variants:[{begin:/=/,end:/;/},{begin:/\(/,end:/\)/},{beginKeywords:"new throw return else",end:/;/}],keywords:u,contains:m.concat([{begin:/\(/,end:/\)/,keywords:u,contains:m.concat(["self"]),relevance:0}]),relevance:0},f={className:"function",begin:"("+r+"[\\*&\\s]+)+"+g,returnBegin:!0,end:/[{;=]/,excludeEnd:!0,keywords:u,illegal:/[^\w\s\*&:<>.]/,contains:[{begin:a,keywords:u,relevance:0},{begin:g,returnBegin:!0,contains:[d],relevance:0},{begin:/::/,relevance:0},{begin:/:/,endsWithParent:!0,contains:[o,l]},{relevance:0,match:/,/},{className:"params",begin:/\(/,end:/\)/,keywords:u,relevance:0,contains:[t,e.C_BLOCK_COMMENT_MODE,o,l,s,{begin:/\(/,end:/\)/,keywords:u,relevance:0,contains:["self",t,e.C_BLOCK_COMMENT_MODE,o,l,s]}]},s,t,e.C_BLOCK_COMMENT_MODE,c]};return{name:"C++",aliases:["cc","c++","h++","hpp","hh","hxx","cxx"],keywords:u,illegal:"",keywords:u,contains:["self",s]},{begin:e.IDENT_RE+"::",keywords:u},{match:[/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/,/\s+/,/\w+/],className:{1:"keyword",3:"title.class"}}])}}},7120:function(e){e.exports=function(e){const n={keyword:["abstract","as","base","break","case","catch","class","const","continue","do","else","event","explicit","extern","finally","fixed","for","foreach","goto","if","implicit","in","interface","internal","is","lock","namespace","new","operator","out","override","params","private","protected","public","readonly","record","ref","return","scoped","sealed","sizeof","stackalloc","static","struct","switch","this","throw","try","typeof","unchecked","unsafe","using","virtual","void","volatile","while"].concat(["add","alias","and","ascending","args","async","await","by","descending","dynamic","equals","file","from","get","global","group","init","into","join","let","nameof","not","notnull","on","or","orderby","partial","record","remove","required","scoped","select","set","unmanaged","value|0","var","when","where","with","yield"]),built_in:["bool","byte","char","decimal","delegate","double","dynamic","enum","float","int","long","nint","nuint","object","sbyte","short","string","ulong","uint","ushort"],literal:["default","false","null","true"]},t=e.inherit(e.TITLE_MODE,{begin:"[a-zA-Z](\\.?\\w)*"}),a={className:"number",variants:[{begin:"\\b(0b[01']+)"},{begin:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{begin:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],relevance:0},i={className:"string",begin:'@"',end:'"',contains:[{begin:'""'}]},r=e.inherit(i,{illegal:/\n/}),s={className:"subst",begin:/\{/,end:/\}/,keywords:n},o=e.inherit(s,{illegal:/\n/}),l={className:"string",begin:/\$"/,end:'"',illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},e.BACKSLASH_ESCAPE,o]},c={className:"string",begin:/\$@"/,end:'"',contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},s]},d=e.inherit(c,{illegal:/\n/,contains:[{begin:/\{\{/},{begin:/\}\}/},{begin:'""'},o]});s.contains=[c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.C_BLOCK_COMMENT_MODE],o.contains=[d,l,r,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,a,e.inherit(e.C_BLOCK_COMMENT_MODE,{illegal:/\n/})];const g={variants:[{className:"string",begin:/"""("*)(?!")(.|\n)*?"""\1/,relevance:1},c,l,i,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},u={begin:"<",end:">",contains:[{beginKeywords:"in out"},t]},b=e.IDENT_RE+"(<"+e.IDENT_RE+"(\\s*,\\s*"+e.IDENT_RE+")*>)?(\\[\\])?",m={begin:"@"+e.IDENT_RE,relevance:0};return{name:"C#",aliases:["cs","c#"],keywords:n,illegal:/::/,contains:[e.COMMENT("///","$",{returnBegin:!0,contains:[{className:"doctag",variants:[{begin:"///",relevance:0},{begin:"\x3c!--|--\x3e"},{begin:""}]}]}),e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{className:"meta",begin:"#",end:"$",keywords:{keyword:"if else elif endif define undef warning error line region endregion pragma checksum"}},g,a,{beginKeywords:"class interface",relevance:0,end:/[{;=]/,illegal:/[^\s:,]/,contains:[{beginKeywords:"where class"},t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"namespace",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[t,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"record",relevance:0,end:/[{;=]/,illegal:/[^\s:]/,contains:[t,u,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{className:"meta",begin:"^\\s*\\[(?=[\\w])",excludeBegin:!0,end:"\\]",excludeEnd:!0,contains:[{className:"string",begin:/"/,end:/"/}]},{beginKeywords:"new return throw await else",relevance:0},{className:"function",begin:"("+b+"\\s+)+"+e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,end:/\s*[{;=]/,excludeEnd:!0,keywords:n,contains:[{beginKeywords:["public","private","protected","static","internal","protected","abstract","async","extern","override","unsafe","virtual","new","sealed","partial"].join(" "),relevance:0},{begin:e.IDENT_RE+"\\s*(<[^=]+>\\s*)?\\(",returnBegin:!0,contains:[e.TITLE_MODE,u],relevance:0},{match:/\(\)/},{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:n,relevance:0,contains:[g,a,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},m]}}},7474:function(e){e.exports=function(e){const n=e.regex;return{name:"GraphQL",aliases:["gql"],case_insensitive:!0,disableAutodetect:!1,keywords:{keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],literal:["true","false","null"]},contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{scope:"symbol",begin:n.concat(/[_A-Za-z][_0-9A-Za-z]*/,n.lookahead(/\s*:/)),relevance:0}],illegal:[/[;<']/,/BEGIN/]}}},7667:function(e){e.exports=function(e){const n={className:"variable",variants:[{begin:"\\$\\("+e.UNDERSCORE_IDENT_RE+"\\)",contains:[e.BACKSLASH_ESCAPE]},{begin:/\$[@%:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/,r=n.either(/[()]/,/[{}]/,/\[\[/,/[[\]]/,/\\/,/,/);return{name:"R",keywords:{$pattern:t,keyword:"function if in break next repeat else for while",literal:"NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10",built_in:"LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm"},contains:[e.COMMENT(/#'/,/$/,{contains:[{scope:"doctag",match:/@examples/,starts:{end:n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/,/\n^(?!#')/)),endsParent:!0}},{scope:"doctag",begin:"@param",end:/$/,contains:[{scope:"variable",variants:[{match:t},{match:/`(?:\\.|[^`\\])+`/}],endsParent:!0}]},{scope:"doctag",match:/@[a-zA-Z]+/},{scope:"keyword",match:/\\[a-zA-Z]+/}]}),e.HASH_COMMENT_MODE,{scope:"string",contains:[e.BACKSLASH_ESCAPE],variants:[e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\(/,end:/\)(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\{/,end:/\}(-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]"(-*)\[/,end:/\](-*)"/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\(/,end:/\)(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\{/,end:/\}(-*)'/}),e.END_SAME_AS_BEGIN({begin:/[rR]'(-*)\[/,end:/\](-*)'/}),{begin:'"',end:'"',relevance:0},{begin:"'",end:"'",relevance:0}]},{relevance:0,variants:[{scope:{1:"operator",2:"number"},match:[i,a]},{scope:{1:"operator",2:"number"},match:[/%[^%]*%/,a]},{scope:{1:"punctuation",2:"number"},match:[r,a]},{scope:{2:"number"},match:[/[^a-zA-Z0-9._]|^/,a]}]},{scope:{3:"operator"},match:[t,/\s+/,/<-/,/\s+/]},{scope:"operator",relevance:0,variants:[{match:i},{match:/%[^%]*%/}]},{scope:"punctuation",relevance:0,match:r},{begin:"`",end:"`",contains:[{begin:/\\./}]}]}}},8330:function(e){const n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse(),s=a.concat(i).sort().reverse();e.exports=function(e){const o=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}))(e),l=s,c="([\\w-]+|@\\{[\\w-]+\\})",d=[],g=[],u=function(e){return{className:"string",begin:"~?"+e+".*?"+e}},b=function(e,n,t){return{className:e,begin:n,relevance:t}},m={$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},p={begin:"\\(",end:"\\)",contains:g,keywords:m,relevance:0};g.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,u("'"),u('"'),o.CSS_NUMBER_MODE,{begin:"(url|data-uri)\\(",starts:{className:"string",end:"[\\)\\n]",excludeEnd:!0}},o.HEXCOLOR,p,b("variable","@@?[\\w-]+",10),b("variable","@\\{[\\w-]+\\}"),b("built_in","~?`[^`]*?`"),{className:"attribute",begin:"[\\w-]+\\s*:",end:":",returnBegin:!0,excludeEnd:!0},o.IMPORTANT,{beginKeywords:"and not"},o.FUNCTION_DISPATCH);const f=g.concat({begin:/\{/,end:/\}/,contains:d}),h={beginKeywords:"when",endsWithParent:!0,contains:[{beginKeywords:"and not"}].concat(g)},_={begin:c+"\\s*:",returnBegin:!0,end:/[;}]/,relevance:0,contains:[{begin:/-(webkit|moz|ms|o)-/},o.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b",end:/(?=:)/,starts:{endsWithParent:!0,illegal:"[<=$]",relevance:0,contains:g}}]},y={className:"keyword",begin:"@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b",starts:{end:"[;{}]",keywords:m,returnEnd:!0,contains:g,relevance:0}},E={className:"variable",variants:[{begin:"@[\\w-]+\\s*:",relevance:15},{begin:"@[\\w-]+"}],starts:{end:"[;}]",returnEnd:!0,contains:f}},v={variants:[{begin:"[\\.#:&\\[>]",end:"[;{}]"},{begin:c,end:/\{/}],returnBegin:!0,returnEnd:!0,illegal:"[<='$\"]",relevance:0,contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,h,b("keyword","all\\b"),b("variable","@\\{[\\w-]+\\}"),{begin:"\\b("+n.join("|")+")\\b",className:"selector-tag"},o.CSS_NUMBER_MODE,b("selector-tag",c,0),b("selector-id","#"+c),b("selector-class","\\."+c,0),b("selector-tag","&",0),o.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",begin:":("+a.join("|")+")"},{className:"selector-pseudo",begin:":(:)?("+i.join("|")+")"},{begin:/\(/,end:/\)/,relevance:0,contains:f},{begin:"!important"},o.FUNCTION_DISPATCH]},w={begin:`[\\w-]+:(:)?(${l.join("|")})`,returnBegin:!0,contains:[v]};return d.push(e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,y,E,w,_,v,h,o.FUNCTION_DISPATCH),{name:"Less",case_insensitive:!0,illegal:"[=>'/<($\"]",contains:d}}},8416:function(e){function n(e){return e instanceof Map?e.clear=e.delete=e.set=function(){throw new Error("map is read-only")}:e instanceof Set&&(e.add=e.clear=e.delete=function(){throw new Error("set is read-only")}),Object.freeze(e),Object.getOwnPropertyNames(e).forEach((t=>{const a=e[t],i=typeof a;"object"!==i&&"function"!==i||Object.isFrozen(a)||n(a)})),e}class t{constructor(e){void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}ignoreMatch(){this.isMatchIgnored=!0}}function a(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function i(e,...n){const t=Object.create(null);for(const n in e)t[n]=e[n];return n.forEach((function(e){for(const n in e)t[n]=e[n]})),t}const r=e=>!!e.scope;class s{constructor(e,n){this.buffer="",this.classPrefix=n.classPrefix,e.walk(this)}addText(e){this.buffer+=a(e)}openNode(e){if(!r(e))return;const n=((e,{prefix:n})=>{if(e.startsWith("language:"))return e.replace("language:","language-");if(e.includes(".")){const t=e.split(".");return[`${n}${t.shift()}`,...t.map(((e,n)=>`${e}${"_".repeat(n+1)}`))].join(" ")}return`${n}${e}`})(e.scope,{prefix:this.classPrefix});this.span(n)}closeNode(e){r(e)&&(this.buffer+="")}value(){return this.buffer}span(e){this.buffer+=``}}const o=(e={})=>{const n={children:[]};return Object.assign(n,e),n};class l{constructor(){this.rootNode=o(),this.stack=[this.rootNode]}get top(){return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){this.top.children.push(e)}openNode(e){const n=o({scope:e});this.add(n),this.stack.push(n)}closeNode(){if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,n){return"string"==typeof n?e.addText(n):n.children&&(e.openNode(n),n.children.forEach((n=>this._walk(e,n))),e.closeNode(n)),e}static _collapse(e){"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{l._collapse(e)})))}}class c extends l{constructor(e){super(),this.options=e}addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){this.closeNode()}__addSublanguage(e,n){const t=e.root;n&&(t.scope=`language:${n}`),this.add(t)}toHTML(){return new s(this,this.options).value()}finalize(){return this.closeAllNodes(),!0}}function d(e){return e?"string"==typeof e?e:e.source:null}function g(e){return m("(?=",e,")")}function u(e){return m("(?:",e,")*")}function b(e){return m("(?:",e,")?")}function m(...e){return e.map((e=>d(e))).join("")}function p(...e){const n=function(e){const n=e[e.length-1];return"object"==typeof n&&n.constructor===Object?(e.splice(e.length-1,1),n):{}}(e);return"("+(n.capture?"":"?:")+e.map((e=>d(e))).join("|")+")"}function f(e){return new RegExp(e.toString()+"|").exec("").length-1}const h=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;function _(e,{joinWith:n}){let t=0;return e.map((e=>{t+=1;const n=t;let a=d(e),i="";for(;a.length>0;){const e=h.exec(a);if(!e){i+=a;break}i+=a.substring(0,e.index),a=a.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?i+="\\"+String(Number(e[1])+n):(i+=e[0],"("===e[0]&&t++)}return i})).map((e=>`(${e})`)).join(n)}const y="[a-zA-Z]\\w*",E="[a-zA-Z_]\\w*",v="\\b\\d+(\\.\\d+)?",w="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",k="\\b(0b[01]+)",N={begin:"\\\\[\\s\\S]",relevance:0},x={scope:"string",begin:"'",end:"'",illegal:"\\n",contains:[N]},O={scope:"string",begin:'"',end:'"',illegal:"\\n",contains:[N]},A=function(e,n,t={}){const a=i({scope:"comment",begin:e,end:n,contains:[]},t);a.contains.push({scope:"doctag",begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0});const r=p("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/);return a.contains.push({begin:m(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),a},M=A("//","$"),S=A("/\\*","\\*/"),C=A("#","$"),T={scope:"number",begin:v,relevance:0},R={scope:"number",begin:w,relevance:0},I={scope:"number",begin:k,relevance:0},D={scope:"regexp",begin:/\/(?=[^/\n]*\/)/,end:/\/[gimuy]*/,contains:[N,{begin:/\[/,end:/\]/,relevance:0,contains:[N]}]},L={scope:"title",begin:y,relevance:0},B={scope:"title",begin:E,relevance:0},z={begin:"\\.\\s*[a-zA-Z_]\\w*",relevance:0};var F=Object.freeze({__proto__:null,APOS_STRING_MODE:x,BACKSLASH_ESCAPE:N,BINARY_NUMBER_MODE:I,BINARY_NUMBER_RE:k,COMMENT:A,C_BLOCK_COMMENT_MODE:S,C_LINE_COMMENT_MODE:M,C_NUMBER_MODE:R,C_NUMBER_RE:w,END_SAME_AS_BEGIN:function(e){return Object.assign(e,{"on:begin":(e,n)=>{n.data._beginMatch=e[1]},"on:end":(e,n)=>{n.data._beginMatch!==e[1]&&n.ignoreMatch()}})},HASH_COMMENT_MODE:C,IDENT_RE:y,MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:z,NUMBER_MODE:T,NUMBER_RE:v,PHRASAL_WORDS_MODE:{begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},QUOTE_STRING_MODE:O,REGEXP_MODE:D,RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",SHEBANG:(e={})=>{const n=/^#![ ]*\//;return e.binary&&(e.begin=m(n,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:n,end:/$/,relevance:0,"on:begin":(e,n)=>{0!==e.index&&n.ignoreMatch()}},e)},TITLE_MODE:L,UNDERSCORE_IDENT_RE:E,UNDERSCORE_TITLE_MODE:B});function $(e,n){"."===e.input[e.index-1]&&n.ignoreMatch()}function j(e,n){void 0!==e.className&&(e.scope=e.className,delete e.className)}function U(e,n){n&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",e.__beforeBegin=$,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,void 0===e.relevance&&(e.relevance=0))}function P(e,n){Array.isArray(e.illegal)&&(e.illegal=p(...e.illegal))}function K(e,n){if(e.match){if(e.begin||e.end)throw new Error("begin & end are not supported with match");e.begin=e.match,delete e.match}}function H(e,n){void 0===e.relevance&&(e.relevance=1)}const q=(e,n)=>{if(!e.beforeMatch)return;if(e.starts)throw new Error("beforeMatch cannot be used with starts");const t=Object.assign({},e);Object.keys(e).forEach((n=>{delete e[n]})),e.keywords=t.keywords,e.begin=m(t.beforeMatch,g(t.begin)),e.starts={relevance:0,contains:[Object.assign(t,{endsParent:!0})]},e.relevance=0,delete t.beforeMatch},Z=["of","and","for","in","not","or","if","then","parent","list","value"];function G(e,n,t="keyword"){const a=Object.create(null);return"string"==typeof e?i(t,e.split(" ")):Array.isArray(e)?i(t,e):Object.keys(e).forEach((function(t){Object.assign(a,G(e[t],n,t))})),a;function i(e,t){n&&(t=t.map((e=>e.toLowerCase()))),t.forEach((function(n){const t=n.split("|");a[t[0]]=[e,W(t[0],t[1])]}))}}function W(e,n){return n?Number(n):function(e){return Z.includes(e.toLowerCase())}(e)?0:1}const Q={},X=e=>{console.error(e)},V=(e,...n)=>{console.log(`WARN: ${e}`,...n)},J=(e,n)=>{Q[`${e}/${n}`]||(console.log(`Deprecated as of ${e}. ${n}`),Q[`${e}/${n}`]=!0)},Y=new Error;function ee(e,n,{key:t}){let a=0;const i=e[t],r={},s={};for(let e=1;e<=n.length;e++)s[e+a]=i[e],r[e+a]=!0,a+=f(n[e-1]);e[t]=s,e[t]._emit=r,e[t]._multi=!0}function ne(e){!function(e){e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,delete e.scope)}(e),"string"==typeof e.beginScope&&(e.beginScope={_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope}),function(e){if(Array.isArray(e.begin)){if(e.skip||e.excludeBegin||e.returnBegin)throw X("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),Y;if("object"!=typeof e.beginScope||null===e.beginScope)throw X("beginScope must be object"),Y;ee(e,e.begin,{key:"beginScope"}),e.begin=_(e.begin,{joinWith:""})}}(e),function(e){if(Array.isArray(e.end)){if(e.skip||e.excludeEnd||e.returnEnd)throw X("skip, excludeEnd, returnEnd not compatible with endScope: {}"),Y;if("object"!=typeof e.endScope||null===e.endScope)throw X("endScope must be object"),Y;ee(e,e.end,{key:"endScope"}),e.end=_(e.end,{joinWith:""})}}(e)}function te(e){function n(n,t){return new RegExp(d(n),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(t?"g":""))}class t{constructor(){this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}addRule(e,n){n.position=this.position++,this.matchIndexes[this.matchAt]=n,this.regexes.push([n,e]),this.matchAt+=f(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null);const e=this.regexes.map((e=>e[1]));this.matcherRe=n(_(e,{joinWith:"|"}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex;const n=this.matcherRe.exec(e);if(!n)return null;const t=n.findIndex(((e,n)=>n>0&&void 0!==e)),a=this.matchIndexes[t];return n.splice(0,t),Object.assign(n,a)}}class a{constructor(){this.rules=[],this.multiRegexes=[],this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){if(this.multiRegexes[e])return this.multiRegexes[e];const n=new t;return this.rules.slice(e).forEach((([e,t])=>n.addRule(e,t))),n.compile(),this.multiRegexes[e]=n,n}resumingScanAtSamePosition(){return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,n){this.rules.push([e,n]),"begin"===n.type&&this.count++}exec(e){const n=this.getMatcher(this.regexIndex);n.lastIndex=this.lastIndex;let t=n.exec(e);if(this.resumingScanAtSamePosition())if(t&&t.index===this.lastIndex);else{const n=this.getMatcher(0);n.lastIndex=this.lastIndex+1,t=n.exec(e)}return t&&(this.regexIndex+=t.position+1,this.regexIndex===this.count&&this.considerAll()),t}}if(e.compilerExtensions||(e.compilerExtensions=[]),e.contains&&e.contains.includes("self"))throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");return e.classNameAliases=i(e.classNameAliases||{}),function t(r,s){const o=r;if(r.isCompiled)return o;[j,K,ne,q].forEach((e=>e(r,s))),e.compilerExtensions.forEach((e=>e(r,s))),r.__beforeBegin=null,[U,P,H].forEach((e=>e(r,s))),r.isCompiled=!0;let l=null;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),l=r.keywords.$pattern,delete r.keywords.$pattern),l=l||/\w+/,r.keywords&&(r.keywords=G(r.keywords,e.case_insensitive)),o.keywordPatternRe=n(l,!0),s&&(r.begin||(r.begin=/\B|\b/),o.beginRe=n(o.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(o.endRe=n(o.end)),o.terminatorEnd=d(o.end)||"",r.endsWithParent&&s.terminatorEnd&&(o.terminatorEnd+=(r.end?"|":"")+s.terminatorEnd)),r.illegal&&(o.illegalRe=n(r.illegal)),r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((function(e){return function(e){e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((function(n){return i(e,{variants:null},n)})));if(e.cachedVariants)return e.cachedVariants;if(ae(e))return i(e,{starts:e.starts?i(e.starts):null});if(Object.isFrozen(e))return i(e);return e}("self"===e?r:e)}))),r.contains.forEach((function(e){t(e,o)})),r.starts&&t(r.starts,s),o.matcher=function(e){const n=new a;return e.contains.forEach((e=>n.addRule(e.begin,{rule:e,type:"begin"}))),e.terminatorEnd&&n.addRule(e.terminatorEnd,{type:"end"}),e.illegal&&n.addRule(e.illegal,{type:"illegal"}),n}(o),o}(e)}function ae(e){return!!e&&(e.endsWithParent||ae(e.starts))}class ie extends Error{constructor(e,n){super(e),this.name="HTMLInjectionError",this.html=n}}const re=a,se=i,oe=Symbol("nomatch"),le=function(e){const a=Object.create(null),i=Object.create(null),r=[];let s=!0;const o="Could not find the language '{}', did you forget to load/include a language module?",l={disableAutodetect:!0,name:"Plain text",contains:[]};let d={ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",cssSelector:"pre code",languages:null,__emitter:c};function f(e){return d.noHighlightRe.test(e)}function h(e,n,t){let a="",i="";"object"==typeof n?(a=e,t=n.ignoreIllegals,i=n.language):(J("10.7.0","highlight(lang, code, ...args) has been deprecated."),J("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),i=e,a=n),void 0===t&&(t=!0);const r={code:a,language:i};O("before:highlight",r);const s=r.result?r.result:_(r.language,r.code,t);return s.code=r.code,O("after:highlight",s),s}function _(e,n,i,r){const l=Object.create(null);function c(){if(!O.keywords)return void M.addText(S);let e=0;O.keywordPatternRe.lastIndex=0;let n=O.keywordPatternRe.exec(S),t="";for(;n;){t+=S.substring(e,n.index);const i=w.case_insensitive?n[0].toLowerCase():n[0],r=(a=i,O.keywords[a]);if(r){const[e,a]=r;if(M.addText(t),t="",l[i]=(l[i]||0)+1,l[i]<=7&&(C+=a),e.startsWith("_"))t+=n[0];else{const t=w.classNameAliases[e]||e;u(n[0],t)}}else t+=n[0];e=O.keywordPatternRe.lastIndex,n=O.keywordPatternRe.exec(S)}var a;t+=S.substring(e),M.addText(t)}function g(){null!=O.subLanguage?function(){if(""===S)return;let e=null;if("string"==typeof O.subLanguage){if(!a[O.subLanguage])return void M.addText(S);e=_(O.subLanguage,S,!0,A[O.subLanguage]),A[O.subLanguage]=e._top}else e=y(S,O.subLanguage.length?O.subLanguage:null);O.relevance>0&&(C+=e.relevance),M.__addSublanguage(e._emitter,e.language)}():c(),S=""}function u(e,n){""!==e&&(M.startScope(n),M.addText(e),M.endScope())}function b(e,n){let t=1;const a=n.length-1;for(;t<=a;){if(!e._emit[t]){t++;continue}const a=w.classNameAliases[e[t]]||e[t],i=n[t];a?u(i,a):(S=i,c(),S=""),t++}}function m(e,n){return e.scope&&"string"==typeof e.scope&&M.openNode(w.classNameAliases[e.scope]||e.scope),e.beginScope&&(e.beginScope._wrap?(u(S,w.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),S=""):e.beginScope._multi&&(b(e.beginScope,n),S="")),O=Object.create(e,{parent:{value:O}}),O}function p(e,n,a){let i=function(e,n){const t=e&&e.exec(n);return t&&0===t.index}(e.endRe,a);if(i){if(e["on:end"]){const a=new t(e);e["on:end"](n,a),a.isMatchIgnored&&(i=!1)}if(i){for(;e.endsParent&&e.parent;)e=e.parent;return e}}if(e.endsWithParent)return p(e.parent,n,a)}function f(e){return 0===O.matcher.regexIndex?(S+=e[0],1):(I=!0,0)}function h(e){const t=e[0],a=n.substring(e.index),i=p(O,e,a);if(!i)return oe;const r=O;O.endScope&&O.endScope._wrap?(g(),u(t,O.endScope._wrap)):O.endScope&&O.endScope._multi?(g(),b(O.endScope,e)):r.skip?S+=t:(r.returnEnd||r.excludeEnd||(S+=t),g(),r.excludeEnd&&(S=t));do{O.scope&&M.closeNode(),O.skip||O.subLanguage||(C+=O.relevance),O=O.parent}while(O!==i.parent);return i.starts&&m(i.starts,e),r.returnEnd?0:t.length}let E={};function v(a,r){const o=r&&r[0];if(S+=a,null==o)return g(),0;if("begin"===E.type&&"end"===r.type&&E.index===r.index&&""===o){if(S+=n.slice(r.index,r.index+1),!s){const n=new Error(`0 width match regex (${e})`);throw n.languageName=e,n.badRule=E.rule,n}return 1}if(E=r,"begin"===r.type)return function(e){const n=e[0],a=e.rule,i=new t(a),r=[a.__beforeBegin,a["on:begin"]];for(const t of r)if(t&&(t(e,i),i.isMatchIgnored))return f(n);return a.skip?S+=n:(a.excludeBegin&&(S+=n),g(),a.returnBegin||a.excludeBegin||(S=n)),m(a,e),a.returnBegin?0:n.length}(r);if("illegal"===r.type&&!i){const e=new Error('Illegal lexeme "'+o+'" for mode "'+(O.scope||"")+'"');throw e.mode=O,e}if("end"===r.type){const e=h(r);if(e!==oe)return e}if("illegal"===r.type&&""===o)return S+="\n",1;if(R>1e5&&R>3*r.index){throw new Error("potential infinite loop, way more iterations than matches")}return S+=o,o.length}const w=k(e);if(!w)throw X(o.replace("{}",e)),new Error('Unknown language: "'+e+'"');const N=te(w);let x="",O=r||N;const A={},M=new d.__emitter(d);!function(){const e=[];for(let n=O;n!==w;n=n.parent)n.scope&&e.unshift(n.scope);e.forEach((e=>M.openNode(e)))}();let S="",C=0,T=0,R=0,I=!1;try{if(w.__emitTokens)w.__emitTokens(n,M);else{for(O.matcher.considerAll();;){R++,I?I=!1:O.matcher.considerAll(),O.matcher.lastIndex=T;const e=O.matcher.exec(n);if(!e)break;const t=v(n.substring(T,e.index),e);T=e.index+t}v(n.substring(T))}return M.finalize(),x=M.toHTML(),{language:e,value:x,relevance:C,illegal:!1,_emitter:M,_top:O}}catch(t){if(t.message&&t.message.includes("Illegal"))return{language:e,value:re(n),illegal:!0,relevance:0,_illegalBy:{message:t.message,index:T,context:n.slice(T-100,T+100),mode:t.mode,resultSoFar:x},_emitter:M};if(s)return{language:e,value:re(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:O};throw t}}function y(e,n){n=n||d.languages||Object.keys(a);const t=function(e){const n={value:re(e),illegal:!1,relevance:0,_top:l,_emitter:new d.__emitter(d)};return n._emitter.addText(e),n}(e),i=n.filter(k).filter(x).map((n=>_(n,e,!1)));i.unshift(t);const r=i.sort(((e,n)=>{if(e.relevance!==n.relevance)return n.relevance-e.relevance;if(e.language&&n.language){if(k(e.language).supersetOf===n.language)return 1;if(k(n.language).supersetOf===e.language)return-1}return 0})),[s,o]=r,c=s;return c.secondBest=o,c}function E(e){let n=null;const t=function(e){let n=e.className+" ";n+=e.parentNode?e.parentNode.className:"";const t=d.languageDetectRe.exec(n);if(t){const n=k(t[1]);return n||(V(o.replace("{}",t[1])),V("Falling back to no-highlight mode for this block.",e)),n?t[1]:"no-highlight"}return n.split(/\s+/).find((e=>f(e)||k(e)))}(e);if(f(t))return;if(O("before:highlightElement",{el:e,language:t}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e);if(e.children.length>0&&(d.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),console.warn("The element with unescaped HTML:"),console.warn(e)),d.throwUnescapedHTML)){throw new ie("One of your code blocks includes unescaped HTML.",e.innerHTML)}n=e;const a=n.textContent,r=t?h(a,{language:t,ignoreIllegals:!0}):y(a);e.innerHTML=r.value,e.dataset.highlighted="yes",function(e,n,t){const a=n&&i[n]||t;e.classList.add("hljs"),e.classList.add(`language-${a}`)}(e,t,r.language),e.result={language:r.language,re:r.relevance,relevance:r.relevance},r.secondBest&&(e.secondBest={language:r.secondBest.language,relevance:r.secondBest.relevance}),O("after:highlightElement",{el:e,result:r,text:a})}let v=!1;function w(){if("loading"===document.readyState)return v||window.addEventListener("DOMContentLoaded",(function(){w()}),!1),void(v=!0);document.querySelectorAll(d.cssSelector).forEach(E)}function k(e){return e=(e||"").toLowerCase(),a[e]||a[i[e]]}function N(e,{languageName:n}){"string"==typeof e&&(e=[e]),e.forEach((e=>{i[e.toLowerCase()]=n}))}function x(e){const n=k(e);return n&&!n.disableAutodetect}function O(e,n){const t=e;r.forEach((function(e){e[t]&&e[t](n)}))}Object.assign(e,{highlight:h,highlightAuto:y,highlightAll:w,highlightElement:E,highlightBlock:function(e){return J("10.7.0","highlightBlock will be removed entirely in v12.0"),J("10.7.0","Please use highlightElement now."),E(e)},configure:function(e){d=se(d,e)},initHighlighting:()=>{w(),J("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},initHighlightingOnLoad:function(){w(),J("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")},registerLanguage:function(n,t){let i=null;try{i=t(e)}catch(e){if(X("Language definition for '{}' could not be registered.".replace("{}",n)),!s)throw e;X(e),i=l}i.name||(i.name=n),a[n]=i,i.rawDefinition=t.bind(null,e),i.aliases&&N(i.aliases,{languageName:n})},unregisterLanguage:function(e){delete a[e];for(const n of Object.keys(i))i[n]===e&&delete i[n]},listLanguages:function(){return Object.keys(a)},getLanguage:k,registerAliases:N,autoDetection:x,inherit:se,addPlugin:function(e){!function(e){e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=n=>{e["before:highlightBlock"](Object.assign({block:n.el},n))}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=n=>{e["after:highlightBlock"](Object.assign({block:n.el},n))})}(e),r.push(e)},removePlugin:function(e){const n=r.indexOf(e);-1!==n&&r.splice(n,1)}}),e.debugMode=function(){s=!1},e.safeMode=function(){s=!0},e.versionString="11.11.1",e.regex={concat:m,lookahead:g,either:p,optional:b,anyNumberOfTimes:u};for(const e in F)"object"==typeof F[e]&&n(F[e]);return Object.assign(e,F),e},ce=le({});ce.newInstance=()=>le({}),e.exports=ce,ce.HighlightJS=ce,ce.default=ce},8596:function(e){e.exports=function(e){const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}},8612:function(e){const n=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],t=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),a=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),r=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();e.exports=function(e){const s=e.regex,o=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}))(e),l=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[o.BLOCK_COMMENT,{begin:/-(webkit|moz|ms|o)-(?=[a-z])/},o.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},o.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+a.join("|")+")"},{begin:":(:)?("+i.join("|")+")"}]},o.CSS_VARIABLE,{className:"attribute",begin:"\\b("+r.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[o.BLOCK_COMMENT,o.HEXCOLOR,o.IMPORTANT,o.CSS_NUMBER_MODE,...l,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...l,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},o.FUNCTION_DISPATCH]},{begin:s.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:"and or not only",attribute:t.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...l,o.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+n.join("|")+")\\b"}]}}},8640:function(e){const n="[A-Za-z$_][0-9A-Za-z$_]*",t=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],a=["true","false","null","undefined","NaN","Infinity"],i=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],r=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],s=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],o=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","global"],l=[].concat(s,i,r);function c(e){const c=e.regex,d=n,g="<>",u="",b={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(e,n)=>{const t=e[0].length+e.index,a=e.input[t];if("<"===a||","===a)return void n.ignoreMatch();let i;">"===a&&(((e,{after:n})=>{const t="`${e}\\s*\\(`)),c.concat("(?!",R.join("|"),")")),d,c.lookahead(/\s*\(/)),className:"title.function",relevance:0};var R;const I={begin:c.concat(/\./,c.lookahead(c.concat(d,/(?![0-9A-Za-z$_(])/))),end:d,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},D={match:[/get|set/,/\s+/,d,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},A]},L="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+e.UNDERSCORE_IDENT_RE+")\\s*=>",B={match:[/const|var|let/,/\s+/,d,/\s*/,/=\s*/,/(async\s*)?/,c.lookahead(L)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[A]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:m,exports:{PARAMS_CONTAINS:O,CLASS_REFERENCE:S},illegal:/#(?![$_A-z])/,contains:[e.SHEBANG({label:"shebang",binary:"node",relevance:5}),{label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,y,E,v,w,k,{match:/\$\d+/},h,S,{scope:"attr",match:d+c.lookahead(":"),relevance:0},B,{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[k,e.REGEXP_MODE,{className:"function",begin:L,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:e.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:m,contains:O}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:g,end:u},{match:/<[A-Za-z0-9\\._:-]+\s*\/>/},{begin:b.begin,"on:begin":b.isTrulyOpeningTag,end:b.end}],subLanguage:"xml",contains:[{begin:b.begin,end:b.end,skip:!0,contains:["self"]}]}]},C,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+e.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[A,e.inherit(e.TITLE_MODE,{begin:d,className:"title.function"})]},{match:/\.\.\./,relevance:0},I,{match:"\\$"+d,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[A]},T,{relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"},M,D,{match:/\$[(.]/}]}}e.exports=function(e){const i=e.regex,r=c(e),s=n,d=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],g={begin:[/namespace/,/\s+/,e.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},u={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:d},contains:[r.exports.CLASS_REFERENCE]},b={$pattern:n,keyword:t.concat(["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"]),literal:a,built_in:l.concat(d),"variable.language":o},m={className:"meta",begin:"@"+s},p=(e,n,t)=>{const a=e.contains.findIndex((e=>e.label===n));if(-1===a)throw new Error("can not find mode to replace");e.contains.splice(a,1,t)};Object.assign(r.keywords,b),r.exports.PARAMS_CONTAINS.push(m);const f=r.contains.find((e=>"attr"===e.scope)),h=Object.assign({},f,{match:i.concat(s,i.lookahead(/\s*\?:/))});return r.exports.PARAMS_CONTAINS.push([r.exports.CLASS_REFERENCE,f,h]),r.contains=r.contains.concat([m,g,u,h]),p(r,"shebang",e.SHEBANG()),p(r,"use_strict",{className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/}),r.contains.find((e=>"func.def"===e.label)).relevance=0,Object.assign(r,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),r}},8641:function(e){e.exports=function(e){const n=e.regex,t={},a={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{className:"variable",variants:[{begin:n.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},a]});const i={className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]},r=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),s={begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,t,i]};i.contains.push(o);const l={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t]},c=e.SHEBANG({binary:`(${["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"].join("|")})`,relevance:10}),d={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],literal:["true","false"],built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"]},contains:[c,e.SHEBANG(),d,l,r,s,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}},8813:function(e){e.exports=function(e){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta.prompt",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}},8928:function(e){e.exports=function(e){const n=e.regex,t=/\d{1,2}\/\d{1,2}\/\d{4}/,a=/\d{4}-\d{1,2}-\d{1,2}/,i=/(\d|1[012])(:\d+){0,2} *(AM|PM)/,r=/\d{1,2}(:\d{1,2}){1,2}/,s={className:"literal",variants:[{begin:n.concat(/# */,n.either(a,t),/ *#/)},{begin:n.concat(/# */,r,/ *#/)},{begin:n.concat(/# */,i,/ *#/)},{begin:n.concat(/# */,n.either(a,t),/ +/,n.either(i,r),/ *#/)}]},o=e.COMMENT(/'''/,/$/,{contains:[{className:"doctag",begin:/<\/?/,end:/>/}]}),l=e.COMMENT(null,/$/,{variants:[{begin:/'/},{begin:/([\t ]|^)REM(?=\s)/}]});return{name:"Visual Basic .NET",aliases:["vb"],case_insensitive:!0,classNameAliases:{label:"symbol"},keywords:{keyword:"addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield",built_in:"addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort",type:"boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort",literal:"true false nothing"},illegal:"//|\\{|\\}|endif|gosub|variant|wend|^\\$ ",contains:[{className:"string",begin:/"(""|[^/n])"C\b/},{className:"string",begin:/"/,end:/"/,illegal:/\n/,contains:[{begin:/""/}]},s,{className:"number",relevance:0,variants:[{begin:/\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/},{begin:/\b\d[\d_]*((U?[SIL])|[%&])?/},{begin:/&H[\dA-F_]+((U?[SIL])|[%&])?/},{begin:/&O[0-7_]+((U?[SIL])|[%&])?/},{begin:/&B[01_]+((U?[SIL])|[%&])?/}]},{className:"label",begin:/^\w+:/},o,l,{className:"meta",begin:/[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/,end:/$/,keywords:{keyword:"const disable else elseif enable end externalsource if region then"},contains:[l]}]}}},9040:function(e){e.exports=function(e){return{name:"Plain text",aliases:["text","txt"],disableAutodetect:!0}}},9351:function(e){e.exports=function(e){e.regex;const n=e.COMMENT(/\(;/,/;\)/);return n.contains.push("self"),{name:"WebAssembly",keywords:{$pattern:/[\w.]+/,keyword:["anyfunc","block","br","br_if","br_table","call","call_indirect","data","drop","elem","else","end","export","func","global.get","global.set","local.get","local.set","local.tee","get_global","get_local","global","if","import","local","loop","memory","memory.grow","memory.size","module","mut","nop","offset","param","result","return","select","set_global","set_local","start","table","tee_local","then","type","unreachable"]},contains:[e.COMMENT(/;;/,/$/),n,{match:[/(?:offset|align)/,/\s*/,/=/],className:{1:"keyword",3:"operator"}},{className:"variable",begin:/\$[\w_]+/},{match:/(\((?!;)|\))+/,className:"punctuation",relevance:0},{begin:[/(?:func|call|call_indirect)/,/\s+/,/\$[^\s)]+/],className:{1:"keyword",3:"title.function"}},e.QUOTE_STRING_MODE,{match:/(i32|i64|f32|f64)(?!\.)/,className:"type"},{className:"keyword",match:/\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/},{className:"number",relevance:0,match:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/}]}}},9777:function(e){e.exports=function(e){const n={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:n,illegal:"code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@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}[type=search]::-webkit-search-cancel-button{cursor:pointer;filter:grayscale(1)}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(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-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}: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-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.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);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{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)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.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-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a5b5cc;--bs-table-striped-bg:#c4d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe5;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000}.table-primary,.table-secondary{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b4b6b7;--bs-table-striped-bg:#d6d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbcdce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000}.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}.table-info,.table-success{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a5c4ca;--bs-table-striped-bg:#c4e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e6c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dab9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece0be;--bs-table-hover-color:#000}.table-danger,.table-warning{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc1c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7c9;--bs-table-hover-color:#000}.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}.table-dark,.table-light{border-color:var(--bs-table-border-color);color:var(--bs-table-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}.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}}.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;border-radius:var(--bs-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item{background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);color:var(--bs-list-group-color);display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);position:relative;text-decoration:none}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--bs-list-group-disabled-bg);color:var(--bs-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color);color:var(--bs-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--bs-list-group-border-width);margin-top:calc(var(--bs-list-group-border-width)*-1)}.list-group-item-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:not(.active):focus,.list-group-item-action:not(.active):hover{background-color:var(--bs-list-group-action-hover-bg);color:var(--bs-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:not(.active):active{background-color:var(--bs-list-group-action-active-bg);color:var(--bs-list-group-action-active-color)}.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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}.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)}.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;color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{color:var(--bs-card-subtitle-color);margin-top:calc(var(--bs-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);margin-bottom:0;padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--bs-card-cap-padding-y)*-1);margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--bs-card-inner-border-radius);bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-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{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-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-bottom-left-radius:0;border-top-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}}body{font-family: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}body.invoice_print{--bs-body-font-size:13px;background-color:#eee}body.invoice_print .table.no-border,body.invoice_print .table.no-border td,body.invoice_print .table.no-border th{border:0}body.invoice_print .h1,body.invoice_print .h2,body.invoice_print .h3,body.invoice_print h1,body.invoice_print h2,body.invoice_print h3{font-family: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}body.invoice_print .mt-2{margin-top:2em}body.invoice_print .mb-3{margin-bottom:3em}body.invoice_print .pt-1{padding-top:1em}body.invoice_print .pb-4{padding-bottom:4em}body.invoice_print .ps-0{padding-left:0}body.invoice_print .bt-1{border-top:1px solid #000}body.invoice_print .pull-right{float:right}body.invoice_print .text-end{text-align:right}body.invoice_print .invoice{background:#fff;border:none;box-shadow:0 0 20px rgba(80,80,80,.7);margin:105px auto 30px;max-width:210mm;min-height:297mm;padding:50px 65px;position:relative}body.invoice_print .page-header{font-size:20px;margin:10px 0 20px}body.invoice_print .page-header>.small,body.invoice_print .page-header>small{display:block;margin-top:5px}body.invoice_print .page-header .h3,body.invoice_print .page-header h3{border-color:#ddd}body.invoice_print div.invoice-address{margin-bottom:30px;margin-top:30px}body.invoice_print table.invoice-meta th{padding-right:40px}body.invoice_print table.invoice-sum th{width:70%}body.invoice_print table.invoice-sum td,body.invoice_print table.invoice-sum th{text-align:right}body.invoice_print .text-left{text-align:left}body.invoice_print .text-right{text-align:right}body.invoice_print .invoice-items .table thead th{border-bottom:1px solid #ddd;font-weight:700;padding-bottom:10px}body.invoice_print .invoice-items .table tfoot{border-top:1px solid #ddd}body.invoice_print .invoice-items .table tfoot tr:first-child td,body.invoice_print .invoice-items .table tfoot tr:first-child th{padding-top:15px}body.invoice_print .invoice-items .table tfoot tr td,body.invoice_print .invoice-items .table tfoot tr th{border:none;padding:4px 8px}body.invoice_print .footer{border-top:1px solid #ccc;font-size:.8em;margin-top:50px;padding-top:10px;width:100%}body.invoice_print #freelancer-invoice{box-sizing:border-box}body.invoice_print #freelancer-invoice .h1,body.invoice_print #freelancer-invoice h1{font:700 100% sans-serif;letter-spacing:.5em;text-align:center;text-transform:uppercase}body.invoice_print #freelancer-invoice .h2,body.invoice_print #freelancer-invoice h2{font:700 1.5em sans-serif;margin-bottom:1em}body.invoice_print #freelancer-invoice table{border-collapse:separate;border-spacing:0;width:100%}body.invoice_print #freelancer-invoice header:after{clear:both;content:"";display:table;font-size:1em}body.invoice_print #freelancer-invoice header address{float:left;font-size:.7em;font-style:normal;line-height:1.25;margin:0 1em 1em 0}body.invoice_print #freelancer-invoice article address{float:left;font-size:1em}body.invoice_print #freelancer-invoice article.address{margin:1em 0 1.5em}body.invoice_print #freelancer-invoice article:after{clear:both;content:"";display:table}body.invoice_print #freelancer-invoice article .h1,body.invoice_print #freelancer-invoice article h1{clip:rect(0 0 0 0);position:absolute}body.invoice_print #freelancer-invoice article p{margin-bottom:20px}body.invoice_print #freelancer-invoice table.balance:after,body.invoice_print #freelancer-invoice table.meta:after{clear:both;content:"";display:table}body.invoice_print #freelancer-invoice table.meta{float:right;font-size:85%;width:50%}body.invoice_print #freelancer-invoice table.meta th{font-weight:400;text-align:right}body.invoice_print #freelancer-invoice table.meta td{text-align:right;width:120px}body.invoice_print #freelancer-invoice table.balance{float:right;margin-top:1em}body.invoice_print #freelancer-invoice table.balance th{font-weight:400;text-align:right}body.invoice_print #freelancer-invoice table.balance td{line-height:22px;text-align:right;width:140px}body.invoice_print #freelancer-invoice table.balance .total{font-weight:700}body.invoice_print #freelancer-invoice table.inventory{border-bottom:1px solid #000;clear:both;margin-top:2em;width:100%}body.invoice_print #freelancer-invoice table.inventory td,body.invoice_print #freelancer-invoice table.inventory th{padding:5px}body.invoice_print #freelancer-invoice table.inventory thead th{border-width:0 0 1px;border-bottom:1px solid #000;font-weight:700;padding-bottom:15px}body.invoice_print #freelancer-invoice table.inventory tbody tr:first-child td{padding-top:15px}body.invoice_print #freelancer-invoice table.inventory tbody tr:last-child td{padding-bottom:15px}body.invoice_print #freelancer-invoice .footer{border-color:#000}@media print{body.invoice_print *{-webkit-print-color-adjust:exact}body.invoice_print .wrapper,body.invoice_print body{background-color:#fff;margin:0;padding:0}body.invoice_print #freelancer-invoice .add,body.invoice_print #freelancer-invoice .cut,body.invoice_print #freelancer-invoice span:empty{display:none}body.invoice_print .invoice{box-shadow:unset;font-size:90%;margin:1em 2em;max-width:unset;min-height:unset;padding:0;position:unset;width:unset}} \ No newline at end of file diff --git a/public/build/invoice.42b319e4.js b/public/build/invoice.42b319e4.js new file mode 100644 index 000000000..581b1dfe2 --- /dev/null +++ b/public/build/invoice.42b319e4.js @@ -0,0 +1 @@ +(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[896],{3631:function(i,n,u){"use strict";u.r(n)},4820:function(i,n,u){u(3631)}},function(i){var n;n=4820,i(i.s=n)}]); \ No newline at end of file diff --git a/public/build/invoice.595f2ed8.css b/public/build/invoice.595f2ed8.css deleted file mode 100644 index bc9dbf2b2..000000000 --- a/public/build/invoice.595f2ed8.css +++ /dev/null @@ -1 +0,0 @@ -*,:after,:before{box-sizing:border-box}@media(prefers-reduced-motion:no-preference){:root{scroll-behavior:smooth}}body{background-color:var(--bs-body-bg);color:var(--bs-body-color);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);margin:0;text-align:var(--bs-body-text-align);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{border:0;border-top:var(--bs-border-width) solid;color:inherit;margin:1rem 0;opacity:.25}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{color:var(--bs-heading-color);font-weight:500;line-height:1.2;margin-bottom:.5rem;margin-top:0}.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-bottom:1rem;margin-top:0}abbr[title]{cursor:help;text-decoration:underline dotted;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit;margin-bottom:1rem}ol,ul{padding-left:2rem}dl,ol,ul{margin-bottom:1rem;margin-top:0}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{background-color:var(--bs-highlight-bg);color:var(--bs-highlight-color);padding:.1875em}sub,sup{font-size:.75em;line-height:0;position:relative;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;font-size:.875em;margin-bottom:1rem;margin-top:0;overflow:auto}pre code{color:inherit;font-size:inherit;word-break:normal}code{color:var(--bs-code-color);font-size:.875em;word-wrap:break-word}a>code{color:inherit}kbd{background-color:var(--bs-body-color);border-radius:.25rem;color:var(--bs-body-bg);font-size:.875em;padding:.1875rem .375rem}kbd kbd{font-size:1em;padding:0}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{border-collapse:collapse;caption-side:bottom}caption{color:var(--bs-secondary-color);padding-bottom:.5rem;padding-top:.5rem;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}tbody,td,tfoot,th,thead,tr{border:0 solid;border-color:inherit}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}button,input,optgroup,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit;margin:0}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none!important}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}::-moz-focus-inner{border-style:none;padding:0}textarea{resize:vertical}fieldset{border:0;margin:0;min-width:0;padding:0}legend{float:left;font-size:calc(1.275rem + .3vw);line-height:inherit;margin-bottom:.5rem;padding:0;width:100%}@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}::file-selector-button{-webkit-appearance:button;font:inherit}output{display:inline-block}iframe{border:0}summary{cursor:pointer;display:list-item}progress{vertical-align:baseline}[hidden]{display:none!important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(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-inline,.list-unstyled{list-style:none;padding-left:0}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{font-size:1.25rem;margin-bottom:1rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{color:#6c757d;font-size:.875em;margin-bottom:1rem;margin-top:-1rem}.blockquote-footer:before{content:"— "}: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-left:calc(var(--bs-gutter-x)*-.5);margin-right:calc(var(--bs-gutter-x)*-.5);margin-top:calc(var(--bs-gutter-y)*-1)}.row>*{flex-shrink:0;margin-top:var(--bs-gutter-y);max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);width:100%}.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);border-color:var(--bs-table-border-color);margin-bottom:1rem;vertical-align:top;width:100%}.table>:not(caption)>*>*{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)));color:var(--bs-table-color-state,var(--bs-table-color-type,var(--bs-table-color)));padding:.5rem}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(var(--bs-border-width)*2) solid}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem}.table-bordered>:not(caption)>*{border-width:var(--bs-border-width) 0}.table-bordered>:not(caption)>*>*{border-width:0 var(--bs-border-width)}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped-columns>:not(caption)>tr>:nth-child(2n),.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-active{--bs-table-color-state:var(--bs-table-active-color);--bs-table-bg-state:var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state:var(--bs-table-hover-color);--bs-table-bg-state:var(--bs-table-hover-bg)}.table-primary{--bs-table-color:#000;--bs-table-bg:#cfe2ff;--bs-table-border-color:#a5b5cc;--bs-table-striped-bg:#c4d7f2;--bs-table-striped-color:#000;--bs-table-active-bg:#bacbe5;--bs-table-active-color:#000;--bs-table-hover-bg:#bfd1ec;--bs-table-hover-color:#000}.table-primary,.table-secondary{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-secondary{--bs-table-color:#000;--bs-table-bg:#e2e3e5;--bs-table-border-color:#b4b6b7;--bs-table-striped-bg:#d6d8da;--bs-table-striped-color:#000;--bs-table-active-bg:#cbcdce;--bs-table-active-color:#000;--bs-table-hover-bg:#d1d2d4;--bs-table-hover-color:#000}.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}.table-info,.table-success{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-info{--bs-table-color:#000;--bs-table-bg:#cff4fc;--bs-table-border-color:#a5c4ca;--bs-table-striped-bg:#c4e8ef;--bs-table-striped-color:#000;--bs-table-active-bg:#badce3;--bs-table-active-color:#000;--bs-table-hover-bg:#bfe2e9;--bs-table-hover-color:#000}.table-warning{--bs-table-color:#000;--bs-table-bg:#fff3cd;--bs-table-border-color:#ccc2a4;--bs-table-striped-bg:#f2e6c3;--bs-table-striped-color:#000;--bs-table-active-bg:#e6dab9;--bs-table-active-color:#000;--bs-table-hover-bg:#ece0be;--bs-table-hover-color:#000}.table-danger,.table-warning{border-color:var(--bs-table-border-color);color:var(--bs-table-color)}.table-danger{--bs-table-color:#000;--bs-table-bg:#f8d7da;--bs-table-border-color:#c6acae;--bs-table-striped-bg:#eccccf;--bs-table-striped-color:#000;--bs-table-active-bg:#dfc1c4;--bs-table-active-color:#000;--bs-table-hover-bg:#e5c7c9;--bs-table-hover-color:#000}.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}.table-dark,.table-light{border-color:var(--bs-table-border-color);color:var(--bs-table-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}.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}}.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;border-radius:var(--bs-list-group-border-radius);display:flex;flex-direction:column;margin-bottom:0;padding-left:0}.list-group-numbered{counter-reset:section;list-style-type:none}.list-group-numbered>.list-group-item:before{content:counters(section,".") ". ";counter-increment:section}.list-group-item-action{color:var(--bs-list-group-action-color);text-align:inherit;width:100%}.list-group-item-action:focus,.list-group-item-action:hover{background-color:var(--bs-list-group-action-hover-bg);color:var(--bs-list-group-action-hover-color);text-decoration:none;z-index:1}.list-group-item-action:active{background-color:var(--bs-list-group-action-active-bg);color:var(--bs-list-group-action-active-color)}.list-group-item{background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);color:var(--bs-list-group-color);display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);position:relative;text-decoration:none}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{background-color:var(--bs-list-group-disabled-bg);color:var(--bs-list-group-disabled-color);pointer-events:none}.list-group-item.active{background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color);color:var(--bs-list-group-active-color);z-index:2}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{border-top-width:var(--bs-list-group-border-width);margin-top:calc(var(--bs-list-group-border-width)*-1)}.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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-md>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}@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-bottom-left-radius:0;border-top-right-radius:var(--bs-list-group-border-radius)}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-left-width:0;border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{border-left-width:var(--bs-list-group-border-width);margin-left:calc(var(--bs-list-group-border-width)*-1)}}.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)}.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;color:var(--bs-body-color);display:flex;flex-direction:column;height:var(--bs-card-height);min-width:0;position:relative;word-wrap:break-word;background-clip:border-box;background-color:var(--bs-card-bg);border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-bottom:inherit;border-top:inherit}.card>.list-group:first-child{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius);border-top-width:0}.card>.list-group:last-child{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{color:var(--bs-card-color);flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x)}.card-title{color:var(--bs-card-title-color);margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{color:var(--bs-card-subtitle-color);margin-top:calc(var(--bs-card-title-spacer-y)*-.5)}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);margin-bottom:0;padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color);color:var(--bs-card-cap-color);padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{border-bottom:0;margin-bottom:calc(var(--bs-card-cap-padding-y)*-1);margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-left:calc(var(--bs-card-cap-padding-x)*-.5);margin-right:calc(var(--bs-card-cap-padding-x)*-.5)}.card-img-overlay{border-radius:var(--bs-card-inner-border-radius);bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);position:absolute;right:0;top:0}.card-img,.card-img-bottom,.card-img-top{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-left-radius:var(--bs-card-inner-border-radius);border-bottom-right-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{border-left:0;margin-left:0}.card-group>.card:not(:last-child){border-bottom-right-radius:0;border-top-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-bottom-left-radius:0;border-top-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}}body{font-family: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}body.invoice_print{--bs-body-font-size:13px;background-color:#eee}body.invoice_print .table.no-border,body.invoice_print .table.no-border td,body.invoice_print .table.no-border th{border:0}body.invoice_print .h1,body.invoice_print .h2,body.invoice_print .h3,body.invoice_print h1,body.invoice_print h2,body.invoice_print h3{font-family: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}body.invoice_print .mt-2{margin-top:2em}body.invoice_print .mb-3{margin-bottom:3em}body.invoice_print .pt-1{padding-top:1em}body.invoice_print .pb-4{padding-bottom:4em}body.invoice_print .ps-0{padding-left:0}body.invoice_print .bt-1{border-top:1px solid #000}body.invoice_print .pull-right{float:right}body.invoice_print .text-end{text-align:right}body.invoice_print .invoice{background:#fff;border:none;box-shadow:0 0 20px rgba(80,80,80,.7);margin:105px auto 30px;max-width:210mm;min-height:297mm;padding:50px 65px;position:relative}body.invoice_print .page-header{font-size:20px;margin:10px 0 20px}body.invoice_print .page-header>.small,body.invoice_print .page-header>small{display:block;margin-top:5px}body.invoice_print .page-header .h3,body.invoice_print .page-header h3{border-color:#ddd}body.invoice_print div.invoice-address{margin-bottom:30px;margin-top:30px}body.invoice_print table.invoice-meta th{padding-right:40px}body.invoice_print table.invoice-sum th{width:70%}body.invoice_print table.invoice-sum td,body.invoice_print table.invoice-sum th{text-align:right}body.invoice_print .text-left{text-align:left}body.invoice_print .text-right{text-align:right}body.invoice_print .invoice-items .table thead th{border-bottom:1px solid #ddd;font-weight:700;padding-bottom:10px}body.invoice_print .invoice-items .table tfoot{border-top:1px solid #ddd}body.invoice_print .invoice-items .table tfoot tr:first-child td,body.invoice_print .invoice-items .table tfoot tr:first-child th{padding-top:15px}body.invoice_print .invoice-items .table tfoot tr td,body.invoice_print .invoice-items .table tfoot tr th{border:none;padding:4px 8px}body.invoice_print .footer{border-top:1px solid #ccc;font-size:.8em;margin-top:50px;padding-top:10px;width:100%}body.invoice_print #freelancer-invoice{box-sizing:border-box}body.invoice_print #freelancer-invoice .h1,body.invoice_print #freelancer-invoice h1{font:700 100% sans-serif;letter-spacing:.5em;text-align:center;text-transform:uppercase}body.invoice_print #freelancer-invoice .h2,body.invoice_print #freelancer-invoice h2{font:700 1.5em sans-serif;margin-bottom:1em}body.invoice_print #freelancer-invoice table{border-collapse:separate;border-spacing:0;width:100%}body.invoice_print #freelancer-invoice header:after{clear:both;content:"";display:table;font-size:1em}body.invoice_print #freelancer-invoice header address{float:left;font-size:.7em;font-style:normal;line-height:1.25;margin:0 1em 1em 0}body.invoice_print #freelancer-invoice article address{float:left;font-size:1em}body.invoice_print #freelancer-invoice article.address{margin:1em 0 1.5em}body.invoice_print #freelancer-invoice article:after{clear:both;content:"";display:table}body.invoice_print #freelancer-invoice article .h1,body.invoice_print #freelancer-invoice article h1{clip:rect(0 0 0 0);position:absolute}body.invoice_print #freelancer-invoice article p{margin-bottom:20px}body.invoice_print #freelancer-invoice table.balance:after,body.invoice_print #freelancer-invoice table.meta:after{clear:both;content:"";display:table}body.invoice_print #freelancer-invoice table.meta{float:right;font-size:85%;width:50%}body.invoice_print #freelancer-invoice table.meta th{font-weight:400;text-align:right}body.invoice_print #freelancer-invoice table.meta td{text-align:right;width:120px}body.invoice_print #freelancer-invoice table.balance{float:right;margin-top:1em}body.invoice_print #freelancer-invoice table.balance th{font-weight:400;text-align:right}body.invoice_print #freelancer-invoice table.balance td{line-height:22px;text-align:right;width:140px}body.invoice_print #freelancer-invoice table.balance .total{font-weight:700}body.invoice_print #freelancer-invoice table.inventory{border-bottom:1px solid #000;clear:both;margin-top:2em;width:100%}body.invoice_print #freelancer-invoice table.inventory td,body.invoice_print #freelancer-invoice table.inventory th{padding:5px}body.invoice_print #freelancer-invoice table.inventory thead th{border-width:0 0 1px;border-bottom:1px solid #000;font-weight:700;padding-bottom:15px}body.invoice_print #freelancer-invoice table.inventory tbody tr:first-child td{padding-top:15px}body.invoice_print #freelancer-invoice table.inventory tbody tr:last-child td{padding-bottom:15px}body.invoice_print #freelancer-invoice .footer{border-color:#000}@media print{body.invoice_print *{-webkit-print-color-adjust:exact}body.invoice_print .wrapper,body.invoice_print body{background-color:#fff;margin:0;padding:0}body.invoice_print #freelancer-invoice .add,body.invoice_print #freelancer-invoice .cut,body.invoice_print #freelancer-invoice span:empty{display:none}body.invoice_print .invoice{box-shadow:unset;font-size:90%;margin:1em 2em;max-width:unset;min-height:unset;padding:0;position:unset;width:unset}} \ No newline at end of file diff --git a/public/build/invoice.773af9c4.js b/public/build/invoice.773af9c4.js deleted file mode 100644 index eadea038b..000000000 --- a/public/build/invoice.773af9c4.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkkimai=self.webpackChunkkimai||[]).push([[896],{4820:function(i,n,u){u(3631)},3631:function(i,n,u){"use strict";u.r(n)}},function(i){var n;n=4820,i(i.s=n)}]); \ No newline at end of file diff --git a/public/build/manifest.json b/public/build/manifest.json index 35d62908c..5bada38e5 100644 --- a/public/build/manifest.json +++ b/public/build/manifest.json @@ -1,22 +1,26 @@ { - "build/app.css": "/build/app.079f3158.css", - "build/app.js": "/build/app.1bb6240b.js", - "build/app-rtl.css": "/build/app-rtl.f2a83683.css", - "build/app-rtl.js": "/build/app-rtl.7a875ca7.js", + "build/app.css": "/build/app.c18ba3c6.css", + "build/app.js": "/build/app.9662939e.js", + "build/app-rtl.css": "/build/app-rtl.2003dce5.css", + "build/app-rtl.js": "/build/app-rtl.15853b82.js", "build/export-pdf.css": "/build/export-pdf.d8a6c23b.css", "build/export-pdf.js": "/build/export-pdf.395749ab.js", - "build/invoice.css": "/build/invoice.595f2ed8.css", - "build/invoice.js": "/build/invoice.773af9c4.js", + "build/invoice.css": "/build/invoice.36018785.css", + "build/invoice.js": "/build/invoice.42b319e4.js", "build/invoice-pdf.css": "/build/invoice-pdf.2b749265.css", "build/invoice-pdf.js": "/build/invoice-pdf.26d98626.js", - "build/chart.js": "/build/chart.62631acc.js", + "build/chart.js": "/build/chart.bafa38e7.js", "build/calendar.css": "/build/calendar.d757753e.css", - "build/calendar.js": "/build/calendar.7415ab21.js", - "build/runtime.js": "/build/runtime.1440a7f0.js", - "build/fonts/fa-solid-900.ttf": "/build/fonts/fa-solid-900.ad1782c7.ttf", - "build/fonts/fa-brands-400.ttf": "/build/fonts/fa-brands-400.26b80c88.ttf", - "build/fonts/fa-solid-900.woff2": "/build/fonts/fa-solid-900.83a538a0.woff2", - "build/fonts/fa-brands-400.woff2": "/build/fonts/fa-brands-400.fdbb5585.woff2", - "build/fonts/fa-regular-400.ttf": "/build/fonts/fa-regular-400.05fdd87b.ttf", - "build/fonts/fa-regular-400.woff2": "/build/fonts/fa-regular-400.4f6a2dab.woff2" + "build/calendar.js": "/build/calendar.b2d70caa.js", + "build/dashboard.css": "/build/dashboard.b7129fa1.css", + "build/dashboard.js": "/build/dashboard.6ce7ac9c.js", + "build/highlight.css": "/build/highlight.98bf3927.css", + "build/highlight.js": "/build/highlight.13d5d50e.js", + "build/runtime.js": "/build/runtime.6c399d29.js", + "build/fonts/fa-solid-900.ttf": "/build/fonts/fa-solid-900.2582b0e4.ttf", + "build/fonts/fa-brands-400.ttf": "/build/fonts/fa-brands-400.1815e004.ttf", + "build/fonts/fa-solid-900.woff2": "/build/fonts/fa-solid-900.2463b90d.woff2", + "build/fonts/fa-brands-400.woff2": "/build/fonts/fa-brands-400.c210719e.woff2", + "build/fonts/fa-regular-400.ttf": "/build/fonts/fa-regular-400.914997e1.ttf", + "build/fonts/fa-regular-400.woff2": "/build/fonts/fa-regular-400.89999bdf.woff2" } \ No newline at end of file diff --git a/public/manifest.json b/public/manifest.json index dae53dbae..f7faaa0cf 100644 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,5 +1,5 @@ { - "name": "Kimai Time-Tracker", + "name": "Kimai", "short_name": "Kimai", "icons": [ { diff --git a/src/API/ActionsController.php b/src/API/ActionsController.php index 21cedde3f..3000f91e6 100644 --- a/src/API/ActionsController.php +++ b/src/API/ActionsController.php @@ -38,8 +38,6 @@ final class ActionsController extends BaseApiController } /** - * @param PageActionsEvent $event - * @param string $locale * @return array */ private function convertEvent(PageActionsEvent $event, string $locale): array @@ -65,12 +63,13 @@ final class ActionsController extends BaseApiController } /** - * Get all item actions for the given Timesheet [for internal use] + * Fetch item actions for Timesheet */ #[OA\Response(response: 200, description: 'Returns item actions for the timesheet', content: new OA\JsonContent(ref: new Model(type: PageAction::class)))] #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to fetch', required: true)] #[OA\Parameter(name: 'view', in: 'path', description: 'View to display the actions at (e.g. index, custom)', required: true)] #[OA\Parameter(name: 'locale', in: 'path', description: 'Language to translate the action title to (e.g. de, en)', required: true)] + #[OA\Get(x: ['internal' => true])] #[Route(methods: ['GET'], path: '/timesheet/{id}/{view}/{locale}', name: 'get_timesheet_actions', requirements: ['id' => '\d+'])] public function getTimesheetActions(Timesheet $timesheet, string $view, string $locale): Response { @@ -83,12 +82,13 @@ final class ActionsController extends BaseApiController } /** - * Get all item actions for the given Activity [for internal use] + * Fetch item actions for Activity */ #[OA\Response(response: 200, description: 'Returns item actions for the activity', content: new OA\JsonContent(ref: new Model(type: PageAction::class)))] #[OA\Parameter(name: 'id', in: 'path', description: 'Activity ID to fetch', required: true)] #[OA\Parameter(name: 'view', in: 'path', description: 'View to display the actions at (e.g. index, custom)', required: true)] #[OA\Parameter(name: 'locale', in: 'path', description: 'Language to translate the action title to (e.g. de, en)', required: true)] + #[OA\Get(x: ['internal' => true])] #[Route(methods: ['GET'], path: '/activity/{id}/{view}/{locale}', name: 'get_activity_actions', requirements: ['id' => '\d+'])] public function getActivityActions(Activity $activity, string $view, string $locale): Response { @@ -101,12 +101,13 @@ final class ActionsController extends BaseApiController } /** - * Get all item actions for the given Project [for internal use] + * Fetch item actions for Project */ #[OA\Response(response: 200, description: 'Returns item actions for the project', content: new OA\JsonContent(ref: new Model(type: PageAction::class)))] #[OA\Parameter(name: 'id', in: 'path', description: 'Project ID to fetch', required: true)] #[OA\Parameter(name: 'view', in: 'path', description: 'View to display the actions at (e.g. index, custom)', required: true)] #[OA\Parameter(name: 'locale', in: 'path', description: 'Language to translate the action title to (e.g. de, en)', required: true)] + #[OA\Get(x: ['internal' => true])] #[Route(methods: ['GET'], path: '/project/{id}/{view}/{locale}', name: 'get_project_actions', requirements: ['id' => '\d+'])] public function getProjectActions(Project $project, string $view, string $locale): Response { @@ -119,12 +120,13 @@ final class ActionsController extends BaseApiController } /** - * Get all item actions for the given Customer [for internal use] + * Fetch item actions for Customer */ #[OA\Response(response: 200, description: 'Returns item actions for the customer', content: new OA\JsonContent(ref: new Model(type: PageAction::class)))] #[OA\Parameter(name: 'id', in: 'path', description: 'Customer ID to fetch', required: true)] #[OA\Parameter(name: 'view', in: 'path', description: 'View to display the actions at (e.g. index, custom)', required: true)] #[OA\Parameter(name: 'locale', in: 'path', description: 'Language to translate the action title to (e.g. de, en)', required: true)] + #[OA\Get(x: ['internal' => true])] #[Route(methods: ['GET'], path: '/customer/{id}/{view}/{locale}', name: 'get_customer_actions', requirements: ['id' => '\d+'])] public function getCustomerActions(Customer $customer, string $view, string $locale): Response { diff --git a/src/API/ActivityController.php b/src/API/ActivityController.php index 37057fafe..b3a565f13 100644 --- a/src/API/ActivityController.php +++ b/src/API/ActivityController.php @@ -12,8 +12,6 @@ namespace App\API; use App\Activity\ActivityService; use App\Entity\Activity; use App\Entity\ActivityRate; -use App\Entity\User; -use App\Event\ActivityMetaDefinitionEvent; use App\Form\API\ActivityApiEditForm; use App\Form\API\ActivityRateApiForm; use App\Repository\ActivityRateRepository; @@ -26,7 +24,6 @@ use FOS\RestBundle\Request\ParamFetcherInterface; use FOS\RestBundle\View\View; use FOS\RestBundle\View\ViewHandlerInterface; use OpenApi\Attributes as OA; -use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -39,21 +36,19 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; final class ActivityController extends BaseApiController { public const GROUPS_ENTITY = ['Default', 'Entity', 'Activity', 'Activity_Entity']; - public const GROUPS_FORM = ['Default', 'Entity', 'Activity']; public const GROUPS_COLLECTION = ['Default', 'Collection', 'Activity']; public const GROUPS_RATE = ['Default', 'Entity', 'Activity_Rate']; public function __construct( private readonly ViewHandlerInterface $viewHandler, private readonly ActivityRepository $repository, - private readonly EventDispatcherInterface $dispatcher, private readonly ActivityRateRepository $activityRateRepository, private readonly ActivityService $activityService ) { } /** - * Returns a collection of activities (which are visible to the user) + * Fetch activities */ #[OA\Response(response: 200, description: 'Returns a collection of activities', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/ActivityCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_activities')] @@ -63,25 +58,12 @@ final class ActivityController extends BaseApiController #[Rest\QueryParam(name: 'globals', requirements: '0|1|true|false', strict: true, nullable: true, description: 'Use if you want to fetch only global activities. Allowed values: 0|1 (default: 0 for false)')] #[Rest\QueryParam(name: 'orderBy', requirements: 'id|name|project', strict: true, nullable: true, description: 'The field by which results will be ordered. Allowed values: id, name, project (default: name)')] #[Rest\QueryParam(name: 'order', requirements: 'ASC|DESC', strict: true, nullable: true, description: 'The result order. Allowed values: ASC, DESC (default: ASC)')] - #[Rest\QueryParam(name: 'term', description: 'Free search term')] + #[Rest\QueryParam(name: 'term', description: 'Free search term', nullable: true)] public function cgetAction(ParamFetcherInterface $paramFetcher, ProjectRepository $projectRepository): Response { - /** @var User $user */ - $user = $this->getUser(); - $query = new ActivityQuery(); $query->loadTeams(); - $query->setCurrentUser($user); - - $order = $paramFetcher->get('order'); - if (\is_string($order) && $order !== '') { - $query->setOrder($order); - } - - $orderBy = $paramFetcher->get('orderBy'); - if (\is_string($orderBy) && $orderBy !== '') { - $query->setOrderBy($orderBy); - } + $this->prepareQuery($query, $paramFetcher); $globals = $paramFetcher->get('globals'); if (\is_string($globals) && ($globals === 'true' || $globals === '1')) { @@ -104,7 +86,7 @@ final class ActivityController extends BaseApiController } $visible = $paramFetcher->get('visible'); - if (\is_string($visible) && $visible !== '') { + if (is_numeric($visible)) { $query->setVisibility((int) $visible); } @@ -113,7 +95,6 @@ final class ActivityController extends BaseApiController $query->setSearchTerm(new SearchTerm($term)); } - $query->setIsApiCall(true); $data = $this->repository->getActivitiesForQuery($query); $view = new View($data, 200); $view->getContext()->setGroups(self::GROUPS_COLLECTION); @@ -122,7 +103,7 @@ final class ActivityController extends BaseApiController } /** - * Returns one activity + * Fetch activity */ #[OA\Response(response: 200, description: 'Returns one activity entity', content: new OA\JsonContent(ref: '#/components/schemas/ActivityEntity'))] #[OA\Parameter(name: 'id', in: 'path', description: 'Activity ID to fetch', required: true)] @@ -137,7 +118,7 @@ final class ActivityController extends BaseApiController } /** - * Creates a new activity + * Create activity */ #[OA\Post(description: 'Creates a new activity and returns it afterwards', responses: [new OA\Response(response: 200, description: 'Returns the new created activity', content: new OA\JsonContent(ref: '#/components/schemas/ActivityEntity'))])] #[OA\RequestBody(required: true, content: new OA\JsonContent(ref: '#/components/schemas/ActivityEditForm'))] @@ -148,10 +129,7 @@ final class ActivityController extends BaseApiController throw $this->createAccessDeniedException('User cannot create activities'); } - $activity = new Activity(); - - $event = new ActivityMetaDefinitionEvent($activity); - $this->dispatcher->dispatch($event); + $activity = $this->activityService->createNewActivity(); $form = $this->createForm(ActivityApiEditForm::class, $activity, [ 'include_budget' => $this->isGranted('budget', $activity), @@ -161,7 +139,7 @@ final class ActivityController extends BaseApiController $form->submit($request->request->all()); if ($form->isValid()) { - $this->repository->saveActivity($activity); + $this->activityService->saveActivity($activity); $view = new View($activity, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -170,13 +148,13 @@ final class ActivityController extends BaseApiController } $view = new View($form); - $view->getContext()->setGroups(self::GROUPS_FORM); + $view->getContext()->setGroups(self::GROUPS_ENTITY); return $this->viewHandler->handle($view); } /** - * Update an existing activity + * Update activity */ #[IsGranted('edit', 'activity')] #[OA\Patch(description: 'Update an existing activity, you can pass all or just a subset of all attributes', responses: [new OA\Response(response: 200, description: 'Returns the updated activity', content: new OA\JsonContent(ref: '#/components/schemas/ActivityEntity'))])] @@ -185,8 +163,7 @@ final class ActivityController extends BaseApiController #[Route(methods: ['PATCH'], path: '/{id}', name: 'patch_activity', requirements: ['id' => '\d+'])] public function patchAction(Request $request, Activity $activity): Response { - $event = new ActivityMetaDefinitionEvent($activity); - $this->dispatcher->dispatch($event); + $this->activityService->loadMetaFields($activity); $form = $this->createForm(ActivityApiEditForm::class, $activity, [ 'include_budget' => $this->isGranted('budget', $activity), @@ -198,12 +175,12 @@ final class ActivityController extends BaseApiController if (false === $form->isValid()) { $view = new View($form, Response::HTTP_OK); - $view->getContext()->setGroups(self::GROUPS_FORM); + $view->getContext()->setGroups(self::GROUPS_ENTITY); return $this->viewHandler->handle($view); } - $this->repository->saveActivity($activity); + $this->activityService->saveActivity($activity); $view = new View($activity, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -212,10 +189,10 @@ final class ActivityController extends BaseApiController } /** - * Delete an existing activity + * Delete activity * * [DANGER] This will also delete ALL linked timesheets. - * Maybe use `PATCH` instead and mark it as inactive with `visible=false`? + * Do you want to use `PATCH` instead and mark it as inactive with `{visible: false}` instead? */ #[IsGranted('delete', 'activity')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one activity')])] @@ -231,7 +208,7 @@ final class ActivityController extends BaseApiController } /** - * Sets the value of a meta-field for an existing activity + * Update activity custom-field */ #[IsGranted('edit', 'activity')] #[OA\Response(response: 200, description: 'Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.', content: new OA\JsonContent(ref: '#/components/schemas/ActivityEntity'))] @@ -241,8 +218,7 @@ final class ActivityController extends BaseApiController #[Rest\RequestParam(name: 'value', strict: true, nullable: false, description: 'The meta-field value')] public function metaAction(Activity $activity, ParamFetcherInterface $paramFetcher): Response { - $event = new ActivityMetaDefinitionEvent($activity); - $this->dispatcher->dispatch($event); + $this->activityService->loadMetaFields($activity); $name = $paramFetcher->get('name'); $value = $paramFetcher->get('value'); @@ -253,7 +229,7 @@ final class ActivityController extends BaseApiController $meta->setValue($value); - $this->repository->saveActivity($activity); + $this->activityService->saveActivity($activity); $view = new View($activity, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -262,7 +238,7 @@ final class ActivityController extends BaseApiController } /** - * Returns a collection of all rates for one activity + * Fetch rates for activity */ #[IsGranted('edit', 'activity')] #[OA\Response(response: 200, description: 'Returns a collection of activity rate entities', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/ActivityRate')))] @@ -279,7 +255,7 @@ final class ActivityController extends BaseApiController } /** - * Deletes one rate for an activity + * Delete rate for activity */ #[IsGranted('edit', 'activity')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Returns no content: 204 on successful delete')])] @@ -300,7 +276,7 @@ final class ActivityController extends BaseApiController } /** - * Adds a new rate to an activity + * Add rate for activity */ #[IsGranted('edit', 'activity')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Returns the new created rate', content: new OA\JsonContent(ref: '#/components/schemas/ActivityRate'))])] diff --git a/src/API/Authentication/ApiTokenUpgradeBadge.php b/src/API/Authentication/ApiTokenUpgradeBadge.php index ec6bcf298..6af0e2381 100644 --- a/src/API/Authentication/ApiTokenUpgradeBadge.php +++ b/src/API/Authentication/ApiTokenUpgradeBadge.php @@ -9,18 +9,13 @@ namespace App\API\Authentication; -use App\Entity\User; use Symfony\Component\Security\Core\Exception\LogicException; use Symfony\Component\Security\Core\User\PasswordUpgraderInterface; use Symfony\Component\Security\Http\Authenticator\Passport\Badge\BadgeInterface; final class ApiTokenUpgradeBadge implements BadgeInterface { - /** - * @param string|null $plaintextApiToken - * @param PasswordUpgraderInterface $passwordUpgrader - */ - public function __construct(private ?string $plaintextApiToken, private PasswordUpgraderInterface $passwordUpgrader) + public function __construct(private ?string $plaintextApiToken, private readonly PasswordUpgraderInterface $passwordUpgrader) { } @@ -36,9 +31,6 @@ final class ApiTokenUpgradeBadge implements BadgeInterface return $password; } - /** - * @return PasswordUpgraderInterface - */ public function getPasswordUpgrader(): PasswordUpgraderInterface { return $this->passwordUpgrader; diff --git a/src/API/BaseApiController.php b/src/API/BaseApiController.php index ab57f2b0d..cc12c4711 100644 --- a/src/API/BaseApiController.php +++ b/src/API/BaseApiController.php @@ -12,23 +12,29 @@ namespace App\API; use App\Entity\User; use App\Repository\Query\BaseQuery; use App\Timesheet\DateTimeFactory; -use App\Utils\Pagination; use FOS\RestBundle\Request\ParamFetcherInterface; -use FOS\RestBundle\View\View; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\Form\Extension\Core\Type\DateTimeType; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormTypeInterface; -/** - * @method null|User getUser() - */ abstract class BaseApiController extends AbstractController { + public const MAX_PAGE_SIZE = 500; public const DATE_ONLY_FORMAT = 'yyyy-MM-dd'; public const DATE_FORMAT = DateTimeType::HTML5_FORMAT; public const DATE_FORMAT_PHP = 'Y-m-d\TH:i:s'; + protected function getUser(): User + { + $user = parent::getUser(); + if (!$user instanceof User) { + throw $this->createAccessDeniedException('Need a user for API access'); + } + + return $user; + } + /** * @template TFormType of FormTypeInterface * @template TData of BaseQuery @@ -53,13 +59,19 @@ abstract class BaseApiController extends AbstractController return DateTimeFactory::createByUser($user); } - protected function prepareQuery(BaseQuery $query, ParamFetcherInterface $paramFetcher): void + /** + * @template T of BaseQuery + * @param T $query + * @param ParamFetcherInterface $paramFetcher + * @return T + */ + protected function prepareQuery(BaseQuery $query, ParamFetcherInterface $paramFetcher): BaseQuery { $query->setIsApiCall(true); $query->setCurrentUser($this->getUser()); // there is no function has() in ParamFetcherInterface, so we need to use all() and check for the key - $all = $paramFetcher->all(true); + $all = $paramFetcher->all(); if (\array_key_exists('page', $all)) { $page = $all['page']; @@ -71,33 +83,31 @@ abstract class BaseApiController extends AbstractController if (\array_key_exists('size', $all)) { $size = $all['size']; if (is_numeric($size)) { - $query->setPageSize((int) $size); + $size = (int) $size; + if ($size < 1) { + $size = BaseQuery::DEFAULT_PAGESIZE; + } + if ($size > self::MAX_PAGE_SIZE) { + $size = self::MAX_PAGE_SIZE; + } + $query->setPageSize($size); } } - if (\array_key_exists('pageSize', $all)) { - $size = $all['pageSize']; - if (is_numeric($size)) { - $query->setPageSize((int) $size); + if (\array_key_exists('order', $all)) { + $order = $all['order']; + if (\is_string($order) && $order !== '') { + $query->setOrder($order); } } - } - protected function createPaginatedView(Pagination $pagination): View - { - $results = (array) $pagination->getCurrentPageResults(); + if (\array_key_exists('orderBy', $all)) { + $orderBy = $all['orderBy']; + if (\is_string($orderBy) && $orderBy !== '') { + $query->setOrderBy($orderBy); + } + } - $view = new View($results, 200); - $this->addPagination($view, $pagination); - - return $view; - } - - protected function addPagination(View $view, Pagination $pagination): void - { - $view->setHeader('X-Page', (string) $pagination->getCurrentPage()); - $view->setHeader('X-Total-Count', (string) $pagination->getNbResults()); - $view->setHeader('X-Total-Pages', (string) $pagination->getNbPages()); - $view->setHeader('X-Per-Page', (string) $pagination->getMaxPerPage()); + return $query; } } diff --git a/src/API/ConfigurationController.php b/src/API/ConfigurationController.php index a77a1b204..57205c649 100644 --- a/src/API/ConfigurationController.php +++ b/src/API/ConfigurationController.php @@ -23,16 +23,12 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[OA\Tag(name: 'Default')] final class ConfigurationController extends BaseApiController { - public function __construct(private readonly ViewHandlerInterface $viewHandler) - { - } - /** - * Returns the timesheet configuration + * Fetch timesheet configuration */ #[OA\Response(response: 200, description: 'Returns the instance specific timesheet configuration', content: new OA\JsonContent(ref: new Model(type: TimesheetConfig::class)))] #[Route(path: '/config/timesheet', methods: ['GET'])] - public function timesheetConfigAction(SystemConfiguration $configuration): Response + public function timesheetConfigAction(SystemConfiguration $configuration, ViewHandlerInterface $viewHandler): Response { $model = new TimesheetConfig(); $model->setTrackingMode($configuration->getTimesheetTrackingMode()); @@ -44,19 +40,19 @@ final class ConfigurationController extends BaseApiController $view = new View($model, 200); $view->getContext()->setGroups(['Default', 'Config']); - return $this->viewHandler->handle($view); + return $viewHandler->handle($view); } /** - * Returns the configured color codes and names + * Fetch configured color codes */ #[OA\Response(response: 200, description: 'Returns the configured color codes and names', content: new OA\JsonContent(type: 'object', example: ['Red' => '#ff0000'], additionalProperties: new OA\AdditionalProperties(type: 'string')))] #[Route(path: '/config/colors', methods: ['GET'])] - public function colorConfigAction(SystemConfiguration $configuration): Response + public function colorConfigAction(SystemConfiguration $configuration, ViewHandlerInterface $viewHandler): Response { $view = new View($configuration->getThemeColors(), 200); $view->getContext()->setGroups(['Default']); - return $this->viewHandler->handle($view); + return $viewHandler->handle($view); } } diff --git a/src/API/CustomerController.php b/src/API/CustomerController.php index 3cf899dc2..aa5866bf7 100644 --- a/src/API/CustomerController.php +++ b/src/API/CustomerController.php @@ -13,7 +13,6 @@ use App\Customer\CustomerService; use App\Entity\Customer; use App\Entity\CustomerRate; use App\Entity\User; -use App\Event\CustomerMetaDefinitionEvent; use App\Form\API\CustomerApiEditForm; use App\Form\API\CustomerRateApiForm; use App\Repository\CustomerRateRepository; @@ -25,7 +24,6 @@ use FOS\RestBundle\Request\ParamFetcherInterface; use FOS\RestBundle\View\View; use FOS\RestBundle\View\ViewHandlerInterface; use OpenApi\Attributes as OA; -use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -38,28 +36,26 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; final class CustomerController extends BaseApiController { public const GROUPS_ENTITY = ['Default', 'Entity', 'Customer', 'Customer_Entity']; - public const GROUPS_FORM = ['Default', 'Entity', 'Customer']; public const GROUPS_COLLECTION = ['Default', 'Collection', 'Customer']; public const GROUPS_RATE = ['Default', 'Entity', 'Customer_Rate']; public function __construct( private readonly ViewHandlerInterface $viewHandler, private readonly CustomerRepository $repository, - private readonly EventDispatcherInterface $dispatcher, private readonly CustomerRateRepository $customerRateRepository, private readonly CustomerService $customerService, ) { } /** - * Returns a collection of customers (which are visible to the user) + * Fetch customers */ #[OA\Response(response: 200, description: 'Returns a collection of customers', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/CustomerCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_customers')] #[Rest\QueryParam(name: 'visible', requirements: '1|2|3', default: 1, strict: true, nullable: true, description: 'Visibility status to filter customers: 1=visible, 2=hidden, 3=both')] #[Rest\QueryParam(name: 'order', requirements: 'ASC|DESC', strict: true, nullable: true, description: 'The result order. Allowed values: ASC, DESC (default: ASC)')] #[Rest\QueryParam(name: 'orderBy', requirements: 'id|name', strict: true, nullable: true, description: 'The field by which results will be ordered. Allowed values: id, name (default: name)')] - #[Rest\QueryParam(name: 'term', description: 'Free search term')] + #[Rest\QueryParam(name: 'term', description: 'Free search term', nullable: true)] public function cgetAction(ParamFetcherInterface $paramFetcher): Response { /** @var User $user */ @@ -80,7 +76,7 @@ final class CustomerController extends BaseApiController } $visible = $paramFetcher->get('visible'); - if (\is_string($visible) && $visible !== '') { + if (is_numeric($visible)) { $query->setVisibility((int) $visible); } @@ -98,7 +94,7 @@ final class CustomerController extends BaseApiController } /** - * Returns one customer + * Fetch customer */ #[OA\Response(response: 200, description: 'Returns one customer entity', content: new OA\JsonContent(ref: '#/components/schemas/CustomerEntity'))] #[Route(methods: ['GET'], path: '/{id}', name: 'get_customer', requirements: ['id' => '\d+'])] @@ -112,7 +108,7 @@ final class CustomerController extends BaseApiController } /** - * Creates a new customer + * Create customer */ #[OA\Post(description: 'Creates a new customer and returns it afterwards', responses: [new OA\Response(response: 200, description: 'Returns the new created customer', content: new OA\JsonContent(ref: '#/components/schemas/CustomerEntity'))])] #[OA\RequestBody(required: true, content: new OA\JsonContent(ref: '#/components/schemas/CustomerEditForm'))] @@ -125,9 +121,6 @@ final class CustomerController extends BaseApiController $customer = $customerService->createNewCustomer(''); - $event = new CustomerMetaDefinitionEvent($customer); - $this->dispatcher->dispatch($event); - $form = $this->createForm(CustomerApiEditForm::class, $customer, [ 'include_budget' => $this->isGranted('budget', $customer), 'include_time' => $this->isGranted('time', $customer), @@ -136,7 +129,7 @@ final class CustomerController extends BaseApiController $form->submit($request->request->all()); if ($form->isValid()) { - $this->repository->saveCustomer($customer); + $this->customerService->saveCustomer($customer); $view = new View($customer, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -145,13 +138,13 @@ final class CustomerController extends BaseApiController } $view = new View($form); - $view->getContext()->setGroups(self::GROUPS_FORM); + $view->getContext()->setGroups(self::GROUPS_ENTITY); return $this->viewHandler->handle($view); } /** - * Update an existing customer + * Update customer */ #[IsGranted('edit', 'customer')] #[OA\Patch(description: 'Update an existing customer, you can pass all or just a subset of all attributes', responses: [new OA\Response(response: 200, description: 'Returns the updated customer', content: new OA\JsonContent(ref: '#/components/schemas/CustomerEntity'))])] @@ -160,8 +153,7 @@ final class CustomerController extends BaseApiController #[Route(methods: ['PATCH'], path: '/{id}', name: 'patch_customer', requirements: ['id' => '\d+'])] public function patchAction(Request $request, Customer $customer): Response { - $event = new CustomerMetaDefinitionEvent($customer); - $this->dispatcher->dispatch($event); + $this->customerService->loadMetaFields($customer); $form = $this->createForm(CustomerApiEditForm::class, $customer, [ 'include_budget' => $this->isGranted('budget', $customer), @@ -173,12 +165,12 @@ final class CustomerController extends BaseApiController if (false === $form->isValid()) { $view = new View($form, Response::HTTP_OK); - $view->getContext()->setGroups(self::GROUPS_FORM); + $view->getContext()->setGroups(self::GROUPS_ENTITY); return $this->viewHandler->handle($view); } - $this->repository->saveCustomer($customer); + $this->customerService->saveCustomer($customer); $view = new View($customer, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -187,10 +179,10 @@ final class CustomerController extends BaseApiController } /** - * Delete an existing customer + * Delete customer * * [DANGER] This will also delete ALL linked projects, project activities and timesheets. - * Maybe use `PATCH` instead and mark it as inactive with `visible=false`? + * Do you want to use `PATCH` instead and mark it as inactive with `{visible: false}` instead? */ #[IsGranted('delete', 'customer')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one customer')])] @@ -206,7 +198,7 @@ final class CustomerController extends BaseApiController } /** - * Sets the value of a meta-field for an existing customer + * Update customer custom-field */ #[IsGranted('edit', 'customer')] #[OA\Response(response: 200, description: 'Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.', content: new OA\JsonContent(ref: '#/components/schemas/CustomerEntity'))] @@ -216,8 +208,7 @@ final class CustomerController extends BaseApiController #[Rest\RequestParam(name: 'value', strict: true, nullable: false, description: 'The meta-field value')] public function metaAction(Customer $customer, ParamFetcherInterface $paramFetcher): Response { - $event = new CustomerMetaDefinitionEvent($customer); - $this->dispatcher->dispatch($event); + $this->customerService->loadMetaFields($customer); $name = $paramFetcher->get('name'); $value = $paramFetcher->get('value'); @@ -228,7 +219,7 @@ final class CustomerController extends BaseApiController $meta->setValue($value); - $this->repository->saveCustomer($customer); + $this->customerService->saveCustomer($customer); $view = new View($customer, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -237,7 +228,7 @@ final class CustomerController extends BaseApiController } /** - * Returns a collection of all rates for one customer + * Fetch rates for customer */ #[IsGranted('edit', 'customer')] #[OA\Response(response: 200, description: 'Returns a collection of customer rate entities', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/CustomerRate')))] @@ -254,7 +245,7 @@ final class CustomerController extends BaseApiController } /** - * Deletes one rate for a customer + * Delete rate for customer */ #[IsGranted('edit', 'customer')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Returns no content: 204 on successful delete')])] @@ -275,7 +266,7 @@ final class CustomerController extends BaseApiController } /** - * Adds a new rate to a customer + * Add rate for customer */ #[IsGranted('edit', 'customer')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Returns the new created rate', content: new OA\JsonContent(ref: '#/components/schemas/CustomerRate'))])] diff --git a/src/API/ExportController.php b/src/API/ExportController.php new file mode 100644 index 000000000..b50a99ce7 --- /dev/null +++ b/src/API/ExportController.php @@ -0,0 +1,41 @@ + true])] + #[OA\Parameter(name: 'id', description: 'Export template ID to delete', in: 'path', required: true)] + #[Route(path: '/{id}', name: 'delete_export_template', requirements: ['id' => '\d+'], methods: ['DELETE'])] + public function deleteTemplate(ExportTemplate $exportTemplate, ExportTemplateRepository $repository, ViewHandlerInterface $viewHandler): Response + { + $repository->removeExportTemplate($exportTemplate); + + $view = new View(null, Response::HTTP_NO_CONTENT); + + return $viewHandler->handle($view); + } +} diff --git a/src/API/InvoiceController.php b/src/API/InvoiceController.php index 2f1beedcb..f7dd67175 100644 --- a/src/API/InvoiceController.php +++ b/src/API/InvoiceController.php @@ -38,15 +38,13 @@ final class InvoiceController extends BaseApiController } /** - * Returns a paginated collection of invoices. - * - * Needs permission: view_invoice + * Fetch invoices */ #[IsGranted('view_invoice')] #[OA\Response(response: 200, description: 'Returns a collection of invoices', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/InvoiceCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_invoices')] - #[Rest\QueryParam(name: 'begin', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records after this date will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] - #[Rest\QueryParam(name: 'end', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records before this date will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] + #[Rest\QueryParam(name: 'begin', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only invoices created at or after this date-time will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] + #[Rest\QueryParam(name: 'end', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only invoices created before or at this date-time will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] #[Rest\QueryParam(name: 'customers', map: true, requirements: '\d+', strict: true, nullable: true, default: [], description: 'List of customer IDs to filter, e.g.: customers[]=1&customers[]=2')] #[Rest\QueryParam(name: 'status', map: true, requirements: 'pending|paid|canceled|new', strict: true, nullable: true, default: [], description: 'Invoice status: pending, paid, canceled, new. Default: all')] #[Rest\QueryParam(name: 'page', requirements: '\d+', strict: true, nullable: true, description: 'The page to display, renders a 404 if not found (default: 1)')] @@ -82,16 +80,14 @@ final class InvoiceController extends BaseApiController } $data = $this->repository->getPagerfantaForQuery($query); - $view = $this->createPaginatedView($data); + $view = new View($data, 200); $view->getContext()->setGroups(self::GROUPS_COLLECTION); return $this->viewHandler->handle($view); } /** - * Returns one invoice. - * - * Needs permission: view_invoice + * Fetch invoice */ #[IsGranted('view_invoice')] #[OA\Response(response: 200, description: 'Returns one invoice', content: new OA\JsonContent(ref: '#/components/schemas/Invoice'))] diff --git a/src/API/NotFoundException.php b/src/API/NotFoundException.php index 03b0c1ea1..85ae40d7e 100644 --- a/src/API/NotFoundException.php +++ b/src/API/NotFoundException.php @@ -13,7 +13,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; final class NotFoundException extends NotFoundHttpException { - public function __construct(string $message = 'Not found', \Exception $previous = null, int $code = 404, array $headers = []) + public function __construct(string $message = 'Not found', ?\Throwable $previous = null, int $code = 404, array $headers = []) { parent::__construct($message, $previous, $code, $headers); } diff --git a/src/API/ProjectController.php b/src/API/ProjectController.php index 11da0d9e2..86cfece50 100644 --- a/src/API/ProjectController.php +++ b/src/API/ProjectController.php @@ -12,7 +12,6 @@ namespace App\API; use App\Entity\Project; use App\Entity\ProjectRate; use App\Entity\User; -use App\Event\ProjectMetaDefinitionEvent; use App\Form\API\ProjectApiEditForm; use App\Form\API\ProjectRateApiForm; use App\Project\ProjectService; @@ -26,7 +25,6 @@ use FOS\RestBundle\Request\ParamFetcherInterface; use FOS\RestBundle\View\View; use FOS\RestBundle\View\ViewHandlerInterface; use OpenApi\Attributes as OA; -use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Bridge\Doctrine\Attribute\MapEntity; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -40,21 +38,19 @@ use Symfony\Component\Validator\Constraints; final class ProjectController extends BaseApiController { public const GROUPS_ENTITY = ['Default', 'Entity', 'Project', 'Project_Entity']; - public const GROUPS_FORM = ['Default', 'Entity', 'Project']; public const GROUPS_COLLECTION = ['Default', 'Collection', 'Project']; public const GROUPS_RATE = ['Default', 'Entity', 'Project_Rate']; public function __construct( private readonly ViewHandlerInterface $viewHandler, private readonly ProjectRepository $repository, - private readonly EventDispatcherInterface $dispatcher, private readonly ProjectRateRepository $projectRateRepository, private readonly ProjectService $projectService ) { } /** - * Returns a collection of projects (which are visible to the user) + * Fetch projects */ #[OA\Response(response: 200, description: 'Returns a collection of projects', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/ProjectCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_projects')] @@ -67,7 +63,7 @@ final class ProjectController extends BaseApiController #[Rest\QueryParam(name: 'globalActivities', requirements: '0|1', strict: true, nullable: true, description: "If given, filters projects by their 'global activity' support. Allowed values: 1 (supports global activities) and 0 (without global activities) (default: all)")] #[Rest\QueryParam(name: 'order', requirements: 'ASC|DESC', strict: true, nullable: true, description: 'The result order. Allowed values: ASC, DESC (default: ASC)')] #[Rest\QueryParam(name: 'orderBy', requirements: 'id|name|customer', strict: true, nullable: true, description: 'The field by which results will be ordered. Allowed values: id, name, customer (default: name)')] - #[Rest\QueryParam(name: 'term', description: 'Free search term')] + #[Rest\QueryParam(name: 'term', description: 'Free search term', nullable: true)] public function cgetAction(ParamFetcherInterface $paramFetcher, CustomerRepository $customerRepository): Response { /** @var User $user */ @@ -103,7 +99,7 @@ final class ProjectController extends BaseApiController } $visible = $paramFetcher->get('visible'); - if (\is_string($visible) && $visible !== '') { + if (is_numeric($visible)) { $query->setVisibility((int) $visible); } @@ -151,7 +147,7 @@ final class ProjectController extends BaseApiController } /** - * Returns one project + * Fetch project */ #[OA\Response(response: 200, description: 'Returns one project entity', content: new OA\JsonContent(ref: '#/components/schemas/ProjectEntity'))] #[Route(methods: ['GET'], path: '/{id}', name: 'get_project', requirements: ['id' => '\d+'])] @@ -165,7 +161,7 @@ final class ProjectController extends BaseApiController } /** - * Creates a new project + * Create project */ #[OA\Post(description: 'Creates a new project and returns it afterwards', responses: [new OA\Response(response: 200, description: 'Returns the new created project', content: new OA\JsonContent(ref: '#/components/schemas/ProjectEntity'))])] #[OA\RequestBody(required: true, content: new OA\JsonContent(ref: '#/components/schemas/ProjectEditForm'))] @@ -188,7 +184,7 @@ final class ProjectController extends BaseApiController $form->submit($request->request->all()); if ($form->isValid()) { - $this->projectService->saveNewProject($project); + $this->projectService->saveProject($project); $view = new View($project, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -197,13 +193,13 @@ final class ProjectController extends BaseApiController } $view = new View($form); - $view->getContext()->setGroups(self::GROUPS_FORM); + $view->getContext()->setGroups(self::GROUPS_ENTITY); return $this->viewHandler->handle($view); } /** - * Update an existing project + * Update project */ #[IsGranted('edit', 'project')] #[OA\Patch(description: 'Update an existing project, you can pass all or just a subset of all attributes', responses: [new OA\Response(response: 200, description: 'Returns the updated project', content: new OA\JsonContent(ref: '#/components/schemas/ProjectEntity'))])] @@ -212,8 +208,7 @@ final class ProjectController extends BaseApiController #[Route(methods: ['PATCH'], path: '/{id}', name: 'patch_project', requirements: ['id' => '\d+'])] public function patchAction(Request $request, Project $project): Response { - $event = new ProjectMetaDefinitionEvent($project); - $this->dispatcher->dispatch($event); + $this->projectService->loadMetaFields($project); $form = $this->createForm(ProjectApiEditForm::class, $project, [ 'timezone' => $this->getDateTimeFactory()->getTimezone()->getName(), @@ -227,12 +222,12 @@ final class ProjectController extends BaseApiController if (false === $form->isValid()) { $view = new View($form, Response::HTTP_OK); - $view->getContext()->setGroups(self::GROUPS_FORM); + $view->getContext()->setGroups(self::GROUPS_ENTITY); return $this->viewHandler->handle($view); } - $this->projectService->updateProject($project); + $this->projectService->saveProject($project); $view = new View($project, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -241,10 +236,10 @@ final class ProjectController extends BaseApiController } /** - * Delete an existing project + * Delete project * * [DANGER] This will also delete ALL linked activities and timesheets. - * Maybe use `PATCH` instead and mark it as inactive with `visible=false`? + * Do you want to use `PATCH` instead and mark it as inactive with `{visible: false}` instead? */ #[IsGranted('delete', 'project')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one project')])] @@ -260,7 +255,7 @@ final class ProjectController extends BaseApiController } /** - * Sets the value of a meta-field for an existing project + * Update project custom-field */ #[IsGranted('edit', 'project')] #[OA\Response(response: 200, description: 'Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.', content: new OA\JsonContent(ref: '#/components/schemas/ProjectEntity'))] @@ -270,8 +265,7 @@ final class ProjectController extends BaseApiController #[Rest\RequestParam(name: 'value', strict: true, nullable: false, description: 'The meta-field value')] public function metaAction(Project $project, ParamFetcherInterface $paramFetcher): Response { - $event = new ProjectMetaDefinitionEvent($project); - $this->dispatcher->dispatch($event); + $this->projectService->loadMetaFields($project); $name = $paramFetcher->get('name'); $value = $paramFetcher->get('value'); @@ -282,7 +276,7 @@ final class ProjectController extends BaseApiController $meta->setValue($value); - $this->projectService->updateProject($project); + $this->projectService->saveProject($project); $view = new View($project, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -291,7 +285,7 @@ final class ProjectController extends BaseApiController } /** - * Returns a collection of all rates for one project + * Fetch rates for project */ #[IsGranted('edit', 'project')] #[OA\Response(response: 200, description: 'Returns a collection of project rate entities', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/ProjectRate')))] @@ -308,7 +302,7 @@ final class ProjectController extends BaseApiController } /** - * Deletes one rate for a project + * Delete rate for project */ #[IsGranted('edit', 'project')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Returns no content: 204 on successful delete')])] @@ -329,7 +323,7 @@ final class ProjectController extends BaseApiController } /** - * Adds a new rate to a project + * Add rate for project */ #[IsGranted('edit', 'project')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Returns the new created rate', content: new OA\JsonContent(ref: '#/components/schemas/ProjectRate'))])] diff --git a/src/API/Serializer/ValidationFailedExceptionErrorHandler.php b/src/API/Serializer/ValidationFailedExceptionErrorHandler.php index b0530434f..1ace17aa2 100644 --- a/src/API/Serializer/ValidationFailedExceptionErrorHandler.php +++ b/src/API/Serializer/ValidationFailedExceptionErrorHandler.php @@ -23,7 +23,11 @@ use Symfony\Contracts\Translation\TranslatorInterface; final class ValidationFailedExceptionErrorHandler implements SubscribingHandlerInterface { - public function __construct(private TranslatorInterface $translator, private FlattenExceptionHandler $exceptionHandler, private Security $security) + public function __construct( + private readonly TranslatorInterface $translator, + private readonly FlattenExceptionHandler $exceptionHandler, // @phpstan-ignore-line + private readonly Security $security + ) { } @@ -47,7 +51,7 @@ final class ValidationFailedExceptionErrorHandler implements SubscribingHandlerI public function serializeExceptionToJson(JsonSerializationVisitor $visitor, FlattenException $exception, array $type, Context $context) { if ($exception->getClass() !== ValidationFailedException::class) { - return $this->exceptionHandler->serializeToJson($visitor, $exception, $type, $context); + return $this->exceptionHandler->serializeToJson($visitor, $exception, $type, $context); // @phpstan-ignore method.internalClass } $original = $context->getAttribute('exception'); @@ -55,28 +59,10 @@ final class ValidationFailedExceptionErrorHandler implements SubscribingHandlerI return $this->serializeValidationExceptionToJson($visitor, $original, $type, $context); } - return $this->exceptionHandler->serializeToJson($visitor, $exception, $type, $context); + return $this->exceptionHandler->serializeToJson($visitor, $exception, $type, $context); // @phpstan-ignore method.internalClass } public function serializeValidationExceptionToJson(JsonSerializationVisitor $visitor, ValidationFailedException $exception, array $type, Context $context) - { - $errors = []; - - /** @var ConstraintViolationInterface $error */ - foreach (iterator_to_array($exception->getViolations()) as $error) { - $errors[$error->getPropertyPath()]['errors'][] = $this->getErrorMessage($error); - } - - return [ - 'code' => '400', - 'message' => $this->translator->trans($exception->getMessage(), [], 'validators'), - 'errors' => [ - 'children' => $errors - ], - ]; - } - - private function getErrorMessage(ConstraintViolationInterface $error): string { $locale = \Locale::getDefault(); /** @var User $user */ @@ -86,6 +72,24 @@ final class ValidationFailedExceptionErrorHandler implements SubscribingHandlerI $locale = $user->getLanguage(); } + $errors = []; + + /** @var ConstraintViolationInterface $error */ + foreach (iterator_to_array($exception->getViolations()) as $error) { + $errors[$error->getPropertyPath()]['errors'][] = $this->getErrorMessage($error, $locale); + } + + return [ + 'code' => '400', + 'message' => $this->translator->trans($exception->getMessage(), [], 'validators', $locale), + 'errors' => [ + 'children' => $errors + ], + ]; + } + + private function getErrorMessage(ConstraintViolationInterface $error, string $locale): string + { if (null !== $error->getPlural()) { return $this->translator->trans($error->getMessageTemplate(), ['%count%' => $error->getPlural()] + $error->getParameters(), 'validators', $locale); } diff --git a/src/API/StatusController.php b/src/API/StatusController.php index 815ab8e7e..ac42a1867 100644 --- a/src/API/StatusController.php +++ b/src/API/StatusController.php @@ -29,7 +29,7 @@ final class StatusController extends BaseApiController } /** - * A testing route for the API + * Testing route for the API */ #[OA\Response(response: 200, description: "A simple route that returns a 'pong', which you can use for testing the API", content: new OA\JsonContent(example: "{'message': 'pong'}"))] #[Route(methods: ['GET'], path: '/ping')] @@ -41,7 +41,7 @@ final class StatusController extends BaseApiController } /** - * Returns information about the Kimai release + * Fetch Kimai release */ #[OA\Response(response: 200, description: 'Returns version information about the current release', content: new OA\JsonContent(ref: new Model(type: Version::class)))] #[Route(methods: ['GET'], path: '/version')] @@ -51,7 +51,7 @@ final class StatusController extends BaseApiController } /** - * Returns information about installed Plugins + * Fetch installed Plugins */ #[OA\Response(response: 200, description: 'Returns a list of plugin names and versions', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: new Model(type: Plugin::class))))] #[Route(methods: ['GET'], path: '/plugins')] diff --git a/src/API/TagController.php b/src/API/TagController.php index 93c8d9de0..938e3f9db 100644 --- a/src/API/TagController.php +++ b/src/API/TagController.php @@ -39,9 +39,10 @@ final class TagController extends BaseApiController } /** - * Deprecated: Fetch tags by filter as string collection + * Deprecated: Fetch tags as strings */ - #[OA\Response(response: 200, description: 'Returns the collection of all existing tags as string array', content: new OA\JsonContent(type: 'array', items: new OA\Items(type: 'string')))] + #[OA\Response(response: 200, description: 'DEPRECATED: Returns existing tags as string array', content: new OA\JsonContent(type: 'array', items: new OA\Items(type: 'string')))] + #[OA\Get(x: ['internal' => true])] #[Route(methods: ['GET'], name: 'get_tags')] #[Rest\QueryParam(name: 'name', strict: true, nullable: true, description: 'Search term to filter tag list')] public function cgetAction(ParamFetcherInterface $paramFetcher): Response @@ -58,7 +59,7 @@ final class TagController extends BaseApiController } /** - * Fetch tags by filter (as full entities) + * Fetch tags */ #[OA\Response(response: 200, description: 'Find the collection of all matching tags', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TagEntity')))] #[Route(path: '/find', name: 'get_tags_full', methods: ['GET'])] @@ -79,7 +80,7 @@ final class TagController extends BaseApiController } /** - * Creates a new tag + * Create tag */ #[OA\Post(description: 'Creates a new tag and returns it afterwards', responses: [new OA\Response(response: 200, description: 'Returns the new created tag', content: new OA\JsonContent(ref: '#/components/schemas/TagEntity'))])] #[OA\RequestBody(required: true, content: new OA\JsonContent(ref: '#/components/schemas/TagEditForm'))] @@ -112,7 +113,7 @@ final class TagController extends BaseApiController } /** - * Delete a tag + * Delete tag */ #[IsGranted('delete_tag')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'HTTP code 204 for a successful delete')])] diff --git a/src/API/TeamController.php b/src/API/TeamController.php index cc4783cf1..22c5252bf 100644 --- a/src/API/TeamController.php +++ b/src/API/TeamController.php @@ -20,6 +20,7 @@ use App\Repository\CustomerRepository; use App\Repository\ProjectRepository; use App\Repository\Query\TeamQuery; use App\Repository\TeamRepository; +use App\User\TeamService; use FOS\RestBundle\View\View; use FOS\RestBundle\View\ViewHandlerInterface; use OpenApi\Attributes as OA; @@ -41,16 +42,17 @@ final class TeamController extends BaseApiController public function __construct( private readonly ViewHandlerInterface $viewHandler, - private readonly TeamRepository $repository + private readonly TeamRepository $repository, + private readonly TeamService $teamService ) { } /** - * Fetch all existing teams (which are visible to the user) + * Fetch teams */ #[IsGranted('view_team')] - #[OA\Response(response: 200, description: 'Returns the collection of teams', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TeamCollection')))] + #[OA\Response(response: 200, description: 'Returns a collection of teams', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TeamCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_teams')] public function cgetAction(): Response { @@ -66,7 +68,7 @@ final class TeamController extends BaseApiController } /** - * Returns one team + * Fetch team */ #[IsGranted('view_team')] #[OA\Response(response: 200, description: 'Returns one team entity', content: new OA\JsonContent(ref: '#/components/schemas/Team'))] @@ -80,7 +82,7 @@ final class TeamController extends BaseApiController } /** - * Delete a team + * Delete team */ #[IsGranted('delete_team')] #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one team')])] @@ -88,7 +90,7 @@ final class TeamController extends BaseApiController #[Route(methods: ['DELETE'], path: '/{id}', name: 'delete_team', requirements: ['id' => '\d+'])] public function deleteAction(Team $team): Response { - $this->repository->deleteTeam($team); + $this->teamService->deleteTeam($team); $view = new View(null, Response::HTTP_NO_CONTENT); @@ -96,7 +98,7 @@ final class TeamController extends BaseApiController } /** - * Creates a new team + * Create team */ #[IsGranted('create_team')] #[OA\Post(description: 'Creates a new team and returns it afterwards', responses: [new OA\Response(response: 200, description: 'Returns the new created team', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -104,13 +106,13 @@ final class TeamController extends BaseApiController #[Route(methods: ['POST'], path: '', name: 'post_team')] public function postAction(Request $request): Response { - $team = new Team(''); + $team = $this->teamService->createNewTeam(''); $form = $this->createForm(TeamApiEditForm::class, $team); $form->submit($request->request->all()); if ($form->isValid()) { - $this->repository->saveTeam($team); + $this->teamService->saveTeam($team); $view = new View($team, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -125,7 +127,7 @@ final class TeamController extends BaseApiController } /** - * Update an existing team + * Update team */ #[IsGranted('edit_team')] #[OA\Patch(description: 'Update an existing team, you can pass all or just a subset of all attributes (passing members will replace all existing ones)', responses: [new OA\Response(response: 200, description: 'Returns the updated team', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -139,6 +141,8 @@ final class TeamController extends BaseApiController $team->removeMember($member); $this->repository->removeTeamMember($member); } + // this fails, if we use the teamservice, because the validator + // complains about teams without members or teamleads $this->repository->saveTeam($team); } @@ -154,7 +158,7 @@ final class TeamController extends BaseApiController return $this->viewHandler->handle($view); } - $this->repository->saveTeam($team); + $this->teamService->saveTeam($team); $view = new View($team, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -163,7 +167,7 @@ final class TeamController extends BaseApiController } /** - * Add a new member to a team + * Add team member */ #[IsGranted('edit_team')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Adds a new user to a team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -178,7 +182,7 @@ final class TeamController extends BaseApiController $team->addUser($member); - $this->repository->saveTeam($team); + $this->teamService->saveTeam($team); $view = new View($team, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -187,7 +191,7 @@ final class TeamController extends BaseApiController } /** - * Removes a member from the team + * Remove team member */ #[IsGranted('edit_team')] #[OA\Delete(responses: [new OA\Response(response: 200, description: 'Removes a user from the team. The teamlead cannot be removed.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -206,7 +210,7 @@ final class TeamController extends BaseApiController $team->removeUser($member); - $this->repository->saveTeam($team); + $this->teamService->saveTeam($team); $view = new View($team, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -215,7 +219,7 @@ final class TeamController extends BaseApiController } /** - * Grant the team access to a customer + * Grant team access to customer */ #[IsGranted('edit_team')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Adds a new customer to a team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -238,7 +242,7 @@ final class TeamController extends BaseApiController } /** - * Revokes access for a customer from a team + * Revoke customer access from team */ #[IsGranted('edit_team')] #[OA\Delete(responses: [new OA\Response(response: 200, description: 'Removes a customer from the team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -261,7 +265,7 @@ final class TeamController extends BaseApiController } /** - * Grant the team access to a project + * Grant team access to project */ #[IsGranted('edit_team')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Adds a new project to a team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -284,7 +288,7 @@ final class TeamController extends BaseApiController } /** - * Revokes access for a project from a team + * Revoke project access from team */ #[IsGranted('edit_team')] #[OA\Delete(responses: [new OA\Response(response: 200, description: 'Removes a project from the team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -307,7 +311,7 @@ final class TeamController extends BaseApiController } /** - * Grant the team access to an activity + * Grant team access to activity */ #[IsGranted('edit_team')] #[OA\Post(responses: [new OA\Response(response: 200, description: 'Adds a new activity to a team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] @@ -330,7 +334,7 @@ final class TeamController extends BaseApiController } /** - * Revokes access for an activity from a team + * Revoke activity access from team */ #[IsGranted('edit_team')] #[OA\Delete(responses: [new OA\Response(response: 200, description: 'Removes a activity from the team.', content: new OA\JsonContent(ref: '#/components/schemas/Team'))])] diff --git a/src/API/TimesheetController.php b/src/API/TimesheetController.php index c2dc73a17..f1dcb55e5 100644 --- a/src/API/TimesheetController.php +++ b/src/API/TimesheetController.php @@ -68,10 +68,10 @@ final class TimesheetController extends BaseApiController } /** - * Returns a collection of timesheet records (which are visible to the user) + * Fetch timesheets */ #[IsGranted(new Expression("is_granted('view_own_timesheet') or is_granted('view_other_timesheet')"))] - #[OA\Response(response: 200, description: 'Returns a collection of timesheet records. The datetime fields are given in the users local time including the timezone offset (ISO-8601).', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TimesheetCollection')))] + #[OA\Response(response: 200, description: 'Returns a collection of timesheets. The datetime fields are given in the users local time including the timezone offset (ISO-8601).', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TimesheetCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_timesheets')] #[Rest\QueryParam(name: 'user', requirements: '\d+|all', strict: true, nullable: true, description: "User ID to filter timesheets. Needs permission 'view_other_timesheet', pass 'all' to fetch data for all user (default: current user)")] #[Rest\QueryParam(name: 'users', map: true, requirements: '\d+', strict: true, nullable: true, default: [], description: 'List of user IDs to filter, e.g.: users[]=1&users[]=2 (ignored if user=all)')] @@ -82,22 +82,22 @@ final class TimesheetController extends BaseApiController #[Rest\QueryParam(name: 'activity', requirements: '\d+', strict: true, nullable: true, description: 'Activity ID to filter timesheets')] #[Rest\QueryParam(name: 'activities', map: true, requirements: '\d+', strict: true, nullable: true, default: [], description: 'List of activity IDs to filter, e.g.: activities[]=1&activities[]=2')] #[Rest\QueryParam(name: 'page', requirements: '\d+', strict: true, nullable: true, description: 'The page to display, renders a 404 if not found (default: 1)')] - #[Rest\QueryParam(name: 'size', requirements: '\d+', strict: true, nullable: true, description: 'The amount of entries for each page (default: 50)')] + #[Rest\QueryParam(name: 'size', requirements: '\d+', strict: true, nullable: true, description: 'The amount of entries for each page (default: 50, max: 500)')] #[Rest\QueryParam(name: 'tags', map: true, strict: true, nullable: true, default: [], description: 'List of tag names, e.g. tags[]=bar&tags[]=foo')] #[Rest\QueryParam(name: 'orderBy', requirements: 'id|begin|end|rate', strict: true, nullable: true, description: 'The field by which results will be ordered. Allowed values: id, begin, end, rate (default: begin)')] #[Rest\QueryParam(name: 'order', requirements: 'ASC|DESC', strict: true, nullable: true, description: 'The result order. Allowed values: ASC, DESC (default: DESC)')] - #[Rest\QueryParam(name: 'begin', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records after this date will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] - #[Rest\QueryParam(name: 'end', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records before this date will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] + #[Rest\QueryParam(name: 'begin', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records started at or after this date-time will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] + #[Rest\QueryParam(name: 'end', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records started at or before this date-time will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] #[Rest\QueryParam(name: 'exported', requirements: '0|1', strict: true, nullable: true, description: 'Use this flag if you want to filter for export state. Allowed values: 0=not exported, 1=exported (default: all)')] #[Rest\QueryParam(name: 'active', requirements: '0|1', strict: true, nullable: true, description: 'Filter for running/active records. Allowed values: 0=stopped, 1=active (default: all)')] #[Rest\QueryParam(name: 'billable', requirements: '0|1', strict: true, nullable: true, description: 'Filter for non-/billable records. Allowed values: 0=non-billable, 1=billable (default: all)')] #[Rest\QueryParam(name: 'full', requirements: '0|1|true|false', strict: true, nullable: true, description: 'Allows to fetch full objects including subresources. Allowed values: 0|1|false|true (default: false)')] - #[Rest\QueryParam(name: 'term', description: 'Free search term')] - #[Rest\QueryParam(name: 'modified_after', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records changed after this date will be included (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] + #[Rest\QueryParam(name: 'term', description: 'Free search term', nullable: true)] + #[Rest\QueryParam(name: 'modified_after', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records changed after this date will be included. You need to pass in a UTC date-time, as this field is stored in UTC (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] public function cgetAction(ParamFetcherInterface $paramFetcher, CustomerRepository $customerRepository, ProjectRepository $projectRepository, ActivityRepository $activityRepository, UserRepository $userRepository): Response { $query = new TimesheetQuery(false); - $query->setCurrentUser($this->getUser()); + $this->prepareQuery($query, $paramFetcher); $seeAll = false; if ($this->isGranted('view_other_timesheet')) { @@ -169,16 +169,6 @@ final class TimesheetController extends BaseApiController $query->addActivity($activity); } - $page = $paramFetcher->get('page'); - if (\is_string($page) && $page !== '') { - $query->setPage((int) $page); - } - - $size = $paramFetcher->get('size'); - if (\is_string($size) && $size !== '') { - $query->setPageSize((int) $size); - } - /** @var array $tags */ $tags = $paramFetcher->get('tags'); if (\is_array($tags) && \count($tags) > 0) { @@ -191,16 +181,6 @@ final class TimesheetController extends BaseApiController } } - $order = $paramFetcher->get('order'); - if (\is_string($order) && $order !== '') { - $query->setOrder($order); - } - - $orderBy = $paramFetcher->get('orderBy'); - if (\is_string($orderBy) && $orderBy !== '') { - $query->setOrderBy($orderBy); - } - $factory = $this->getDateTimeFactory(); $begin = $paramFetcher->get('begin'); @@ -248,16 +228,14 @@ final class TimesheetController extends BaseApiController $query->setSearchTerm(new SearchTerm($term)); } - if (!empty($modifiedAfter = $paramFetcher->get('modified_after'))) { - $query->setModifiedAfter($factory->createDateTime($modifiedAfter)); + $modifiedAfter = $paramFetcher->get('modified_after'); + if (\is_string($modifiedAfter)) { + $query->setModifiedAfter(new \DateTimeImmutable($modifiedAfter, new \DateTimeZone('UTC'))); } - $query->setIsApiCall(true); $data = $this->repository->getPagerfantaForQuery($query); - $results = (array) $data->getCurrentPageResults(); - $view = new View($results, 200); - $this->addPagination($view, $data); + $view = new View($data, 200); $full = $paramFetcher->get('full'); if ($full === '1' || $full === 'true') { @@ -270,11 +248,11 @@ final class TimesheetController extends BaseApiController } /** - * Returns one timesheet record + * Fetch timesheet */ #[IsGranted('view', 'timesheet')] - #[OA\Response(response: 200, description: 'Returns one timesheet record. Be aware that the datetime fields are given in the users local time including the timezone offset via ISO 8601.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to fetch', required: true)] + #[OA\Response(response: 200, description: 'Returns one timesheet. Be aware that the datetime fields are given in the users local time including the timezone offset via ISO 8601.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to fetch', required: true)] #[Route(methods: ['GET'], path: '/{id}', name: 'get_timesheet', requirements: ['id' => '\d+'])] public function getAction(Timesheet $timesheet): Response { @@ -285,10 +263,10 @@ final class TimesheetController extends BaseApiController } /** - * Creates a new timesheet record + * Create timesheet */ #[IsGranted('create_own_timesheet')] - #[OA\Post(description: 'Creates a new timesheet record for the current user and returns it afterwards.', responses: [new OA\Response(response: 200, description: 'Returns the new created timesheet', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))])] + #[OA\Post(description: 'Creates a new timesheet for the current user and returns it afterwards.', responses: [new OA\Response(response: 200, description: 'Returns the new created timesheet', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))])] #[OA\RequestBody(required: true, content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEditForm'))] #[Route(methods: ['POST'], path: '', name: 'post_timesheet')] #[Rest\QueryParam(name: 'full', strict: true, nullable: true, description: 'Allows to fetch fully serialized objects including subresources (TimesheetExpanded). Allowed values: true (default: false)')] @@ -315,7 +293,7 @@ final class TimesheetController extends BaseApiController if ($form->isValid()) { try { - $this->service->saveNewTimesheet($timesheet); + $this->service->saveTimesheet($timesheet); $view = new View($timesheet, 200); @@ -338,11 +316,11 @@ final class TimesheetController extends BaseApiController } /** - * Update an existing timesheet record + * Update timesheet */ #[IsGranted('edit', 'timesheet')] - #[OA\Patch(description: 'Update an existing timesheet record, you can pass all or just a subset of the attributes.', responses: [new OA\Response(response: 200, description: 'Returns the updated timesheet', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))])] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to update', required: true)] + #[OA\Patch(description: 'Update timesheet, you can pass all or just a subset of the attributes.', responses: [new OA\Response(response: 200, description: 'Returns the updated timesheet', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))])] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to update', required: true)] #[OA\RequestBody(required: true, content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEditForm'))] #[Route(methods: ['PATCH'], path: '/{id}', name: 'patch_timesheet', requirements: ['id' => '\d+'])] public function patchAction(Request $request, Timesheet $timesheet): Response @@ -372,7 +350,7 @@ final class TimesheetController extends BaseApiController return $this->viewHandler->handle($view); } - $this->service->updateTimesheet($timesheet); + $this->service->saveTimesheet($timesheet); $view = new View($timesheet, Response::HTTP_OK); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -381,11 +359,11 @@ final class TimesheetController extends BaseApiController } /** - * Delete an existing timesheet record + * Delete timesheet */ #[IsGranted('delete', 'timesheet')] - #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one timesheet record')])] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to delete', required: true)] + #[OA\Delete(responses: [new OA\Response(response: 204, description: 'Delete one timesheet')])] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to delete', required: true)] #[Route(methods: ['DELETE'], path: '/{id}', name: 'delete_timesheet', requirements: ['id' => '\d+'])] public function deleteAction(Timesheet $timesheet): Response { @@ -397,12 +375,12 @@ final class TimesheetController extends BaseApiController } /** - * Returns the collection of recent user activities + * Fetch recent user activities */ #[IsGranted('view_own_timesheet')] - #[OA\Response(response: 200, description: 'Returns the collection of recent user activities (always the latest entry of a unique working set grouped by customer, project and activity)', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TimesheetCollectionExpanded')))] + #[OA\Response(response: 200, description: 'Returns a collection of recent user activities (always the latest entry of a unique working set grouped by customer, project and activity)', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TimesheetCollectionExpanded')))] #[Route(methods: ['GET'], path: '/recent', name: 'recent_timesheet')] - #[Rest\QueryParam(name: 'begin', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records after this date will be included. Default: today - 1 year (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] + #[Rest\QueryParam(name: 'begin', requirements: [new Constraints\DateTime(format: 'Y-m-d\TH:i:s')], strict: true, nullable: true, description: 'Only records started at or after this date will be included. Default: today - 1 year (format: HTML5 datetime-local, e.g. YYYY-MM-DDThh:mm:ss)')] #[Rest\QueryParam(name: 'size', requirements: '\d+', strict: true, nullable: true, description: 'The amount of entries (default: 10)')] public function recentAction(ParamFetcherInterface $paramFetcher): Response { @@ -415,7 +393,8 @@ final class TimesheetController extends BaseApiController $limit = (int) $reqLimit; } - if (null !== ($reqBegin = $paramFetcher->get('begin'))) { + $reqBegin = $paramFetcher->get('begin'); + if (\is_string($reqBegin)) { $begin = $this->getDateTimeFactory($user)->createDateTime($reqBegin); } @@ -431,10 +410,10 @@ final class TimesheetController extends BaseApiController } /** - * Returns the collection of active timesheet records + * Fetch active timesheets */ #[IsGranted('view_own_timesheet')] - #[OA\Response(response: 200, description: 'Returns the collection of active timesheet records for the current user', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TimesheetCollectionExpanded')))] + #[OA\Response(response: 200, description: 'Returns a collection of active timesheets for the current user', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/TimesheetCollectionExpanded')))] #[Route(methods: ['GET'], path: '/active', name: 'active_timesheet')] public function activeAction(): Response { @@ -450,16 +429,17 @@ final class TimesheetController extends BaseApiController } /** - * Stops an active timesheet record. + * Stop active timesheet * * This route is available via GET and PATCH, as users over and over again run into errors when stopping. * Likely caused by a slow JS engine and a fast-click after page reload. */ #[IsGranted('stop', 'timesheet')] - #[OA\Response(response: 200, description: 'Stops an active timesheet record and returns it afterwards.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to stop', required: true)] + #[OA\Response(response: 200, description: 'Stops an active timesheet and returns it afterwards.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to stop', required: true)] #[Route(methods: ['GET'], path: '/{id}/stop', name: 'stop_timesheet_get', requirements: ['id' => '\d+'])] #[Route(methods: ['PATCH'], path: '/{id}/stop', name: 'stop_timesheet', requirements: ['id' => '\d+'])] + #[OA\Get(x: ['internal' => true])] public function stopAction(Timesheet $timesheet): Response { $this->service->stopTimesheet($timesheet); @@ -471,11 +451,14 @@ final class TimesheetController extends BaseApiController } /** - * Restarts a previously stopped timesheet record for the current user + * Restart timesheet + * + * The restarted timesheet will be created for the current user */ #[IsGranted('start', 'timesheet')] - #[OA\Response(response: 200, description: 'Restarts a timesheet record for the same customer, project, activity combination. The current user will be the owner of the new record. Kimai tries to stop running records, which is expected to fail depending on the configured rules. Data will be copied from the original record if requested.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to restart', required: true)] + #[OA\Response(response: 200, description: 'Restart a timesheet for the same customer, project, activity combination. The current user will be the owner of the new record. Kimai tries to stop running records, which is expected to fail depending on the configured rules. Data will be copied from the original record if requested.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to restart', required: true)] + #[OA\Get(x: ['internal' => true])] #[Route(methods: ['GET'], path: '/{id}/restart', name: 'restart_timesheet_get', requirements: ['id' => '\d+'])] #[Route(methods: ['PATCH'], path: '/{id}/restart', name: 'restart_timesheet', requirements: ['id' => '\d+'])] #[Rest\RequestParam(name: 'copy', requirements: 'all', strict: true, nullable: true, description: 'Whether data should be copied to the new entry. Allowed values: all (default: nothing is copied)')] @@ -490,7 +473,8 @@ final class TimesheetController extends BaseApiController $factory = $this->getDateTimeFactory(); $begin = $factory->createDateTime(); - if (null !== ($beginTmp = $paramFetcher->get('begin'))) { + $beginTmp = $paramFetcher->get('begin'); + if (\is_string($beginTmp)) { $begin = $factory->createDateTime($beginTmp); } @@ -532,18 +516,18 @@ final class TimesheetController extends BaseApiController } /** - * Duplicates an existing timesheet record + * Duplicate timesheet */ #[IsGranted('duplicate', 'timesheet')] - #[OA\Response(response: 200, description: 'Duplicates a timesheet record, resetting the export state only.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to duplicate', required: true)] + #[OA\Response(response: 200, description: 'Duplicates a timesheet, resetting the export state only.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to duplicate', required: true)] #[Route(methods: ['PATCH'], path: '/{id}/duplicate', name: 'duplicate_timesheet', requirements: ['id' => '\d+'])] public function duplicateAction(Timesheet $timesheet): Response { $copyTimesheet = clone $timesheet; $this->dispatcher->dispatch(new TimesheetDuplicatePreEvent($copyTimesheet, $timesheet)); - $this->service->saveNewTimesheet($copyTimesheet); + $this->service->saveTimesheet($copyTimesheet); $this->dispatcher->dispatch(new TimesheetDuplicatePostEvent($copyTimesheet, $timesheet)); $view = new View($copyTimesheet, 200); @@ -553,11 +537,11 @@ final class TimesheetController extends BaseApiController } /** - * Switch the export state of a timesheet record to (un-)lock it + * Toggle timesheet export state */ #[IsGranted('edit_export', 'timesheet')] #[OA\Response(response: 200, description: 'Switches the exported state on the record and therefor locks / unlocks it for further updates. Needs edit_export_*_timesheet permission.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to switch export state', required: true)] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to switch export state', required: true)] #[Route(methods: ['PATCH'], path: '/{id}/export', name: 'export_timesheet', requirements: ['id' => '\d+'])] public function exportAction(Timesheet $timesheet): Response { @@ -567,7 +551,7 @@ final class TimesheetController extends BaseApiController $timesheet->setExported(!$timesheet->isExported()); - $this->service->updateTimesheet($timesheet); + $this->service->saveTimesheet($timesheet); $view = new View($timesheet, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); @@ -576,11 +560,11 @@ final class TimesheetController extends BaseApiController } /** - * Sets the value of a meta-field for an existing timesheet. + * Update timesheet custom-field */ #[IsGranted('edit', 'timesheet')] #[OA\Response(response: 200, description: 'Sets the value of an existing/configured meta-field. You cannot create unknown meta-fields, if the given name is not a configured meta-field, this will return an exception.', content: new OA\JsonContent(ref: '#/components/schemas/TimesheetEntity'))] - #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet record ID to set the meta-field value for', required: true)] + #[OA\Parameter(name: 'id', in: 'path', description: 'Timesheet ID to set the meta-field value for', required: true)] #[Route(methods: ['PATCH'], path: '/{id}/meta', requirements: ['id' => '\d+'])] #[Rest\RequestParam(name: 'name', strict: true, nullable: false, description: 'The meta-field name')] #[Rest\RequestParam(name: 'value', strict: true, nullable: false, description: 'The meta-field value')] @@ -597,7 +581,7 @@ final class TimesheetController extends BaseApiController $meta->setValue($paramFetcher->get('value')); - $this->service->updateTimesheet($timesheet); + $this->service->saveTimesheet($timesheet); $view = new View($timesheet, 200); $view->getContext()->setGroups(self::GROUPS_ENTITY); diff --git a/src/API/UserController.php b/src/API/UserController.php index a9cf50f11..c89d2423c 100644 --- a/src/API/UserController.php +++ b/src/API/UserController.php @@ -11,6 +11,7 @@ namespace App\API; use App\Entity\AccessToken; use App\Entity\User; +use App\Entity\UserPreference; use App\Event\PrepareUserEvent; use App\Form\API\UserApiCreateForm; use App\Form\API\UserApiEditForm; @@ -23,10 +24,12 @@ use FOS\RestBundle\Controller\Annotations as Rest; use FOS\RestBundle\Request\ParamFetcherInterface; use FOS\RestBundle\View\View; use FOS\RestBundle\View\ViewHandlerInterface; +use Nelmio\ApiDocBundle\Attribute\Model; use OpenApi\Attributes as OA; use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; @@ -47,15 +50,15 @@ final class UserController extends BaseApiController } /** - * Returns the collection of users (which are visible to the user) + * Fetch users */ #[IsGranted('view_user')] - #[OA\Response(response: 200, description: 'Returns the collection of users. Required permission: view_user', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/UserCollection')))] + #[OA\Response(response: 200, description: 'Returns a collection of users. Required permission: view_user', content: new OA\JsonContent(type: 'array', items: new OA\Items(ref: '#/components/schemas/UserCollection')))] #[Route(methods: ['GET'], path: '', name: 'get_users')] #[Rest\QueryParam(name: 'visible', requirements: '1|2|3', default: 1, strict: true, nullable: true, description: 'Visibility status to filter users: 1=visible, 2=hidden, 3=all')] #[Rest\QueryParam(name: 'orderBy', requirements: 'id|username|alias|email', strict: true, nullable: true, description: 'The field by which results will be ordered. Allowed values: id, username, alias, email (default: username)')] #[Rest\QueryParam(name: 'order', requirements: 'ASC|DESC', strict: true, nullable: true, description: 'The result order. Allowed values: ASC, DESC (default: ASC)')] - #[Rest\QueryParam(name: 'term', description: 'Free search term')] + #[Rest\QueryParam(name: 'term', description: 'Free search term', nullable: true)] #[Rest\QueryParam(name: 'full', requirements: '0|1|true|false', strict: true, nullable: true, description: 'Allows to fetch full objects including subresources. Allowed values: 0|1|false|true (default: false)')] public function cgetAction(ParamFetcherInterface $paramFetcher): Response { @@ -63,7 +66,7 @@ final class UserController extends BaseApiController $query->setCurrentUser($this->getUser()); $visible = $paramFetcher->get('visible'); - if (\is_string($visible) && $visible !== '') { + if (is_numeric($visible)) { $query->setVisibility((int) $visible); } @@ -97,7 +100,7 @@ final class UserController extends BaseApiController } /** - * Return one user entity + * Fetch user */ #[IsGranted('view', 'profile')] #[OA\Response(response: 200, description: 'Return one user entity.', content: new OA\JsonContent(ref: '#/components/schemas/UserEntity'))] @@ -116,7 +119,7 @@ final class UserController extends BaseApiController } /** - * Return the current user entity + * Fetch current user */ #[OA\Response(response: 200, description: 'Return the current user entity.', content: new OA\JsonContent(ref: '#/components/schemas/UserEntity'))] #[Route(methods: ['GET'], path: '/me', name: 'me_user')] @@ -129,7 +132,7 @@ final class UserController extends BaseApiController } /** - * Creates a new user + * Create user */ #[IsGranted('create_user')] #[OA\Post(description: 'Creates a new user and returns it afterwards')] @@ -199,7 +202,9 @@ final class UserController extends BaseApiController } /** - * Delete an API token for the current user + * Delete API token + * + * This ONLY works if the given API token exists and belongs to the current user */ #[OA\Delete(responses: [new OA\Response(response: 200, description: 'Success if the token could be deleted.')])] #[OA\Parameter(name: 'id', in: 'path', description: 'The API token ID to remove', required: true)] @@ -222,4 +227,44 @@ final class UserController extends BaseApiController return $this->viewHandler->handle($view); } + + /** + * Update user preferences + */ + #[IsGranted('edit', 'profile')] + #[OA\Response(response: 200, description: 'Sets the value of a consifgured preference. You cannot create unknown preferences: if the given name is not configured, an exception will be raised.', content: new OA\JsonContent(ref: '#/components/schemas/UserEntity'))] + #[OA\Parameter(name: 'id', in: 'path', description: 'User ID to set the custom-field value for', required: true)] + #[OA\RequestBody(required: true, content: new OA\JsonContent(type: 'array', items: new OA\Items(new Model(type: UserPreference::class))))] + #[Route(methods: ['PATCH'], path: '/{id}/preferences', requirements: ['id' => '\d+'])] + public function updateUserPreference(User $profile, Request $request, EventDispatcherInterface $dispatcher): Response + { + $event = new PrepareUserEvent($profile, false); + $dispatcher->dispatch($event); + + foreach ($request->request->all() as $preference) { + // why is this not handled by FosRestBundle ? + if (!\is_array($preference)) { + throw new BadRequestHttpException('Invalid request, array expected'); + } + if (!\array_key_exists('name', $preference) || !\array_key_exists('value', $preference)) { + throw new BadRequestHttpException('Missing required parameter "name" or "value"'); + } + + $name = $preference['name']; + $value = $preference['value']; + + if (null === ($meta = $profile->getPreference($name))) { + throw $this->createNotFoundException(\sprintf('Unknown custom-field "%s" requested', $name)); + } + + $meta->setValue($value); + } + + $this->repository->saveUser($profile); + + $view = new View($profile, 200); + $view->getContext()->setGroups(self::GROUPS_ENTITY); + + return $this->viewHandler->handle($view); + } } diff --git a/src/API/ViewHandler.php b/src/API/ViewHandler.php new file mode 100644 index 000000000..492c2dd81 --- /dev/null +++ b/src/API/ViewHandler.php @@ -0,0 +1,78 @@ +baseViewHandler->setExclusionStrategyGroups($groups); + } + + public function setExclusionStrategyVersion(string $version): void + { + $this->baseViewHandler->setExclusionStrategyVersion($version); + } + + public function setSerializeNullStrategy(bool $isEnabled): void + { + $this->baseViewHandler->setSerializeNullStrategy($isEnabled); + } + + public function supports(string $format): bool + { + return $this->baseViewHandler->supports($format); + } + + public function registerHandler(string $format, callable $callable): void + { + $this->baseViewHandler->registerHandler($format, $callable); + } + + public function handle(View $view, ?Request $request = null): Response + { + $data = $view->getData(); + + if ($data instanceof Pagination) { + $results = (array) $data->getCurrentPageResults(); + $view->setData($results); + + $view->setHeader('X-Page', (string) $data->getCurrentPage()); + $view->setHeader('X-Total-Count', (string) $data->getNbResults()); + $view->setHeader('X-Total-Pages', (string) $data->getNbPages()); + $view->setHeader('X-Per-Page', (string) $data->getMaxPerPage()); + } + + return $this->baseViewHandler->handle($view, $request); + } + + public function createRedirectResponse(View $view, string $location, string $format): Response + { + return $this->baseViewHandler->createRedirectResponse($view, $location, $format); + } + + public function createResponse(View $view, Request $request, string $format): Response + { + return $this->baseViewHandler->createResponse($view, $request, $format); + } +} diff --git a/src/Activity/ActivityService.php b/src/Activity/ActivityService.php index 8daf7e947..20238329f 100644 --- a/src/Activity/ActivityService.php +++ b/src/Activity/ActivityService.php @@ -40,6 +40,11 @@ class ActivityService { } + public function loadMetaFields(Activity $activity): void + { + $this->dispatcher->dispatch(new ActivityMetaDefinitionEvent($activity)); + } + public function createNewActivity(?Project $project = null): Activity { $activity = new Activity(); @@ -49,12 +54,24 @@ class ActivityService $activity->setProject($project); } - $this->dispatcher->dispatch(new ActivityMetaDefinitionEvent($activity)); + $this->loadMetaFields($activity); $this->dispatcher->dispatch(new ActivityCreateEvent($activity)); return $activity; } + public function saveActivity(Activity $activity): Activity + { + if ($activity->isNew()) { + return $this->saveNewActivity($activity); // @phpstan-ignore method.deprecated + } else { + return $this->updateActivity($activity); // @phpstan-ignore method.deprecated + } + } + + /** + * @deprecated since 2.35 - use saveActivity() instead + */ public function saveNewActivity(Activity $activity): Activity { if (null !== $activity->getId()) { @@ -70,10 +87,10 @@ class ActivityService return $activity; } - public function deleteActivity(Activity $activity): void + public function deleteActivity(Activity $activity, ?Activity $replace = null): void { - $this->dispatcher->dispatch(new ActivityDeleteEvent($activity)); - $this->repository->deleteActivity($activity); + $this->dispatcher->dispatch(new ActivityDeleteEvent($activity, $replace)); + $this->repository->deleteActivity($activity, $replace); } /** @@ -85,10 +102,13 @@ class ActivityService $errors = $this->validator->validate($activity, null, $groups); if ($errors->count() > 0) { - throw new ValidationFailedException($errors, 'Validation Failed'); + throw new ValidationFailedException($errors); } } + /** + * @deprecated since 2.35 - use saveActivity() instead + */ public function updateActivity(Activity $activity): Activity { $this->validateActivity($activity); @@ -120,12 +140,23 @@ class ActivityService // we cannot use max(number) because a varchar column returns unexpected results $start = $this->repository->countActivity(); $i = 0; + $createDate = new \DateTimeImmutable(); do { $start++; - $numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($start): string|int { + $numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($start, $createDate): string|int { return match ($format) { + 'Y' => $createDate->format('Y'), + 'y' => $createDate->format('y'), + 'M' => $createDate->format('m'), + 'm' => $createDate->format('n'), + 'D' => $createDate->format('d'), + 'd' => $createDate->format('j'), + 'YY' => (int) $createDate->format('Y') + $increaseBy, + 'yy' => (int) $createDate->format('y') + $increaseBy, + 'MM' => (int) $createDate->format('m') + $increaseBy, + 'DD' => (int) $createDate->format('d') + $increaseBy, 'ac' => $start + $increaseBy, default => $originalFormat, }; diff --git a/src/Activity/ActivityStatisticService.php b/src/Activity/ActivityStatisticService.php index 9c8026d9f..b41783d65 100644 --- a/src/Activity/ActivityStatisticService.php +++ b/src/Activity/ActivityStatisticService.php @@ -20,7 +20,7 @@ use DateTimeImmutable; use DateTimeInterface; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\QueryBuilder; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Psr\EventDispatcher\EventDispatcherInterface; /** * @final @@ -162,7 +162,7 @@ class ActivityStatisticService /** * @param Activity[] $activities */ - private function createStatisticQueryBuilder(array $activities, \DateTimeInterface $begin = null, ?\DateTimeInterface $end = null): QueryBuilder + private function createStatisticQueryBuilder(array $activities, ?\DateTimeInterface $begin = null, ?\DateTimeInterface $end = null): QueryBuilder { $qb = $this->timesheetRepository->createQueryBuilder('t'); $qb diff --git a/src/Audit/Loggable.php b/src/Audit/Loggable.php new file mode 100644 index 000000000..2eef39754 --- /dev/null +++ b/src/Audit/Loggable.php @@ -0,0 +1,21 @@ +date; + } + + public function setDate(?DateTimeInterface $date): void + { + $this->date = $date; + } + + public function getView(): string + { + return $this->view; + } + + public function setView(string $view): void + { + $this->view = match($view){ + 'agendaDay', 'day' => 'day', + 'agendaWeek', 'week' => 'week', + default => 'month', + }; + } + + public function getUser(): ?User + { + return $this->user; + } + + public function setUser(?User $user): void + { + $this->user = $user; + } +} diff --git a/src/Command/AbstractBundleInstallerCommand.php b/src/Command/AbstractBundleInstallerCommand.php index 567e3ddfe..4c3e3077c 100755 --- a/src/Command/AbstractBundleInstallerCommand.php +++ b/src/Command/AbstractBundleInstallerCommand.php @@ -14,9 +14,11 @@ use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Exception\LogicException; use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; use Symfony\Component\Filesystem\Exception\FileNotFoundException; +use Symfony\Component\Process\PhpSubprocess; /** * Extend this class if you have a plugin that requires installation steps. @@ -25,8 +27,6 @@ abstract class AbstractBundleInstallerCommand extends Command { /** * Returns the base directory to the Kimai installation. - * - * @return string */ protected function getRootDirectory(): string { @@ -37,20 +37,27 @@ abstract class AbstractBundleInstallerCommand extends Command } /** - * If your bundle ships assets, that need to be available in the public/ directory, - * then overwrite this method and return: . - * - * @return bool + * Return if your bundle ships assets for the public/ directory. */ protected function hasAssets(): bool { return false; } + private function hasMigrations(SymfonyStyle $io): bool + { + $config = $this->getMigrationConfigFilename(); + + if ($config === null) { + return false; + } + + return true; + } + /** - * Returns an absolute filename to your doctrine migrations configuration, if you want to install database tables. - * - * @return string|null + * Returns an absolute filename to your doctrine migrations configuration + * if you want to run database migrations. */ protected function getMigrationConfigFilename(): ?string { @@ -59,16 +66,12 @@ abstract class AbstractBundleInstallerCommand extends Command /** * Returns the bundle short name for the installer command. - * - * @return string */ abstract protected function getBundleCommandNamePart(): string; /** * Returns the full name fo this command. * Please stick to the standard and overwrite getBundleCommandNamePart() only. - * - * @return string */ protected function getInstallerCommandName(): string { @@ -77,8 +80,6 @@ abstract class AbstractBundleInstallerCommand extends Command /** * Returns the bundles real name (same as your namespace). - * - * @return string */ protected function getBundleName(): string { @@ -100,6 +101,8 @@ abstract class AbstractBundleInstallerCommand extends Command ->setName($this->getInstallerCommandName()) ->setDescription('Install the bundle: ' . $this->getBundleName()) ->setHelp('This command will perform the basic installation steps to get the bundle up and running.') + ->addOption('database', null, InputOption::VALUE_NONE, 'Only run the database installation') + ->addOption('assets', null, InputOption::VALUE_NONE, 'Only run the asset installation') ; } @@ -107,6 +110,15 @@ abstract class AbstractBundleInstallerCommand extends Command { $io = new SymfonyStyle($input, $output); + $noAssets = $input->getOption('database'); + $onlyAssets = $input->getOption('assets'); + + if ($noAssets && $onlyAssets) { + $io->error('Options --assets and --database are mutually exclusive'); + + return Command::FAILURE; + } + // many users execute the bin/console command from arbitrary locations // this will make sure that relative paths (like doctrine migrations) work as expected $path = getcwd(); @@ -117,17 +129,19 @@ abstract class AbstractBundleInstallerCommand extends Command \sprintf('Starting installation of plugin: %s ...', $bundleName) ); - try { - $this->importMigrations($io, $output); - } catch (\Exception $ex) { - $io->error( - \sprintf('Failed to install database for bundle %s. %s', $bundleName, $ex->getMessage()) - ); + if (!$onlyAssets && $this->hasMigrations($io)) { + try { + $this->importMigrations($io, $output); + } catch (\Exception $ex) { + $io->error( + \sprintf('Failed to install database for bundle %s. %s', $bundleName, $ex->getMessage()) + ); - return Command::FAILURE; + return Command::FAILURE; + } } - if ($this->hasAssets()) { + if (!$noAssets && $this->hasAssets()) { try { $this->installAssets($io, $output); } catch (\Exception $ex) { @@ -148,7 +162,7 @@ abstract class AbstractBundleInstallerCommand extends Command return Command::SUCCESS; } - protected function installAssets(SymfonyStyle $io, OutputInterface $output): void + private function installAssets(SymfonyStyle $io, OutputInterface $output): void { $command = $this->getApplication()->find('assets:install'); $cmdInput = new ArrayInput([]); @@ -160,11 +174,11 @@ abstract class AbstractBundleInstallerCommand extends Command $io->writeln(''); } - protected function importMigrations(SymfonyStyle $io, OutputInterface $output): void + private function importMigrations(SymfonyStyle $io, OutputInterface $output): void { $config = $this->getMigrationConfigFilename(); - if (null === $config) { + if ($config === null) { return; } @@ -175,13 +189,28 @@ abstract class AbstractBundleInstallerCommand extends Command // prevent windows from breaking $config = str_replace('/', DIRECTORY_SEPARATOR, $config); - $command = $this->getApplication()->find('doctrine:migrations:migrate'); - $cmdInput = new ArrayInput(['--allow-no-migration' => true, '--configuration' => $config]); - $cmdInput->setInteractive(false); - if (0 !== $command->run($cmdInput, $output)) { + $process = new PhpSubprocess( + [ + 'bin/console', + 'doctrine:migrations:migrate', + '--allow-no-migration', + '--no-interaction', + '--configuration=' . $config + ], + $this->getRootDirectory() + ); + $process->run(); + + if (!$process->isSuccessful()) { + $io->error('Failed to install bundle database: ' . PHP_EOL . $config); + $io->error($process->getErrorOutput()); throw new \Exception('Problem occurred while executing migrations.'); } + if ($io->isVerbose()) { + $io->write($process->getOutput()); + } + $io->writeln(''); } } diff --git a/src/Command/AbstractResetCommand.php b/src/Command/AbstractResetCommand.php index 0a45d8e8c..ab47aceb3 100644 --- a/src/Command/AbstractResetCommand.php +++ b/src/Command/AbstractResetCommand.php @@ -116,7 +116,7 @@ abstract class AbstractResetCommand extends Command } try { - $command = $this->getApplication()->find('doctrine:query:sql'); + $command = $this->getApplication()->find('dbal:run-sql'); $command->run(new ArrayInput(['sql' => 'DROP TABLE IF EXISTS migration_versions']), $output); } catch (Exception $ex) { $io->error('Failed to drop migration_versions table: ' . $ex->getMessage()); @@ -125,7 +125,7 @@ abstract class AbstractResetCommand extends Command } try { - $command = $this->getApplication()->find('doctrine:query:sql'); + $command = $this->getApplication()->find('dbal:run-sql'); $command->run(new ArrayInput(['sql' => 'DROP TABLE IF EXISTS kimai2_sessions']), $output); } catch (Exception $ex) { $io->error('Failed to drop kimai2_sessions table: ' . $ex->getMessage()); diff --git a/src/Command/AbstractRoleCommand.php b/src/Command/AbstractRoleCommand.php index 95b10e21e..becc4aaca 100644 --- a/src/Command/AbstractRoleCommand.php +++ b/src/Command/AbstractRoleCommand.php @@ -20,19 +20,16 @@ use Symfony\Component\Console\Style\SymfonyStyle; abstract class AbstractRoleCommand extends Command { - public function __construct(private UserService $userService) + public function __construct(private readonly UserService $userService) { parent::__construct(); } protected function configure(): void { - $this - ->setDefinition([ - new InputArgument('username', InputArgument::REQUIRED, 'The username'), - new InputArgument('role', InputArgument::OPTIONAL, 'The role'), - new InputOption('super', null, InputOption::VALUE_NONE, 'Instead specifying role, use this to quickly add the super administrator role'), - ]); + $this->addArgument('username', InputArgument::REQUIRED, 'The username'); + $this->addArgument('role', InputArgument::OPTIONAL, 'The role'); + $this->addOption('super', null, InputOption::VALUE_NONE, 'Instead specifying role, use this to quickly add the super administrator role'); } protected function execute(InputInterface $input, OutputInterface $output): int diff --git a/src/Command/AbstractUserCommand.php b/src/Command/AbstractUserCommand.php index c0f15f8a7..4be9b74d4 100644 --- a/src/Command/AbstractUserCommand.php +++ b/src/Command/AbstractUserCommand.php @@ -26,7 +26,7 @@ abstract class AbstractUserCommand extends Command $passwordQuestion = new Question('Please enter the password: '); $passwordQuestion->setHidden(true); - $passwordQuestion->setHiddenFallback(false); + $passwordQuestion->setHiddenFallback(true); $passwordQuestion->setValidator(function (?string $value) { $password = trim($value); if (empty($password)) { diff --git a/src/Command/ActivateUserCommand.php b/src/Command/ActivateUserCommand.php index c82ff5024..22f70508c 100644 --- a/src/Command/ActivateUserCommand.php +++ b/src/Command/ActivateUserCommand.php @@ -17,7 +17,7 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:user:activate')] +#[AsCommand(name: 'kimai:user:activate', description: 'Activate a user')] final class ActivateUserCommand extends Command { public function __construct(private UserService $userService) @@ -28,10 +28,7 @@ final class ActivateUserCommand extends Command protected function configure(): void { $this - ->setDescription('Activate a user') - ->setDefinition([ - new InputArgument('username', InputArgument::REQUIRED, 'The username'), - ]) + ->addArgument('username', InputArgument::REQUIRED, 'The username') ->setHelp( <<<'EOT' The kimai:user:activate command activates a user (so they will be able to log in): diff --git a/src/Command/ChangePasswordCommand.php b/src/Command/ChangePasswordCommand.php index 9657667a7..e1afa15bc 100644 --- a/src/Command/ChangePasswordCommand.php +++ b/src/Command/ChangePasswordCommand.php @@ -18,7 +18,7 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:user:password')] +#[AsCommand(name: 'kimai:user:password', description: 'Change the password of a user')] final class ChangePasswordCommand extends AbstractUserCommand { public function __construct(private UserService $userService) @@ -29,11 +29,8 @@ final class ChangePasswordCommand extends AbstractUserCommand protected function configure(): void { $this - ->setDescription('Change the password of a user.') - ->setDefinition([ - new InputArgument('username', InputArgument::REQUIRED, 'The username'), - new InputArgument('password', InputArgument::OPTIONAL, 'The password'), - ]) + ->addArgument('username', InputArgument::REQUIRED, 'The username') + ->addArgument('password', InputArgument::OPTIONAL, 'The password') ->setHelp( <<<'EOT' The kimai:user:password command changes the password of a user: diff --git a/src/Command/CreateUserCommand.php b/src/Command/CreateUserCommand.php index 015c73bb9..4e06ed786 100644 --- a/src/Command/CreateUserCommand.php +++ b/src/Command/CreateUserCommand.php @@ -20,7 +20,7 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:user:create')] +#[AsCommand(name: 'kimai:user:create', description: 'Create a new user')] final class CreateUserCommand extends AbstractUserCommand { public function __construct(private UserService $userService) @@ -33,7 +33,6 @@ final class CreateUserCommand extends AbstractUserCommand $roles = implode(',', [User::DEFAULT_ROLE, User::ROLE_ADMIN]); $this - ->setDescription('Create a new user') ->setHelp('This command allows you to create a new user.') ->addArgument('username', InputArgument::REQUIRED, 'A name for the new user (must be unique)') ->addArgument('email', InputArgument::REQUIRED, 'Email address of the new user (must be unique)') diff --git a/src/Command/DeactivateUserCommand.php b/src/Command/DeactivateUserCommand.php index 706b92195..60452d170 100644 --- a/src/Command/DeactivateUserCommand.php +++ b/src/Command/DeactivateUserCommand.php @@ -17,7 +17,7 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:user:deactivate')] +#[AsCommand(name: 'kimai:user:deactivate', description: 'Deactivate a user')] final class DeactivateUserCommand extends Command { public function __construct(private UserService $userService) @@ -28,10 +28,7 @@ final class DeactivateUserCommand extends Command protected function configure(): void { $this - ->setDescription('Deactivate a user') - ->setDefinition([ - new InputArgument('username', InputArgument::REQUIRED, 'The username'), - ]) + ->addArgument('username', InputArgument::REQUIRED, 'The username') ->setHelp( <<<'EOT' The kimai:user:deactivate command deactivates a user (will not be able to log in) diff --git a/src/Command/DemoteUserCommand.php b/src/Command/DemoteUserCommand.php index 8cf69f796..4de781d7f 100644 --- a/src/Command/DemoteUserCommand.php +++ b/src/Command/DemoteUserCommand.php @@ -14,7 +14,7 @@ use App\User\UserService; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:user:demote')] +#[AsCommand(name: 'kimai:user:demote', description: 'Demote a user by removing a role')] final class DemoteUserCommand extends AbstractRoleCommand { protected function configure(): void @@ -22,7 +22,6 @@ final class DemoteUserCommand extends AbstractRoleCommand parent::configure(); $this - ->setDescription('Demote a user by removing a role') ->setHelp( <<<'EOT' The kimai:user:demote command demotes a user by removing a role diff --git a/src/Command/ExportCreateCommand.php b/src/Command/ExportCreateCommand.php index 610333273..531cc3254 100644 --- a/src/Command/ExportCreateCommand.php +++ b/src/Command/ExportCreateCommand.php @@ -31,7 +31,7 @@ use Symfony\Component\Mailer\MailerInterface; use Symfony\Contracts\Translation\LocaleAwareInterface; use Symfony\Contracts\Translation\TranslatorInterface; -#[AsCommand(name: 'kimai:export:create')] +#[AsCommand(name: 'kimai:export:create', description: 'Create exports')] final class ExportCreateCommand extends Command { public function __construct( @@ -49,7 +49,6 @@ final class ExportCreateCommand extends Command protected function configure(): void { $this - ->setDescription('Create exports') ->setHelp('Create exports by several different filters and sent them via email.') ->addOption('username', null, InputOption::VALUE_REQUIRED, 'The user to be used for generating the export (e.g. used for permissions and decimal setting)') ->addOption('start', null, InputOption::VALUE_OPTIONAL, 'Start date (format: 2020-01-01, default: start of the month)', null) diff --git a/src/Command/InstallCommand.php b/src/Command/InstallCommand.php index 1468fca13..d3384378d 100644 --- a/src/Command/InstallCommand.php +++ b/src/Command/InstallCommand.php @@ -25,7 +25,7 @@ use Symfony\Component\Console\Style\SymfonyStyle; * * @codeCoverageIgnore */ -#[AsCommand(name: 'kimai:install', description: 'Kimai installation command', aliases: ['kimai:update'])] +#[AsCommand(name: 'kimai:install', description: 'Install and update Kimai', aliases: ['kimai:update'])] final class InstallCommand extends Command { public function __construct(private readonly Connection $connection) diff --git a/src/Command/InvoiceCreateCommand.php b/src/Command/InvoiceCreateCommand.php index 1cf73822c..514a379f5 100644 --- a/src/Command/InvoiceCreateCommand.php +++ b/src/Command/InvoiceCreateCommand.php @@ -34,19 +34,19 @@ use Symfony\Component\Filesystem\Filesystem; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\Response; -#[AsCommand(name: 'kimai:invoice:create')] +#[AsCommand(name: 'kimai:invoice:create', description: 'Create invoices')] final class InvoiceCreateCommand extends Command { private ?string $previewDirectory = null; private bool $previewUniqueFile = false; public function __construct( - private ServiceInvoice $serviceInvoice, - private CustomerRepository $customerRepository, - private ProjectRepository $projectRepository, - private InvoiceTemplateRepository $invoiceTemplateRepository, - private UserRepository $userRepository, - private EventDispatcherInterface $eventDispatcher + private readonly ServiceInvoice $serviceInvoice, + private readonly CustomerRepository $customerRepository, + private readonly ProjectRepository $projectRepository, + private readonly InvoiceTemplateRepository $invoiceTemplateRepository, + private readonly UserRepository $userRepository, + private readonly EventDispatcherInterface $eventDispatcher ) { parent::__construct(); } @@ -54,7 +54,6 @@ final class InvoiceCreateCommand extends Command protected function configure(): void { $this - ->setDescription('Create invoices') ->setHelp('This command allows to create invoices by several different filters.') ->addOption('user', null, InputOption::VALUE_REQUIRED, 'The user to be used for generating the invoices') ->addOption('start', null, InputOption::VALUE_OPTIONAL, 'Start date (format: 2020-01-01, default: start of the month)', null) @@ -256,9 +255,6 @@ final class InvoiceCreateCommand extends Command /** * @param Project[] $projects - * @param InvoiceQuery $defaultQuery - * @param InputInterface $input - * @param OutputInterface $output * @return Invoice[] * @throws \Exception */ @@ -281,19 +277,25 @@ final class InvoiceCreateCommand extends Command $tpl = $this->getTemplateForCustomer($input, $customer); if (null === $tpl) { - $io->warning(\sprintf('Could not find invoice template for project "%s", skipping!', $project->getName())); + $io->warning('Could not find invoice template for project, skipping.'); continue; } $query->setTemplate($tpl); try { + $model = $this->serviceInvoice->createModel($query); + // this check makes sure to only fetch invoices with records + if (\count($model->getEntries()) === 0) { + continue; + } + if (null !== $this->previewDirectory) { - $invoices[] = $this->saveInvoicePreview($this->serviceInvoice->renderInvoice($this->serviceInvoice->createModel($query), $this->eventDispatcher)); + $invoices[] = $this->saveInvoicePreview($this->serviceInvoice->renderInvoice($model, $this->eventDispatcher)); } else { - $invoices[] = $this->serviceInvoice->createInvoice($this->serviceInvoice->createModel($query), $this->eventDispatcher); + $invoices[] = $this->serviceInvoice->createInvoice($model, $this->eventDispatcher); } } catch (\Exception $ex) { - $io->error(\sprintf('Failed to create invoice for project "%s" with: %s', $project->getName(), $ex->getMessage())); + $io->error(\sprintf('Failed to create invoice for project with: %s', $ex->getMessage())); } } @@ -334,8 +336,6 @@ final class InvoiceCreateCommand extends Command /** * @param Customer[] $customers - * @param InvoiceQuery $defaultQuery - * @param InputInterface $input * @return Invoice[] * @throws \Exception */ @@ -352,19 +352,25 @@ final class InvoiceCreateCommand extends Command $tpl = $this->getTemplateForCustomer($input, $customer); if (null === $tpl) { - $io->warning(\sprintf('Could not find invoice template for customer "%s", skipping!', $customer->getName())); + $io->warning('Could not find invoice template for customer, skipping.'); continue; } $query->setTemplate($tpl); try { + $model = $this->serviceInvoice->createModel($query); + // this check makes sure to only fetch invoices with records + if (\count($model->getEntries()) === 0) { + continue; + } + if (null !== $this->previewDirectory) { - $invoices[] = $this->saveInvoicePreview($this->serviceInvoice->renderInvoice($this->serviceInvoice->createModel($query), $this->eventDispatcher)); + $invoices[] = $this->saveInvoicePreview($this->serviceInvoice->renderInvoice($model, $this->eventDispatcher)); } else { - $invoices[] = $this->serviceInvoice->createInvoice($this->serviceInvoice->createModel($query), $this->eventDispatcher); + $invoices[] = $this->serviceInvoice->createInvoice($model, $this->eventDispatcher); } } catch (\Exception $ex) { - $io->error(\sprintf('Failed to create invoice for customer "%s" with: %s', $customer->getName(), $ex->getMessage())); + $io->error(\sprintf('Failed to create invoice for customer with: %s', $ex->getMessage())); } } @@ -372,10 +378,7 @@ final class InvoiceCreateCommand extends Command } /** - * @param InputInterface $input - * @param OutputInterface $output * @param Invoice[] $invoices - * @return int */ protected function renderInvoiceResult(InputInterface $input, OutputInterface $output, array $invoices): int { @@ -413,7 +416,7 @@ final class InvoiceCreateCommand extends Command $file = $this->serviceInvoice->getInvoiceFile($invoice); if (null === $file) { $io->warning( - \sprintf('Created invoice with ID %s, but file was not found %s', $invoice->getId(), $invoice->getInvoiceFilename()) + \sprintf('Created invoice with ID %s, but file was not found %s', $invoice->getId() ?? 'unknown', $invoice->getInvoiceFilename() ?? 'unknown') ); continue; } @@ -449,7 +452,6 @@ final class InvoiceCreateCommand extends Command } /** - * @param InvoiceQuery $invoiceQuery * @return Customer[] */ private function getActiveCustomers(InvoiceQuery $invoiceQuery): array @@ -467,7 +469,6 @@ final class InvoiceCreateCommand extends Command } /** - * @param InvoiceQuery $invoiceQuery * @return Project[] */ private function getActiveProjects(InvoiceQuery $invoiceQuery): array diff --git a/src/Command/MailTestCommand.php b/src/Command/MailTestCommand.php index 9f4b54d7a..05987e14a 100644 --- a/src/Command/MailTestCommand.php +++ b/src/Command/MailTestCommand.php @@ -16,7 +16,6 @@ use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; -use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Mime\Email; @@ -31,7 +30,6 @@ final class MailTestCommand extends Command protected function configure(): void { $this->addArgument('to', InputArgument::REQUIRED, 'The email address to send the email to'); - $this->addOption('from', null, InputOption::VALUE_OPTIONAL, 'Deprecated: uses the MAILER_FROM env variable.'); } protected function execute(InputInterface $input, OutputInterface $output): int @@ -41,10 +39,6 @@ final class MailTestCommand extends Command throw new \InvalidArgumentException('Need a non-empty "to" address'); } - if ($input->getOption('from') !== null) { - throw new \InvalidArgumentException('The "from" option is deprecated and will be ignored'); - } - $message = new Email(); $message->to($to); $message->subject('Test email - ' . Constants::SOFTWARE); diff --git a/src/Command/PluginCommand.php b/src/Command/PluginCommand.php index c704acc67..10c1d99a1 100644 --- a/src/Command/PluginCommand.php +++ b/src/Command/PluginCommand.php @@ -26,7 +26,8 @@ final class PluginCommand extends Command { public function __construct( private readonly PluginManager $pluginManager, - private readonly PackageManager $packageManager + private readonly PackageManager $packageManager, + private readonly string $projectDirectory ) { parent::__construct(); @@ -69,17 +70,16 @@ final class PluginCommand extends Command } } - // using getApplication()->find('doctrine:migrations:migrate') does NOT work here - // because the Doctrine command can only be executed once - // if run more than once it fails with a "Container is frozen" exception - - $process = new PhpSubprocess([ - 'bin/console', - 'doctrine:migrations:migrate', - '--allow-no-migration', - '--no-interaction', - '--configuration=' . $config - ]); + $process = new PhpSubprocess( + [ + 'bin/console', + 'doctrine:migrations:migrate', + '--allow-no-migration', + '--no-interaction', + '--configuration=' . $config + ], + $this->projectDirectory + ); $process->run(); if (!$process->isSuccessful()) { diff --git a/src/Command/PromoteUserCommand.php b/src/Command/PromoteUserCommand.php index c003e446b..3dde5996a 100644 --- a/src/Command/PromoteUserCommand.php +++ b/src/Command/PromoteUserCommand.php @@ -14,7 +14,7 @@ use App\User\UserService; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:user:promote')] +#[AsCommand(name: 'kimai:user:promote', description: 'Promotes a user by adding a role')] final class PromoteUserCommand extends AbstractRoleCommand { protected function configure(): void @@ -22,7 +22,6 @@ final class PromoteUserCommand extends AbstractRoleCommand parent::configure(); $this - ->setDescription('Promotes a user by adding a role') ->setHelp( <<<'EOT' The kimai:user:promote command promotes a user by adding a role diff --git a/src/Command/RegenerateLocalesCommand.php b/src/Command/RegenerateLocalesCommand.php index aca0ad1d6..1ef6cd2d5 100644 --- a/src/Command/RegenerateLocalesCommand.php +++ b/src/Command/RegenerateLocalesCommand.php @@ -10,6 +10,7 @@ namespace App\Command; use App\Configuration\LocaleService; +use App\Utils\LocaleFormatter; use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; @@ -39,19 +40,19 @@ final class RegenerateLocalesCommand extends Command * * @var string[] */ - private array $noRegionCode = ['ar', 'id', 'pa', 'sl', 'ca']; + private array $noRegionCode = ['ar', 'id', 'pa', 'sl', 'ca', 'ta', 'bg']; /** - * A list of locales that will be activated, no matter if translation files exist for them. + * A list of locales that will be activated no matter if translation files exist for them. * * @var string[] */ private array $addLocaleToList = ['zh_Hant_TW']; /** - * A list of locales that will NOT be activated, as no translations exist by now. + * A list of locales that will NOT be activated, as not enough translations exist by now. * * @var string[] */ - private array $skipLocale = ['ca']; + private array $skipLocale = ['ca', 'et']; public function __construct( private readonly string $projectDirectory, @@ -86,6 +87,7 @@ final class RegenerateLocalesCommand extends Command $firstLevelLocales[] = $l; } $firstLevelLocales = array_unique(array_merge($firstLevelLocales, $this->addLocaleToList)); + $io->title('First level locales found'); $io->writeln(implode('|', $firstLevelLocales)); @@ -121,14 +123,17 @@ final class RegenerateLocalesCommand extends Command $appLocales[$locale] = LocaleService::DEFAULT_SETTINGS; } + $timeFormats = []; + $dateFormats = []; + // make sure all keys are registered for every locale foreach ($appLocales as $locale => $settings) { $settings['translation'] = \in_array($locale, $firstLevelLocales, true); // these are completely new since v2 // calculate everything with IntlFormatter - $shortDate = new \IntlDateFormatter($locale, \IntlDateFormatter::SHORT, \IntlDateFormatter::NONE); - $shortTime = new \IntlDateFormatter($locale, \IntlDateFormatter::NONE, \IntlDateFormatter::SHORT); + $shortDate = new \IntlDateFormatter($locale, LocaleFormatter::DATE_PATTERN, \IntlDateFormatter::NONE); + $shortTime = new \IntlDateFormatter($locale, \IntlDateFormatter::NONE, LocaleFormatter::TIME_PATTERN); $settings['date'] = $shortDate->getPattern(); if ($settings['date'] === false) { @@ -141,14 +146,32 @@ final class RegenerateLocalesCommand extends Command continue; } - // see https://github.com/kimai/kimai/issues/4402 - Korean time format failed parsing - // special case when time pattern starts with A / a => this will lead to an error + // CHINESE: contains the format character B - see https://github.com/kimai/kimai/issues/5496 + // It is an equivalent for "a" and acts like am/pm but will be prefixed instead of written after the time. + // This clashes with PHP Date format "B" (Swatch Internet time) and fails in other places, so we convert it into 24-hour format. + if (str_contains($settings['time'], 'Bh')) { + $settings['time'] = str_replace('Bh', 'H', $settings['time']); + } + + // BULGARIAN: postfix of d.MM.y \'г\'. causes problems in several areas + $settings['date'] = str_replace("\u{202f}'г'.", '', $settings['date']); + + // KOREAN: time format failed parsing - see https://github.com/kimai/kimai/issues/4402 + // Special case where time-patterns start with A / a => this will lead to an error // \DateTimeImmutable::getLastErrors() => Meridian can only come after an hour has been found if (str_contains($settings['time'], 'a ')) { $settings['time'] = str_replace('a ', '', $settings['time']) . ' a'; } $settings['time'] = str_replace("\u{202f}", ' ', $settings['time']); + // keep it simple, we don't need to convert it during runtime + // ISO-8601 defines that 24-hour format should always use a leading zero: use HH instead of H + $settings['time'] = str_replace('HH', 'H', $settings['time']); + $settings['time'] = str_replace('H', 'HH', $settings['time']); + + // format the year always with 4 letters - ISO-8601 + $settings['date'] = str_replace('yy', 'y', $settings['date']); + // make sure that sub-locales of a RTL language are also flagged as RTL $rtlLocale = $locale; if (substr_count($rtlLocale, '_') === 1) { @@ -159,6 +182,9 @@ final class RegenerateLocalesCommand extends Command // pre-fill all formats with the default locale settings $appLocales[$locale] = $settings; + + $timeFormats[$settings['time']] = $settings['time']; + $dateFormats[$settings['date']] = $settings['date']; } $removableDuplicates = []; @@ -198,8 +224,23 @@ final class RegenerateLocalesCommand extends Command // in the future this list should be reduced to the list of available translations, but for a long time users // could choose from the entire list of all locales, so we likely have to keep that forever ... - $io->title('List of "kimai_locales" for services.yaml'); - $io->writeln("['" . implode("', '", $locales) . "']"); + $listOfLocales = array_map(fn ($locale) => "'$locale'", $locales); + $filename = 'config/services.yaml'; + $targetFile = $this->projectDirectory . DIRECTORY_SEPARATOR . $filename; + $content = file_get_contents($targetFile); + if ($content === false) { + $io->error('Failed reading configuration file at ' . $filename); + } else { + $content = preg_replace( + '/^(\s*kimai_locales:\s*\[).*?(\])$/m', + '${1}' . implode(', ', $listOfLocales) . '${2}', + $content + ); + + file_put_contents($targetFile, $content); + + $io->success('Replaced locale definitions in: ' . $filename); + } ksort($appLocales); @@ -214,6 +255,12 @@ final class RegenerateLocalesCommand extends Command $io->success('Created new locale definition at: ' . $filename); + $io->writeln(\sprintf('Found %s date formats:', \count($dateFormats))); + $io->listing(array_keys($dateFormats)); + + $io->writeln(\sprintf('Found %s time formats:', \count($timeFormats))); + $io->listing(array_keys($timeFormats)); + return Command::SUCCESS; } } diff --git a/src/Command/ReloadCommand.php b/src/Command/ReloadCommand.php index e16a9d760..c7439427a 100644 --- a/src/Command/ReloadCommand.php +++ b/src/Command/ReloadCommand.php @@ -22,10 +22,13 @@ use Symfony\Component\Console\Style\SymfonyStyle; * * @codeCoverageIgnore */ -#[AsCommand(name: 'kimai:reload')] +#[AsCommand(name: 'kimai:reload', description: 'Reload Kimai caches')] final class ReloadCommand extends Command { - public function __construct(private string $projectDirectory, private string $kernelEnvironment) + public function __construct( + private readonly string $projectDirectory, + private readonly string $kernelEnvironment + ) { parent::__construct(); } @@ -42,10 +45,7 @@ final class ReloadCommand extends Command protected function configure(): void { - $this - ->setDescription('Reload Kimai caches') - ->setHelp('This command will validate the configurations and translations and then clear and rebuild the application cache.') - ; + $this->setHelp('This will validate configurations and translations and then clear and rebuild the application cache.'); } protected function execute(InputInterface $input, OutputInterface $output): int diff --git a/src/Command/ResetDevelopmentCommand.php b/src/Command/ResetDevelopmentCommand.php index b8a8c1b82..b89d49bb4 100644 --- a/src/Command/ResetDevelopmentCommand.php +++ b/src/Command/ResetDevelopmentCommand.php @@ -10,9 +10,10 @@ namespace App\Command; use Symfony\Component\Console\Attribute\AsCommand; -use Symfony\Component\Console\Input\ArrayInput; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\Console\Style\SymfonyStyle; +use Symfony\Component\Process\PhpSubprocess; /** * Command used to execute all the basic application bootstrapping AFTER "composer install" was executed. @@ -24,16 +25,36 @@ use Symfony\Component\Console\Output\OutputInterface; #[AsCommand(name: 'kimai:reset:dev', description: 'Resets the "development" environment')] final class ResetDevelopmentCommand extends AbstractResetCommand { - public function __construct(string $kernelEnvironment) + public function __construct(string $kernelEnvironment, private readonly string $projectDirectory) { parent::__construct($kernelEnvironment); } protected function loadData(InputInterface $input, OutputInterface $output): void { - $command = $this->getApplication()->find('doctrine:fixtures:load'); - $cmdInput = new ArrayInput([]); - $cmdInput->setInteractive(false); - $command->run($cmdInput, $output); + $io = new SymfonyStyle($input, $output); + + $io->writeln('Importing fixtures, this will take a while ... please be patient ...'); + + $process = new PhpSubprocess( + [ + 'bin/console', + 'doctrine:fixtures:load', + '--no-interaction', + ], + $this->projectDirectory + ); + $process->run(); + + if (!$process->isSuccessful()) { + $io->error('Failed to load fixtures'); + $io->error($process->getErrorOutput()); + } else { + if ($io->isVerbose()) { + $io->write($process->getOutput()); + } else { + $io->success('Fixtures loaded'); + } + } } } diff --git a/src/Command/ResetTestCommand.php b/src/Command/ResetTestCommand.php index 32d3df1a3..99afb1fff 100644 --- a/src/Command/ResetTestCommand.php +++ b/src/Command/ResetTestCommand.php @@ -100,7 +100,7 @@ final class ResetTestCommand extends AbstractResetCommand $user2->setAvatar('https://www.gravatar.com/avatar/00000000000000000000000000000000?d=retro&f=y'); $user2->setEnabled(true); $user2->setRoles(['ROLE_USER']); - $user2->setUserIdentifier('john_user'); + $user2->setUserIdentifier(UserFixtures::USERNAME_USER); $user2->setEmail('john_user@example.com'); $token2 = new AccessToken($user2, UserFixtures::DEFAULT_API_TOKEN . '_user'); $token2->setName('Test fixture'); @@ -118,41 +118,41 @@ final class ResetTestCommand extends AbstractResetCommand $token3 = new AccessToken($user3, UserFixtures::DEFAULT_API_TOKEN . '_inactive'); $token3->setName('Test fixture'); - $user4 = new User(); - $user4->setPreferenceValue(UserPreference::HOURLY_RATE, 35); - $user4->setAlias('Tony Maier'); - $user4->setRegisteredAt(new \DateTime('2018-02-06 23:28:57')); - $user4->setTitle('Head of Development'); - $user4->setAvatar('https://en.gravatar.com/userimage/3533186/bf2163b1dd23f3107a028af0195624e9.jpeg'); - $user4->setEnabled(true); - $user4->setRoles(['ROLE_TEAMLEAD']); - $user4->setUserIdentifier('tony_teamlead'); - $user4->setEmail('tony_teamlead@example.com'); - $token4 = new AccessToken($user4, UserFixtures::DEFAULT_API_TOKEN . '_teamlead'); + $userTeamlead = new User(); + $userTeamlead->setPreferenceValue(UserPreference::HOURLY_RATE, 35); + $userTeamlead->setAlias('Tony Maier'); + $userTeamlead->setRegisteredAt(new \DateTime('2018-02-06 23:28:57')); + $userTeamlead->setTitle('Head of Development'); + $userTeamlead->setAvatar('https://en.gravatar.com/userimage/3533186/bf2163b1dd23f3107a028af0195624e9.jpeg'); + $userTeamlead->setEnabled(true); + $userTeamlead->setRoles(['ROLE_TEAMLEAD']); + $userTeamlead->setUserIdentifier(UserFixtures::USERNAME_TEAMLEAD); + $userTeamlead->setEmail('tony_teamlead@example.com'); + $token4 = new AccessToken($userTeamlead, UserFixtures::DEFAULT_API_TOKEN . '_teamlead'); $token4->setName('Test fixture'); - $user5 = new User(); - $user5->setPreferenceValue(UserPreference::HOURLY_RATE, 81); - $user5->setAlias('Anna Smith'); - $user5->setRegisteredAt(new \DateTime('2018-02-06 23:28:57')); - $user5->setTitle('Administrator'); - $user5->setEnabled(true); - $user5->setRoles(['ROLE_ADMIN']); - $user5->setUserIdentifier('anna_admin'); - $user5->setEmail('anna_admin@example.com'); - $token5 = new AccessToken($user5, UserFixtures::DEFAULT_API_TOKEN . '_admin'); + $userAdmin = new User(); + $userAdmin->setPreferenceValue(UserPreference::HOURLY_RATE, 81); + $userAdmin->setAlias('Anna Smith'); + $userAdmin->setRegisteredAt(new \DateTime('2018-02-06 23:28:57')); + $userAdmin->setTitle('Administrator'); + $userAdmin->setEnabled(true); + $userAdmin->setRoles(['ROLE_ADMIN']); + $userAdmin->setUserIdentifier(UserFixtures::USERNAME_ADMIN); + $userAdmin->setEmail('anna_admin@example.com'); + $token5 = new AccessToken($userAdmin, UserFixtures::DEFAULT_API_TOKEN . '_admin'); $token5->setName('Test fixture'); - $user6 = new User(); - $user6->setPreferenceValue(UserPreference::HOURLY_RATE, 46); - $user6->setRegisteredAt(new \DateTime('2018-02-06 23:28:57')); - $user6->setTitle('Super Administrator'); - $user6->setAvatar('/bundles/avanzuadmintheme/img/avatar.png'); - $user6->setEnabled(true); - $user6->setRoles(['ROLE_SUPER_ADMIN']); - $user6->setUserIdentifier('susan_super'); - $user6->setEmail('susan_super@example.com'); - $token6 = new AccessToken($user6, UserFixtures::DEFAULT_API_TOKEN . '_super'); + $userSuperAdmin = new User(); + $userSuperAdmin->setPreferenceValue(UserPreference::HOURLY_RATE, 46); + $userSuperAdmin->setRegisteredAt(new \DateTime('2018-02-06 23:28:57')); + $userSuperAdmin->setTitle('Super Administrator'); + $userSuperAdmin->setAvatar('/bundles/avanzuadmintheme/img/avatar.png'); + $userSuperAdmin->setEnabled(true); + $userSuperAdmin->setRoles(['ROLE_SUPER_ADMIN']); + $userSuperAdmin->setUserIdentifier(UserFixtures::USERNAME_SUPER_ADMIN); + $userSuperAdmin->setEmail('susan_super@example.com'); + $token6 = new AccessToken($userSuperAdmin, UserFixtures::DEFAULT_API_TOKEN . '_super'); $token6->setName('Test fixture'); $user7 = new User(); @@ -180,9 +180,9 @@ final class ResetTestCommand extends AbstractResetCommand [$user1, $token1], [$user2, $token2], [$user3, $token3], - [$user4, $token4], - [$user5, $token5], - [$user6, $token6], + [$userTeamlead, $token4], + [$userAdmin, $token5], + [$userSuperAdmin, $token6], [$user7, $token7], [$user8, $token8], ]; diff --git a/src/Command/TimesheetStopAllCommand.php b/src/Command/TimesheetStopAllCommand.php index caa7fccac..1bf272bfe 100644 --- a/src/Command/TimesheetStopAllCommand.php +++ b/src/Command/TimesheetStopAllCommand.php @@ -19,19 +19,14 @@ use Symfony\Component\Console\Style\SymfonyStyle; /** * @codeCoverageIgnore */ -#[AsCommand(name: 'kimai:timesheet:stop-all')] +#[AsCommand(name: 'kimai:timesheet:stop-all', description: 'Stop all running timesheets immediately')] final class TimesheetStopAllCommand extends Command { - public function __construct(private TimesheetService $timesheetService) + public function __construct(private readonly TimesheetService $timesheetService) { parent::__construct(); } - protected function configure(): void - { - $this->setDescription('Stop all running timesheets immediately'); - } - protected function execute(InputInterface $input, OutputInterface $output): int { $amount = $this->timesheetService->stopAll(); diff --git a/src/Command/TranslationCommand.php b/src/Command/TranslationCommand.php index ab5ce2974..97b96a45b 100644 --- a/src/Command/TranslationCommand.php +++ b/src/Command/TranslationCommand.php @@ -25,7 +25,7 @@ use Symfony\Component\HttpClient\HttpClient; * * @codeCoverageIgnore */ -#[AsCommand(name: 'kimai:translations')] +#[AsCommand(name: 'kimai:translations', description: 'Automated translation adjustments')] final class TranslationCommand extends Command { public function __construct( @@ -40,7 +40,6 @@ final class TranslationCommand extends Command protected function configure(): void { $this - ->setDescription('Translation adjustments') ->addOption('resname', null, InputOption::VALUE_NONE, 'Fix the resname vs. id attribute') ->addOption('duplicates', null, InputOption::VALUE_NONE, 'Find duplicate translation keys') ->addOption('delete-resname', null, InputOption::VALUE_REQUIRED, 'Deletes the translation by resname') @@ -48,6 +47,8 @@ final class TranslationCommand extends Command ->addOption('fill-empty', null, InputOption::VALUE_NONE, 'Pre-fills empty translations with the english version') ->addOption('delete-empty', null, InputOption::VALUE_NONE, 'Delete all empty keys and files which have no translated key at all') ->addOption('move-resname', null, InputOption::VALUE_REQUIRED, 'Move a resname from one file to another (needs "source" and "target" options)') + ->addOption('copy-resname', null, InputOption::VALUE_REQUIRED, 'Copy a resname within one file (needs "source" option)') + ->addOption('target-resname', null, InputOption::VALUE_REQUIRED, 'Target resname when copying (needs "source" option)') ->addOption('move-all', null, InputOption::VALUE_NONE, 'Move all keys from one file to another (needs "source" and "target" options)') ->addOption('source', null, InputOption::VALUE_REQUIRED, 'Single source file to use') ->addOption('only-core', null, InputOption::VALUE_NONE, 'Do not include plugin and theme directories') @@ -151,6 +152,21 @@ final class TranslationCommand extends Command return $this->moveResname($io, $moveResname, $sources, $targets); } + // ========================================================================== + // Move resname from source to target + // ========================================================================== + $copyResname = $input->getOption('copy-resname'); + $targetResname = $input->getOption('target-resname'); + if (\is_string($copyResname)) { + if (!\is_string($targetResname)) { + $io->error('To copy a resname, we need a target-resname'); + + return Command::FAILURE; + } + + return $this->copyResname($io, $copyResname, $targetResname, $sources); + } + // ========================================================================== // Move all keys from source to target // ========================================================================== @@ -454,10 +470,12 @@ final class TranslationCommand extends Command foreach ($xml->file->body->{'trans-unit'} as $unit) { $source = $unit->source; - if (!isset($unit['resname'])) { + if (!isset($unit['resname']) && $source !== null) { $unit['resname'] = $source; } - $unit['id'] = $this->generateId($unit['resname']); + if ($unit['resname'] !== null) { + $unit['id'] = $this->generateId($unit['resname']); + } } $xmlDocument = new \DOMDocument('1.0'); @@ -653,6 +671,62 @@ final class TranslationCommand extends Command return Command::SUCCESS; } + /** + * @param array $sources + */ + private function copyResname(SymfonyStyle $io, string $resname, string $target, array $sources): int + { + foreach ($sources as $source) { + $tmp = basename($source); + $pos = strpos($tmp, '.'); + if ($pos === false) { + $io->error('Unexpected filename: ' . $source); + + return Command::FAILURE; + } + + $sourceDocument = new \DOMDocument('1.0'); + $sourceDocument->load($source); + + $copiedNode = false; + + /** @var \DOMElement $element */ + foreach ($sourceDocument->getElementsByTagName('trans-unit') as $element) { + if (!$element->hasAttribute('resname')) { + continue; + } + + $key = $element->getAttribute('resname'); + + if ($key === $resname) { + $newElement = clone $element; + $newElement->setAttribute('resname', $target); + foreach ($newElement->childNodes->getIterator() as $child) { + if ($child->nodeName === 'source') { + $child->textContent = $target; + } + } + $newElement->setAttribute('id', $this->generateId($target)); + + $newNode = $sourceDocument->importNode($newElement, true); + $sourceDocument->documentElement->firstElementChild->firstElementChild->appendChild($newNode); // @phpstan-ignore-line + $copiedNode = true; + break; + } + } + + if ($copiedNode) { + $xmlDocument = new \DOMDocument('1.0'); + $xmlDocument->preserveWhiteSpace = false; + $xmlDocument->formatOutput = true; + $xmlDocument->loadXML($sourceDocument->saveXML()); // @phpstan-ignore-line + file_put_contents($source, $xmlDocument->saveXML()); + } + } + + return Command::SUCCESS; + } + /** * @param array $sources * @param array $targets diff --git a/src/Command/VersionCommand.php b/src/Command/VersionCommand.php index 5d7a4bd80..7e0bd24b4 100644 --- a/src/Command/VersionCommand.php +++ b/src/Command/VersionCommand.php @@ -17,17 +17,14 @@ use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -#[AsCommand(name: 'kimai:version')] +#[AsCommand(name: 'kimai:version', description: 'Show version information')] final class VersionCommand extends Command { protected function configure(): void { - $this - ->setDescription('Receive version information') - ->setHelp('This command allows you to fetch various version information about Kimai.') - ->addOption('short', null, InputOption::VALUE_NONE, 'Display the version only') - ->addOption('number', null, InputOption::VALUE_NONE, 'Display the version identifier only only') - ; + $this->setHelp('This command allows you to fetch various version information about Kimai.'); + $this->addOption('short', null, InputOption::VALUE_NONE, 'Display the version only'); + $this->addOption('number', null, InputOption::VALUE_NONE, 'Display the version identifier only only'); } protected function execute(InputInterface $input, OutputInterface $output): int diff --git a/src/Configuration/LocaleService.php b/src/Configuration/LocaleService.php index 58c09051c..240ff3017 100644 --- a/src/Configuration/LocaleService.php +++ b/src/Configuration/LocaleService.php @@ -10,12 +10,13 @@ namespace App\Configuration; use App\Entity\User; +use App\Utils\Duration; final class LocaleService { public const DEFAULT_SETTINGS = [ 'date' => 'dd.MM.y', - 'time' => 'HH:mm', + 'time' => 'H:mm', 'rtl' => false, 'translation' => false, ]; @@ -55,10 +56,7 @@ final class LocaleService } /** - * Returns the locale specific date format, which should be used in combination with the twig filter "|date". - * - * @param string $locale - * @return string + * Returns the locale-specific date format, which should be used in combination with the twig filter "|date". */ public function getDateFormat(string $locale): string { @@ -66,10 +64,7 @@ final class LocaleService } /** - * Returns the locale specific time format, which should be used in combination with the twig filter "|time". - * - * @param string $locale - * @return string + * Returns the locale-specific time format, which should be used in combination with the twig filter "|time". */ public function getTimeFormat(string $locale): string { @@ -77,10 +72,7 @@ final class LocaleService } /** - * Returns the locale specific datetime format, which should be used in combination with the twig filter "|date". - * - * @param string $locale - * @return string + * Returns the locale-specific datetime format, which should be used in combination with the twig filter "|date". */ public function getDateTimeFormat(string $locale): string { @@ -89,13 +81,10 @@ final class LocaleService /** * Returns the format used in the "|duration" twig filter to display a Timesheet duration. - * - * @param string $locale - * @return string */ public function getDurationFormat(string $locale): string { - return '%h:%m'; + return Duration::FORMAT_DEFAULT; } public function isRightToLeft(string $locale): bool diff --git a/src/Configuration/SystemConfiguration.php b/src/Configuration/SystemConfiguration.php index 0c172fd14..735fca273 100644 --- a/src/Configuration/SystemConfiguration.php +++ b/src/Configuration/SystemConfiguration.php @@ -323,11 +323,6 @@ final class SystemConfiguration return $this->find('defaults.customer.timezone'); } - public function getCustomerDefaultCurrency(): string - { - return $this->find('defaults.customer.currency'); - } - public function getCustomerDefaultCountry(): string { return $this->find('defaults.customer.country'); @@ -340,20 +335,35 @@ final class SystemConfiguration return $this->find('defaults.user.timezone'); } - public function getUserDefaultTheme(): ?string + public function getUserDefaultTheme(): string { - return $this->find('defaults.user.theme'); + return $this->getString('defaults.user.theme', 'auto'); } public function getUserDefaultLanguage(): string { - return $this->find('defaults.user.language'); + return $this->getString('defaults.user.language', 'en'); } - // TODO this is only used to display the hourly rate in the user profile + public function getDefaultCurrency(): string + { + return $this->getString('defaults.customer.currency', 'EUR'); + } + + /** + * @deprecated use getDefaultCurrency() instead + */ + public function getCustomerDefaultCurrency(): string + { + return $this->getDefaultCurrency(); + } + + /** + * @deprecated use getDefaultCurrency() instead + */ public function getUserDefaultCurrency(): string { - return $this->find('defaults.user.currency'); + return $this->getDefaultCurrency(); } // ========== Timesheet configurations ========== @@ -458,6 +468,11 @@ final class SystemConfiguration return (bool) $this->find('timesheet.rules.break_time_active'); } + public function getExportTimeout(): int + { + return (int) $this->find('export.timeout'); + } + // ========== Company configurations ========== public function getFinancialYearStart(): ?string @@ -483,25 +498,17 @@ final class SystemConfiguration return (bool) $this->find('theme.avatar_url'); } - /** - * @internal will be made private soon after 2.18.0 - do not access this method directly, but through getThemeColors() - */ - public function getThemeColorChoices(): string - { - $config = $this->find('theme.color_choices'); - if (\is_string($config) && $config !== '') { - return $config; - } - - return 'Silver|#c0c0c0'; - } - /** * @return array */ public function getThemeColors(): array { - $config = explode(',', $this->getThemeColorChoices()); + $config = $this->find('theme.color_choices'); + if (!\is_string($config) || $config === '') { + return ['Silver' => '#c0c0c0']; + } + + $config = explode(',', $config); $colors = []; foreach ($config as $item) { diff --git a/src/Constants.php b/src/Constants.php index 3970ee936..33eab77f7 100644 --- a/src/Constants.php +++ b/src/Constants.php @@ -17,11 +17,11 @@ final class Constants /** * The current release version */ - public const VERSION = '2.31.0'; + public const VERSION = '2.45.0'; /** * The current release: major * 10000 + minor * 100 + patch */ - public const VERSION_ID = 23100; + public const VERSION_ID = 24500; /** * The software name */ diff --git a/src/Controller/ActivityController.php b/src/Controller/ActivityController.php index 2730b2b94..5f0f070f6 100644 --- a/src/Controller/ActivityController.php +++ b/src/Controller/ActivityController.php @@ -14,11 +14,8 @@ use App\Activity\ActivityStatisticService; use App\Configuration\SystemConfiguration; use App\Entity\Activity; use App\Entity\ActivityRate; -use App\Entity\MetaTableTypeInterface; use App\Entity\Project; -use App\Entity\Team; use App\Event\ActivityDetailControllerEvent; -use App\Event\ActivityMetaDefinitionEvent; use App\Event\ActivityMetaDisplayEvent; use App\Export\Spreadsheet\EntityWithMetaFieldsExporter; use App\Export\Spreadsheet\Writer\BinaryFileResponseWriter; @@ -34,6 +31,7 @@ use App\Repository\Query\ActivityQuery; use App\Repository\Query\TeamQuery; use App\Repository\Query\TimesheetQuery; use App\Repository\TeamRepository; +use App\User\TeamService; use App\Utils\DataTable; use App\Utils\PageSetup; use Exception; @@ -42,6 +40,7 @@ use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; @@ -51,19 +50,14 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route(path: '/admin/activity')] final class ActivityController extends AbstractController { - public function __construct( - private readonly ActivityRepository $repository, - private readonly SystemConfiguration $configuration, - private readonly EventDispatcherInterface $dispatcher, - private readonly ActivityService $activityService - ) + public function __construct(private readonly ActivityRepository $repository) { } #[Route(path: '/', defaults: ['page' => 1], name: 'admin_activity', methods: ['GET'])] #[Route(path: '/page/{page}', requirements: ['page' => '[1-9]\d*'], name: 'admin_activity_paginated', methods: ['GET'])] #[IsGranted(new Expression("is_granted('listing', 'activity')"))] - public function indexAction(int $page, Request $request): Response + public function indexAction(int $page, Request $request, EventDispatcherInterface $dispatcher, SystemConfiguration $configuration): Response { $query = new ActivityQuery(); $query->loadTeams(); @@ -76,7 +70,10 @@ final class ActivityController extends AbstractController } $entries = $this->repository->getPagerfantaForQuery($query); - $metaColumns = $this->findMetaColumns($query); + + $event = new ActivityMetaDisplayEvent($query, ActivityMetaDisplayEvent::ACTIVITY); + $dispatcher->dispatch($event); + $metaColumns = $event->getFields(); $table = new DataTable('activity_admin', $query); $table->setPagination($entries); @@ -114,29 +111,16 @@ final class ActivityController extends AbstractController 'page_setup' => $page, 'dataTable' => $table, 'metaColumns' => $metaColumns, - 'defaultCurrency' => $this->configuration->getCustomerDefaultCurrency(), + 'defaultCurrency' => $configuration->getDefaultCurrency(), 'now' => $this->getDateTimeFactory()->createDateTime(), ]); } - /** - * @param ActivityQuery $query - * @return MetaTableTypeInterface[] - */ - private function findMetaColumns(ActivityQuery $query): array - { - $event = new ActivityMetaDisplayEvent($query, ActivityMetaDisplayEvent::ACTIVITY); - $this->dispatcher->dispatch($event); - - return $event->getFields(); - } - #[Route(path: '/{id}/details', name: 'activity_details', methods: ['GET', 'POST'])] #[IsGranted('view', 'activity')] - public function detailsAction(Activity $activity, TeamRepository $teamRepository, ActivityRateRepository $rateRepository, ActivityStatisticService $statisticService): Response + public function detailsAction(Activity $activity, TeamRepository $teamRepository, ActivityRateRepository $rateRepository, ActivityStatisticService $statisticService, ActivityService $activityService, EventDispatcherInterface $dispatcher): Response { - $event = new ActivityMetaDefinitionEvent($activity); - $this->dispatcher->dispatch($event); + $activityService->loadMetaFields($activity); $stats = null; $rates = []; @@ -179,7 +163,7 @@ final class ActivityController extends AbstractController // additional boxes by plugins $event = new ActivityDetailControllerEvent($activity); - $this->dispatcher->dispatch($event); + $dispatcher->dispatch($event); $boxes = $event->getController(); $page = $this->createPageSetup(); @@ -247,31 +231,28 @@ final class ActivityController extends AbstractController #[Route(path: '/create/{project}', name: 'admin_activity_create_with_project', methods: ['GET', 'POST'])] #[IsGranted('create_activity')] - public function createWithProjectAction(Request $request, Project $project): Response + public function createWithProjectAction(Project $project, Request $request, ActivityService $activityService, SystemConfiguration $configuration): Response { - return $this->createActivity($request, $project); + return $this->createActivity($request, $activityService, $configuration, $project); } #[Route(path: '/create', name: 'admin_activity_create', methods: ['GET', 'POST'])] #[IsGranted('create_activity')] - public function createAction(Request $request): Response + public function createAction(Request $request, ActivityService $activityService, SystemConfiguration $configuration): Response { - return $this->createActivity($request, null); + return $this->createActivity($request, $activityService, $configuration, null); } - private function createActivity(Request $request, ?Project $project = null): Response + private function createActivity(Request $request, ActivityService $activityService, SystemConfiguration $configuration, ?Project $project = null): Response { - $activity = $this->activityService->createNewActivity($project); + $activity = $activityService->createNewActivity($project); - $event = new ActivityMetaDefinitionEvent($activity); - $this->dispatcher->dispatch($event); - - $editForm = $this->createEditForm($activity); + $editForm = $this->createEditForm($activity, $configuration); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->activityService->saveNewActivity($activity); + $activityService->saveActivity($activity); $this->flashSuccess('action.update.success'); return $this->redirectToRouteAfterCreate('activity_details', ['id' => $activity->getId()]); @@ -289,7 +270,7 @@ final class ActivityController extends AbstractController #[Route(path: '/{id}/permissions', name: 'admin_activity_permissions', methods: ['GET', 'POST'])] #[IsGranted('permissions', 'activity')] - public function teamPermissionsAction(Activity $activity, Request $request): Response + public function teamPermissionsAction(Activity $activity, Request $request, ActivityService $activityService): Response { $form = $this->createForm(ActivityTeamPermissionForm::class, $activity, [ 'action' => $this->generateUrl('admin_activity_permissions', ['id' => $activity->getId()]), @@ -300,7 +281,7 @@ final class ActivityController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { try { - $this->activityService->updateActivity($activity); + $activityService->saveActivity($activity); $this->flashSuccess('action.update.success'); if ($this->isGranted('view', $activity)) { @@ -323,19 +304,24 @@ final class ActivityController extends AbstractController #[Route(path: '/{id}/create_team', name: 'activity_team_create', methods: ['GET'])] #[IsGranted('create_team')] #[IsGranted('permissions', 'activity')] - public function createDefaultTeamAction(Activity $activity, TeamRepository $teamRepository): Response + public function createDefaultTeamAction(Activity $activity, TeamService $teamService): Response { - $defaultTeam = $teamRepository->findOneBy(['name' => $activity->getName()]); + $name = $activity->getName(); + if ($name === null) { + throw new BadRequestHttpException('Cannot create default team for activity with empty name: ' . $activity->getId()); + } + + $defaultTeam = $teamService->findTeamByName($name); if (null === $defaultTeam) { - $defaultTeam = new Team($activity->getName()); + $defaultTeam = $teamService->createNewTeam($name); } $defaultTeam->addTeamlead($this->getUser()); $defaultTeam->addActivity($activity); try { - $teamRepository->saveTeam($defaultTeam); + $teamService->saveTeam($defaultTeam); } catch (Exception $ex) { $this->flashUpdateException($ex); } @@ -345,17 +331,16 @@ final class ActivityController extends AbstractController #[Route(path: '/{id}/edit', name: 'admin_activity_edit', methods: ['GET', 'POST'])] #[IsGranted('edit', 'activity')] - public function editAction(Activity $activity, Request $request): Response + public function editAction(Activity $activity, Request $request, ActivityService $activityService, SystemConfiguration $configuration): Response { - $event = new ActivityMetaDefinitionEvent($activity); - $this->dispatcher->dispatch($event); + $activityService->loadMetaFields($activity); - $editForm = $this->createEditForm($activity); + $editForm = $this->createEditForm($activity, $configuration); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->activityService->updateActivity($activity); + $activityService->saveActivity($activity); $this->flashSuccess('action.update.success'); if ($this->isGranted('view', $activity)) { @@ -377,7 +362,7 @@ final class ActivityController extends AbstractController #[Route(path: '/{id}/delete', name: 'admin_activity_delete', methods: ['GET', 'POST'])] #[IsGranted('delete', 'activity')] - public function deleteAction(Activity $activity, Request $request, ActivityStatisticService $statisticService): Response + public function deleteAction(Activity $activity, Request $request, ActivityStatisticService $statisticService, ActivityService $activityService): Response { $stats = $statisticService->getActivityStatistics($activity); @@ -404,7 +389,9 @@ final class ActivityController extends AbstractController if ($deleteForm->isSubmitted() && $deleteForm->isValid()) { try { - $this->repository->deleteActivity($activity, $deleteForm->get('activity')->getData()); + /** @var Activity|null $replace */ + $replace = $deleteForm->get('activity')->getData(); + $activityService->deleteActivity($activity, $replace); $this->flashSuccess('action.delete.success'); } catch (Exception $ex) { $this->flashDeleteException($ex); @@ -463,9 +450,9 @@ final class ActivityController extends AbstractController /** * @return FormInterface */ - private function createEditForm(Activity $activity): FormInterface + private function createEditForm(Activity $activity, SystemConfiguration $configuration): FormInterface { - $currency = $this->configuration->getCustomerDefaultCurrency(); + $currency = $configuration->getDefaultCurrency(); $url = $this->generateUrl('admin_activity_create'); if ($activity->getProject()?->getId() !== null) { $url = $this->generateUrl('admin_activity_create_with_project', ['project' => $activity->getProject()->getId()]); diff --git a/src/Controller/Auth/SamlController.php b/src/Controller/Auth/SamlController.php index 0eb906265..2c7922eb6 100644 --- a/src/Controller/Auth/SamlController.php +++ b/src/Controller/Auth/SamlController.php @@ -13,6 +13,7 @@ use App\Configuration\SamlConfigurationInterface; use App\Saml\SamlAuthFactory; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\SecurityBundle\Security; +use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\HttpKernel\Exception\ServiceUnavailableHttpException; @@ -76,7 +77,7 @@ final class SamlController extends AbstractController throw new \RuntimeException('SAML login failed'); } - return $this->redirect($url); + return new RedirectResponse($url); } #[Route(path: '/metadata', name: 'saml_metadata')] diff --git a/src/Controller/CalendarController.php b/src/Controller/CalendarController.php index 19f482fcd..81808895d 100644 --- a/src/Controller/CalendarController.php +++ b/src/Controller/CalendarController.php @@ -9,15 +9,18 @@ namespace App\Controller; +use App\Calendar\CalendarQuery; use App\Calendar\CalendarService; use App\Configuration\SystemConfiguration; use App\Entity\User; -use App\Form\CalendarForm; +use App\Form\Toolbar\CalendarToolbarForm; +use App\Form\Type\CalendarViewType; use App\Timesheet\TrackingModeService; use App\Utils\PageSetup; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; +use Symfony\Component\Security\Core\Exception\AccessDeniedException; use Symfony\Component\Security\Http\Attribute\IsGranted; /** @@ -35,34 +38,41 @@ final class CalendarController extends AbstractController #[Route(path: '/{profile}', name: 'calendar_user', methods: ['GET'])] public function userCalendar(Request $request): Response { - $form = null; - $profile = $this->getUser(); + $currentUser = $this->getUser(); + $profile = $currentUser; + $canChangeUser = $this->isGranted('view_other_timesheet'); - if ($this->isGranted('view_other_timesheet')) { - $form = $this->createFormForGetRequest(CalendarForm::class, ['user' => $profile], [ - 'action' => $this->generateUrl('calendar'), - ]); + $query = new CalendarQuery(); + $query->setUser($profile); + $query->setDate($this->getDateTimeFactory($profile)->create()); - $form->handleRequest($request); + $defaultView = CalendarViewType::DEFAULT_VIEW; + $userView = $profile->getPreference('calendar_initial_view')?->getValue(); + if ($userView !== null) { + $defaultView = (string) $userView; + } + $query->setView($defaultView); - if ($form->isSubmitted() && $form->isValid()) { - $values = $form->getData(); - if ($values['user'] instanceof User) { - $profile = $values['user']; - } - } + $form = $this->createFormForGetRequest(CalendarToolbarForm::class, $query, [ + 'action' => $this->generateUrl('calendar'), + 'change_user' => $canChangeUser, + ]); - $form = $form->createView(); + $form->submit($request->query->all(), false); - // hide if the current user is the only available one - if (\count($form->offsetGet('user')->vars['choices']) < 2) { - $form = null; - $profile = $this->getUser(); - } + if ($query->getUser() === null) { + $query->setUser($currentUser); + } + + /** @var User $profile */ + $profile = $query->getUser(); + + if ($currentUser !== $profile && !$canChangeUser) { + throw new AccessDeniedException('User is not allowed to see other users calendar'); } $mode = $this->service->getActiveMode(); - $factory = $this->getDateTimeFactory(); + $factory = $this->getDateTimeFactory($profile); // if now is default time, we do not pass it on, so it can be re-calculated for each new entry $defaultStart = null; @@ -89,7 +99,9 @@ final class CalendarController extends AbstractController return $this->render('calendar/user.html.twig', [ 'page_setup' => $page, - 'form' => $form, + 'initial_view' => $query->getView(), + 'initial_date' => $query->getDate(), + 'form' => $form->createView(), 'user' => $profile, 'config' => $config, 'dragAndDrop' => $dragAndDrop, diff --git a/src/Controller/ContractController.php b/src/Controller/ContractController.php index 80bd34939..685616d2b 100644 --- a/src/Controller/ContractController.php +++ b/src/Controller/ContractController.php @@ -63,6 +63,8 @@ final class ContractController extends AbstractController /** @var \DateTime $yearDate */ $yearDate = $values->getDate(); + // make sure we use the correct datetime for the selected user + $yearDate = $this->getDateTimeFactory($profile)->createStartOfYear($yearDate); $year = $workingTimeService->getYear($profile, $yearDate, $now); $page = new PageSetup('work_times'); @@ -81,8 +83,25 @@ final class ContractController extends AbstractController $boxConfiguration->setDecimal(false); $boxConfiguration->setCollapsed($summary->count() > 0); + $hasConfiguration = $profile->hasWorkHourConfiguration(); + $days = []; + if ($hasConfiguration) { + $calculator = $workingTimeService->getContractMode($profile)->getCalculator($profile); + $start = $dateTimeFactory->getStartOfWeek(); + $end = $dateTimeFactory->getEndOfWeek(); + while ($start < $end) { + $tmp = clone $start; + $days[] = [ + 'date' => $tmp, + 'duration' => $calculator->isWorkDay($tmp) ? $calculator->getWorkHoursForDay($tmp) : null + ]; + $start = $start->add(new \DateInterval('P1D')); + } + } + return $this->render('contract/status.html.twig', [ - 'withWorkHourConfiguration' => $profile->hasWorkHourConfiguration(), + 'days' => $days, + 'withWorkHourConfiguration' => $hasConfiguration, 'box_configuration' => $boxConfiguration, 'page_setup' => $page, 'decimal' => $boxConfiguration->isDecimal(), diff --git a/src/Controller/CustomerController.php b/src/Controller/CustomerController.php index c122f73e8..34e724849 100644 --- a/src/Controller/CustomerController.php +++ b/src/Controller/CustomerController.php @@ -14,10 +14,7 @@ use App\Customer\CustomerStatisticService; use App\Entity\Customer; use App\Entity\CustomerComment; use App\Entity\CustomerRate; -use App\Entity\MetaTableTypeInterface; -use App\Entity\Team; use App\Event\CustomerDetailControllerEvent; -use App\Event\CustomerMetaDefinitionEvent; use App\Event\CustomerMetaDisplayEvent; use App\Export\Spreadsheet\EntityWithMetaFieldsExporter; use App\Export\Spreadsheet\Writer\BinaryFileResponseWriter; @@ -35,7 +32,9 @@ use App\Repository\Query\CustomerQuery; use App\Repository\Query\ProjectQuery; use App\Repository\Query\TeamQuery; use App\Repository\Query\TimesheetQuery; +use App\Repository\Query\VisibilityInterface; use App\Repository\TeamRepository; +use App\User\TeamService; use App\Utils\DataTable; use App\Utils\PageSetup; use Psr\EventDispatcher\EventDispatcherInterface; @@ -43,6 +42,7 @@ use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Csrf\CsrfToken; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; @@ -54,17 +54,14 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route(path: '/admin/customer')] final class CustomerController extends AbstractController { - public function __construct( - private readonly CustomerRepository $repository, - private readonly EventDispatcherInterface $dispatcher - ) + public function __construct(private readonly CustomerRepository $repository) { } #[Route(path: '/', defaults: ['page' => 1], name: 'admin_customer', methods: ['GET'])] #[Route(path: '/page/{page}', requirements: ['page' => '[1-9]\d*'], name: 'admin_customer_paginated', methods: ['GET'])] #[IsGranted(new Expression("is_granted('listing', 'customer')"))] - public function indexAction(int $page, Request $request): Response + public function indexAction(int $page, Request $request, EventDispatcherInterface $dispatcher): Response { $query = new CustomerQuery(); $query->loadTeams(); @@ -77,7 +74,9 @@ final class CustomerController extends AbstractController } $entries = $this->repository->getPagerfantaForQuery($query); - $metaColumns = $this->findMetaColumns($query); + $event = new CustomerMetaDisplayEvent($query, CustomerMetaDisplayEvent::CUSTOMER); + $dispatcher->dispatch($event); + $metaColumns = $event->getFields(); $table = new DataTable('customer_admin', $query); $table->setPagination($entries); @@ -91,7 +90,7 @@ final class CustomerController extends AbstractController $table->addColumn('company', ['class' => 'd-none']); $table->addColumn('vat_id', ['class' => 'd-none w-min']); $table->addColumn('contact', ['class' => 'd-none']); - $table->addColumn('address', ['class' => 'd-none']); + $table->addColumn('city', ['class' => 'd-none']); $table->addColumn('country', ['class' => 'd-none w-min']); $table->addColumn('currency', ['class' => 'd-none w-min']); $table->addColumn('phone', ['class' => 'd-none']); @@ -129,24 +128,13 @@ final class CustomerController extends AbstractController ]); } - /** - * @return MetaTableTypeInterface[] - */ - private function findMetaColumns(CustomerQuery $query): array - { - $event = new CustomerMetaDisplayEvent($query, CustomerMetaDisplayEvent::CUSTOMER); - $this->dispatcher->dispatch($event); - - return $event->getFields(); - } - #[Route(path: '/create', name: 'admin_customer_create', methods: ['GET', 'POST'])] #[IsGranted('create_customer')] public function createAction(Request $request, CustomerService $customerService): Response { $customer = $customerService->createNewCustomer(''); - return $this->renderCustomerForm($customer, $request, true); + return $this->renderCustomerForm($customer, $request, $customerService); } #[Route(path: '/{id}/permissions', name: 'admin_customer_permissions', methods: ['GET', 'POST'])] @@ -252,19 +240,24 @@ final class CustomerController extends AbstractController #[Route(path: '/{id}/create_team', name: 'customer_team_create', methods: ['GET'])] #[IsGranted('create_team')] #[IsGranted('permissions', 'customer')] - public function createDefaultTeamAction(Customer $customer, TeamRepository $teamRepository): Response + public function createDefaultTeamAction(Customer $customer, TeamService $teamService): Response { - $defaultTeam = $teamRepository->findOneBy(['name' => $customer->getName()]); + $name = $customer->getName(); + if ($name === null) { + throw new BadRequestHttpException('Cannot create default team for customer with empty name: ' . $customer->getId()); + } + + $defaultTeam = $teamService->findTeamByName($name); if (null === $defaultTeam) { - $defaultTeam = new Team($customer->getName()); + $defaultTeam = $teamService->createNewTeam($name); } $defaultTeam->addTeamlead($this->getUser()); $defaultTeam->addCustomer($customer); try { - $teamRepository->saveTeam($defaultTeam); + $teamService->saveTeam($defaultTeam); } catch (\Exception $ex) { $this->flashUpdateException($ex); } @@ -281,7 +274,7 @@ final class CustomerController extends AbstractController $query->setPage($page); $query->setPageSize(5); $query->addCustomer($customer); - $query->setShowBoth(); + $query->setVisibility(VisibilityInterface::SHOW_BOTH); $query->addOrderGroup('visible', ProjectQuery::ORDER_DESC); $query->addOrderGroup('name', ProjectQuery::ORDER_ASC); @@ -297,10 +290,9 @@ final class CustomerController extends AbstractController #[Route(path: '/{id}/details', name: 'customer_details', methods: ['GET', 'POST'])] #[IsGranted('view', 'customer')] - public function detailsAction(Customer $customer, TeamRepository $teamRepository, CustomerRateRepository $rateRepository, CustomerStatisticService $statisticService): Response + public function detailsAction(Customer $customer, TeamRepository $teamRepository, CustomerRateRepository $rateRepository, CustomerStatisticService $statisticService, CustomerService $customerService, EventDispatcherInterface $dispatcher): Response { - $event = new CustomerMetaDefinitionEvent($customer); - $this->dispatcher->dispatch($event); + $customerService->loadMetaFields($customer); $stats = null; $timezone = null; @@ -349,7 +341,7 @@ final class CustomerController extends AbstractController // additional boxes by plugins $event = new CustomerDetailControllerEvent($customer); - $this->dispatcher->dispatch($event); + $dispatcher->dispatch($event); $boxes = $event->getController(); $page = $this->createPageSetup(); @@ -421,14 +413,16 @@ final class CustomerController extends AbstractController #[Route(path: '/{id}/edit', name: 'admin_customer_edit', methods: ['GET', 'POST'])] #[IsGranted('edit', 'customer')] - public function editAction(Customer $customer, Request $request): Response + public function editAction(Customer $customer, Request $request, CustomerService $customerService): Response { - return $this->renderCustomerForm($customer, $request); + $customerService->loadMetaFields($customer); + + return $this->renderCustomerForm($customer, $request, $customerService); } #[Route(path: '/{id}/delete', name: 'admin_customer_delete', methods: ['GET', 'POST'])] #[IsGranted('delete', 'customer')] - public function deleteAction(Customer $customer, Request $request, CustomerStatisticService $statisticService): Response + public function deleteAction(Customer $customer, Request $request, CustomerStatisticService $statisticService, CustomerService $customerService): Response { $stats = $statisticService->getCustomerStatistics($customer); @@ -452,7 +446,9 @@ final class CustomerController extends AbstractController if ($deleteForm->isSubmitted() && $deleteForm->isValid()) { try { - $this->repository->deleteCustomer($customer, $deleteForm->get('customer')->getData()); + /** @var Customer|null $replace */ + $replace = $deleteForm->get('customer')->getData(); + $customerService->deleteCustomer($customer, $replace); $this->flashSuccess('action.delete.success'); } catch (\Exception $ex) { $this->flashDeleteException($ex); @@ -496,15 +492,28 @@ final class CustomerController extends AbstractController return $writer->getFileResponse($spreadsheet); } - private function renderCustomerForm(Customer $customer, Request $request, bool $create = false): Response + private function renderCustomerForm(Customer $customer, Request $request, CustomerService $customerService): Response { - $editForm = $this->createEditForm($customer); + $create = ($customer->getId() === null); + + if ($create) { + $url = $this->generateUrl('admin_customer_create'); + } else { + $url = $this->generateUrl('admin_customer_edit', ['id' => $customer->getId()]); + } + + $editForm = $this->createForm(CustomerEditForm::class, $customer, [ + 'action' => $url, + 'method' => 'POST', + 'include_budget' => $this->isGranted('budget', $customer), + 'include_time' => $this->isGranted('time', $customer), + ]); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->repository->saveCustomer($customer); + $customerService->saveCustomer($customer); $this->flashSuccess('action.update.success'); if ($create) { @@ -556,28 +565,6 @@ final class CustomerController extends AbstractController ]); } - /** - * @return FormInterface - */ - private function createEditForm(Customer $customer): FormInterface - { - $event = new CustomerMetaDefinitionEvent($customer); - $this->dispatcher->dispatch($event); - - if ($customer->getId() === null) { - $url = $this->generateUrl('admin_customer_create'); - } else { - $url = $this->generateUrl('admin_customer_edit', ['id' => $customer->getId()]); - } - - return $this->createForm(CustomerEditForm::class, $customer, [ - 'action' => $url, - 'method' => 'POST', - 'include_budget' => $this->isGranted('budget', $customer), - 'include_time' => $this->isGranted('time', $customer), - ]); - } - private function createPageSetup(): PageSetup { $page = new PageSetup('customers'); diff --git a/src/Controller/ExportController.php b/src/Controller/ExportController.php index 96d0a316a..2c8d98bba 100644 --- a/src/Controller/ExportController.php +++ b/src/Controller/ExportController.php @@ -9,11 +9,15 @@ namespace App\Controller; +use App\Configuration\SystemConfiguration; use App\Entity\ExportableItem; +use App\Entity\ExportTemplate; use App\Export\Base\DispositionInlineInterface; use App\Export\ServiceExport; use App\Export\TooManyItemsExportException; +use App\Form\ExportTemplateSpreadsheetForm; use App\Form\Toolbar\ExportToolbarForm; +use App\Repository\ExportTemplateRepository; use App\Repository\Query\ExportQuery; use App\Utils\PageSetup; use Symfony\Component\Form\FormInterface; @@ -29,7 +33,7 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[IsGranted('create_export')] final class ExportController extends AbstractController { - public function __construct(private ServiceExport $export) + public function __construct(private readonly ServiceExport $export) { } @@ -79,6 +83,31 @@ final class ExportController extends AbstractController $page = new PageSetup('export'); $page->setHelp('export.html'); + $buttons = []; + foreach ($this->export->getRenderer() as $renderer) { + if (method_exists($renderer, 'getType')) { + $class = $renderer->getType(); + } else { + // TODO remove me with 3.0 + $class = \get_class($renderer); + $pos = strrpos($class, '\\'); + if ($pos !== false) { + $class = substr($class, $pos + 1); + } + $class = strtolower(str_replace('Renderer', '', $class)); + } + $buttons[$class][$renderer->getId()] = [ + 'title' => $renderer->getTitle(), + 'internal' => method_exists($renderer, 'isInternal') ? $renderer->isInternal() : false, + ]; + } + + if ($this->isGranted('view_other_timesheet')) { + $showRates = $this->isGranted('view_rate_other_timesheet'); + } else { + $showRates = $this->isGranted('view_rate_own_timesheet'); + } + return $this->render('export/index.html.twig', [ 'page_setup' => $page, 'too_many' => $tooManyResults, @@ -86,15 +115,15 @@ final class ExportController extends AbstractController 'query' => $query, 'entries' => $entries, 'form' => $form->createView(), - 'renderer' => $this->export->getRenderer(), + 'buttons' => $buttons, 'preview_limit' => $maxItemsPreview, 'preview_show' => $showPreview, - 'decimal' => $this->getUser()->isExportDecimal(), + 'show_rates' => $showRates, ]); } #[Route(path: '/data', name: 'export_data', methods: ['POST'])] - public function export(Request $request): Response + public function export(Request $request, SystemConfiguration $systemConfiguration): Response { $query = $this->getDefaultQuery(); @@ -112,6 +141,9 @@ final class ExportController extends AbstractController throw $this->createNotFoundException('Unknown export renderer'); } + $oldMaxExecTime = \ini_get('max_execution_time'); + ini_set('max_execution_time', $systemConfiguration->getExportTimeout()); + // display file inline if supported and `markAsExported` is not set if ($renderer instanceof DispositionInlineInterface && !$query->isMarkAsExported()) { $renderer->setDispositionInline(true); @@ -124,6 +156,8 @@ final class ExportController extends AbstractController $this->export->setExported($entries); } + ini_set('max_execution_time', $oldMaxExecTime); + return $response; } @@ -141,7 +175,6 @@ final class ExportController extends AbstractController } /** - * @param ExportQuery $query * @return ExportableItem[] * @throws TooManyItemsExportException */ @@ -158,8 +191,6 @@ final class ExportController extends AbstractController } /** - * @param ExportQuery $query - * @param string $method * @return FormInterface */ private function getToolbarForm(ExportQuery $query, string $method): FormInterface @@ -175,4 +206,41 @@ final class ExportController extends AbstractController ] ]); } + + #[Route(path: '/template-create', name: 'export_template_create', methods: ['GET', 'POST'])] + public function createExportTemplate(Request $request, ExportTemplateRepository $repository): Response + { + return $this->editExportForm($this->generateUrl('export_template_create'), $request, $repository, new ExportTemplate()); + } + + #[Route(path: '/template-edit/{exportTemplate}', name: 'export_template_edit', methods: ['GET', 'POST'])] + public function editExportTemplate(ExportTemplate $exportTemplate, Request $request, ExportTemplateRepository $repository): Response + { + return $this->editExportForm($this->generateUrl('export_template_edit', ['exportTemplate' => $exportTemplate->getId()]), $request, $repository, $exportTemplate); + } + + private function editExportForm(string $url, Request $request, ExportTemplateRepository $repository, ExportTemplate $exportTemplate): Response + { + $form = $this->createForm(ExportTemplateSpreadsheetForm::class, $exportTemplate, [ + 'action' => $url, + 'method' => 'POST', + ]); + $form->handleRequest($request); + + if ($form->isSubmitted() && $form->isValid()) { + try { + $repository->saveExportTemplate($exportTemplate); + $this->flashSuccess('action.update.success'); + + return $this->redirectToRoute('export'); + } catch (\Exception $ex) { + $this->handleFormUpdateException($ex, $form); + } + } + + return $this->render('export/template.html.twig', [ + 'form' => $form->createView(), + 'template' => $exportTemplate, + ]); + } } diff --git a/src/Controller/HelpController.php b/src/Controller/HelpController.php index 6aa09cd09..209363463 100644 --- a/src/Controller/HelpController.php +++ b/src/Controller/HelpController.php @@ -32,6 +32,8 @@ final class HelpController extends AbstractController $table = new DataTable('help_locales', new BaseQuery()); $table->addColumn('name', ['class' => 'alwaysVisible', 'orderBy' => false]); $table->addColumn('description', ['class' => 'd-none', 'orderBy' => false]); + $table->addColumn('date_format', ['class' => 'd-none w-min', 'orderBy' => false, 'title' => 'Date format']); + $table->addColumn('time_format', ['class' => 'd-none w-min', 'orderBy' => false, 'title' => 'Time format']); $table->addColumn('language', ['class' => 'd-none w-min', 'orderBy' => false]); $table->addColumn('date', ['class' => 'alwaysVisible w-min', 'orderBy' => false]); $table->addColumn('time', ['class' => 'alwaysVisible w-min text-center', 'orderBy' => false]); @@ -73,6 +75,8 @@ final class HelpController extends AbstractController 'language' => $locale, 'name' => Locales::getName($locale, $locale), 'description' => Locales::getName($locale, $requestLocale), + 'time_format' => $service->getTimeFormat($locale), + 'date_format' => $service->getDateFormat($locale), 'date' => $formatter->dateShort($now), 'time' => $formatter->time($now), 'duration' => $formatter->duration(46120), diff --git a/src/Controller/InvoiceController.php b/src/Controller/InvoiceController.php index f9a2ff1bc..12559b06a 100644 --- a/src/Controller/InvoiceController.php +++ b/src/Controller/InvoiceController.php @@ -17,6 +17,7 @@ use App\Entity\MetaTableTypeInterface; use App\Event\InvoiceDocumentsEvent; use App\Event\InvoiceMetaDefinitionEvent; use App\Event\InvoiceMetaDisplayEvent; +use App\Event\InvoiceTemplateMetaDefinitionEvent; use App\Export\Spreadsheet\EntityWithMetaFieldsExporter; use App\Export\Spreadsheet\Writer\BinaryFileResponseWriter; use App\Export\Spreadsheet\Writer\XlsxWriter; @@ -60,18 +61,15 @@ use Twig\Environment; final class InvoiceController extends AbstractController { public function __construct( - private ServiceInvoice $service, - private InvoiceTemplateRepository $templateRepository, - private InvoiceRepository $invoiceRepository, - private EventDispatcherInterface $dispatcher + private readonly EventDispatcherInterface $dispatcher ) { } #[Route(path: '/', name: 'invoice', methods: ['GET', 'POST'])] #[IsGranted('create_invoice')] - public function indexAction(Request $request, CsrfTokenManagerInterface $csrfTokenManager): Response + public function indexAction(Request $request, ServiceInvoice $service, InvoiceTemplateRepository $templateRepository): Response { - if (!$this->templateRepository->hasTemplate()) { + if (!$templateRepository->hasTemplate()) { if ($this->isGranted('manage_invoice_template')) { return $this->redirectToRoute('admin_invoice_template_create'); } @@ -94,7 +92,7 @@ final class InvoiceController extends AbstractController if ($form->isValid() && $query->getTemplate() !== null) { try { - $models = $this->service->createModels($query); + $models = $service->createModels($query); $searched = true; } catch (Exception $ex) { $this->flashUpdateException($ex); @@ -138,12 +136,8 @@ final class InvoiceController extends AbstractController #[Route(path: '/preview/{customer}/{token}', name: 'invoice_preview', methods: ['GET'])] #[IsGranted('create_invoice')] #[IsGranted('access', 'customer')] - public function previewAction(Customer $customer, string $token, Request $request): Response + public function previewAction(Customer $customer, string $token, Request $request, ServiceInvoice $service): Response { - if (!$this->templateRepository->hasTemplate()) { - return $this->redirectToRoute('invoice'); - } - if (!$this->isCsrfTokenValid('invoice.preview', $token)) { $this->flashError('action.csrf.error'); @@ -163,9 +157,10 @@ final class InvoiceController extends AbstractController if ($form->isValid()) { try { $query->setCustomers([$customer]); - $model = $this->service->createModel($query); + $model = $service->createModel($query); + $model->setPreview(true); - return $this->service->renderInvoice($model, $this->dispatcher, true); + return $service->renderInvoice($model, $this->dispatcher, true); } catch (Exception $ex) { $this->flashUpdateException($ex); } @@ -179,12 +174,8 @@ final class InvoiceController extends AbstractController #[Route(path: '/save-invoice/{customer}/{token}', name: 'invoice_create', methods: ['GET'])] #[IsGranted('create_invoice')] #[IsGranted('access', 'customer')] - public function createInvoiceAction(Customer $customer, string $token, Request $request, CustomerRepository $customerRepository): Response + public function createInvoiceAction(Customer $customer, string $token, Request $request, CustomerRepository $customerRepository, ServiceInvoice $service): Response { - if (!$this->templateRepository->hasTemplate()) { - return $this->redirectToRoute('invoice'); - } - if (!$this->isCsrfTokenValid('invoice.create', $token)) { $this->flashError('action.csrf.error'); @@ -201,7 +192,7 @@ final class InvoiceController extends AbstractController if ($form->isValid()) { try { $query->setCustomers([$customer]); - $model = $this->service->createModel($query); + $model = $service->createModel($query); // save default template for customer if not yet set if ($customer->getInvoiceTemplate() === null) { @@ -209,7 +200,7 @@ final class InvoiceController extends AbstractController $customerRepository->saveCustomer($customer); } - $invoice = $this->service->createInvoice($model, $this->dispatcher); + $invoice = $service->createInvoice($model, $this->dispatcher); $this->flashSuccess('action.update.success'); @@ -227,7 +218,7 @@ final class InvoiceController extends AbstractController #[Route(path: '/change-status/{id}/{status}/{token}', name: 'admin_invoice_status', methods: ['GET', 'POST'])] #[IsGranted('create_invoice')] #[IsGranted(new Expression("is_granted('access', subject.getCustomer())"), 'invoice')] - public function changeStatusAction(Invoice $invoice, string $status, string $token, Request $request, CsrfTokenManagerInterface $csrfTokenManager): Response + public function changeStatusAction(Invoice $invoice, string $status, string $token, Request $request, CsrfTokenManagerInterface $csrfTokenManager, ServiceInvoice $service): Response { if (!$csrfTokenManager->isTokenValid(new CsrfToken('invoice.status', $token))) { $this->flashError('action.csrf.error'); @@ -252,7 +243,7 @@ final class InvoiceController extends AbstractController } try { - $this->service->changeInvoiceStatus($invoice, $status); + $service->changeInvoiceStatus($invoice, $status); $this->flashSuccess('action.update.success'); } catch (Exception $ex) { $this->flashUpdateException($ex); @@ -264,14 +255,14 @@ final class InvoiceController extends AbstractController #[Route(path: '/edit/{id}', name: 'admin_invoice_edit', methods: ['GET', 'POST'])] #[IsGranted('create_invoice')] #[IsGranted(new Expression("is_granted('access', subject.getCustomer())"), 'invoice')] - public function editAction(Invoice $invoice, Request $request): Response + public function editAction(Invoice $invoice, Request $request, InvoiceRepository $invoiceRepository): Response { $form = $this->createInvoiceEditForm($invoice); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { try { - $this->invoiceRepository->saveInvoice($invoice); + $invoiceRepository->saveInvoice($invoice); $this->flashSuccess('action.update.success'); return $this->redirectToRoute('admin_invoice_list'); @@ -290,7 +281,7 @@ final class InvoiceController extends AbstractController #[Route(path: '/delete/{id}/{token}', name: 'admin_invoice_delete', methods: ['GET'])] #[IsGranted('delete_invoice')] #[IsGranted(new Expression("is_granted('access', subject.getCustomer())"), 'invoice')] - public function deleteInvoiceAction(Invoice $invoice, string $token, CsrfTokenManagerInterface $csrfTokenManager): Response + public function deleteInvoiceAction(Invoice $invoice, string $token, CsrfTokenManagerInterface $csrfTokenManager, ServiceInvoice $service): Response { if (!$csrfTokenManager->isTokenValid(new CsrfToken('invoice.status', $token))) { $this->flashError('action.csrf.error'); @@ -301,7 +292,7 @@ final class InvoiceController extends AbstractController $csrfTokenManager->refreshToken('invoice.status'); try { - $this->service->deleteInvoice($invoice, $this->dispatcher); + $service->deleteInvoice($invoice, $this->dispatcher); $this->flashSuccess('action.delete.success'); } catch (Exception $ex) { $this->flashDeleteException($ex); @@ -313,13 +304,13 @@ final class InvoiceController extends AbstractController #[Route(path: '/download/{id}', name: 'admin_invoice_download', methods: ['GET'])] #[IsGranted('view_invoice')] #[IsGranted(new Expression("is_granted('access', subject.getCustomer())"), 'invoice')] - public function downloadAction(Invoice $invoice): Response + public function downloadAction(Invoice $invoice, ServiceInvoice $service): Response { - $file = $this->service->getInvoiceFile($invoice); + $file = $service->getInvoiceFile($invoice); if (null === $file) { throw $this->createNotFoundException( - \sprintf('Invoice file "%s" could not be found for invoice ID "%s"', $invoice->getInvoiceFilename(), $invoice->getId()) + \sprintf('Invoice file could not be found for invoice ID "%s"', $invoice->getId()) ); } @@ -328,12 +319,12 @@ final class InvoiceController extends AbstractController #[Route(path: '/show/{page}', defaults: ['page' => 1], requirements: ['page' => '[1-9]\d*'], name: 'admin_invoice_list', methods: ['GET'])] #[IsGranted('view_invoice')] - public function showInvoicesAction(Request $request, int $page): Response + public function showInvoicesAction(Request $request, int $page, InvoiceRepository $invoiceRepository): Response { $invoice = null; - if (null !== ($id = $request->get('id'))) { - $invoice = $this->invoiceRepository->find($id); + if (null !== ($id = $request->query->get('id'))) { + $invoice = $invoiceRepository->find($id); } $query = new InvoiceArchiveQuery(); @@ -345,7 +336,7 @@ final class InvoiceController extends AbstractController return $this->redirectToRoute('admin_invoice_list'); } - $entries = $this->invoiceRepository->getPagerfantaForQuery($query); + $entries = $invoiceRepository->getPagerfantaForQuery($query); $metaColumns = $this->findMetaColumns($query); $table = new DataTable('invoices', $query); @@ -387,7 +378,7 @@ final class InvoiceController extends AbstractController #[Route(path: '/export', name: 'invoice_export', methods: ['GET'])] #[IsGranted('view_invoice')] - public function exportAction(Request $request, EntityWithMetaFieldsExporter $exporter): Response + public function exportAction(Request $request, EntityWithMetaFieldsExporter $exporter, InvoiceRepository $invoiceRepository, InvoiceTemplateRepository $templateRepository): Response { $query = new InvoiceArchiveQuery(); $query->setCurrentUser($this->getUser()); @@ -396,7 +387,7 @@ final class InvoiceController extends AbstractController $form->setData($query); $form->submit($request->query->all(), false); - $entries = $this->invoiceRepository->getInvoicesForQuery($query); + $entries = $invoiceRepository->getInvoicesForQuery($query); $spreadsheet = $exporter->export( Invoice::class, @@ -410,12 +401,12 @@ final class InvoiceController extends AbstractController #[Route(path: '/template/{page}', requirements: ['page' => '[1-9]\d*'], defaults: ['page' => 1], name: 'admin_invoice_template', methods: ['GET', 'POST'])] #[IsGranted('manage_invoice_template')] - public function listTemplateAction(int $page): Response + public function listTemplateAction(int $page, InvoiceTemplateRepository $templateRepository): Response { $query = new BaseQuery(); $query->setPage($page); - $entries = $this->templateRepository->getPagerfantaForQuery($query); + $entries = $templateRepository->getPagerfantaForQuery($query); $table = new DataTable('invoice_template', $query); $table->setPagination($entries); @@ -424,7 +415,7 @@ final class InvoiceController extends AbstractController $table->addColumn('name', ['class' => 'alwaysVisible', 'orderBy' => false]); $table->addColumn('title', ['class' => 'd-none text-nowrap', 'orderBy' => false]); - $table->addColumn('company', ['class' => 'd-none', 'orderBy' => false]); + $table->addColumn('company', ['class' => 'd-none', 'orderBy' => false, 'title' => 'sending_company']); $table->addColumn('vat_id', ['class' => 'd-none text-nowrap', 'orderBy' => false]); $table->addColumn('tax_rate', ['class' => 'd-none text-nowrap', 'orderBy' => false]); $table->addColumn('due_days', ['class' => 'd-none text-nowrap', 'orderBy' => false]); @@ -447,16 +438,16 @@ final class InvoiceController extends AbstractController #[Route(path: '/template/{id}/edit', name: 'admin_invoice_template_edit', methods: ['GET', 'POST'])] #[IsGranted('manage_invoice_template')] - public function editTemplateAction(InvoiceTemplate $template, Request $request): Response + public function editTemplateAction(InvoiceTemplate $template, Request $request, InvoiceTemplateRepository $templateRepository): Response { - return $this->renderTemplateForm($template, $request); + return $this->renderTemplateForm($template, $request, $templateRepository); } #[Route(path: '/document_download/{document}', name: 'admin_invoice_document_download', methods: ['GET'])] #[IsGranted('upload_invoice_template')] - public function downloadDocument(string $document, Environment $twig): Response + public function downloadDocument(string $document, ServiceInvoice $service): Response { - $event = new InvoiceDocumentsEvent($this->service->getDocuments(true)); + $event = new InvoiceDocumentsEvent($service->getDocuments(true)); $this->dispatcher->dispatch($event); foreach ($event->getInvoiceDocuments() as $doc) { @@ -470,7 +461,7 @@ final class InvoiceController extends AbstractController #[Route(path: '/document_upload', name: 'admin_invoice_document_upload', methods: ['GET', 'POST'])] #[IsGranted('upload_invoice_template')] - public function uploadDocumentAction(Request $request, string $projectDirectory, InvoiceDocumentRepository $documentRepository, Environment $twig, SystemConfiguration $systemConfiguration): Response + public function uploadDocumentAction(Request $request, string $projectDirectory, InvoiceDocumentRepository $documentRepository, Environment $twig, SystemConfiguration $systemConfiguration, ServiceInvoice $service, InvoiceTemplateRepository $templateRepository): Response { $dir = $documentRepository->getUploadDirectory(); $invoiceDir = $dir; @@ -482,11 +473,11 @@ final class InvoiceController extends AbstractController $invoiceDir = rtrim($invoiceDir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; $used = []; - foreach ($this->templateRepository->findAll() as $template) { + foreach ($templateRepository->findAll() as $template) { $used[$template->getRenderer()] = $template; } - $event = new InvoiceDocumentsEvent($this->service->getDocuments(true)); + $event = new InvoiceDocumentsEvent($service->getDocuments(true)); $this->dispatcher->dispatch($event); $documents = []; @@ -604,7 +595,7 @@ final class InvoiceController extends AbstractController #[Route(path: '/document/{id}/delete/{token}', name: 'invoice_document_delete', methods: ['GET', 'POST'])] #[IsGranted('manage_invoice_template')] - public function deleteDocument(string $id, string $token, CsrfTokenManagerInterface $csrfTokenManager, InvoiceDocumentRepository $documentRepository): Response + public function deleteDocument(string $id, string $token, CsrfTokenManagerInterface $csrfTokenManager, InvoiceDocumentRepository $documentRepository, InvoiceTemplateRepository $templateRepository): Response { $document = $documentRepository->findByName($id); if ($document === null) { @@ -627,7 +618,7 @@ final class InvoiceController extends AbstractController } } - foreach ($this->templateRepository->findAll() as $template) { + foreach ($templateRepository->findAll() as $template) { if ($template->getRenderer() === $id) { $this->flashError('Document is used and cannot be deleted.'); @@ -647,19 +638,19 @@ final class InvoiceController extends AbstractController #[Route(path: '/template/create/{id}', name: 'admin_invoice_template_copy', methods: ['GET', 'POST'])] #[IsGranted('manage_invoice_template')] - public function copyTemplateAction(Request $request, InvoiceTemplate $copyFrom): Response + public function copyTemplateAction(Request $request, InvoiceTemplate $copyFrom, InvoiceTemplateRepository $templateRepository): Response { - return $this->createTemplate($request, $copyFrom); + return $this->createTemplate($request, $templateRepository, $copyFrom); } #[Route(path: '/template/create', name: 'admin_invoice_template_create', methods: ['GET', 'POST'])] #[IsGranted('manage_invoice_template')] - public function createTemplateAction(Request $request): Response + public function createTemplateAction(Request $request, InvoiceTemplateRepository $templateRepository): Response { - return $this->createTemplate($request, null); + return $this->createTemplate($request, $templateRepository, null); } - private function createTemplate(Request $request, ?InvoiceTemplate $copyFrom = null): Response + private function createTemplate(Request $request, InvoiceTemplateRepository $templateRepository, ?InvoiceTemplate $copyFrom = null): Response { $template = new InvoiceTemplate(); $template->setLanguage($request->getLocale()); @@ -669,12 +660,12 @@ final class InvoiceController extends AbstractController $template->setName($copyFrom->getName() . ' (1)'); } - return $this->renderTemplateForm($template, $request); + return $this->renderTemplateForm($template, $request, $templateRepository); } #[Route(path: '/template/{id}/delete/{csrfToken}', name: 'admin_invoice_template_delete', methods: ['GET', 'POST'])] #[IsGranted('manage_invoice_template')] - public function deleteTemplate(InvoiceTemplate $template, string $csrfToken, CsrfTokenManagerInterface $csrfTokenManager): Response + public function deleteTemplate(InvoiceTemplate $template, string $csrfToken, CsrfTokenManagerInterface $csrfTokenManager, InvoiceTemplateRepository $templateRepository): Response { if (!$csrfTokenManager->isTokenValid(new CsrfToken('invoice.delete_template', $csrfToken))) { $this->flashError('action.csrf.error'); @@ -685,7 +676,7 @@ final class InvoiceController extends AbstractController $csrfTokenManager->refreshToken('invoice.delete_template'); try { - $this->templateRepository->removeTemplate($template); + $templateRepository->removeTemplate($template); $this->flashSuccess('action.delete.success'); } catch (Exception $ex) { $this->flashDeleteException($ex); @@ -725,15 +716,18 @@ final class InvoiceController extends AbstractController $this->flashError('action.update.error', $err); } - private function renderTemplateForm(InvoiceTemplate $template, Request $request): Response + private function renderTemplateForm(InvoiceTemplate $template, Request $request, InvoiceTemplateRepository $templateRepository): Response { + $event = new InvoiceTemplateMetaDefinitionEvent($template); + $this->dispatcher->dispatch($event); + $editForm = $this->createTemplateEditForm($template); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->templateRepository->saveTemplate($template); + $templateRepository->saveTemplate($template); $this->flashSuccess('action.update.success'); return $this->redirectToRoute('admin_invoice_template'); diff --git a/src/Controller/PermissionController.php b/src/Controller/PermissionController.php index 561ed3ae9..356ef5dc3 100644 --- a/src/Controller/PermissionController.php +++ b/src/Controller/PermissionController.php @@ -106,15 +106,15 @@ final class PermissionController extends AbstractController $other = []; foreach ($event->getSections() as $section) { - $permissionSorted[$section->getTitle()] = []; + $permissionSorted[$section->getTitle()] = []; // @phpstan-ignore method.deprecatedInterface } foreach ($this->manager->getPermissions() as $permission) { $found = false; foreach (array_reverse($event->getSections()) as $section) { - if ($section->filter($permission)) { - $permissionSorted[$section->getTitle()][] = $permission; + if ($section->filter($permission)) { // @phpstan-ignore method.deprecatedInterface + $permissionSorted[$section->getTitle()][] = $permission; // @phpstan-ignore method.deprecatedInterface $found = true; break; } diff --git a/src/Controller/PluginController.php b/src/Controller/PluginController.php index e1b6b26ff..70745f995 100644 --- a/src/Controller/PluginController.php +++ b/src/Controller/PluginController.php @@ -28,17 +28,31 @@ final class PluginController extends AbstractController $installed = []; $plugins = $manager->getPlugins(); foreach ($plugins as $plugin) { - $installed[] = $plugin->getId(); + $installed[$plugin->getId()] = $plugin; } $page = new PageSetup('menu.plugin'); $page->setHelp('plugins.html'); + $all = $this->getPluginInformation($client, $cache); + $bundles = []; + $updates = []; + foreach ($all as $item) { + if ($item['bundle'] !== null) { + $bundles[$item['bundle']] = $item; + if (\array_key_exists($item['bundle'], $installed)) { + $updates[$item['bundle']] = version_compare($installed[$item['bundle']]->getMetadata()->getVersion(), $item['latest_release']) === -1; + } + } + } + return $this->render('plugin/index.html.twig', [ 'page_setup' => $page, 'plugins' => $plugins, - 'installed' => $installed, - 'extensions' => $this->getPluginInformation($client, $cache) + 'installed' => array_keys($installed), + 'extensions' => $all, + 'bundles' => $bundles, + 'updates' => $updates, ]); } diff --git a/src/Controller/ProjectController.php b/src/Controller/ProjectController.php index 91f8e5c75..940c5c436 100644 --- a/src/Controller/ProjectController.php +++ b/src/Controller/ProjectController.php @@ -11,13 +11,10 @@ namespace App\Controller; use App\Configuration\SystemConfiguration; use App\Entity\Customer; -use App\Entity\MetaTableTypeInterface; use App\Entity\Project; use App\Entity\ProjectComment; use App\Entity\ProjectRate; -use App\Entity\Team; use App\Event\ProjectDetailControllerEvent; -use App\Event\ProjectMetaDefinitionEvent; use App\Event\ProjectMetaDisplayEvent; use App\Export\Spreadsheet\EntityWithMetaFieldsExporter; use App\Export\Spreadsheet\Writer\BinaryFileResponseWriter; @@ -38,7 +35,9 @@ use App\Repository\Query\ActivityQuery; use App\Repository\Query\ProjectQuery; use App\Repository\Query\TeamQuery; use App\Repository\Query\TimesheetQuery; +use App\Repository\Query\VisibilityInterface; use App\Repository\TeamRepository; +use App\User\TeamService; use App\Utils\Context; use App\Utils\DataTable; use App\Utils\PageSetup; @@ -47,6 +46,7 @@ use Symfony\Component\ExpressionLanguage\Expression; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Csrf\CsrfToken; use Symfony\Component\Security\Csrf\CsrfTokenManagerInterface; @@ -58,19 +58,14 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[Route(path: '/admin/project')] final class ProjectController extends AbstractController { - public function __construct( - private readonly ProjectRepository $repository, - private readonly SystemConfiguration $configuration, - private readonly EventDispatcherInterface $dispatcher, - private readonly ProjectService $projectService - ) + public function __construct(private readonly ProjectRepository $repository) { } #[Route(path: '/', defaults: ['page' => 1], name: 'admin_project', methods: ['GET'])] #[Route(path: '/page/{page}', requirements: ['page' => '[1-9]\d*'], name: 'admin_project_paginated', methods: ['GET'])] #[IsGranted(new Expression("is_granted('listing', 'project')"))] - public function indexAction(int $page, Request $request): Response + public function indexAction(int $page, Request $request, EventDispatcherInterface $dispatcher): Response { $query = new ProjectQuery(); $query->loadTeams(); @@ -83,7 +78,9 @@ final class ProjectController extends AbstractController } $entries = $this->repository->getPagerfantaForQuery($query); - $metaColumns = $this->findMetaColumns($query); + $event = new ProjectMetaDisplayEvent($query, ProjectMetaDisplayEvent::PROJECT); + $dispatcher->dispatch($event); + $metaColumns = $event->getFields(); $table = new DataTable('project_admin', $query); $table->setPagination($entries); @@ -129,21 +126,9 @@ final class ProjectController extends AbstractController ]); } - /** - * @param ProjectQuery $query - * @return MetaTableTypeInterface[] - */ - private function findMetaColumns(ProjectQuery $query): array - { - $event = new ProjectMetaDisplayEvent($query, ProjectMetaDisplayEvent::PROJECT); - $this->dispatcher->dispatch($event); - - return $event->getFields(); - } - #[Route(path: '/{id}/permissions', name: 'admin_project_permissions', methods: ['GET', 'POST'])] #[IsGranted('permissions', 'project')] - public function teamPermissions(Project $project, Request $request): Response + public function teamPermissions(Project $project, Request $request, ProjectService $projectService): Response { $form = $this->createForm(ProjectTeamPermissionForm::class, $project, [ 'action' => $this->generateUrl('admin_project_permissions', ['id' => $project->getId()]), @@ -154,7 +139,7 @@ final class ProjectController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { try { - $this->projectService->updateProject($project); + $projectService->saveProject($project); $this->flashSuccess('action.update.success'); if ($this->isGranted('view', $project)) { @@ -176,28 +161,28 @@ final class ProjectController extends AbstractController #[Route(path: '/create/{customer}', name: 'admin_project_create_with_customer', methods: ['GET', 'POST'])] #[IsGranted('create_project')] - public function createWithCustomerAction(Request $request, Customer $customer): Response + public function createWithCustomerAction(Request $request, Customer $customer, ProjectService $projectService, SystemConfiguration $configuration): Response { - return $this->createProject($request, $customer); + return $this->createProject($request, $projectService, $configuration, $customer); } #[Route(path: '/create', name: 'admin_project_create', methods: ['GET', 'POST'])] #[IsGranted('create_project')] - public function createAction(Request $request): Response + public function createAction(Request $request, ProjectService $projectService, SystemConfiguration $configuration): Response { - return $this->createProject($request, null); + return $this->createProject($request, $projectService, $configuration, null); } - private function createProject(Request $request, ?Customer $customer = null): Response + private function createProject(Request $request, ProjectService $projectService, SystemConfiguration $configuration, ?Customer $customer = null): Response { - $project = $this->projectService->createNewProject($customer); + $project = $projectService->createNewProject($customer); - $editForm = $this->createEditForm($project); + $editForm = $this->createEditForm($project, $configuration->getDefaultCurrency()); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->projectService->saveNewProject($project, new Context($this->getUser())); + $projectService->saveProject($project, new Context($this->getUser())); $this->flashSuccess('action.update.success'); return $this->redirectToRouteAfterCreate('project_details', ['id' => $project->getId()]); @@ -283,19 +268,24 @@ final class ProjectController extends AbstractController #[Route(path: '/{id}/create_team', name: 'project_team_create', methods: ['GET'])] #[IsGranted('create_team')] #[IsGranted('permissions', 'project')] - public function createDefaultTeamAction(Project $project, TeamRepository $teamRepository): Response + public function createDefaultTeamAction(Project $project, TeamService $teamService): Response { - $defaultTeam = $teamRepository->findOneBy(['name' => $project->getName()]); + $name = $project->getName(); + if ($name === null) { + throw new BadRequestHttpException('Cannot create default team for project with empty name: ' . $project->getId()); + } + + $defaultTeam = $teamService->findTeamByName($name); if (null === $defaultTeam) { - $defaultTeam = new Team($project->getName()); + $defaultTeam = $teamService->createNewTeam($name); } $defaultTeam->addTeamlead($this->getUser()); $defaultTeam->addProject($project); try { - $teamRepository->saveTeam($defaultTeam); + $teamService->saveTeam($defaultTeam); } catch (\Exception $ex) { $this->flashUpdateException($ex); } @@ -313,7 +303,7 @@ final class ProjectController extends AbstractController $query->setPageSize(5); $query->addProject($project); $query->setExcludeGlobals(true); - $query->setShowBoth(); + $query->setVisibility(VisibilityInterface::SHOW_BOTH); $query->addOrderGroup('visible', ActivityQuery::ORDER_DESC); $query->addOrderGroup('name', ActivityQuery::ORDER_ASC); @@ -329,10 +319,9 @@ final class ProjectController extends AbstractController #[Route(path: '/{id}/details', name: 'project_details', methods: ['GET', 'POST'])] #[IsGranted('view', 'project')] - public function detailsAction(Project $project, TeamRepository $teamRepository, ProjectRateRepository $rateRepository, ProjectStatisticService $statisticService, CsrfTokenManagerInterface $csrfTokenManager): Response + public function detailsAction(Project $project, TeamRepository $teamRepository, ProjectRateRepository $rateRepository, ProjectStatisticService $statisticService, ProjectService $projectService, CsrfTokenManagerInterface $csrfTokenManager, EventDispatcherInterface $dispatcher): Response { - $event = new ProjectMetaDefinitionEvent($project); - $this->dispatcher->dispatch($event); + $projectService->loadMetaFields($project); $stats = null; $defaultTeam = null; @@ -376,7 +365,7 @@ final class ProjectController extends AbstractController // additional boxes by plugins $event = new ProjectDetailControllerEvent($project); - $this->dispatcher->dispatch($event); + $dispatcher->dispatch($event); $boxes = $event->getController(); $page = $this->createPageSetup(); @@ -447,14 +436,16 @@ final class ProjectController extends AbstractController #[Route(path: '/{id}/edit', name: 'admin_project_edit', methods: ['GET', 'POST'])] #[IsGranted('edit', 'project')] - public function editAction(Project $project, Request $request): Response + public function editAction(Project $project, Request $request, ProjectService $projectService, SystemConfiguration $configuration): Response { - $editForm = $this->createEditForm($project); + $projectService->loadMetaFields($project); + + $editForm = $this->createEditForm($project, $configuration->getDefaultCurrency()); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->projectService->updateProject($project); + $projectService->saveProject($project); $this->flashSuccess('action.update.success'); if ($this->isGranted('view', $project)) { @@ -501,7 +492,7 @@ final class ProjectController extends AbstractController #[Route(path: '/{id}/delete', name: 'admin_project_delete', methods: ['GET', 'POST'])] #[IsGranted('delete', 'project')] - public function deleteAction(Project $project, Request $request, ProjectStatisticService $statisticService): Response + public function deleteAction(Project $project, Request $request, ProjectStatisticService $statisticService, ProjectService $projectService): Response { $stats = $statisticService->getProjectStatistics($project); @@ -526,7 +517,9 @@ final class ProjectController extends AbstractController if ($deleteForm->isSubmitted() && $deleteForm->isValid()) { try { - $this->repository->deleteProject($project, $deleteForm->get('project')->getData()); + /** @var Project|null $replace */ + $replace = $deleteForm->get('project')->getData(); + $projectService->deleteProject($project, $replace); $this->flashSuccess('action.delete.success'); } catch (\Exception $ex) { $this->flashDeleteException($ex); @@ -591,12 +584,8 @@ final class ProjectController extends AbstractController ]); } - private function createEditForm(Project $project): FormInterface + private function createEditForm(Project $project, string $currency): FormInterface { - $event = new ProjectMetaDefinitionEvent($project); - $this->dispatcher->dispatch($event); - - $currency = $this->configuration->getCustomerDefaultCurrency(); $url = $this->generateUrl('admin_project_create'); if ($project->getId() !== null) { diff --git a/src/Controller/QuickEntryController.php b/src/Controller/QuickEntryController.php index 384cb0327..5c6bb2bcd 100644 --- a/src/Controller/QuickEntryController.php +++ b/src/Controller/QuickEntryController.php @@ -10,6 +10,7 @@ namespace App\Controller; use App\Configuration\SystemConfiguration; +use App\Event\QuickEntryMetaDisplayEvent; use App\Form\QuickEntryForm; use App\Form\WeekByUserForm; use App\Model\QuickEntryWeek; @@ -19,6 +20,8 @@ use App\Repository\TimesheetRepository; use App\Timesheet\FavoriteRecordService; use App\Timesheet\TimesheetService; use App\Utils\PageSetup; +use App\WorkingTime\WorkingTimeService; +use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; @@ -34,7 +37,9 @@ final class QuickEntryController extends AbstractController private readonly SystemConfiguration $configuration, private readonly TimesheetService $timesheetService, private readonly TimesheetRepository $repository, - private readonly FavoriteRecordService $favoriteRecordService + private readonly FavoriteRecordService $favoriteRecordService, + private readonly EventDispatcherInterface $dispatcher, + private readonly WorkingTimeService $workingTimeService, ) { } @@ -72,6 +77,7 @@ final class QuickEntryController extends AbstractController $endWeek = $factory->getEndOfWeek($begin); $tmpDay = clone $startWeek; + /** @var array $week */ $week = []; while ($tmpDay < $endWeek) { $nextDay = clone $tmpDay; @@ -111,37 +117,46 @@ final class QuickEntryController extends AbstractController ksort($rows); - // attach recent activities - $amount = $this->configuration->getQuickEntriesRecentAmount(); - if ($amount > 0) { - $takeOverWeeks = $this->configuration->find('quick_entry.recent_activity_weeks'); - $startFrom = null; - if ($takeOverWeeks !== null && \intval($takeOverWeeks) > 0) { - $startFrom = clone $startWeek; - $startFrom->modify(\sprintf('-%s weeks', $takeOverWeeks)); - } + // this should also check via lock service + $locked = $this->workingTimeService->isApproved($user, $endWeek); - $favorites = $this->favoriteRecordService->favoriteEntries($user, $amount); - foreach ($favorites as $favorite) { - $timesheet = $favorite->getTimesheet(); - if ($startFrom !== null && !$favorite->isFavorite() && $startFrom > $timesheet->getBegin()) { - continue; + if (!$locked) { + // attach recent activities + $amount = $this->configuration->getQuickEntriesRecentAmount(); + if ($amount > 0) { + $takeOverWeeks = $this->configuration->find('quick_entry.recent_activity_weeks'); + $startFrom = null; + if (is_numeric($takeOverWeeks) && \intval($takeOverWeeks) > 0) { + $startFrom = clone $startWeek; + $startFrom->modify(\sprintf('-%s weeks', (string) $takeOverWeeks)); } - $id = $timesheet->getProject()->getId() . '_' . $timesheet->getActivity()->getId(); - if (\array_key_exists($id, $rows)) { - continue; + $favorites = $this->favoriteRecordService->favoriteEntries($user, $amount); + foreach ($favorites as $favorite) { + $timesheet = $favorite->getTimesheet(); + if ($startFrom !== null && !$favorite->isFavorite() && $startFrom > $timesheet->getBegin()) { + continue; + } + + $id = $timesheet->getProject()->getId() . '_' . $timesheet->getActivity()->getId(); + if (\array_key_exists($id, $rows)) { + continue; + } + // edge case: a project that starts and ends between the start and end date allows to select it from the dropdown, + // but it is better to hide a row than displaying already ended projects + if ($timesheet->getProject() !== null && (!$timesheet->getProject()->isVisibleAtDate($startWeek) && !$timesheet->getProject()->isVisibleAtDate($endWeek))) { + continue; + } + // make sure no invisible entries are included + if (!$this->isGranted('start', $timesheet)) { + continue; + } + $rows[$id] = [ + 'days' => $week, + 'project' => $timesheet->getProject(), + 'activity' => $timesheet->getActivity() + ]; } - // there is an edge case possible with a project that starts and ends between the start and end date - // user could still select it from the dropdown, but it is better to hide a row than displaying already ended projects - if ($timesheet->getProject() !== null && (!$timesheet->getProject()->isVisibleAtDate($startWeek) && !$timesheet->getProject()->isVisibleAtDate($endWeek))) { - continue; - } - $rows[$id] = [ - 'days' => $week, - 'project' => $timesheet->getProject(), - 'activity' => $timesheet->getActivity() - ]; } } @@ -149,6 +164,11 @@ final class QuickEntryController extends AbstractController $defaultHour = (int) $defaultBegin->format('H'); $defaultMinute = (int) $defaultBegin->format('i'); + // find additional meta-fields exclusively for QuickEntry view + $event = new QuickEntryMetaDisplayEvent($query); + $this->dispatcher->dispatch($event); + $metaFields = $event->getFields(); + $formModel = new QuickEntryWeek($startWeek); foreach ($rows as $id => $row) { @@ -157,6 +177,7 @@ final class QuickEntryController extends AbstractController if (!\array_key_exists('entry', $day)) { // fill all rows and columns to make sure we do not have missing records $tmp = $this->timesheetService->createNewTimesheet($user); + $tmp->setDuration(null); $tmp->setProject($row['project']); $tmp->setActivity($row['activity']); $newTime = \DateTime::createFromInterface($day['day']); @@ -168,13 +189,16 @@ final class QuickEntryController extends AbstractController $model->addTimesheet($day['entry']); } } + $model->setMetaFields($metaFields); } // create prototype model $empty = $formModel->createRow($user); + $empty->setMetaFields($metaFields); $empty->markAsPrototype(); foreach ($week as $dayId => $day) { $tmp = $this->timesheetService->createNewTimesheet($user); + $tmp->setDuration(null); $newTime = \DateTime::createFromInterface($day['day']); $newTime = $newTime->setTime($defaultHour, $defaultMinute, 0, 0); $tmp->setBegin($newTime); @@ -184,18 +208,20 @@ final class QuickEntryController extends AbstractController // add empty rows for simpler starting $minRows = \intval($this->configuration->find('quick_entry.minimum_rows')); - if ($formModel->countRows() < $minRows) { + if (!$locked && $formModel->countRows() < $minRows) { $newRows = $minRows - $formModel->countRows(); for ($a = 0; $a < $newRows; $a++) { $model = $formModel->addRow($user); foreach ($week as $dayId => $day) { $tmp = $this->timesheetService->createNewTimesheet($user); + $tmp->setDuration(null); $newTime = \DateTime::createFromInterface($day['day']); $newTime = $newTime->setTime($defaultHour, $defaultMinute, 0, 0); $tmp->setBegin($newTime); $this->timesheetService->prepareNewTimesheet($tmp); $model->addTimesheet($tmp); } + $model->setMetaFields($metaFields); } } @@ -219,8 +245,14 @@ final class QuickEntryController extends AbstractController foreach ($tmpModel->getTimesheets() as $timesheet) { if ($timesheet->getId() !== null) { $duration = $timesheet->getDuration(false); - if ($duration === null || $timesheet->isRunning()) { - $deleteTimesheets[] = $timesheet; + // running timesheets also have a empty duration. + // we distinguish them from temporary ones, to make sure they will not be deleted + if ($timesheet->isRunning()) { + $saveTimesheets[] = $timesheet; + } elseif ($duration === null) { + if ($this->isGranted('delete', $timesheet)) { + $deleteTimesheets[] = $timesheet; + } } else { $saveTimesheets[] = $timesheet; } @@ -234,14 +266,22 @@ final class QuickEntryController extends AbstractController try { $saved = false; - if (\count($deleteTimesheets) > 0 && $this->isGranted('delete_own_timesheet')) { + if (\count($deleteTimesheets) > 0) { $this->timesheetService->deleteMultipleTimesheets($deleteTimesheets); $saved = true; } if (\count($saveTimesheets) > 0) { - $this->timesheetService->updateMultipleTimesheets($saveTimesheets); - $saved = true; + $saveMe = []; + foreach ($saveTimesheets as $timesheet) { + if ($timesheet->getId() === null || $this->isGranted('edit', $timesheet)) { + $saveMe[] = $timesheet; + } + } + if (\count($saveMe) > 0) { + $this->timesheetService->updateMultipleTimesheets($saveMe); + $saved = true; + } } if ($saved) { @@ -263,6 +303,8 @@ final class QuickEntryController extends AbstractController 'page_setup' => $page, 'days' => $week, 'form' => $form->createView(), + 'metaColumns' => $metaFields, + 'locked' => $locked, ]); } } diff --git a/src/Controller/Security/PasswordResetController.php b/src/Controller/Security/PasswordResetController.php index dfe42ff96..d3b3e3080 100644 --- a/src/Controller/Security/PasswordResetController.php +++ b/src/Controller/Security/PasswordResetController.php @@ -12,8 +12,8 @@ namespace App\Controller\Security; use App\Configuration\SystemConfiguration; use App\Controller\AbstractController; use App\Entity\User; -use App\Event\EmailEvent; use App\Event\EmailPasswordResetEvent; +use App\Event\UserEmailEvent; use App\User\UserService; use Psr\EventDispatcher\EventDispatcherInterface; use Symfony\Bridge\Twig\Mime\TemplatedEmail; @@ -112,7 +112,7 @@ final class PasswordResetController extends AbstractController $this->eventDispatcher->dispatch($event); // this will send the email - $this->eventDispatcher->dispatch(new EmailEvent($event->getEmail())); + $this->eventDispatcher->dispatch(new UserEmailEvent($user, $event->getEmail())); $user->markPasswordRequested(); $user->setRequiresPasswordReset(true); diff --git a/src/Controller/SystemConfigurationController.php b/src/Controller/SystemConfigurationController.php index 7e19e2a67..8be174906 100644 --- a/src/Controller/SystemConfigurationController.php +++ b/src/Controller/SystemConfigurationController.php @@ -37,6 +37,7 @@ use App\Validator\Constraints\ColorChoices; use App\Validator\Constraints\DateTimeFormat; use App\Validator\Constraints\TimeFormat; use Psr\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\CountryType; use Symfony\Component\Form\Extension\Core\Type\CurrencyType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; @@ -348,6 +349,10 @@ final class SystemConfigurationController extends AbstractController ->setConstraints([ new GreaterThanOrEqual(['value' => 0]) ]), + (new Configuration('timesheet.rules.break_time_active')) + ->setLabel('break') + ->setType(YesNoType::class) + ->setOptions(['help' => 'Beta']), ]), (new SystemConfigurationModel('quick_entry')) ->setTranslation('quick_entry.title') @@ -444,6 +449,11 @@ final class SystemConfigurationController extends AbstractController ->setType(TextType::class) ->setConstraints([new NotBlank()]) ->setTranslationDomain('system-configuration'), + (new Configuration('invoice.rounding_mode')) + ->setLabel('invoice.rounding_mode') + ->setType(ChoiceType::class) + ->setOptions(['choices' => ['classic' => 'classic', 'decimal' => 'decimal']]) + ->setTranslationDomain('system-configuration'), ]), $authentication, (new SystemConfigurationModel('customer')) @@ -457,16 +467,12 @@ final class SystemConfigurationController extends AbstractController ->setLabel('country') ->setType(CountryType::class) ->setOptions(['help' => 'default_value_new']), - (new Configuration('defaults.customer.currency')) - ->setLabel('currency') - ->setType(CurrencyType::class) - ->setOptions(['help' => 'default_value_new']), (new Configuration('customer.choice_pattern')) ->setLabel('choice_pattern') ->setType(CustomerTypePatternType::class), (new Configuration('customer.number_format')) ->setLabel('customer.number_format') - ->setOptions(['help' => 'allowed_replacer', 'help_translation_parameters' => ['%replacer%' => '{cc}']]) + ->setOptions(['help' => 'allowed_replacer', 'help_translation_parameters' => ['%replacer%' => '{cc}, {Y}, {y}, {M}, {m}, {D}, {d}, {YY}, {yy}, {MM}, {DD}']]) ->setRequired(true) ->setType(TextType::class) ->setTranslationDomain('system-configuration'), @@ -486,7 +492,7 @@ final class SystemConfigurationController extends AbstractController ->setTranslationDomain('system-configuration'), (new Configuration('project.number_format')) ->setLabel('project.number_format') - ->setOptions(['help' => 'allowed_replacer', 'help_translation_parameters' => ['%replacer%' => '{pc}']]) + ->setOptions(['help' => 'allowed_replacer', 'help_translation_parameters' => ['%replacer%' => '{pc}, {Y}, {y}, {M}, {m}, {D}, {d}, {YY}, {yy}, {MM}, {DD}']]) ->setRequired(false) ->setType(TextType::class) ->setTranslationDomain('system-configuration'), @@ -502,7 +508,7 @@ final class SystemConfigurationController extends AbstractController ->setType(ActivityTypePatternType::class), (new Configuration('activity.number_format')) ->setLabel('activity.number_format') - ->setOptions(['help' => 'allowed_replacer', 'help_translation_parameters' => ['%replacer%' => '{ac}']]) + ->setOptions(['help' => 'allowed_replacer', 'help_translation_parameters' => ['%replacer%' => '{ac}, {Y}, {y}, {M}, {m}, {D}, {d}, {YY}, {yy}, {MM}, {DD}']]) ->setRequired(false) ->setType(TextType::class) ->setTranslationDomain('system-configuration'), @@ -532,9 +538,6 @@ final class SystemConfigurationController extends AbstractController ->setLabel('skin') ->setType(SkinType::class) ->setOptions(['help' => 'default_value_new']), - (new Configuration('defaults.user.currency')) - ->setLabel('currency') - ->setType(CurrencyType::class), (new Configuration('theme.avatar_url')) ->setRequired(false) ->setLabel('theme.avatar_url') @@ -583,7 +586,8 @@ final class SystemConfigurationController extends AbstractController ->setConstraints([new NotBlank(), new TimeFormat()]), (new Configuration('calendar.slot_duration')) ->setTranslationDomain('system-configuration') - ->setType(TextType::class) + ->setType(ChoiceType::class) + ->setOptions(['choices' => ['00:15' => '00:15:00', '00:30' => '00:30:00', '01:00' => '01:00:00']]) ->setConstraints([new Regex(['pattern' => '/[0-2]{1}[0-9]{1}:[0-9]{2}:[0-9]{2}/']), new NotNull()]), (new Configuration('calendar.dragdrop_amount')) ->setTranslationDomain('system-configuration') @@ -606,6 +610,10 @@ final class SystemConfigurationController extends AbstractController ->setTranslationDomain('system-configuration') ->setRequired(false) ->setType(TextType::class), + (new Configuration('defaults.customer.currency')) + ->setLabel('currency') + ->setType(CurrencyType::class) + ->setOptions(['help' => 'Can be overwritten per customer']), (new Configuration('company.financial_year')) ->setTranslationDomain('system-configuration') ->setRequired(false) diff --git a/src/Controller/TeamController.php b/src/Controller/TeamController.php index 58700cfa8..bb4935bb5 100644 --- a/src/Controller/TeamController.php +++ b/src/Controller/TeamController.php @@ -16,12 +16,14 @@ use App\Form\Type\CustomerType; use App\Form\Type\ProjectType; use App\Repository\Query\TeamQuery; use App\Repository\TeamRepository; +use App\User\TeamService; use App\Utils\DataTable; use App\Utils\PageSetup; use Symfony\Component\Form\Extension\Core\Type\FormType; use Symfony\Component\Form\FormInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; +use Symfony\Component\HttpKernel\Exception\BadRequestHttpException; use Symfony\Component\Routing\Attribute\Route; use Symfony\Component\Security\Http\Attribute\IsGranted; @@ -29,7 +31,10 @@ use Symfony\Component\Security\Http\Attribute\IsGranted; #[IsGranted('view_team')] final class TeamController extends AbstractController { - public function __construct(private TeamRepository $repository) + public function __construct( + private readonly TeamRepository $repository, + private readonly TeamService $teamService, + ) { } @@ -84,7 +89,9 @@ final class TeamController extends AbstractController #[IsGranted('create_team')] public function createTeam(Request $request): Response { - return $this->renderEditScreen(new Team(''), $request, true); + $team = $this->teamService->createNewTeam(''); + + return $this->renderEditScreen($team, $request, true); } #[Route(path: '/{id}/duplicate', name: 'team_duplicate', methods: ['GET', 'POST'])] @@ -94,6 +101,10 @@ final class TeamController extends AbstractController { $newTeam = clone $team; + if ($team->getName() === null) { + throw new BadRequestHttpException('Team with empty name cannot be duplicated'); + } + $i = 1; do { $newName = \sprintf('%s (%s)', $team->getName(), $i++); @@ -123,7 +134,7 @@ final class TeamController extends AbstractController if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->repository->saveTeam($team); + $this->teamService->saveTeam($team); $this->flashSuccess('action.update.success'); return $this->redirectToRoute('admin_team_edit', ['id' => $team->getId()]); @@ -162,7 +173,7 @@ final class TeamController extends AbstractController if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->repository->saveTeam($team); + $this->teamService->saveTeam($team); $this->flashSuccess('action.update.success'); if ($create) { diff --git a/src/Controller/TimesheetAbstractController.php b/src/Controller/TimesheetAbstractController.php index c5ef9e1ec..c0190d576 100644 --- a/src/Controller/TimesheetAbstractController.php +++ b/src/Controller/TimesheetAbstractController.php @@ -41,11 +41,11 @@ use Symfony\Component\HttpFoundation\Response; abstract class TimesheetAbstractController extends AbstractController { public function __construct( - protected TimesheetRepository $repository, - protected EventDispatcherInterface $dispatcher, - protected TimesheetService $service, - protected SystemConfiguration $configuration, - protected TagRepository $tagRepository + protected readonly TimesheetRepository $repository, + protected readonly EventDispatcherInterface $dispatcher, + protected readonly TimesheetService $service, + protected readonly SystemConfiguration $configuration, + protected readonly TagRepository $tagRepository ) { } @@ -84,15 +84,15 @@ abstract class TimesheetAbstractController extends AbstractController } if ($this->configuration->isBreakTimeEnabled()) { - $table->addColumn('break', ['class' => 'text-end text-nowrap']); + $table->addColumn('break', ['class' => 'text-end text-nowrap', 'orderBy' => false]); } $table->addColumn('duration', ['class' => 'text-end text-nowrap']); if ($canSeeRate) { $table->addColumn('hourlyRate', ['class' => 'text-end d-none text-nowrap']); - $table->addColumn('internalRate', ['class' => 'text-end text-nowrap d-none d-xxl-table-cell']); - $table->addColumn('rate', ['class' => 'text-end text-nowrap']); + $table->addColumn('internalRate', ['class' => 'text-end text-nowrap d-none']); + $table->addColumn('rate', ['class' => 'text-end text-nowrap d-none']); } $table->addColumn('customer', ['class' => 'd-none d-md-table-cell']); @@ -106,11 +106,11 @@ abstract class TimesheetAbstractController extends AbstractController } if ($canSeeUsername) { - $table->addColumn('username', ['class' => 'd-none d-md-table-cell', 'orderBy' => false]); + $table->addColumn('username', ['class' => 'd-none d-md-table-cell', 'orderBy' => 'user']); } - $table->addColumn('billable', ['class' => 'text-center d-none w-min', 'orderBy' => false]); - $table->addColumn('exported', ['class' => 'text-center d-none w-min', 'orderBy' => false]); + $table->addColumn('billable', ['class' => 'text-center d-none w-min']); + $table->addColumn('exported', ['class' => 'text-center d-none w-min']); $table->addColumn('actions', ['class' => 'actions']); $page = $this->createPageSetup(); @@ -147,17 +147,15 @@ abstract class TimesheetAbstractController extends AbstractController $event = new TimesheetMetaDefinitionEvent($entry); $this->dispatcher->dispatch($event); - $page = $request->get('page'); - $page = is_numeric($page) ? (int) $page : 1; - $editForm = $this->getEditForm($entry, $page); + $editForm = $this->getEditForm($entry); $editForm->handleRequest($request); if ($editForm->isSubmitted() && $editForm->isValid()) { try { - $this->service->updateTimesheet($entry); + $this->service->saveTimesheet($entry); $this->flashSuccess('action.update.success'); - return $this->redirectToRoute($this->getTimesheetRoute(), ['page' => $request->get('page', 1)]); + return $this->redirectToRoute($this->getTimesheetRoute()); } catch (\Exception $ex) { $this->flashUpdateException($ex); } @@ -186,7 +184,7 @@ abstract class TimesheetAbstractController extends AbstractController if ($createForm->isSubmitted() && $createForm->isValid()) { try { - $this->service->saveNewTimesheet($entry); + $this->service->saveTimesheet($entry); $this->flashSuccess('action.update.success'); return $this->redirectToRoute($this->getTimesheetRoute()); @@ -218,7 +216,7 @@ abstract class TimesheetAbstractController extends AbstractController if ($form->isSubmitted() && $form->isValid()) { try { $this->dispatcher->dispatch(new TimesheetDuplicatePreEvent($copyTimesheet, $timesheet)); - $this->service->saveNewTimesheet($copyTimesheet); + $this->service->saveTimesheet($copyTimesheet); $this->dispatcher->dispatch(new TimesheetDuplicatePostEvent($copyTimesheet, $timesheet)); $this->flashSuccess('action.update.success'); @@ -265,7 +263,14 @@ abstract class TimesheetAbstractController extends AbstractController $entries = $this->repository->getTimesheetResult($query); - return $exporter->render($entries->getResults(), $query); + $oldMaxExecTime = \ini_get('max_execution_time'); + ini_set('max_execution_time', $this->configuration->getExportTimeout()); + + $response = $exporter->render($entries->getResults(), $query); + + ini_set('max_execution_time', $oldMaxExecTime); + + return $response; } protected function multiUpdate(Request $request): Response @@ -360,9 +365,7 @@ abstract class TimesheetAbstractController extends AbstractController } if ($dto->isRecalculateRates()) { - $timesheet->setFixedRate(null); - $timesheet->setHourlyRate(null); - $timesheet->setInternalRate(null); + $timesheet->resetRates(); $execute = true; } elseif (null !== $dto->getFixedRate()) { $timesheet->setFixedRate($dto->getFixedRate()); @@ -494,14 +497,13 @@ abstract class TimesheetAbstractController extends AbstractController ]); } - private function getEditForm(Timesheet $entry, int $page): FormInterface + private function getEditForm(Timesheet $entry): FormInterface { $mode = $this->getTrackingMode(); return $this->createForm($this->getEditFormClassName(), $entry, [ 'action' => $this->generateUrl($this->getEditRoute(), [ 'id' => $entry->getId(), - 'page' => $page, ]), 'include_rate' => $this->isGranted('edit_rate', $entry), 'include_exported' => $this->isGranted('edit_export', $entry), diff --git a/src/Controller/TimesheetTeamController.php b/src/Controller/TimesheetTeamController.php index 67a758359..22e768ad5 100644 --- a/src/Controller/TimesheetTeamController.php +++ b/src/Controller/TimesheetTeamController.php @@ -45,6 +45,7 @@ final class TimesheetTeamController extends TimesheetAbstractController public function indexAction(int $page, Request $request): Response { $query = $this->createDefaultQuery(); + $query->addAllowedOrderColumns('user'); $query->setPage($page); return $this->index($query, $request, 'admin_timesheet', 'admin_timesheet_paginated', TimesheetMetaDisplayEvent::TEAM_TIMESHEET); @@ -125,7 +126,7 @@ final class TimesheetTeamController extends TimesheetAbstractController } foreach ($newTimesheets as $newTimesheet) { - $this->service->saveNewTimesheet($newTimesheet); + $this->service->saveTimesheet($newTimesheet); } $this->flashSuccess('action.update.success'); diff --git a/src/Customer/CustomerService.php b/src/Customer/CustomerService.php index f35212013..d03fb1bad 100644 --- a/src/Customer/CustomerService.php +++ b/src/Customer/CustomerService.php @@ -45,20 +45,37 @@ final class CustomerService return $timezone; } + public function loadMetaFields(Customer $customer): void + { + $this->dispatcher->dispatch(new CustomerMetaDefinitionEvent($customer)); + } + public function createNewCustomer(string $name): Customer { $customer = new Customer($name); $customer->setTimezone($this->getDefaultTimezone()); $customer->setCountry($this->configuration->getCustomerDefaultCountry()); - $customer->setCurrency($this->configuration->getCustomerDefaultCurrency()); + $customer->setCurrency($this->configuration->getDefaultCurrency()); $customer->setNumber($this->calculateNextCustomerNumber()); - $this->dispatcher->dispatch(new CustomerMetaDefinitionEvent($customer)); + $this->loadMetaFields($customer); $this->dispatcher->dispatch(new CustomerCreateEvent($customer)); return $customer; } + public function saveCustomer(Customer $customer): Customer + { + if ($customer->isNew()) { + return $this->saveNewCustomer($customer); // @phpstan-ignore method.deprecated + } else { + return $this->updateCustomer($customer); // @phpstan-ignore method.deprecated + } + } + + /** + * @deprecated since 2.35 - use saveCustomer() instead + */ public function saveNewCustomer(Customer $customer): Customer { if (null !== $customer->getId()) { @@ -74,10 +91,10 @@ final class CustomerService return $customer; } - public function deleteCustomer(Customer $customer): void + public function deleteCustomer(Customer $customer, ?Customer $replace = null): void { - $this->dispatcher->dispatch(new CustomerDeleteEvent($customer)); - $this->repository->deleteCustomer($customer); + $this->dispatcher->dispatch(new CustomerDeleteEvent($customer, $replace)); + $this->repository->deleteCustomer($customer, $replace); } /** @@ -89,10 +106,13 @@ final class CustomerService $errors = $this->validator->validate($customer, null, $groups); if ($errors->count() > 0) { - throw new ValidationFailedException($errors, 'Validation Failed'); + throw new ValidationFailedException($errors); } } + /** + * @deprecated since 2.35 - use saveCustomer() instead + */ public function updateCustomer(Customer $customer): Customer { $this->validateCustomer($customer); @@ -137,12 +157,23 @@ final class CustomerService // we cannot use max(number) because a varchar column returns unexpected results $start = $this->repository->countCustomer(); $i = 0; + $createDate = new \DateTimeImmutable(); do { $start++; - $numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($start): string|int { + $numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($start, $createDate): string|int { return match ($format) { + 'Y' => $createDate->format('Y'), + 'y' => $createDate->format('y'), + 'M' => $createDate->format('m'), + 'm' => $createDate->format('n'), + 'D' => $createDate->format('d'), + 'd' => $createDate->format('j'), + 'YY' => (int) $createDate->format('Y') + $increaseBy, + 'yy' => (int) $createDate->format('y') + $increaseBy, + 'MM' => (int) $createDate->format('m') + $increaseBy, + 'DD' => (int) $createDate->format('d') + $increaseBy, 'cc' => $start + $increaseBy, default => $originalFormat, }; diff --git a/src/Customer/CustomerStatisticService.php b/src/Customer/CustomerStatisticService.php index e2b889e7a..30e1e73d2 100644 --- a/src/Customer/CustomerStatisticService.php +++ b/src/Customer/CustomerStatisticService.php @@ -19,9 +19,9 @@ use App\Timesheet\DateTimeFactory; use DateTimeImmutable; use DateTimeInterface; use Doctrine\DBAL\Types\Types; -use Doctrine\ORM\Query; +use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Psr\EventDispatcher\EventDispatcherInterface; /** * @final @@ -112,7 +112,7 @@ class CustomerStatisticService $qb = $this->timesheetRepository->createQueryBuilder('t'); $qb ->select('IDENTITY(p.customer) AS id') - ->join(Project::class, 'p', Query\Expr\Join::WITH, 't.project = p.id') + ->join(Project::class, 'p', Join::WITH, 't.project = p.id') ->addSelect('COALESCE(SUM(t.duration), 0) as duration') ->addSelect('COALESCE(SUM(t.rate), 0) as rate') ->addSelect('COALESCE(SUM(t.internalRate), 0) as internalRate') diff --git a/src/DataFixtures/CustomerFixtures.php b/src/DataFixtures/CustomerFixtures.php index 8bfbafd23..c6a581146 100644 --- a/src/DataFixtures/CustomerFixtures.php +++ b/src/DataFixtures/CustomerFixtures.php @@ -92,6 +92,10 @@ final class CustomerFixtures extends Fixture $entry->setTimezone($faker->timezone()); $entry->setVisible($visible); $entry->setVatId($faker->creditCardNumber()); + $entry->setPostCode($faker->postcode()); + $entry->setCity($faker->city()); + $entry->setAddressLine1($faker->streetAddress()); + $entry->setAddressLine2($faker->streetAddress()); if (rand(0, 3) % 3) { $entry->setBudget(rand(self::MIN_BUDGET, self::MAX_BUDGET)); diff --git a/src/DataFixtures/InvoiceFixtures.php b/src/DataFixtures/InvoiceFixtures.php index 330382e4e..87c05ef82 100644 --- a/src/DataFixtures/InvoiceFixtures.php +++ b/src/DataFixtures/InvoiceFixtures.php @@ -9,6 +9,7 @@ namespace App\DataFixtures; +use App\Entity\Customer; use App\Entity\InvoiceTemplate; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Persistence\ObjectManager; @@ -29,6 +30,8 @@ final class InvoiceFixtures extends Fixture public function load(ObjectManager $manager): void { $faker = Factory::create('en_US'); + /** @var non-empty-array $customers */ + $customers = $manager->getRepository(Customer::class)->findBy(['visible' => true]); foreach ($this->getInvoiceConfigs($faker) as $invoiceConfig) { // name, title, renderer, calculator, numberGenerator, company, vat, dueDays, address, paymentTerms @@ -38,15 +41,16 @@ final class InvoiceFixtures extends Fixture $template->setRenderer($invoiceConfig[2]); $template->setCalculator($invoiceConfig[3]); $template->setNumberGenerator($invoiceConfig[4]); - $template->setCompany($invoiceConfig[5]); + $template->setCompany($invoiceConfig[5]); // @phpstan-ignore method.deprecated + $template->setCustomer($customers[array_rand($customers)]); $template->setVat($invoiceConfig[6]); $template->setDueDays($invoiceConfig[7]); $template->setPaymentTerms($invoiceConfig[8]); $template->setLanguage('en'); - $template->setAddress($this->generateAddress($faker)); + $template->setAddress($this->generateAddress($faker)); // @phpstan-ignore method.deprecated $template->setContact($this->generateContact($faker)); $template->setPaymentDetails($this->generatePaymentDetails($faker)); - $template->setVatId($faker->creditCardNumber()); + $template->setVatId($faker->creditCardNumber()); // @phpstan-ignore method.deprecated $manager->persist($template); $manager->flush(); @@ -54,8 +58,7 @@ final class InvoiceFixtures extends Fixture } /** - * @param Generator $faker - * @return array + * @return array */ private function getInvoiceConfigs(Generator $faker): array { diff --git a/src/DataFixtures/TeamFixtures.php b/src/DataFixtures/TeamFixtures.php index 03aa1a77e..eacd4574a 100644 --- a/src/DataFixtures/TeamFixtures.php +++ b/src/DataFixtures/TeamFixtures.php @@ -37,8 +37,7 @@ final class TeamFixtures extends Fixture } /** - * @param ObjectManager $manager - * @return array + * @return non-empty-array */ private function getAllUsers(ObjectManager $manager): array { @@ -46,15 +45,18 @@ final class TeamFixtures extends Fixture /** @var User[] $entries */ $entries = $manager->getRepository(User::class)->findAll(); foreach ($entries as $temp) { - $all[$temp->getId()] = $temp; + $all[(string) $temp->getId()] = $temp; + } + + if (\count($all) === 0) { + throw new \Exception('Need users to setup teams'); } return $all; } /** - * @param ObjectManager $manager - * @return array + * @return non-empty-array */ private function getAllProjects(ObjectManager $manager): array { @@ -63,7 +65,11 @@ final class TeamFixtures extends Fixture /** @var Project[] $entries */ $entries = $manager->getRepository(Project::class)->findAll(); foreach ($entries as $temp) { - $all[$temp->getId()] = $temp; + $all[(string) $temp->getId()] = $temp; + } + + if (\count($all) === 0) { + throw new \Exception('Need projects to setup teams'); } return $all; diff --git a/src/DataFixtures/TimesheetFixtures.php b/src/DataFixtures/TimesheetFixtures.php index cfc1f289b..b04f2bd50 100644 --- a/src/DataFixtures/TimesheetFixtures.php +++ b/src/DataFixtures/TimesheetFixtures.php @@ -15,7 +15,8 @@ use App\Entity\Tag; use App\Entity\Timesheet; use App\Entity\User; use App\Entity\UserPreference; -use App\Timesheet\Util; +use App\Timesheet\RateCalculator\ClassicRateCalculator; +use App\Timesheet\RateCalculator\RateCalculatorMode; use Doctrine\Bundle\FixturesBundle\Fixture; use Doctrine\Bundle\FixturesBundle\FixtureGroupInterface; use Doctrine\Persistence\ObjectManager; @@ -60,12 +61,18 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface $allUser = $this->getAllUsers($manager); $faker = Factory::create(); $all = 0; + $calculator = new ClassicRateCalculator(); foreach ($allUser as $user) { + // reload, because the manager might have been cleared $user = $manager->find(User::class, $user->getId()); + if ($user === null) { + continue; + } // random amount of timesheet entries for every user $timesheetForUser = rand(self::MIN_TIMESHEETS_PER_USER, self::MAX_TIMESHEETS_PER_USER); + // load on each round, because the manager might have been cleared $activities = $this->getAllActivities($manager); $projects = $this->getAllProjects($manager); @@ -82,6 +89,7 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface } $entry = $this->createTimesheetEntry( + $calculator, $user, $activities[array_rand($activities)], $projects[array_rand($projects)], @@ -96,6 +104,7 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface // create active records if ($all % 3 === 0) { $entry = $this->createTimesheetEntry( + $calculator, $user, $activities[array_rand($activities)], $projects[array_rand($projects)], @@ -130,10 +139,9 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface /** * @template T of object - * @param ObjectManager $manager * @param class-string $class * @param int $amount - * @return array + * @return non-empty-array */ private function findRandom(ObjectManager $manager, string $class, int $amount): array { @@ -157,12 +165,15 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface /** @var array $result */ $result = $qb->where($qb->expr()->in('entity.id', $ids))->setMaxResults($amount)->getQuery()->getResult(); + if (\count($result) === 0) { + throw new \Exception('Could not find any entity: ' . $class); + } + return $result; } /** - * @param ObjectManager $manager - * @return array + * @return non-empty-array */ private function getAllTags(ObjectManager $manager): array { @@ -170,8 +181,7 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface } /** - * @param ObjectManager $manager - * @return array + * @return non-empty-array */ private function getAllUsers(ObjectManager $manager): array { @@ -179,15 +189,18 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface /** @var User[] $entries */ $entries = $manager->getRepository(User::class)->findAll(); foreach ($entries as $temp) { - $all[$temp->getId()] = $temp; + $all[(string) $temp->getId()] = $temp; + } + + if (\count($all) === 0) { + throw new \Exception('Need users to setup timesheets'); } return $all; } /** - * @param ObjectManager $manager - * @return array + * @return non-empty-array */ private function getAllProjects(ObjectManager $manager): array { @@ -195,15 +208,14 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface } /** - * @param ObjectManager $manager - * @return array + * @return non-empty-array */ private function getAllActivities(ObjectManager $manager): array { return $this->findRandom($manager, Activity::class, 50); } - private function createTimesheetEntry(User $user, Activity $activity, Project $project, ?string $description, bool $setEndDate): Timesheet + private function createTimesheetEntry(RateCalculatorMode $calculatorMode, User $user, Activity $activity, Project $project, ?string $description, bool $setEndDate): Timesheet { $start = $this->getRandomFirstDay(); $start = $start->modify('- ' . (rand(1, 86400)) . ' seconds'); @@ -222,7 +234,7 @@ final class TimesheetFixtures extends Fixture implements FixtureGroupInterface $duration = $end->getTimestamp() - $start->getTimestamp(); $hourlyRate = (float) $user->getPreferenceValue(UserPreference::HOURLY_RATE); - $rate = Util::calculateRate($hourlyRate, $duration); + $rate = $calculatorMode->calculateRate($hourlyRate, $duration); $entry->setEnd($end); $entry->setRate($rate); diff --git a/src/DataFixtures/UserFixtures.php b/src/DataFixtures/UserFixtures.php index c60f685a8..90b7caf1f 100644 --- a/src/DataFixtures/UserFixtures.php +++ b/src/DataFixtures/UserFixtures.php @@ -74,11 +74,9 @@ final class UserFixtures extends Fixture implements FixtureGroupInterface } /** - * @param User $user - * @param string|null $timezone * @return array */ - private function getUserPreferences(User $user, string $timezone = null): array + private function getUserPreferences(User $user, ?string $timezone = null): array { $preferences = []; diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index abe69497c..7733bc5a8 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -369,6 +369,10 @@ final class Configuration implements ConfigurationInterface ->booleanNode('upload_twig') ->defaultFalse() ->end() + ->enumNode('rounding_mode') + ->values(['decimal', 'classic']) + ->defaultValue('classic') + ->end() ->end() ; @@ -396,6 +400,10 @@ final class Configuration implements ConfigurationInterface ->scalarPrototype()->end() ->defaultValue([]) ->end() + ->integerNode('timeout') + ->defaultValue(60) + ->end() + ->end() ; @@ -617,8 +625,7 @@ final class Configuration implements ConfigurationInterface ->children() ->scalarNode('timezone')->defaultNull()->end() ->scalarNode('language')->defaultValue(User::DEFAULT_LANGUAGE)->end() - ->scalarNode('theme')->defaultValue('default')->end() - ->scalarNode('currency')->defaultValue(Customer::DEFAULT_CURRENCY)->end() + ->scalarNode('theme')->defaultValue('auto')->end() ->end() ->end() ->end() diff --git a/src/Doctrine/Behavior/CreatedAt.php b/src/Doctrine/Behavior/CreatedAt.php index 46e0f6362..af4476db3 100644 --- a/src/Doctrine/Behavior/CreatedAt.php +++ b/src/Doctrine/Behavior/CreatedAt.php @@ -9,9 +9,6 @@ namespace App\Doctrine\Behavior; -/** - * @internal - */ interface CreatedAt { public function getCreatedAt(): ?\DateTimeImmutable; diff --git a/src/Doctrine/Behavior/ModifiedTrait.php b/src/Doctrine/Behavior/ModifiedTrait.php index 4d3b4d860..91605ffd1 100644 --- a/src/Doctrine/Behavior/ModifiedTrait.php +++ b/src/Doctrine/Behavior/ModifiedTrait.php @@ -25,4 +25,9 @@ trait ModifiedTrait { $this->modifiedAt = $dateTime; } + + public function markAsModified(): void + { + $this->setModifiedAt(new \DateTimeImmutable('now', new \DateTimeZone('UTC'))); + } } diff --git a/src/Entity/AccessToken.php b/src/Entity/AccessToken.php index b0a634201..eccdb58c5 100644 --- a/src/Entity/AccessToken.php +++ b/src/Entity/AccessToken.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Repository\AccessTokenRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; @@ -21,7 +22,7 @@ use Symfony\Component\Validator\Constraints as Assert; #[UniqueEntity(fields: ['token'])] class AccessToken { - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] private ?int $id = null; @@ -29,17 +30,17 @@ class AccessToken #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] private User $user; - #[ORM\Column(name: 'token', type: 'string', length: 100, nullable: false)] + #[ORM\Column(name: 'token', type: Types::STRING, length: 100, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 100)] private string $token; - #[ORM\Column(name: 'name', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 50, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 50)] private ?string $name = null; - #[ORM\Column(name: 'last_usage', type: 'datetime_immutable', nullable: true)] + #[ORM\Column(name: 'last_usage', type: Types::DATETIME_IMMUTABLE, nullable: true)] private ?\DateTimeImmutable $lastUsage = null; - #[ORM\Column(name: 'expires_at', type: 'datetime_immutable', nullable: true)] + #[ORM\Column(name: 'expires_at', type: Types::DATETIME_IMMUTABLE, nullable: true)] private ?\DateTimeImmutable $expiresAt = null; public function __construct(User $user, string $token) diff --git a/src/Entity/Activity.php b/src/Entity/Activity.php index 0410069d3..4a227c68d 100644 --- a/src/Entity/Activity.php +++ b/src/Entity/Activity.php @@ -16,6 +16,7 @@ use App\Repository\ActivityRepository; use App\Validator\Constraints as Constraints; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; @@ -42,7 +43,7 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt /** * Unique activity ID */ - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] @@ -52,13 +53,13 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt #[ORM\ManyToOne(targetEntity: Project::class)] #[ORM\JoinColumn(nullable: true, onDelete: 'CASCADE')] #[Serializer\Expose] - #[Serializer\Groups(['Subresource', 'Expanded'])] + #[Serializer\Groups(['Expanded'])] #[OA\Property(ref: '#/components/schemas/ProjectExpanded')] private ?Project $project = null; /** * Name of this activity */ - #[ORM\Column(name: 'name', type: 'string', length: 150, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 150, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 150)] #[Serializer\Expose] @@ -68,7 +69,7 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt /** * Description of this activity */ - #[ORM\Column(name: 'comment', type: 'text', nullable: true)] + #[ORM\Column(name: 'comment', type: Types::TEXT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'comment')] @@ -76,13 +77,13 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt /** * Whether this activity is visible and can be selected */ - #[ORM\Column(name: 'visible', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'visible', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'visible', type: 'boolean')] private bool $visible = true; - #[ORM\Column(name: 'billable', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'billable', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -95,7 +96,7 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt */ #[ORM\OneToMany(mappedBy: 'activity', targetEntity: ActivityMeta::class, cascade: ['persist'])] #[Serializer\Expose] - #[Serializer\Groups(['Activity'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: 'array')] #[Serializer\SerializedName('metaFields')] #[Serializer\Accessor(getter: 'getVisibleMetaFields')] @@ -113,9 +114,9 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt #[Serializer\Groups(['Activity'])] #[OA\Property(type: 'array', items: new OA\Items(ref: '#/components/schemas/Team'))] private Collection $teams; - #[ORM\Column(name: 'invoice_text', type: 'text', nullable: true)] + #[ORM\Column(name: 'invoice_text', type: Types::TEXT, nullable: true)] private ?string $invoiceText = null; - #[ORM\Column(name: 'number', type: 'string', length: 10, nullable: true)] + #[ORM\Column(name: 'number', type: Types::STRING, length: 10, nullable: true)] #[Assert\Length(max: 10)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -134,6 +135,11 @@ class Activity implements EntityWithMetaFields, EntityWithBudget, CreatedAt return $this->id; } + public function isNew(): bool + { + return $this->id === null; + } + public function getProject(): ?Project { return $this->project; diff --git a/src/Entity/Bookmark.php b/src/Entity/Bookmark.php index 35d58cd38..f4f34cca6 100644 --- a/src/Entity/Bookmark.php +++ b/src/Entity/Bookmark.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Repository\BookmarkRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; @@ -25,7 +26,7 @@ class Bookmark public const COLUMN_VISIBILITY = 'columns'; public const TIMESHEET = 'timesheet'; - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] private ?int $id = null; @@ -33,15 +34,15 @@ class Bookmark #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] private ?User $user = null; - #[ORM\Column(name: 'type', type: 'string', length: 20, nullable: false)] + #[ORM\Column(name: 'type', type: Types::STRING, length: 20, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 20)] private ?string $type = null; - #[ORM\Column(name: 'name', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 50, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 50)] private ?string $name = null; - #[ORM\Column(name: 'content', type: 'text', nullable: false)] + #[ORM\Column(name: 'content', type: Types::TEXT, nullable: false)] private ?string $content = null; public function getId(): ?int diff --git a/src/Entity/BudgetTrait.php b/src/Entity/BudgetTrait.php index f3cde65b4..61b8068ad 100644 --- a/src/Entity/BudgetTrait.php +++ b/src/Entity/BudgetTrait.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Export\Annotation as Exporter; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use Symfony\Component\Validator\Constraints as Assert; @@ -17,9 +18,9 @@ use Symfony\Component\Validator\Constraints as Assert; trait BudgetTrait { /** - * The total monetary budget, will be zero if not configured. + * The total monetary budget (default: 0). */ - #[ORM\Column(name: 'budget', type: 'float', nullable: false)] + #[ORM\Column(name: 'budget', type: Types::FLOAT, nullable: false)] #[Assert\Range(min: 0.00, max: 900000000000.00)] #[Assert\NotNull] #[Serializer\Expose] @@ -27,9 +28,9 @@ trait BudgetTrait #[Exporter\Expose(label: 'budget', type: 'float')] private float $budget = 0.00; /** - * The time budget in seconds, will be zero if not configured. + * The time budget in seconds (default: 0). */ - #[ORM\Column(name: 'time_budget', type: 'integer', nullable: false)] + #[ORM\Column(name: 'time_budget', type: Types::INTEGER, nullable: false)] #[Assert\Range(min: 0, max: 2145600000)] #[Assert\NotNull] #[Serializer\Expose] @@ -38,10 +39,10 @@ trait BudgetTrait private int $timeBudget = 0; /** * The type of budget: - * - null = default / full time - * - month = monthly budget + * - null = default / full time + * - month = monthly budget */ - #[ORM\Column(name: 'budget_type', type: 'string', length: 10, nullable: true)] + #[ORM\Column(name: 'budget_type', type: Types::STRING, length: 10, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Activity_Entity', 'Project_Entity', 'Customer_Entity'])] #[Exporter\Expose(label: 'budgetType')] diff --git a/src/Entity/ColorTrait.php b/src/Entity/ColorTrait.php index 986fc5b8a..066c266f8 100644 --- a/src/Entity/ColorTrait.php +++ b/src/Entity/ColorTrait.php @@ -11,7 +11,9 @@ namespace App\Entity; use App\Constants; use App\Export\Annotation as Exporter; +use App\Utils\Color; use App\Validator\Constraints as Constraints; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; @@ -20,9 +22,8 @@ trait ColorTrait /** * The assigned color in HTML hex format, e.g. #dd1d00 */ - #[ORM\Column(name: 'color', type: 'string', length: 7, nullable: true)] - #[Serializer\Expose] - #[Serializer\Groups(['Default'])] + #[ORM\Column(name: 'color', type: Types::STRING, length: 7, nullable: true)] + #[Serializer\Exclude] #[Exporter\Expose(label: 'color')] #[Constraints\HexColor] private ?string $color = null; @@ -45,4 +46,17 @@ trait ColorTrait { $this->color = $color; } + + abstract public function getName(): ?string; + + /** + * Internal value: this color will never be empty and is generated by the tag name if not set explicit. + */ + #[Serializer\VirtualProperty] + #[Serializer\SerializedName('color')] + #[Serializer\Groups(['Default'])] + public function getColorSafe(): string + { + return $this->getColor() ?? (new Color())->getRandom($this->getName()); + } } diff --git a/src/Entity/CommentTableTypeTrait.php b/src/Entity/CommentTableTypeTrait.php index 8a1b51d86..35e7529d8 100644 --- a/src/Entity/CommentTableTypeTrait.php +++ b/src/Entity/CommentTableTypeTrait.php @@ -9,6 +9,7 @@ namespace App\Entity; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Component\Validator\Constraints as Assert; @@ -16,19 +17,19 @@ trait CommentTableTypeTrait { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] private ?int $id = null; - #[ORM\Column(name: 'message', type: 'text', nullable: false)] + #[ORM\Column(name: 'message', type: Types::TEXT, nullable: false)] #[Assert\NotNull] private ?string $message = null; #[ORM\ManyToOne(targetEntity: User::class)] #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] private ?User $createdBy = null; - #[ORM\Column(name: 'created_at', type: 'datetime', nullable: false)] + #[ORM\Column(name: 'created_at', type: Types::DATETIME_MUTABLE, nullable: false)] #[Assert\NotNull] private ?\DateTime $createdAt = null; - #[ORM\Column(name: 'pinned', type: 'boolean', nullable: false, options: ['default' => false])] + #[ORM\Column(name: 'pinned', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] #[Assert\NotNull] private bool $pinned = false; diff --git a/src/Entity/Configuration.php b/src/Entity/Configuration.php index eb8f87725..49a9dd607 100644 --- a/src/Entity/Configuration.php +++ b/src/Entity/Configuration.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Repository\ConfigurationRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; @@ -23,13 +24,13 @@ class Configuration { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] private ?int $id = null; - #[ORM\Column(name: 'name', type: 'string', length: 100, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 100, nullable: false)] #[Assert\NotNull] #[Assert\Length(min: 2, max: 100)] private ?string $name = null; - #[ORM\Column(name: 'value', type: 'text', length: 65535, nullable: true)] + #[ORM\Column(name: 'value', type: Types::TEXT, length: 65535, nullable: true)] #[Assert\Length(max: 65535)] private ?string $value = null; diff --git a/src/Entity/Customer.php b/src/Entity/Customer.php index 4931ce2e9..bb1383b50 100644 --- a/src/Entity/Customer.php +++ b/src/Entity/Customer.php @@ -16,6 +16,7 @@ use App\Repository\CustomerRepository; use App\Validator\Constraints as Constraints; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; @@ -26,7 +27,7 @@ use Symfony\Component\Validator\Constraints as Assert; #[ORM\Entity(repositoryClass: CustomerRepository::class)] #[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')] #[Serializer\ExclusionPolicy('all')] -#[Exporter\Order(['id', 'name', 'company', 'number', 'vatId', 'address', 'contact', 'email', 'phone', 'mobile', 'fax', 'homepage', 'country', 'currency', 'timezone', 'budget', 'timeBudget', 'budgetType', 'color', 'visible', 'comment', 'billable'])] +#[Exporter\Order(['id', 'name', 'company', 'number', 'vatId', 'address', 'contact', 'email', 'phone', 'mobile', 'fax', 'homepage', 'addressLine1', 'addressLine2', 'addressLine3', 'postCode', 'city', 'country', 'currency', 'timezone', 'budget', 'timeBudget', 'budgetType', 'color', 'visible', 'comment', 'billable'])] #[Constraints\Customer] class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt { @@ -36,124 +37,130 @@ class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt use ColorTrait; use CreatedTrait; - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'id', type: 'integer')] private ?int $id = null; - #[ORM\Column(name: 'name', type: 'string', length: 150, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 150, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 150)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'name')] private ?string $name = null; - #[ORM\Column(name: 'number', type: 'string', length: 50, nullable: true)] + #[ORM\Column(name: 'number', type: Types::STRING, length: 50, nullable: true)] #[Assert\Length(max: 50)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'number')] private ?string $number = null; - #[ORM\Column(name: 'comment', type: 'text', nullable: true)] + #[ORM\Column(name: 'comment', type: Types::TEXT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'comment')] private ?string $comment = null; - #[ORM\Column(name: 'visible', type: 'boolean', nullable: false)] + #[ORM\Column(name: 'visible', type: Types::BOOLEAN, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'visible', type: 'boolean')] private bool $visible = true; - #[ORM\Column(name: 'billable', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'billable', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'billable', type: 'boolean')] private bool $billable = true; - #[ORM\Column(name: 'company', type: 'string', length: 100, nullable: true)] + #[ORM\Column(name: 'company', type: Types::STRING, length: 100, nullable: true)] #[Assert\Length(max: 100)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'company')] private ?string $company = null; - #[ORM\Column(name: 'vat_id', type: 'string', length: 50, nullable: true)] + #[ORM\Column(name: 'vat_id', type: Types::STRING, length: 50, nullable: true)] #[Assert\Length(max: 50)] #[Serializer\Expose] #[Serializer\Groups(['Customer_Entity'])] #[Exporter\Expose(label: 'vat_id')] private ?string $vatId = null; - #[ORM\Column(name: 'contact', type: 'string', length: 100, nullable: true)] + /** + * Contact person (name) + */ + #[ORM\Column(name: 'contact', type: Types::STRING, length: 100, nullable: true)] #[Assert\Length(max: 100)] #[Serializer\Expose] #[Serializer\Groups(['Customer_Entity'])] #[Exporter\Expose(label: 'contact')] private ?string $contact = null; - #[ORM\Column(name: 'address', type: 'text', nullable: true)] + /** + * Unstructured address, better use the fields: addressLine1-3, postcode, city, country + */ + #[ORM\Column(name: 'address', type: Types::TEXT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Customer_Entity'])] #[Exporter\Expose(label: 'address')] private ?string $address = null; - #[ORM\Column(name: 'country', type: 'string', length: 2, nullable: false)] + #[ORM\Column(name: 'country', type: Types::STRING, length: 2, nullable: false)] #[Assert\NotBlank] #[Assert\Country] #[Assert\Length(max: 2)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'country')] private ?string $country = null; - #[ORM\Column(name: 'currency', type: 'string', length: 3, nullable: false)] + #[ORM\Column(name: 'currency', type: Types::STRING, length: 3, nullable: false)] #[Assert\NotBlank] #[Assert\Currency] #[Assert\Length(max: 3)] #[Serializer\Expose] - #[Serializer\Groups(['Customer'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'currency')] private ?string $currency = self::DEFAULT_CURRENCY; - #[ORM\Column(name: 'phone', type: 'string', length: 30, nullable: true)] + #[ORM\Column(name: 'phone', type: Types::STRING, length: 30, nullable: true)] #[Assert\Length(max: 30)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'phone')] private ?string $phone = null; - #[ORM\Column(name: 'fax', type: 'string', length: 30, nullable: true)] + #[ORM\Column(name: 'fax', type: Types::STRING, length: 30, nullable: true)] #[Assert\Length(max: 30)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'fax')] private ?string $fax = null; - #[ORM\Column(name: 'mobile', type: 'string', length: 30, nullable: true)] + #[ORM\Column(name: 'mobile', type: Types::STRING, length: 30, nullable: true)] #[Assert\Length(max: 30)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'mobile')] private ?string $mobile = null; /** - * Customers contact email + * Contact email */ - #[ORM\Column(name: 'email', type: 'string', length: 75, nullable: true)] + #[ORM\Column(name: 'email', type: Types::STRING, length: 75, nullable: true)] #[Assert\Length(max: 75)] #[Serializer\Expose] #[Serializer\Groups(['Customer_Entity'])] #[Exporter\Expose(label: 'email')] private ?string $email = null; - #[ORM\Column(name: 'homepage', type: 'string', length: 100, nullable: true)] + #[ORM\Column(name: 'homepage', type: Types::STRING, length: 100, nullable: true)] #[Assert\Length(max: 100)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'homepage')] private ?string $homepage = null; /** * Timezone of begin and end */ - #[ORM\Column(name: 'timezone', type: 'string', length: 64, nullable: false)] + #[ORM\Column(name: 'timezone', type: Types::STRING, length: 64, nullable: false)] #[Assert\NotBlank] #[Assert\Timezone] #[Assert\Length(max: 64)] #[Serializer\Expose] - #[Serializer\Groups(['Customer_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'timezone')] private ?string $timezone = null; /** @@ -163,7 +170,7 @@ class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt */ #[ORM\OneToMany(mappedBy: 'customer', targetEntity: CustomerMeta::class, cascade: ['persist'])] #[Serializer\Expose] - #[Serializer\Groups(['Customer'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: 'array')] #[Serializer\SerializedName('metaFields')] #[Serializer\Accessor(getter: 'getVisibleMetaFields')] @@ -187,8 +194,45 @@ class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt #[ORM\ManyToOne(targetEntity: InvoiceTemplate::class)] #[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')] private ?InvoiceTemplate $invoiceTemplate = null; - #[ORM\Column(name: 'invoice_text', type: 'text', nullable: true)] + #[ORM\Column(name: 'invoice_text', type: Types::TEXT, nullable: true)] private ?string $invoiceText = null; + #[ORM\Column(name: 'address_line1', type: Types::STRING, length: 150, nullable: true)] + #[Assert\Length(max: 150)] + #[Serializer\Expose] + #[Serializer\Groups(['Customer_Entity'])] + #[Exporter\Expose(label: 'address_line1')] + private ?string $addressLine1 = null; + #[ORM\Column(name: 'address_line2', type: Types::STRING, length: 150, nullable: true)] + #[Assert\Length(max: 150)] + #[Serializer\Expose] + #[Serializer\Groups(['Customer_Entity'])] + #[Exporter\Expose(label: 'address_line2')] + private ?string $addressLine2 = null; + #[ORM\Column(name: 'address_line3', type: Types::STRING, length: 150, nullable: true)] + #[Assert\Length(max: 150)] + #[Serializer\Expose] + #[Serializer\Groups(['Customer_Entity'])] + #[Exporter\Expose(label: 'address_line3')] + private ?string $addressLine3 = null; + #[ORM\Column(name: 'postcode', type: Types::STRING, length: 20, nullable: true)] + #[Assert\Length(max: 20)] + #[Serializer\Expose] + #[Serializer\Groups(['Customer_Entity'])] + #[Exporter\Expose(label: 'postcode')] + private ?string $postCode = null; + // this should be more than enough to cover 99.99% - https://en.wikipedia.org/wiki/List_of_long_place_names + #[ORM\Column(name: 'city', type: Types::STRING, length: 50, nullable: true)] + #[Assert\Length(max: 50)] + #[Serializer\Expose] + #[Serializer\Groups(['Customer_Entity'])] + #[Exporter\Expose(label: 'city')] + private ?string $city = null; + #[ORM\Column(name: 'buyer_reference', type: Types::STRING, length: 50, nullable: true)] + #[Assert\Length(max: 50)] + #[Serializer\Expose] + #[Serializer\Groups(['Customer_Entity'])] + #[Exporter\Expose(label: 'buyerReference')] + private ?string $buyerReference = null; public function __construct(string $name) { @@ -203,6 +247,11 @@ class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt return $this->id; } + public function isNew(): bool + { + return $this->id === null; + } + public function setName(?string $name): void { $this->name = $name; @@ -293,6 +342,35 @@ class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt return $this->address; } + public function getFormattedAddress(): ?string + { + $address = $this->getAddressLine1(); + if ($this->getAddressLine2() !== null) { + $address .= PHP_EOL; + $address .= $this->getAddressLine2(); + } + if ($this->getAddressLine3() !== null) { + $address .= PHP_EOL; + $address .= $this->getAddressLine3(); + } + if ($this->getPostCode() !== null || $this->getCity() !== null) { + $address .= PHP_EOL; + if ($this->getPostCode() !== null) { + $address .= $this->getPostCode(); + if ($this->getCity() !== null) { + $address .= ' '; + } + } + $address .= $this->getCity() ?? ''; + } + + if ($address !== null && $address !== '') { + return $address; + } + + return $this->getAddress(); + } + public function setCountry(?string $country): void { $this->country = $country; @@ -473,6 +551,66 @@ class Customer implements EntityWithMetaFields, EntityWithBudget, CreatedAt return $this->teams; } + public function getAddressLine1(): ?string + { + return $this->addressLine1; + } + + public function setAddressLine1(?string $addressLine1): void + { + $this->addressLine1 = $addressLine1; + } + + public function getAddressLine2(): ?string + { + return $this->addressLine2; + } + + public function setAddressLine2(?string $addressLine2): void + { + $this->addressLine2 = $addressLine2; + } + + public function getAddressLine3(): ?string + { + return $this->addressLine3; + } + + public function setAddressLine3(?string $addressLine3): void + { + $this->addressLine3 = $addressLine3; + } + + public function getPostCode(): ?string + { + return $this->postCode; + } + + public function setPostCode(?string $postCode): void + { + $this->postCode = $postCode; + } + + public function getCity(): ?string + { + return $this->city; + } + + public function setCity(?string $city): void + { + $this->city = $city; + } + + public function getBuyerReference(): ?string + { + return $this->buyerReference; + } + + public function setBuyerReference(?string $buyerReference): void + { + $this->buyerReference = $buyerReference; + } + public function __toString(): string { return $this->getName(); diff --git a/src/Entity/ExportTemplate.php b/src/Entity/ExportTemplate.php new file mode 100644 index 000000000..ff1c2f090 --- /dev/null +++ b/src/Entity/ExportTemplate.php @@ -0,0 +1,270 @@ + + */ + #[ORM\Column(name: 'columns', type: Types::JSON, nullable: false)] + #[Assert\Count(min: 1)] + #[Assert\NotNull] + private array $columns = []; + /** + * @var array + */ + #[ORM\Column(name: 'options', type: Types::JSON, nullable: false)] + #[Assert\NotNull] + private array $options = []; + + public function getId(): ?int + { + return $this->id; + } + + public function isNew(): bool + { + return $this->id === null; + } + + public function setTitle(?string $title): void + { + $this->title = $title; + } + + public function getTitle(): ?string + { + return $this->title; + } + + public function setRenderer(string $renderer): void + { + $this->renderer = $renderer; + } + + public function getRenderer(): string + { + return $this->renderer; + } + + public function getLanguage(): ?string + { + return $this->language; + } + + public function setLanguage(?string $language): void + { + $this->language = $language; + } + + /** + * @return array + */ + public function getColumns(): array + { + return $this->columns; + } + + /** + * @param array|null $columns + */ + public function setColumns(?array $columns): void + { + $this->columns = $columns ?? []; + } + + public function getOption(string $key, int|string|bool|null $default): int|string|bool|null + { + if (\array_key_exists($key, $this->options)) { + return $this->options[$key] ?? $default; + } + + return $default; + } + + public function setOption(string $key, int|string|bool|null $value): void + { + if ($value === null) { + if (\array_key_exists($key, $this->options)) { + unset($this->options[$key]); + } + + return; + } + + $this->options[$key] = $value; + } + + /** + * @return array + */ + public function getOptions(): array + { + return $this->options; + } + + /** + * @param array $options + */ + public function setOptions(?array $options): void + { + $this->options = $options ?? []; + } + + /** + * Only used for CSV export + */ + public function setSeparator(string $separator): void + { + if (!\in_array($separator, [',', ';'], true)) { + throw new \InvalidArgumentException('Invalid separator, comma and semicolon are allowed.'); + } + + $this->setOption('separator', $separator); + } + + public function getSeparator(): string + { + return (string) $this->getOption('separator', ','); + } + + /** + * Only used for PDF export + */ + public function setName(?string $name): void + { + $this->setOption('name', $name); + } + + public function getName(): ?string + { + $name = $this->getOption('name', null); + + return \is_string($name) ? $name : null; + } + + /** + * Only used for PDF export + */ + public function setPageSize(?string $pageSize): void + { + $this->setOption('pageSize', $pageSize); + } + + public function getPageSize(): ?string + { + $pageSize = $this->getOption('pageSize', null); + + return \is_string($pageSize) ? $pageSize : null; + } + + /** + * Only used for PDF export + */ + public function setOrientation(?string $orientation): void + { + if ($orientation !== null) { + $orientation = strtolower($orientation); + if (!\in_array($orientation, ['landscape', 'portrait'], true)) { + throw new \InvalidArgumentException('Invalid orientation. Allowed values are "landscape" and "portrait".'); + } + } + $this->setOption('orientation', $orientation); + } + + public function getOrientation(): ?string + { + $orientation = $this->getOption('orientation', null); + + return \is_string($orientation) ? $orientation : null; + } + + /** + * Only used for PDF export + * @param array $columns + */ + public function setSummaryColumns(array $columns): void + { + $columns = \count($columns) > 0 ? implode(',', $columns) : null; + + $this->setOption('summary_columns', $columns); + } + + /** + * @return array + */ + public function getSummaryColumns(): array + { + $columns = $this->getOption('summary_columns', null); + if (!\is_string($columns)) { + return []; + } + + return explode(',', $columns); + } + + /** + * Only used for PDF export + */ + public function setFont(?string $font): void + { + $this->setOption('font', $font); + } + + public function getFont(): ?string + { + $font = $this->getOption('font', null); + + return \is_string($font) ? $font : null; + } + + public function __toString(): string + { + return $this->title ?? 'New'; + } + + public function __clone() + { + if ($this->id) { + $this->id = null; + } + } +} diff --git a/src/Entity/ExportableItem.php b/src/Entity/ExportableItem.php index 5b7ed4a26..28b811613 100644 --- a/src/Entity/ExportableItem.php +++ b/src/Entity/ExportableItem.php @@ -11,6 +11,10 @@ namespace App\Entity; use Doctrine\Common\Collections\Collection; +/** + * @method array getTags() + * @method int getBreak() + */ interface ExportableItem { public function getId(): ?int; @@ -85,4 +89,18 @@ interface ExportableItem * Example: "work" */ public function getCategory(): string; + + /* + * Returns all assigned tags. + * @TODO activate for 3.0 + * @return Collection + */ + //public function getTags(): array; + + /* + * Returns the break duration. + * @TODO activate for 3.0 + * @return Collection + */ + //public function getBreak(): int; } diff --git a/src/Entity/Invoice.php b/src/Entity/Invoice.php index 424b238bf..3928b258f 100644 --- a/src/Entity/Invoice.php +++ b/src/Entity/Invoice.php @@ -14,6 +14,7 @@ use App\Invoice\InvoiceModel; use App\Repository\InvoiceRepository; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; @@ -44,22 +45,22 @@ class Invoice implements EntityWithMetaFields /** * Unique invoice ID */ - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'id', type: 'integer')] private ?int $id = null; - #[ORM\Column(name: 'invoice_number', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'invoice_number', type: Types::STRING, length: 50, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'invoice.number', type: 'string')] private ?string $invoiceNumber = null; - #[ORM\Column(name: 'comment', type: 'text', nullable: true)] + #[ORM\Column(name: 'comment', type: Types::TEXT, nullable: true)] #[Serializer\Expose] - #[Serializer\Groups(['Invoice'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'comment')] private ?string $comment = null; #[ORM\ManyToOne(targetEntity: Customer::class)] @@ -76,53 +77,51 @@ class Invoice implements EntityWithMetaFields #[Serializer\Groups(['Default'])] #[OA\Property(ref: '#/components/schemas/User')] private ?User $user = null; - #[ORM\Column(name: 'created_at', type: 'datetime', nullable: false)] + #[ORM\Column(name: 'created_at', type: Types::DATETIME_MUTABLE, nullable: false)] #[Assert\NotNull] - #[Serializer\Expose] - #[Serializer\Groups(['Default'])] private ?\DateTime $createdAt = null; - #[ORM\Column(name: 'timezone', type: 'string', length: 64, nullable: false)] + #[ORM\Column(name: 'timezone', type: Types::STRING, length: 64, nullable: false)] private ?string $timezone = null; - #[ORM\Column(name: 'total', type: 'float', nullable: false)] + #[ORM\Column(name: 'total', type: Types::FLOAT, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'total_rate', type: 'float')] private float $total = 0.00; - #[ORM\Column(name: 'tax', type: 'float', nullable: false)] + #[ORM\Column(name: 'tax', type: Types::FLOAT, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'invoice.tax', type: 'float')] private float $tax = 0.00; - #[ORM\Column(name: 'currency', type: 'string', length: 3, nullable: false)] + #[ORM\Column(name: 'currency', type: Types::STRING, length: 3, nullable: false)] #[Assert\NotNull] #[Assert\Length(max: 3)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'currency', type: 'string')] private ?string $currency = null; - #[ORM\Column(name: 'due_days', type: 'integer', length: 3, nullable: false)] + #[ORM\Column(name: 'due_days', type: Types::INTEGER, length: 3, nullable: false)] #[Assert\NotNull] #[Assert\Range(min: 0, max: 999)] #[Serializer\Expose] - #[Serializer\Groups(['Invoice'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'due_days', type: 'integer')] private int $dueDays = 30; - #[ORM\Column(name: 'vat', type: 'float', nullable: false)] + #[ORM\Column(name: 'vat', type: Types::FLOAT, nullable: false)] #[Assert\NotNull] #[Assert\Range(min: 0.0, max: 99.99)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'tax_rate', type: 'float')] private float $vat = 0.00; - #[ORM\Column(name: 'status', type: 'string', length: 20, nullable: false)] + #[ORM\Column(name: 'status', type: Types::STRING, length: 20, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'status', type: 'string')] private string $status = self::STATUS_NEW; - #[ORM\Column(name: 'invoice_filename', type: 'string', length: 150, nullable: false)] + #[ORM\Column(name: 'invoice_filename', type: Types::STRING, length: 150, nullable: false)] #[Assert\NotNull] #[Assert\Length(min: 1, max: 150)] #[Exporter\Expose(label: 'file', type: 'string')] @@ -139,7 +138,7 @@ class Invoice implements EntityWithMetaFields */ #[ORM\OneToMany(mappedBy: 'invoice', targetEntity: InvoiceMeta::class, cascade: ['persist'])] #[Serializer\Expose] - #[Serializer\Groups(['Invoice'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: 'array')] #[Serializer\SerializedName('metaFields')] #[Serializer\Accessor(getter: 'getVisibleMetaFields')] @@ -175,6 +174,9 @@ class Invoice implements EntityWithMetaFields return $this->total; } + #[Serializer\VirtualProperty] + #[Serializer\SerializedName('createdAt')] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(name: 'createdAt', label: 'date', type: 'datetime')] public function getCreatedAt(): ?\DateTime { @@ -201,6 +203,9 @@ class Invoice implements EntityWithMetaFields return $dueDate; } + #[Serializer\VirtualProperty()] + #[Serializer\SerializedName('overdue')] + #[Serializer\Groups(['Default'])] public function isOverdue(): bool { if (null === $this->getDueDate()) { @@ -220,18 +225,12 @@ class Invoice implements EntityWithMetaFields public function setModel(InvoiceModel $model): Invoice { $template = $model->getTemplate(); - if ($template === null) { - throw new \InvalidArgumentException('Missing invoice template'); - } if ($template->getDueDays() === null || $template->getVat() === null) { throw new \InvalidArgumentException('Missing due-days or vat setting'); } $customer = $model->getCustomer(); - if ($customer === null) { - throw new \InvalidArgumentException('Missing invoice customer'); - } $user = $model->getUser(); if ($user === null) { diff --git a/src/Entity/InvoiceTemplate.php b/src/Entity/InvoiceTemplate.php index e87b7a946..73d4bd601 100644 --- a/src/Entity/InvoiceTemplate.php +++ b/src/Entity/InvoiceTemplate.php @@ -10,6 +10,9 @@ namespace App\Entity; use App\Repository\InvoiceTemplateRepository; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; @@ -19,72 +22,90 @@ use Symfony\Component\Validator\Constraints as Assert; #[ORM\Entity(repositoryClass: InvoiceTemplateRepository::class)] #[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')] #[UniqueEntity('name')] -class InvoiceTemplate +class InvoiceTemplate implements EntityWithMetaFields { - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] private ?int $id = null; - #[ORM\Column(name: 'name', type: 'string', length: 60, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 60, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 1, max: 60)] private ?string $name = null; - #[ORM\Column(name: 'title', type: 'string', length: 255, nullable: false)] + #[ORM\Column(name: 'title', type: Types::STRING, length: 255, nullable: false)] #[Assert\Length(max: 255)] #[Assert\NotBlank] private ?string $title = null; - #[ORM\Column(name: 'company', type: 'string', length: 255, nullable: false)] + #[ORM\Column(name: 'company', type: Types::STRING, length: 255, nullable: true)] #[Assert\Length(max: 255)] - #[Assert\NotBlank] private ?string $company = null; - #[ORM\Column(name: 'vat_id', type: 'string', length: 50, nullable: true)] + #[ORM\Column(name: 'vat_id', type: Types::STRING, length: 50, nullable: true)] #[Assert\Length(max: 50)] private ?string $vatId = null; - #[ORM\Column(name: 'address', type: 'text', nullable: true)] + #[ORM\Column(name: 'address', type: Types::TEXT, nullable: true)] private ?string $address = null; - #[ORM\Column(name: 'contact', type: 'text', nullable: true)] + #[ORM\Column(name: 'contact', type: Types::TEXT, nullable: true)] private ?string $contact = null; - #[ORM\Column(name: 'due_days', type: 'integer', length: 3, nullable: false)] + #[ORM\Column(name: 'due_days', type: Types::INTEGER, length: 3, nullable: false)] #[Assert\NotNull] #[Assert\Range(min: 0, max: 999)] private ?int $dueDays = 30; - #[ORM\Column(name: 'vat', type: 'float', nullable: false)] + #[ORM\Column(name: 'vat', type: Types::FLOAT, nullable: false)] #[Assert\NotNull] #[Assert\Range(min: 0.0, max: 99.99)] private ?float $vat = 0.00; - #[ORM\Column(name: 'calculator', type: 'string', length: 20, nullable: false)] + #[ORM\Column(name: 'calculator', type: Types::STRING, length: 20, nullable: false)] #[Assert\NotBlank] #[Assert\Length(max: 20)] private string $calculator = 'default'; - #[ORM\Column(name: 'number_generator', type: 'string', length: 20, nullable: false)] + #[ORM\Column(name: 'number_generator', type: Types::STRING, length: 20, nullable: false)] #[Assert\NotBlank] #[Assert\Length(max: 20)] private string $numberGenerator = 'default'; - #[ORM\Column(name: 'renderer', type: 'string', length: 20, nullable: false)] + #[ORM\Column(name: 'renderer', type: Types::STRING, length: 20, nullable: false)] #[Assert\NotBlank] #[Assert\Length(max: 20)] private string $renderer = 'default'; - #[ORM\Column(name: 'payment_terms', type: 'text', nullable: true)] + #[ORM\Column(name: 'payment_terms', type: Types::TEXT, nullable: true)] private ?string $paymentTerms = null; - #[ORM\Column(name: 'payment_details', type: 'text', nullable: true)] + #[ORM\Column(name: 'payment_details', type: Types::TEXT, nullable: true)] private ?string $paymentDetails = null; /** * Used for translations and formatting money, numbers, dates and time. */ - #[ORM\Column(name: 'language', type: 'string', length: 6, nullable: false)] + #[ORM\Column(name: 'language', type: Types::STRING, length: 6, nullable: false)] #[Assert\NotBlank] private ?string $language = 'en'; + /** + * Customer for this invoice template + */ + #[ORM\ManyToOne(targetEntity: Customer::class)] + #[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')] + #[Assert\NotNull] + private ?Customer $customer = null; + /** + * @var Collection + */ + #[ORM\OneToMany(mappedBy: 'template', targetEntity: InvoiceTemplateMeta::class, cascade: ['persist'])] + private Collection $meta; + /** + * @var array + */ + private array $taxRates = []; + + public function __construct() + { + $this->meta = new ArrayCollection(); + } public function getId(): ?int { return $this->id; } - public function setName(string $name): InvoiceTemplate + public function setName(string $name): void { $this->name = $name; - - return $this; } public function getName(): ?string @@ -92,6 +113,16 @@ class InvoiceTemplate return $this->name; } + public function getCustomer(): ?Customer + { + return $this->customer; + } + + public function setCustomer(?Customer $customer): void + { + $this->customer = $customer; + } + // ---- trait methods below --- public function getTitle(): ?string @@ -99,23 +130,22 @@ class InvoiceTemplate return $this->title; } - public function setTitle(?string $title): InvoiceTemplate + public function setTitle(?string $title): void { $this->title = $title; - - return $this; } public function getAddress(): ?string { - return $this->address; + return $this->customer?->getFormattedAddress() ?? $this->address; } - public function setAddress(?string $address): InvoiceTemplate + /** + * @deprecated since 2.41 + */ + public function setAddress(?string $address): void { $this->address = $address; - - return $this; } public function getNumberGenerator(): string @@ -123,11 +153,9 @@ class InvoiceTemplate return $this->numberGenerator; } - public function setNumberGenerator(string $numberGenerator): InvoiceTemplate + public function setNumberGenerator(string $numberGenerator): void { $this->numberGenerator = $numberGenerator; - - return $this; } public function getDueDays(): ?int @@ -135,11 +163,9 @@ class InvoiceTemplate return $this->dueDays; } - public function setDueDays(?int $dueDays): InvoiceTemplate + public function setDueDays(?int $dueDays): void { $this->dueDays = $dueDays; - - return $this; } public function getVat(): ?float @@ -147,23 +173,22 @@ class InvoiceTemplate return $this->vat; } - public function setVat(?float $vat): InvoiceTemplate + public function setVat(?float $vat): void { $this->vat = $vat; - - return $this; } public function getCompany(): ?string { - return $this->company; + return $this->customer?->getCompany() ?? $this->customer?->getName() ?? $this->company; } - public function setCompany(?string $company): InvoiceTemplate + /** + * @deprecated since 2.41 + */ + public function setCompany(?string $company): void { $this->company = $company; - - return $this; } public function getRenderer(): string @@ -171,11 +196,9 @@ class InvoiceTemplate return $this->renderer; } - public function setRenderer(string $renderer): InvoiceTemplate + public function setRenderer(string $renderer): void { $this->renderer = $renderer; - - return $this; } public function getCalculator(): string @@ -183,11 +206,9 @@ class InvoiceTemplate return $this->calculator; } - public function setCalculator(string $calculator): InvoiceTemplate + public function setCalculator(string $calculator): void { $this->calculator = $calculator; - - return $this; } public function getPaymentTerms(): ?string @@ -195,23 +216,22 @@ class InvoiceTemplate return $this->paymentTerms; } - public function setPaymentTerms(?string $paymentTerms): InvoiceTemplate + public function setPaymentTerms(?string $paymentTerms): void { $this->paymentTerms = $paymentTerms; - - return $this; } public function getVatId(): ?string { - return $this->vatId; + return $this->customer?->getVatId() ?? $this->vatId; } - public function setVatId(?string $vatId): InvoiceTemplate + /** + * @deprecated since 2.41 + */ + public function setVatId(?string $vatId): void { $this->vatId = $vatId; - - return $this; } public function getContact(): ?string @@ -219,11 +239,9 @@ class InvoiceTemplate return $this->contact; } - public function setContact(?string $contact): InvoiceTemplate + public function setContact(?string $contact): void { $this->contact = $contact; - - return $this; } public function getPaymentDetails(): ?string @@ -231,11 +249,9 @@ class InvoiceTemplate return $this->paymentDetails; } - public function setPaymentDetails(?string $paymentDetails): InvoiceTemplate + public function setPaymentDetails(?string $paymentDetails): void { $this->paymentDetails = $paymentDetails; - - return $this; } /** @@ -251,9 +267,91 @@ class InvoiceTemplate return $this->language; } - public function setLanguage(?string $language): InvoiceTemplate + public function setLanguage(?string $language): void { $this->language = $language; + } + + /** + * @param array $taxRates + */ + public function setTaxRates(array $taxRates): void + { + $this->taxRates = $taxRates; + } + + /** + * @return Tax[] + */ + public function getTaxRates(): array + { + if (\count($this->taxRates) > 0) { + return $this->taxRates; + } + + $tax = new Tax( + TaxType::STANDARD, + $this->vat ?? 0.00, + 'vat', + true, + null + ); + + return [$tax]; + } + + /** + * @return Collection|MetaTableTypeInterface[] + */ + public function getMetaFields(): Collection + { + return $this->meta; + } + + /** + * @return MetaTableTypeInterface[] + */ + public function getVisibleMetaFields(): array + { + $all = []; + foreach ($this->meta as $meta) { + if ($meta->isVisible()) { + $all[] = $meta; + } + } + + return $all; + } + + public function getMetaField(string $name): ?MetaTableTypeInterface + { + foreach ($this->meta as $field) { + if ($field->getName() !== null && strtolower($field->getName()) === strtolower($name)) { + return $field; + } + } + + return null; + } + + public function setMetaField(MetaTableTypeInterface $meta): EntityWithMetaFields + { + if ($meta->getName() === null) { + throw new \InvalidArgumentException('Meta-field needs to have a name'); + } + + if (!$meta instanceof InvoiceTemplateMeta) { + throw new \InvalidArgumentException('Meta-field needs to be an instanceof InvoiceTemplateMeta'); + } + + if (null === ($current = $this->getMetaField($meta->getName()))) { + $meta->setEntity($this); + $this->meta->add($meta); + + return $this; + } + + $current->merge($meta); return $this; } diff --git a/src/Entity/InvoiceTemplateMeta.php b/src/Entity/InvoiceTemplateMeta.php new file mode 100644 index 000000000..a1fc627a9 --- /dev/null +++ b/src/Entity/InvoiceTemplateMeta.php @@ -0,0 +1,49 @@ +template = $entity; + + return $this; + } + + /** + * @return InvoiceTemplate|null + */ + public function getEntity(): ?EntityWithMetaFields + { + return $this->template; + } +} diff --git a/src/Entity/MetaTableTypeInterface.php b/src/Entity/MetaTableTypeInterface.php index 03783a1d6..856089afb 100644 --- a/src/Entity/MetaTableTypeInterface.php +++ b/src/Entity/MetaTableTypeInterface.php @@ -11,6 +11,10 @@ namespace App\Entity; use Symfony\Component\Validator\Constraint; +/** + * @method null|string getSection() + * @method void setSection(?string $name) + */ interface MetaTableTypeInterface { /** @@ -43,6 +47,8 @@ interface MetaTableTypeInterface /** * This will merge the current object with the values from the given $meta instance. * It should NOT update the name or value, but only the form settings. + * + * Settings from the given $meta object will win over the current ones. */ public function merge(MetaTableTypeInterface $meta): MetaTableTypeInterface; @@ -132,6 +138,16 @@ interface MetaTableTypeInterface */ public function getOrder(): int; + /** + * FIXME activate with 3.0 + */ + //public function setSection(?string $section): void; + + /** + * FIXME activate with 3.0 + */ + //public function getSection(): ?string; + /** * Whether true if this field is defined by a plugin, or false if it is a value stored in the database. */ diff --git a/src/Entity/MetaTableTypeTrait.php b/src/Entity/MetaTableTypeTrait.php index 151f2220f..782463f7e 100644 --- a/src/Entity/MetaTableTypeTrait.php +++ b/src/Entity/MetaTableTypeTrait.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Form\Type\YesNoType; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; @@ -22,13 +23,13 @@ trait MetaTableTypeTrait { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[Serializer\Exclude] private ?int $id = null; /** * Name of the meta (custom) field */ - #[ORM\Column(name: 'name', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 50, nullable: false)] #[Assert\NotNull] #[Assert\Length(min: 2, max: 50)] #[Serializer\Expose] @@ -37,12 +38,12 @@ trait MetaTableTypeTrait /** * Value of the meta (custom) field */ - #[ORM\Column(name: 'value', type: 'text', length: 65535, nullable: true)] + #[ORM\Column(name: 'value', type: Types::TEXT, length: 65535, nullable: true)] #[Assert\Length(max: 65535)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?string $value = null; - #[ORM\Column(name: 'visible', type: 'boolean', nullable: false, options: ['default' => false])] + #[ORM\Column(name: 'visible', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] #[Assert\NotNull] private bool $visible = false; private ?string $label = null; @@ -66,6 +67,7 @@ trait MetaTableTypeTrait */ private mixed $data = null; private bool $updated = false; + private ?string $section = null; public function getName(): ?string { @@ -192,13 +194,11 @@ trait MetaTableTypeTrait public function merge(MetaTableTypeInterface $meta): MetaTableTypeInterface { - $this - ->setConstraints($meta->getConstraints()) - ->setIsRequired($meta->isRequired()) - ->setIsVisible($meta->isVisible()) - ->setOptions($meta->getOptions()) - ->setOrder($meta->getOrder()) - ; + $this->setConstraints($meta->getConstraints()); + $this->setIsRequired($meta->isRequired()); + $this->setIsVisible($meta->isVisible()); + $this->setOptions($meta->getOptions()); + $this->setOrder($meta->getOrder()); if ($meta->getLabel() !== null) { $this->setLabel($meta->getLabel()); @@ -208,6 +208,10 @@ trait MetaTableTypeTrait $this->setType($meta->getType()); } + if ($meta->getSection() !== null) { + $this->setSection($meta->getSection()); + } + return $this; } @@ -265,6 +269,16 @@ trait MetaTableTypeTrait } } + public function setSection(?string $section): void + { + $this->section = $section; + } + + public function getSection(): ?string + { + return $this->section; + } + /** * Whether this field is defined by a plugin or just a value stored in the database. */ diff --git a/src/Entity/Project.php b/src/Entity/Project.php index 331bd5381..4e2cfadbd 100644 --- a/src/Entity/Project.php +++ b/src/Entity/Project.php @@ -16,6 +16,7 @@ use App\Repository\ProjectRepository; use App\Validator\Constraints as Constraints; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; @@ -41,7 +42,7 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt /** * Unique Project ID */ - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] @@ -55,13 +56,13 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] #[Serializer\Expose] - #[Serializer\Groups(['Subresource', 'Expanded'])] + #[Serializer\Groups(['Expanded'])] #[OA\Property(ref: '#/components/schemas/Customer')] private ?Customer $customer = null; /** * Project name */ - #[ORM\Column(name: 'name', type: 'string', length: 150, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 150, nullable: false)] #[Assert\NotNull] #[Assert\Length(min: 2, max: 150)] #[Serializer\Expose] @@ -71,10 +72,10 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt /** * Project order number */ - #[ORM\Column(name: 'order_number', type: 'text', length: 50, nullable: true)] + #[ORM\Column(name: 'order_number', type: Types::TEXT, length: 50, nullable: true)] #[Assert\Length(max: 50)] #[Serializer\Expose] - #[Serializer\Groups(['Project_Entity'])] + #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'orderNumber')] private ?string $orderNumber = null; /** @@ -82,9 +83,9 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt * * Attention: Accessor MUST be used, otherwise date will be serialized in UTC. */ - #[ORM\Column(name: 'order_date', type: 'datetime', nullable: true)] + #[ORM\Column(name: 'order_date', type: Types::DATETIME_MUTABLE, nullable: true)] #[Serializer\Expose] - #[Serializer\Groups(['Project_Entity'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: "DateTime<'Y-m-d'>")] #[Serializer\Accessor(getter: 'getOrderDate')] private ?\DateTime $orderDate = null; @@ -93,9 +94,9 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt * * Attention: Accessor MUST be used, otherwise date will be serialized in UTC. */ - #[ORM\Column(name: 'start', type: 'datetime', nullable: true)] + #[ORM\Column(name: 'start', type: Types::DATETIME_MUTABLE, nullable: true)] #[Serializer\Expose] - #[Serializer\Groups(['Project'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: "DateTime<'Y-m-d'>")] #[Serializer\Accessor(getter: 'getStart')] private ?\DateTime $start = null; @@ -104,16 +105,16 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt * * Attention: Accessor MUST be used, otherwise date will be serialized in UTC. */ - #[ORM\Column(name: 'end', type: 'datetime', nullable: true)] + #[ORM\Column(name: 'end', type: Types::DATETIME_MUTABLE, nullable: true)] #[Serializer\Expose] - #[Serializer\Groups(['Project'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: "DateTime<'Y-m-d'>")] #[Serializer\Accessor(getter: 'getEnd')] private ?\DateTime $end = null; - #[ORM\Column(name: 'timezone', type: 'string', length: 64, nullable: true)] + #[ORM\Column(name: 'timezone', type: Types::STRING, length: 64, nullable: true)] private ?string $timezone = null; private bool $localized = false; - #[ORM\Column(name: 'comment', type: 'text', nullable: true)] + #[ORM\Column(name: 'comment', type: Types::TEXT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'comment')] @@ -121,13 +122,13 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt /** * If the project is not visible, times cannot be recorded */ - #[ORM\Column(name: 'visible', type: 'boolean', nullable: false)] + #[ORM\Column(name: 'visible', type: Types::BOOLEAN, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'visible', type: 'boolean')] private bool $visible = true; - #[ORM\Column(name: 'billable', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'billable', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -140,7 +141,7 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt */ #[ORM\OneToMany(mappedBy: 'project', targetEntity: ProjectMeta::class, cascade: ['persist'])] #[Serializer\Expose] - #[Serializer\Groups(['Project'])] + #[Serializer\Groups(['Default'])] #[Serializer\Type(name: 'array')] #[Serializer\SerializedName('metaFields')] #[Serializer\Accessor(getter: 'getVisibleMetaFields')] @@ -158,17 +159,17 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt #[Serializer\Groups(['Project'])] #[OA\Property(type: 'array', items: new OA\Items(ref: '#/components/schemas/Team'))] private Collection $teams; - #[ORM\Column(name: 'invoice_text', type: 'text', nullable: true)] + #[ORM\Column(name: 'invoice_text', type: Types::TEXT, nullable: true)] private ?string $invoiceText = null; /** * Whether this project allows booking of global activities */ - #[ORM\Column(name: 'global_activities', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'global_activities', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private bool $globalActivities = true; - #[ORM\Column(name: 'number', type: 'string', length: 10, nullable: true)] + #[ORM\Column(name: 'number', type: Types::STRING, length: 10, nullable: true)] #[Assert\Length(max: 10)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -187,6 +188,11 @@ class Project implements EntityWithMetaFields, EntityWithBudget, CreatedAt return $this->id; } + public function isNew(): bool + { + return $this->id === null; + } + public function getCustomer(): ?Customer { return $this->customer; diff --git a/src/Entity/Rate.php b/src/Entity/Rate.php index cb7b71cef..9cd2f790e 100644 --- a/src/Entity/Rate.php +++ b/src/Entity/Rate.php @@ -9,6 +9,7 @@ namespace App\Entity; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; @@ -16,7 +17,7 @@ use Symfony\Component\Validator\Constraints as Assert; trait Rate { - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] @@ -28,16 +29,16 @@ trait Rate #[Serializer\Groups(['Default'])] #[OA\Property(ref: '#/components/schemas/User')] private ?User $user = null; - #[ORM\Column(name: 'rate', type: 'float', nullable: false)] + #[ORM\Column(name: 'rate', type: Types::FLOAT, nullable: false)] #[Assert\GreaterThanOrEqual(0)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private float $rate = 0.00; - #[ORM\Column(name: 'internal_rate', type: 'float', nullable: true)] + #[ORM\Column(name: 'internal_rate', type: Types::FLOAT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?float $internalRate = null; - #[ORM\Column(name: 'fixed', type: 'boolean', nullable: false)] + #[ORM\Column(name: 'fixed', type: Types::BOOLEAN, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] diff --git a/src/Entity/Role.php b/src/Entity/Role.php index c877becf7..ebca72b11 100644 --- a/src/Entity/Role.php +++ b/src/Entity/Role.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Repository\RoleRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; @@ -21,11 +22,11 @@ use Symfony\Component\Validator\Constraints as Assert; #[UniqueEntity('name')] class Role { - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] private ?int $id = null; - #[ORM\Column(name: 'name', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 50, nullable: false)] #[Assert\NotNull] #[Assert\NotBlank] #[Assert\Length(min: 5, max: 50)] diff --git a/src/Entity/RolePermission.php b/src/Entity/RolePermission.php index eda451861..c491010e7 100644 --- a/src/Entity/RolePermission.php +++ b/src/Entity/RolePermission.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Repository\RolePermissionRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; use Symfony\Component\Validator\Constraints as Assert; @@ -21,7 +22,7 @@ use Symfony\Component\Validator\Constraints as Assert; #[UniqueEntity(['role', 'permission'])] class RolePermission { - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] private ?int $id = null; @@ -29,10 +30,10 @@ class RolePermission #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] private ?Role $role = null; - #[ORM\Column(name: 'permission', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'permission', type: Types::STRING, length: 50, nullable: false)] #[Assert\Length(max: 50)] private ?string $permission = null; - #[ORM\Column(name: 'allowed', type: 'boolean', nullable: false, options: ['default' => false])] + #[ORM\Column(name: 'allowed', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] #[Assert\NotNull] private bool $allowed = false; diff --git a/src/Entity/Tag.php b/src/Entity/Tag.php index 1701ae80e..d4fb408df 100644 --- a/src/Entity/Tag.php +++ b/src/Entity/Tag.php @@ -10,7 +10,7 @@ namespace App\Entity; use App\Repository\TagRepository; -use App\Utils\Color; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; @@ -20,15 +20,15 @@ use Symfony\Component\Validator\Constraints as Assert; #[ORM\UniqueConstraint(columns: ['name'])] #[ORM\Entity(repositoryClass: TagRepository::class)] #[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')] +#[ORM\Index(columns: ['visible'])] #[UniqueEntity('name')] #[Serializer\ExclusionPolicy('all')] -#[Serializer\VirtualProperty('ColorSafe', exp: 'object.getColorSafe()', options: [new Serializer\SerializedName('color-safe'), new Serializer\Type(name: 'string'), new Serializer\Groups(['Default'])])] class Tag { /** * Internal Tag ID */ - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] @@ -37,14 +37,14 @@ class Tag /** * The tag name */ - #[ORM\Column(name: 'name', type: 'string', length: 100, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 100, nullable: false)] #[Assert\NotBlank] #[Assert\Length(min: 2, max: 100, normalizer: 'trim')] #[Assert\Regex(pattern: '/,/', message: 'Tag name cannot contain comma', match: false)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?string $name = null; - #[ORM\Column(name: 'visible', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'visible', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -87,9 +87,4 @@ class Tag { return $this->getName(); } - - public function getColorSafe(): string - { - return $this->getColor() ?? (new Color())->getRandom($this->getName()); - } } diff --git a/src/Entity/Tax.php b/src/Entity/Tax.php new file mode 100644 index 000000000..429c87d14 --- /dev/null +++ b/src/Entity/Tax.php @@ -0,0 +1,48 @@ +type; + } + + public function getName(): string + { + return $this->name; + } + + public function getRate(): float + { + return $this->rate; + } + + public function isShow(): bool + { + return $this->rate > 0.0 || $this->show; + } + + public function getNote(): ?string + { + return $this->note; + } +} diff --git a/src/Entity/TaxType.php b/src/Entity/TaxType.php new file mode 100644 index 000000000..46dd5d3e7 --- /dev/null +++ b/src/Entity/TaxType.php @@ -0,0 +1,17 @@ + false])] + #[ORM\Column(name: 'teamlead', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default', 'Entity', 'Team_Entity', 'User_Entity'])] diff --git a/src/Entity/Timesheet.php b/src/Entity/Timesheet.php index b85d0eb11..f6a9f74e0 100644 --- a/src/Entity/Timesheet.php +++ b/src/Entity/Timesheet.php @@ -17,6 +17,7 @@ use DateTime; use DateTimeZone; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use OpenApi\Attributes as OA; @@ -53,23 +54,23 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt use ModifiedTrait; /** - * Category: Normal work-time (default category) + * @deprecated since 2.45 */ public const WORK = 'work'; /** - * Category: Holiday + * @deprecated since 2.45 */ public const HOLIDAY = 'holiday'; /** - * Category: Sickness + * @deprecated since 2.45 */ public const SICKNESS = 'sickness'; /** - * Category: Parental leave + * @deprecated since 2.45 */ public const PARENTAL = 'parental'; /** - * Category: Overtime reduction + * @deprecated since 2.45 */ public const OVERTIME = 'overtime'; @@ -81,7 +82,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt /** * Unique Timesheet ID */ - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[ORM\Id] #[ORM\GeneratedValue(strategy: 'IDENTITY')] #[Serializer\Expose] @@ -91,7 +92,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt * Reflects the date in the user timezone (not in UTC). * This value is automatically set through the begin column and ONLY used in statistic queries. */ - #[ORM\Column(name: 'date_tz', type: 'date_immutable', nullable: false)] + #[ORM\Column(name: 'date_tz', type: Types::DATE_IMMUTABLE, nullable: false)] #[Assert\NotNull] private ?\DateTimeImmutable $date = null; /** @@ -99,7 +100,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt * * Attention: Accessor MUST be used, otherwise date will be serialized in UTC. */ - #[ORM\Column(name: 'start_time', type: 'datetime', nullable: false)] + #[ORM\Column(name: 'start_time', type: Types::DATETIME_MUTABLE, nullable: false)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -111,7 +112,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt * * Attention: Accessor MUST be used, otherwise date will be serialized in UTC. */ - #[ORM\Column(name: 'end_time', type: 'datetime', nullable: true)] + #[ORM\Column(name: 'end_time', type: Types::DATETIME_MUTABLE, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Serializer\Type(name: 'DateTime')] @@ -120,70 +121,72 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt /** * @internal for storing the timezone of "begin" and "end" date */ - #[ORM\Column(name: 'timezone', type: 'string', length: 64, nullable: false)] + #[ORM\Column(name: 'timezone', type: Types::STRING, length: 64, nullable: false)] #[Assert\Timezone] private ?string $timezone = null; /** * @internal for storing the localized state of dates (see $timezone) */ private bool $localized = false; - #[ORM\Column(name: 'duration', type: 'integer', nullable: true)] + #[ORM\Column(name: 'duration', type: Types::INTEGER, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?int $duration = 0; - #[ORM\Column(name: 'break', type: 'integer', nullable: true)] + #[Serializer\Expose] + #[Serializer\Groups(['Default'])] + #[ORM\Column(name: 'break', type: Types::INTEGER, nullable: true)] private ?int $break = 0; #[ORM\ManyToOne(targetEntity: User::class)] #[ORM\JoinColumn(name: '`user`', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] #[Serializer\Expose] - #[Serializer\Groups(['Subresource', 'Expanded'])] + #[Serializer\Groups(['Expanded'])] #[OA\Property(ref: '#/components/schemas/User')] private ?User $user = null; #[ORM\ManyToOne(targetEntity: Activity::class)] #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] #[Serializer\Expose] - #[Serializer\Groups(['Subresource', 'Expanded'])] + #[Serializer\Groups(['Expanded'])] #[OA\Property(ref: '#/components/schemas/ActivityExpanded')] private ?Activity $activity = null; #[ORM\ManyToOne(targetEntity: Project::class)] #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] #[Serializer\Expose] - #[Serializer\Groups(['Subresource', 'Expanded'])] + #[Serializer\Groups(['Expanded'])] #[OA\Property(ref: '#/components/schemas/ProjectExpanded')] private ?Project $project = null; - #[ORM\Column(name: 'description', type: 'text', nullable: true)] + #[ORM\Column(name: 'description', type: Types::TEXT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?string $description = null; - #[ORM\Column(name: 'rate', type: 'float', nullable: false)] + #[ORM\Column(name: 'rate', type: Types::FLOAT, nullable: false)] #[Assert\GreaterThanOrEqual(0)] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private float $rate = 0.00; - #[ORM\Column(name: 'internal_rate', type: 'float', nullable: true)] + #[ORM\Column(name: 'internal_rate', type: Types::FLOAT, nullable: true)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?float $internalRate = null; - #[ORM\Column(name: 'fixed_rate', type: 'float', nullable: true)] + #[ORM\Column(name: 'fixed_rate', type: Types::FLOAT, nullable: true)] #[Assert\GreaterThanOrEqual(0)] #[Serializer\Expose] #[Serializer\Groups(['Entity'])] private ?float $fixedRate = null; - #[ORM\Column(name: 'hourly_rate', type: 'float', nullable: true)] + #[ORM\Column(name: 'hourly_rate', type: Types::FLOAT, nullable: true)] #[Assert\GreaterThanOrEqual(0)] #[Serializer\Expose] #[Serializer\Groups(['Entity'])] private ?float $hourlyRate = null; - #[ORM\Column(name: 'exported', type: 'boolean', nullable: false, options: ['default' => false])] + #[ORM\Column(name: 'exported', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private bool $exported = false; - #[ORM\Column(name: 'billable', type: 'boolean', nullable: false, options: ['default' => true])] + #[ORM\Column(name: 'billable', type: Types::BOOLEAN, nullable: false, options: ['default' => true])] #[Assert\NotNull] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -193,9 +196,9 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt */ #[Assert\NotNull] private ?string $billableMode = self::BILLABLE_DEFAULT; - #[ORM\Column(name: 'category', type: 'string', length: 10, nullable: false, options: ['default' => 'work'])] + #[ORM\Column(name: 'category', type: Types::STRING, length: 10, nullable: false, options: ['default' => 'work'])] #[Assert\NotNull] - private ?string $category = self::WORK; + private ?string $category = 'work'; /** * Tags * @@ -224,7 +227,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt { $this->tags = new ArrayCollection(); $this->meta = new ArrayCollection(); - $this->setModifiedAt(new \DateTimeImmutable('now', new \DateTimeZone('UTC'))); + $this->markAsModified(); } /** @@ -502,11 +505,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt public function setCategory(string $category): Timesheet { - $allowed = [self::WORK, self::HOLIDAY, self::SICKNESS, self::PARENTAL, self::OVERTIME]; - - if (!\in_array($category, $allowed)) { - throw new \InvalidArgumentException(\sprintf('Invalid timesheet category "%s" given, expected one of: %s', $category, implode(', ', $allowed))); - } + @trigger_error('Timesheet::setCategory() is deprecated.', E_USER_DEPRECATED); $this->category = $category; @@ -611,7 +610,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt { // this needs to be done, otherwise doctrine will not see the item as changed // and the calculators will not run - $this->setModifiedAt(new \DateTimeImmutable('now', new \DateTimeZone('UTC'))); + $this->markAsModified(); if (null === ($current = $this->getMetaField($meta->getName()))) { $meta->setEntity($this); @@ -659,7 +658,7 @@ class Timesheet implements EntityWithMetaFields, ExportableItem, ModifiedAt $this->id = null; } - $this->setModifiedAt(new \DateTimeImmutable('now', new \DateTimeZone('UTC'))); + $this->markAsModified(); $this->exported = false; $currentMeta = $this->meta; diff --git a/src/Entity/User.php b/src/Entity/User.php index 075420348..437a70afb 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -17,6 +17,7 @@ use App\WorkingTime\Mode\WorkingTimeModeNone; use DateTime; use Doctrine\Common\Collections\ArrayCollection; use Doctrine\Common\Collections\Collection; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use Exception; use JMS\Serializer\Annotation as Serializer; @@ -70,7 +71,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas */ #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'id', type: 'integer')] @@ -78,7 +79,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * The user alias will be displayed in the frontend instead of the username */ - #[ORM\Column(name: 'alias', type: 'string', length: 60, nullable: true)] + #[ORM\Column(name: 'alias', type: Types::STRING, length: 60, nullable: true)] #[Assert\Length(max: 60)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -87,13 +88,13 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * Registration date for the user */ - #[ORM\Column(name: 'registration_date', type: 'datetime', nullable: true)] + #[ORM\Column(name: 'registration_date', type: Types::DATETIME_MUTABLE, nullable: true)] #[Exporter\Expose(label: 'profile.registration_date', type: 'datetime')] private ?\DateTime $registeredAt = null; /** * An additional title for the user, like the Job position or Department */ - #[ORM\Column(name: 'title', type: 'string', length: 50, nullable: true)] + #[ORM\Column(name: 'title', type: Types::STRING, length: 50, nullable: true)] #[Assert\Length(max: 50)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] @@ -102,15 +103,15 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * URL to the user avatar, will be auto-generated if empty */ - #[ORM\Column(name: 'avatar', type: 'string', length: 255, nullable: true)] + #[ORM\Column(name: 'avatar', type: Types::STRING, length: 255, nullable: true)] #[Assert\Length(max: 255, groups: ['Profile'])] #[Serializer\Expose] - #[Serializer\Groups(['User_Entity'])] + #[Serializer\Groups(['Default'])] private ?string $avatar = null; /** * API token (password) for this user */ - #[ORM\Column(name: 'api_token', type: 'string', length: 255, nullable: true)] + #[ORM\Column(name: 'api_token', type: Types::STRING, length: 255, nullable: true)] private ?string $apiToken = null; /** * @internal to be set via form, must not be persisted @@ -130,7 +131,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas * @var Collection|null */ #[ORM\OneToMany(mappedBy: 'user', targetEntity: UserPreference::class, cascade: ['persist'])] - private ?Collection $preferences; + private ?Collection $preferences = null; /** * List of all team memberships. * @@ -148,7 +149,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas * * @internal for internal usage only */ - #[ORM\Column(name: 'auth', type: 'string', length: 20, nullable: true)] + #[ORM\Column(name: 'auth', type: Types::STRING, length: 20, nullable: true)] #[Assert\Length(max: 20)] private ?string $auth = self::AUTH_INTERNAL; /** @@ -157,32 +158,34 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas * @internal has no database mapping as the value is calculated from a permission */ private ?bool $isAllowedToSeeAllData = null; - #[ORM\Column(name: 'username', type: 'string', length: 180, nullable: false)] + #[ORM\Column(name: 'username', type: Types::STRING, length: 180, nullable: false)] #[Assert\NotBlank(groups: ['Registration', 'UserCreate', 'Profile'])] #[Assert\Regex(pattern: '/\//', match: false, groups: ['Registration', 'UserCreate', 'Profile'])] #[Assert\Length(min: 2, max: 64, groups: ['Registration', 'UserCreate', 'Profile'])] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private ?string $username = null; - #[ORM\Column(name: 'email', type: 'string', length: 180, nullable: false)] + #[ORM\Column(name: 'email', type: Types::STRING, length: 180, nullable: false)] #[Assert\NotBlank(groups: ['Registration', 'UserCreate', 'Profile'])] #[Assert\Length(min: 2, max: 180)] #[Assert\Email(mode: 'html5', groups: ['Registration', 'UserCreate', 'Profile'])] + #[Serializer\Expose] + #[Serializer\Groups(['Default'])] private ?string $email = null; - #[ORM\Column(name: 'account', type: 'string', length: 30, nullable: true)] + #[ORM\Column(name: 'account', type: Types::STRING, length: 30, nullable: true)] #[Assert\Length(max: 30)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] #[Exporter\Expose(label: 'account_number')] private ?string $accountNumber = null; - #[ORM\Column(name: 'enabled', type: 'boolean', nullable: false)] + #[ORM\Column(name: 'enabled', type: Types::BOOLEAN, nullable: false)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private bool $enabled = false; /** * Encrypted password. Must be persisted. */ - #[ORM\Column(name: 'password', type: 'string', nullable: false)] + #[ORM\Column(name: 'password', type: Types::STRING, nullable: false)] private ?string $password = null; /** * Plain password. Used for model validation, not persisted. @@ -190,20 +193,20 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas #[Assert\NotBlank(groups: ['Registration', 'PasswordUpdate', 'UserCreate'])] #[Assert\Length(min: 8, max: 60, groups: ['Registration', 'PasswordUpdate', 'UserCreate', 'ResetPassword', 'ChangePassword'])] private ?string $plainPassword = null; - #[ORM\Column(name: 'last_login', type: 'datetime', nullable: true)] + #[ORM\Column(name: 'last_login', type: Types::DATETIME_MUTABLE, nullable: true)] private ?DateTime $lastLogin = null; /** * Random string sent to the user email address in order to verify it. */ - #[ORM\Column(name: 'confirmation_token', type: 'string', length: 180, unique: true, nullable: true)] + #[ORM\Column(name: 'confirmation_token', type: Types::STRING, length: 180, unique: true, nullable: true)] #[Assert\Length(max: 180)] private ?string $confirmationToken = null; - #[ORM\Column(name: 'password_requested_at', type: 'datetime_immutable', nullable: true)] + #[ORM\Column(name: 'password_requested_at', type: Types::DATETIME_IMMUTABLE, nullable: true)] private ?\DateTimeImmutable $passwordRequestedAt = null; /** * List of all role names */ - #[ORM\Column(name: 'roles', type: 'array', nullable: false)] + #[ORM\Column(name: 'roles', type: Types::ARRAY, nullable: false)] // @phpstan-ignore classConstant.deprecated #[Serializer\Expose] #[Serializer\Groups(['User_Entity'])] #[Serializer\Type('array')] @@ -213,11 +216,13 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas * If not empty two-factor authentication is enabled. * TODO reduce the length, which was initially forgotten and set to 255, as this is the default for MySQL with Doctrine (see migration Version20230126002049) */ - #[ORM\Column(name: 'totp_secret', type: 'string', length: 255, nullable: true)] + #[ORM\Column(name: 'totp_secret', type: Types::STRING, length: 255, nullable: true)] private ?string $totpSecret = null; - #[ORM\Column(name: 'totp_enabled', type: 'boolean', nullable: false, options: ['default' => false])] + #[ORM\Column(name: 'totp_enabled', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] private bool $totpEnabled = false; - #[ORM\Column(name: 'system_account', type: 'boolean', nullable: false, options: ['default' => false])] + #[ORM\Column(name: 'system_account', type: Types::BOOLEAN, nullable: false, options: ['default' => false])] + #[Serializer\Expose] + #[Serializer\Groups(['Default'])] private bool $systemAccount = false; #[ORM\ManyToOne(targetEntity: User::class)] #[ORM\JoinColumn(nullable: true, onDelete: 'SET NULL')] @@ -351,6 +356,9 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas $all = []; foreach ($this->preferences as $preference) { + if ($preference->getName() === null || $preference->getName()[0] === '_') { + continue; + } if ($preference->isEnabled() && !\in_array($preference->getName(), $skip)) { $all[] = $preference; } @@ -369,7 +377,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * @param iterable $preferences - * @return User */ public function setPreferences(iterable $preferences): User { @@ -383,7 +390,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas } /** - * @param string $name * @param bool|int|string|float|null $value */ public function setPreferenceValue(string $name, $value = null): void @@ -418,7 +424,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas */ #[Serializer\VirtualProperty] #[Serializer\SerializedName('locale')] - #[Serializer\Groups(['User_Entity'])] + #[Serializer\Groups(['Default'])] #[OA\Property(type: 'string')] public function getLocale(): string { @@ -433,7 +439,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas #[Serializer\VirtualProperty] #[Serializer\SerializedName('timezone')] - #[Serializer\Groups(['User_Entity'])] + #[Serializer\Groups(['Default'])] #[OA\Property(type: 'string')] public function getTimezone(): string { @@ -441,11 +447,11 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas } /** - * The locale used for translations + * The locale used for translating the UI */ #[Serializer\VirtualProperty] #[Serializer\SerializedName('language')] - #[Serializer\Groups(['User_Entity'])] + #[Serializer\Groups(['Default'])] #[OA\Property(type: 'string')] public function getLanguage(): string { @@ -467,6 +473,9 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas return $this->getPreferenceValue(UserPreference::FIRST_WEEKDAY, User::DEFAULT_FIRST_WEEKDAY, false); } + /** + * @ deprecated since 2.40 - will be removed with 3.0 + */ public function isExportDecimal(): bool { return (bool) $this->getPreferenceValue('export_decimal', false, false); @@ -503,10 +512,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas return $allowNull ? $value : ($value ?? $default); } - /** - * @param UserPreference $preference - * @return User - */ public function addPreference(UserPreference $preference): User { if (null === $this->preferences) { @@ -585,9 +590,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas } /** - * Checks if the user is member of any team. - * - * @return bool + * Checks if the user is a member of any team. */ public function hasTeamAssignment(): bool { @@ -598,7 +601,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas * Checks is the user is teamlead in any of the assigned teams. * * @see User::hasTeamleadRole() - * @return bool */ public function isTeamlead(): bool { @@ -613,9 +615,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * Checks if the given user is a team member. - * - * @param User $user - * @return bool */ public function hasTeamMember(User $user): bool { @@ -679,8 +678,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * Required in the User profile screen to edit his teams. - * - * @param Team $team */ public function addTeam(Team $team): void { @@ -699,8 +696,6 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas /** * Required in the User profile screen to edit his teams. - * - * @param Team $team */ public function removeTeam(Team $team): void { @@ -927,6 +922,11 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas return $this; } + /** + * Alias for setUserIdentifier() + * + * The visible username is setAlias()) + */ public function setUsername(string $username): void { $this->username = $username; @@ -970,7 +970,7 @@ class User implements UserInterface, EquatableInterface, ThemeUserInterface, Pas return $this; } - public function setLastLogin(\DateTime $time = null): User + public function setLastLogin(?\DateTime $time = null): User { $this->lastLogin = $time; diff --git a/src/Entity/UserPreference.php b/src/Entity/UserPreference.php index 0db38c21f..243a215a2 100644 --- a/src/Entity/UserPreference.php +++ b/src/Entity/UserPreference.php @@ -11,6 +11,7 @@ namespace App\Entity; use App\Form\Type\YesNoType; use App\WorkingTime\Calculator\WorkingTimeCalculatorDay; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; @@ -53,19 +54,19 @@ class UserPreference #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] private ?int $id = null; #[ORM\ManyToOne(targetEntity: User::class, inversedBy: 'preferences')] #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] private ?User $user = null; - #[ORM\Column(name: 'name', type: 'string', length: 50, nullable: false)] + #[ORM\Column(name: 'name', type: Types::STRING, length: 50, nullable: false)] #[Assert\NotNull] #[Assert\Length(min: 2, max: 50)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] private string $name; - #[ORM\Column(name: 'value', type: 'string', length: 255, nullable: true)] + #[ORM\Column(name: 'value', type: Types::STRING, length: 255, nullable: true)] #[Assert\Length(max: 250)] #[Serializer\Expose] #[Serializer\Groups(['Default'])] diff --git a/src/Entity/WorkingTime.php b/src/Entity/WorkingTime.php index e0df450f2..00718b909 100644 --- a/src/Entity/WorkingTime.php +++ b/src/Entity/WorkingTime.php @@ -10,6 +10,7 @@ namespace App\Entity; use App\Repository\WorkingTimeRepository; +use Doctrine\DBAL\Types\Types; use Doctrine\ORM\Mapping as ORM; use JMS\Serializer\Annotation as Serializer; use Symfony\Component\Validator\Constraints as Assert; @@ -23,29 +24,29 @@ class WorkingTime { #[ORM\Id] #[ORM\GeneratedValue] - #[ORM\Column(name: 'id', type: 'integer')] + #[ORM\Column(name: 'id', type: Types::INTEGER)] private ?int $id = null; #[ORM\ManyToOne(targetEntity: User::class)] #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')] #[Assert\NotNull] private ?User $user = null; - #[ORM\Column(name: 'date', type: 'date', nullable: false)] + #[ORM\Column(name: 'date', type: Types::DATE_IMMUTABLE, nullable: false)] #[Assert\NotNull] - private \DateTimeInterface $date; - #[ORM\Column(name: 'expected', type: 'integer', nullable: false)] + private \DateTimeImmutable $date; + #[ORM\Column(name: 'expected', type: Types::INTEGER, nullable: false)] #[Assert\NotNull] private int $expectedTime = 0; - #[ORM\Column(name: 'actual', type: 'integer', nullable: false)] + #[ORM\Column(name: 'actual', type: Types::INTEGER, nullable: false)] #[Assert\NotNull] private int $actualTime = 0; #[ORM\ManyToOne(targetEntity: User::class)] #[ORM\JoinColumn(name: 'approved_by', nullable: true, onDelete: 'SET NULL')] private ?User $approvedBy = null; - #[ORM\Column(name: 'approved_at', type: 'datetime_immutable', nullable: true)] + #[ORM\Column(name: 'approved_at', type: Types::DATETIME_IMMUTABLE, nullable: true)] #[Assert\NotNull] private ?\DateTimeImmutable $approvedAt = null; - public function __construct(User $user, \DateTimeInterface $date) + public function __construct(User $user, \DateTimeImmutable $date) { $this->user = $user; $this->date = $date; @@ -61,7 +62,7 @@ class WorkingTime return $this->user; } - public function getDate(): \DateTimeInterface + public function getDate(): \DateTimeImmutable { return $this->date; } diff --git a/src/Event/AbstractActivityEvent.php b/src/Event/AbstractActivityEvent.php index 59daf4fde..72b2f5892 100644 --- a/src/Event/AbstractActivityEvent.php +++ b/src/Event/AbstractActivityEvent.php @@ -17,7 +17,7 @@ use Symfony\Contracts\EventDispatcher\Event; */ abstract class AbstractActivityEvent extends Event { - public function __construct(private Activity $activity) + public function __construct(private readonly Activity $activity) { } diff --git a/src/Event/AbstractCustomerEvent.php b/src/Event/AbstractCustomerEvent.php index 1ca2aa497..557cd7931 100644 --- a/src/Event/AbstractCustomerEvent.php +++ b/src/Event/AbstractCustomerEvent.php @@ -17,7 +17,7 @@ use Symfony\Contracts\EventDispatcher\Event; */ abstract class AbstractCustomerEvent extends Event { - public function __construct(private Customer $customer) + public function __construct(private readonly Customer $customer) { } diff --git a/src/Event/AbstractInvoiceEvent.php b/src/Event/AbstractInvoiceEvent.php new file mode 100644 index 000000000..f2db63cdd --- /dev/null +++ b/src/Event/AbstractInvoiceEvent.php @@ -0,0 +1,25 @@ +invoice; + } +} diff --git a/src/Event/AbstractProjectEvent.php b/src/Event/AbstractProjectEvent.php index d5547365f..1de470509 100644 --- a/src/Event/AbstractProjectEvent.php +++ b/src/Event/AbstractProjectEvent.php @@ -17,7 +17,7 @@ use Symfony\Contracts\EventDispatcher\Event; */ abstract class AbstractProjectEvent extends Event { - public function __construct(private Project $project) + public function __construct(private readonly Project $project) { } diff --git a/src/Event/AbstractTeamEvent.php b/src/Event/AbstractTeamEvent.php new file mode 100644 index 000000000..8ab2d9daf --- /dev/null +++ b/src/Event/AbstractTeamEvent.php @@ -0,0 +1,28 @@ +team; + } +} diff --git a/src/Event/ActivityCreatePostEvent.php b/src/Event/ActivityCreatePostEvent.php index f4659e7d9..48f9c4649 100644 --- a/src/Event/ActivityCreatePostEvent.php +++ b/src/Event/ActivityCreatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for activity instances, which were just saved. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'activity.created', description: 'Triggered after a new activity was created', payload: 'object.getActivity()')] final class ActivityCreatePostEvent extends AbstractActivityEvent { } diff --git a/src/Event/ActivityDeleteEvent.php b/src/Event/ActivityDeleteEvent.php index 199af1917..da9d62d87 100644 --- a/src/Event/ActivityDeleteEvent.php +++ b/src/Event/ActivityDeleteEvent.php @@ -9,9 +9,19 @@ namespace App\Event; -/** - * Triggered right before a activity will be deleted. - */ +use App\Entity\Activity; +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'activity.deleted', description: 'Triggered right before an activity will be deleted', payload: 'object.getActivity()')] final class ActivityDeleteEvent extends AbstractActivityEvent { + public function __construct(Activity $activity, private readonly ?Activity $replacementActivity = null) + { + parent::__construct($activity); + } + + public function getReplacementActivity(): ?Activity + { + return $this->replacementActivity; + } } diff --git a/src/Event/ActivityMetaDefinitionEvent.php b/src/Event/ActivityMetaDefinitionEvent.php index 4dc0c2c4b..1ffa2c113 100644 --- a/src/Event/ActivityMetaDefinitionEvent.php +++ b/src/Event/ActivityMetaDefinitionEvent.php @@ -17,7 +17,7 @@ use Symfony\Contracts\EventDispatcher\Event; */ final class ActivityMetaDefinitionEvent extends Event { - public function __construct(private Activity $entity) + public function __construct(private readonly Activity $entity) { } diff --git a/src/Event/ActivityUpdatePostEvent.php b/src/Event/ActivityUpdatePostEvent.php index cac680c91..1c5d42e2d 100644 --- a/src/Event/ActivityUpdatePostEvent.php +++ b/src/Event/ActivityUpdatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for activity instances, which were updated. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'activity.updated', description: 'Triggered after an activity was updated', payload: 'object.getActivity()')] final class ActivityUpdatePostEvent extends AbstractActivityEvent { } diff --git a/src/Event/CustomerCreatePostEvent.php b/src/Event/CustomerCreatePostEvent.php index aa4d32795..d49b17462 100644 --- a/src/Event/CustomerCreatePostEvent.php +++ b/src/Event/CustomerCreatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for customer instances, which were just saved. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'customer.created', description: 'Triggered after a customer was created', payload: 'object.getCustomer()')] final class CustomerCreatePostEvent extends AbstractCustomerEvent { } diff --git a/src/Event/CustomerDeleteEvent.php b/src/Event/CustomerDeleteEvent.php index ce5747142..502c23256 100644 --- a/src/Event/CustomerDeleteEvent.php +++ b/src/Event/CustomerDeleteEvent.php @@ -9,9 +9,19 @@ namespace App\Event; -/** - * Triggered right before a customer will be deleted. - */ +use App\Entity\Customer; +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'customer.deleted', description: 'Triggered right before a customer will be deleted', payload: 'object.getCustomer()')] final class CustomerDeleteEvent extends AbstractCustomerEvent { + public function __construct(Customer $customer, private readonly ?Customer $replacementCustomer = null) + { + parent::__construct($customer); + } + + public function getReplacementCustomer(): ?Customer + { + return $this->replacementCustomer; + } } diff --git a/src/Event/CustomerMetaDefinitionEvent.php b/src/Event/CustomerMetaDefinitionEvent.php index 34b1a7a51..985ff63ca 100644 --- a/src/Event/CustomerMetaDefinitionEvent.php +++ b/src/Event/CustomerMetaDefinitionEvent.php @@ -17,7 +17,7 @@ use Symfony\Contracts\EventDispatcher\Event; */ final class CustomerMetaDefinitionEvent extends Event { - public function __construct(private Customer $entity) + public function __construct(private readonly Customer $entity) { } diff --git a/src/Event/CustomerUpdatePostEvent.php b/src/Event/CustomerUpdatePostEvent.php index 1d459df60..66f6b4c30 100644 --- a/src/Event/CustomerUpdatePostEvent.php +++ b/src/Event/CustomerUpdatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for customer instances, which were just updated. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'customer.updated', description: 'Triggered after a customer was updated', payload: 'object.getCustomer()')] final class CustomerUpdatePostEvent extends AbstractCustomerEvent { } diff --git a/src/Event/InvoiceCreatedEvent.php b/src/Event/InvoiceCreatedEvent.php index 7ceb01409..76a8ebcef 100644 --- a/src/Event/InvoiceCreatedEvent.php +++ b/src/Event/InvoiceCreatedEvent.php @@ -11,17 +11,14 @@ namespace App\Event; use App\Entity\Invoice; use App\Invoice\InvoiceModel; -use Symfony\Contracts\EventDispatcher\Event; +use App\Webhook\Attribute\AsWebhook; -final class InvoiceCreatedEvent extends Event +#[AsWebhook(name: 'invoice.created', description: 'Triggered after an invoice was created', payload: 'object.getInvoice()')] +final class InvoiceCreatedEvent extends AbstractInvoiceEvent { - public function __construct(private Invoice $invoice, private InvoiceModel $model) + public function __construct(Invoice $invoice, private readonly InvoiceModel $model) { - } - - public function getInvoice(): Invoice - { - return $this->invoice; + parent::__construct($invoice); } public function getInvoiceModel(): InvoiceModel diff --git a/src/Event/InvoiceDeleteEvent.php b/src/Event/InvoiceDeleteEvent.php index 5a89ecfdf..678cd5880 100644 --- a/src/Event/InvoiceDeleteEvent.php +++ b/src/Event/InvoiceDeleteEvent.php @@ -9,17 +9,9 @@ namespace App\Event; -use App\Entity\Invoice; -use Symfony\Contracts\EventDispatcher\Event; +use App\Webhook\Attribute\AsWebhook; -final class InvoiceDeleteEvent extends Event +#[AsWebhook(name: 'invoice.deleted', description: 'Triggered after an invoice was deleted', payload: 'object.getInvoice()')] +final class InvoiceDeleteEvent extends AbstractInvoiceEvent { - public function __construct(private Invoice $invoice) - { - } - - public function getInvoice(): Invoice - { - return $this->invoice; - } } diff --git a/src/Event/InvoiceDocumentsEvent.php b/src/Event/InvoiceDocumentsEvent.php index ac0cf4ae0..efd6603c9 100644 --- a/src/Event/InvoiceDocumentsEvent.php +++ b/src/Event/InvoiceDocumentsEvent.php @@ -47,6 +47,9 @@ final class InvoiceDocumentsEvent extends Event $this->documents = $documents; } + /** + * @CloudRequired + */ public function setMaximumAllowedDocuments(int $max): void { $this->maximum = $max; diff --git a/src/Event/InvoiceMetaDefinitionEvent.php b/src/Event/InvoiceMetaDefinitionEvent.php index 15b752115..ae8c5a928 100644 --- a/src/Event/InvoiceMetaDefinitionEvent.php +++ b/src/Event/InvoiceMetaDefinitionEvent.php @@ -13,7 +13,7 @@ use App\Entity\Invoice; use Symfony\Contracts\EventDispatcher\Event; /** - * This event can be used, to dynamically add meta fields to invoices + * This event can be used, to dynamically add meta-fields to invoices */ final class InvoiceMetaDefinitionEvent extends Event { diff --git a/src/Event/InvoicePreRenderEvent.php b/src/Event/InvoicePreRenderEvent.php index e966a607d..3664fd109 100644 --- a/src/Event/InvoicePreRenderEvent.php +++ b/src/Event/InvoicePreRenderEvent.php @@ -14,9 +14,21 @@ use App\Invoice\RendererInterface; use App\Model\InvoiceDocument; use Symfony\Contracts\EventDispatcher\Event; +/** + * Triggered right before an invoice is rendered. + * + * You can use this event to: + * - add invoice hydrator + * - read and change invoice model + * - change tax rates + */ final class InvoicePreRenderEvent extends Event { - public function __construct(private InvoiceModel $model, private InvoiceDocument $document, private RendererInterface $renderer) + public function __construct( + private readonly InvoiceModel $model, + private readonly InvoiceDocument $document, + private readonly RendererInterface $renderer + ) { } diff --git a/src/Event/InvoiceTemplateMetaDefinitionEvent.php b/src/Event/InvoiceTemplateMetaDefinitionEvent.php new file mode 100644 index 000000000..daee70813 --- /dev/null +++ b/src/Event/InvoiceTemplateMetaDefinitionEvent.php @@ -0,0 +1,28 @@ +entity; + } +} diff --git a/src/Event/PermissionSectionsEvent.php b/src/Event/PermissionSectionsEvent.php index d4f6db924..d276d5955 100644 --- a/src/Event/PermissionSectionsEvent.php +++ b/src/Event/PermissionSectionsEvent.php @@ -20,9 +20,9 @@ final class PermissionSectionsEvent extends Event /** * @var array */ - private array $sections = []; + private array $sections = []; // @phpstan-ignore property.deprecatedInterface - public function addSection(PermissionSectionInterface $section): PermissionSectionsEvent + public function addSection(PermissionSectionInterface $section): PermissionSectionsEvent // @phpstan-ignore parameter.deprecatedInterface { $this->sections[] = $section; @@ -32,7 +32,7 @@ final class PermissionSectionsEvent extends Event /** * @return PermissionSectionInterface[] */ - public function getSections(): array + public function getSections(): array // @phpstan-ignore return.deprecatedInterface { return $this->sections; } diff --git a/src/Event/ProjectCreatePostEvent.php b/src/Event/ProjectCreatePostEvent.php index c75fadfcb..aecbc63b0 100644 --- a/src/Event/ProjectCreatePostEvent.php +++ b/src/Event/ProjectCreatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for project instances, which were just saved. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'project.created', description: 'Triggered after a project was created', payload: 'object.getProject()')] final class ProjectCreatePostEvent extends AbstractProjectEvent { } diff --git a/src/Event/ProjectDeleteEvent.php b/src/Event/ProjectDeleteEvent.php index 787843d29..325086cd9 100644 --- a/src/Event/ProjectDeleteEvent.php +++ b/src/Event/ProjectDeleteEvent.php @@ -9,9 +9,19 @@ namespace App\Event; -/** - * Triggered right before a project will be deleted. - */ +use App\Entity\Project; +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'project.deleted', description: 'Triggered right before a project will be deleted', payload: 'object.getProject()')] final class ProjectDeleteEvent extends AbstractProjectEvent { + public function __construct(Project $project, private readonly ?Project $replacementProject = null) + { + parent::__construct($project); + } + + public function getReplacementProject(): ?Project + { + return $this->replacementProject; + } } diff --git a/src/Event/ProjectMetaDefinitionEvent.php b/src/Event/ProjectMetaDefinitionEvent.php index 4577d53f4..13f4ec368 100644 --- a/src/Event/ProjectMetaDefinitionEvent.php +++ b/src/Event/ProjectMetaDefinitionEvent.php @@ -17,7 +17,7 @@ use Symfony\Contracts\EventDispatcher\Event; */ final class ProjectMetaDefinitionEvent extends Event { - public function __construct(private Project $entity) + public function __construct(private readonly Project $entity) { } diff --git a/src/Event/ProjectUpdatePostEvent.php b/src/Event/ProjectUpdatePostEvent.php index 2b9c72e1d..1f51be0cd 100644 --- a/src/Event/ProjectUpdatePostEvent.php +++ b/src/Event/ProjectUpdatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for project instances, which were just updated. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'project.updated', description: 'Triggered after a project was updated', payload: 'object.getProject()')] final class ProjectUpdatePostEvent extends AbstractProjectEvent { } diff --git a/src/Event/QuickEntryMetaDisplayEvent.php b/src/Event/QuickEntryMetaDisplayEvent.php new file mode 100644 index 000000000..ff50f9897 --- /dev/null +++ b/src/Event/QuickEntryMetaDisplayEvent.php @@ -0,0 +1,25 @@ +configurations; } - /** - * @param SystemConfiguration $configuration - * @return SystemConfigurationEvent - */ public function addConfiguration(SystemConfiguration $configuration): SystemConfigurationEvent { $this->configurations[] = $configuration; diff --git a/src/Event/TeamCreateEvent.php b/src/Event/TeamCreateEvent.php new file mode 100644 index 000000000..9fd80f0ed --- /dev/null +++ b/src/Event/TeamCreateEvent.php @@ -0,0 +1,17 @@ +> $payload */ public function __construct(private readonly ?User $user = null, protected array $payload = []) diff --git a/src/Event/ThemeJavascriptTranslationsEvent.php b/src/Event/ThemeJavascriptTranslationsEvent.php index 15825ef01..b7f4da7a8 100644 --- a/src/Event/ThemeJavascriptTranslationsEvent.php +++ b/src/Event/ThemeJavascriptTranslationsEvent.php @@ -11,6 +11,9 @@ namespace App\Event; use Symfony\Contracts\EventDispatcher\Event; +/** + * @deprecated since 2.32 - use TranslatorInterface directly + */ final class ThemeJavascriptTranslationsEvent extends Event { /** diff --git a/src/Event/TimesheetCreatePostEvent.php b/src/Event/TimesheetCreatePostEvent.php index 88f595626..64a074d22 100644 --- a/src/Event/TimesheetCreatePostEvent.php +++ b/src/Event/TimesheetCreatePostEvent.php @@ -9,6 +9,9 @@ namespace App\Event; +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'timesheet.created', description: 'Triggered after a timesheet was created', payload: 'object.getTimesheet()')] final class TimesheetCreatePostEvent extends AbstractTimesheetEvent { } diff --git a/src/Event/TimesheetStopPostEvent.php b/src/Event/TimesheetStopPostEvent.php index 4fad00468..702d1d941 100644 --- a/src/Event/TimesheetStopPostEvent.php +++ b/src/Event/TimesheetStopPostEvent.php @@ -9,6 +9,9 @@ namespace App\Event; +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'timesheet.stopped', description: 'Triggered after a timesheet was stopped', payload: 'object.getTimesheet()')] final class TimesheetStopPostEvent extends AbstractTimesheetEvent { } diff --git a/src/Event/TimesheetUpdatePostEvent.php b/src/Event/TimesheetUpdatePostEvent.php index 7c7a18936..dccf58cfa 100644 --- a/src/Event/TimesheetUpdatePostEvent.php +++ b/src/Event/TimesheetUpdatePostEvent.php @@ -9,6 +9,9 @@ namespace App\Event; +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'timesheet.updated', description: 'Triggered after a timesheet was updated', payload: 'object.getTimesheet()')] final class TimesheetUpdatePostEvent extends AbstractTimesheetEvent { } diff --git a/src/Event/UserCreatePostEvent.php b/src/Event/UserCreatePostEvent.php index 6936c36e8..19d82e4fc 100644 --- a/src/Event/UserCreatePostEvent.php +++ b/src/Event/UserCreatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for new user instances, which were just saved. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'user.created', description: 'Triggered after a user was created', payload: 'object.getUser()')] final class UserCreatePostEvent extends AbstractUserEvent { } diff --git a/src/Event/UserDeletePostEvent.php b/src/Event/UserDeletePostEvent.php index 25197a965..620dd3729 100644 --- a/src/Event/UserDeletePostEvent.php +++ b/src/Event/UserDeletePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for user instances which were just deleted. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'user.deleted', description: 'Triggered after a user was deleted', payload: 'object.getUser()')] final class UserDeletePostEvent extends UserDeleteEvent { } diff --git a/src/Event/UserUpdatePostEvent.php b/src/Event/UserUpdatePostEvent.php index ee6b0bcb6..7f5223718 100644 --- a/src/Event/UserUpdatePostEvent.php +++ b/src/Event/UserUpdatePostEvent.php @@ -9,9 +9,9 @@ namespace App\Event; -/** - * Triggered for user instances, which were just updated. - */ +use App\Webhook\Attribute\AsWebhook; + +#[AsWebhook(name: 'user.updated', description: 'Triggered after a user was updated', payload: 'object.getUser()')] final class UserUpdatePostEvent extends AbstractUserEvent { } diff --git a/src/Event/WorkingTimeApproveMonthEvent.php b/src/Event/WorkingTimeApproveMonthEvent.php index f38f2707d..530c81242 100644 --- a/src/Event/WorkingTimeApproveMonthEvent.php +++ b/src/Event/WorkingTimeApproveMonthEvent.php @@ -15,13 +15,19 @@ use Symfony\Contracts\EventDispatcher\Event; final class WorkingTimeApproveMonthEvent extends Event { - public function __construct(private User $user, private Month $month, private \DateTimeInterface $approvalDate, private User $approver) + public function __construct( + private readonly Month $month, + private readonly User $approvedBy + ) { } + /** + * @deprecated use getMonth()->getUser() instead) + */ public function getUser(): User { - return $this->user; + return $this->getMonth()->getUser(); } public function getMonth(): Month @@ -29,13 +35,8 @@ final class WorkingTimeApproveMonthEvent extends Event return $this->month; } - public function getApprovalDate(): \DateTimeInterface + public function getApprovedBy(): User { - return $this->approvalDate; - } - - public function getApprover(): User - { - return $this->approver; + return $this->approvedBy; } } diff --git a/src/Event/WorkingTimeUnlockMonthEvent.php b/src/Event/WorkingTimeUnlockMonthEvent.php new file mode 100644 index 000000000..a42a4a05f --- /dev/null +++ b/src/Event/WorkingTimeUnlockMonthEvent.php @@ -0,0 +1,34 @@ +month; + } + + public function getUnlockedBy(): User + { + return $this->unlockedBy; + } +} diff --git a/src/EventSubscriber/MenuBuilderSubscriber.php b/src/EventSubscriber/MenuBuilderSubscriber.php index a54a7fa01..ea927cd10 100644 --- a/src/EventSubscriber/MenuBuilderSubscriber.php +++ b/src/EventSubscriber/MenuBuilderSubscriber.php @@ -21,7 +21,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; */ final class MenuBuilderSubscriber implements EventSubscriberInterface { - public function __construct(private MenuService $menuService) + public function __construct(private readonly MenuService $menuService) { } @@ -53,7 +53,7 @@ final class MenuBuilderSubscriber implements EventSubscriberInterface $event->addItem($menuEvent->getSystemMenu()); } - $route = $event->getRequest()->get('_route'); + $route = $event->getRequest()->attributes->get('_route'); if (!\is_string($route)) { return; } diff --git a/src/EventSubscriber/RedirectToLocaleSubscriber.php b/src/EventSubscriber/RedirectToLocaleSubscriber.php index 7415ba96c..a792fedea 100644 --- a/src/EventSubscriber/RedirectToLocaleSubscriber.php +++ b/src/EventSubscriber/RedirectToLocaleSubscriber.php @@ -22,7 +22,10 @@ use Symfony\Component\Routing\Generator\UrlGeneratorInterface; */ final class RedirectToLocaleSubscriber implements EventSubscriberInterface { - public function __construct(private UrlGeneratorInterface $urlGenerator, private LocaleService $localeService) + public function __construct( + private readonly UrlGeneratorInterface $urlGenerator, + private readonly LocaleService $localeService + ) { } diff --git a/src/EventSubscriber/ThemeOptionsSubscriber.php b/src/EventSubscriber/ThemeOptionsSubscriber.php index 18fe1bfcf..41ce02f1d 100644 --- a/src/EventSubscriber/ThemeOptionsSubscriber.php +++ b/src/EventSubscriber/ThemeOptionsSubscriber.php @@ -10,9 +10,7 @@ namespace App\EventSubscriber; use App\Configuration\LocaleService; -use App\Constants; use App\Entity\User; -use App\Entity\UserPreference; use KevinPapst\TablerBundle\Helper\ContextHelper; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\HttpKernel\Event\KernelEvent; @@ -46,8 +44,6 @@ final class ThemeOptionsSubscriber implements EventSubscriberInterface return; } - $this->helper->setAssetVersion((string) Constants::VERSION_ID); - if ($this->localeService->isRightToLeft($event->getRequest()->getLocale())) { $this->helper->setIsRightToLeft(true); } @@ -63,9 +59,16 @@ final class ThemeOptionsSubscriber implements EventSubscriberInterface return; } - $skin = $user->getPreferenceValue(UserPreference::SKIN); + $skin = $user->getSkin(); if ($skin === 'dark') { $this->helper->setIsDarkMode(true); + $this->helper->setThemeAuto(false); + } elseif ($skin === 'auto') { + $this->helper->setIsDarkMode(false); + $this->helper->setThemeAuto(true); + } else { + $this->helper->setIsDarkMode(false); + $this->helper->setThemeAuto(false); } // do not allow boxed layout, header is not compatible and other functions need the full size as well diff --git a/src/EventSubscriber/UserDetailsSubscriber.php b/src/EventSubscriber/UserDetailsSubscriber.php index deb4d0fa1..9d717c9db 100644 --- a/src/EventSubscriber/UserDetailsSubscriber.php +++ b/src/EventSubscriber/UserDetailsSubscriber.php @@ -17,6 +17,8 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface; /** + * Adds the links in the user profile dropdown in the template on each page. + * * @internal */ class UserDetailsSubscriber implements EventSubscriberInterface diff --git a/src/EventSubscriber/UserPreferenceSubscriber.php b/src/EventSubscriber/UserPreferenceSubscriber.php index 934a66c5a..182a9504b 100644 --- a/src/EventSubscriber/UserPreferenceSubscriber.php +++ b/src/EventSubscriber/UserPreferenceSubscriber.php @@ -60,7 +60,7 @@ final class UserPreferenceSubscriber implements EventSubscriberInterface if ($this->voter->isGranted('hourly-rate', $user)) { $enableHourlyRate = true; - $hourlyRateOptions = ['currency' => $this->systemConfiguration->getUserDefaultCurrency()]; + $hourlyRateOptions = ['currency' => $this->systemConfiguration->getDefaultCurrency()]; } return [ diff --git a/src/Export/Base/AbstractSpreadsheetRenderer.php b/src/Export/Base/AbstractSpreadsheetRenderer.php new file mode 100644 index 000000000..6c554dcf2 --- /dev/null +++ b/src/Export/Base/AbstractSpreadsheetRenderer.php @@ -0,0 +1,91 @@ +internal; + } + + public function setInternal(bool $internal): void + { + $this->internal = $internal; + } + + protected function getFileResponse(string $file, string $filename, string $contentType): BinaryFileResponse + { + $response = new BinaryFileResponse($file); + $disposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename); + + $response->headers->set('Content-Type', $contentType); + $response->headers->set('Content-Disposition', $disposition); + $response->deleteFileAfterSend(true); + + return $response; + } + + /** + * @param ExportableItem[] $exportItems + */ + protected function writeSpreadsheet(ColumnConverter $converter, TemplateInterface $template, SpreadsheetPackage $spreadsheetPackage, array $exportItems, TimesheetQuery $query): void + { + /** @var array $columns */ + $columns = $converter->getColumns($template, $query); + $spreadsheetPackage->setColumns($columns); + + $currentRow = 1; + foreach ($exportItems as $exportItem) { + $cells = []; + foreach ($columns as $column) { + $cells[] = $column->getValue($exportItem); + } + $spreadsheetPackage->addRow($cells); + $currentRow++; + } + + if ($currentRow > 1) { + $totalColumns = ['duration', 'rate', 'internalRate']; + // that should be enough for the near future: the number of array entries must cover the max number of columns + $columnNames = [ + 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', + 'AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', 'AN', 'AO', 'AP', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AV', 'AW', 'AX', 'AY', 'AZ', + 'BA', 'BB', 'BC', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BK', 'BL', 'BM', 'BN', 'BO', 'BP', 'BQ', 'BR', 'BS', 'BT', 'BU', 'BV', 'BW', 'BX', 'BY', 'BZ', + ]; + $totalRow = []; + $totalColumn = 1; + foreach ($columns as $column) { + $formula = null; + if (\in_array($column->getName(), $totalColumns)) { + $columnName = $columnNames[$totalColumn - 1]; + $formula = \sprintf('=SUBTOTAL(9,%s2:%s%s)', $columnName, $columnName, $currentRow); + } + $totalRow[] = $formula; + $totalColumn++; + } + + $spreadsheetPackage->addRow($totalRow, ['totals' => true]); + } + + $spreadsheetPackage->save(); + } +} diff --git a/src/Export/Base/CsvRenderer.php b/src/Export/Base/CsvRenderer.php index 8a05a6eb8..f7e963f16 100644 --- a/src/Export/Base/CsvRenderer.php +++ b/src/Export/Base/CsvRenderer.php @@ -10,36 +10,44 @@ namespace App\Export\Base; use App\Entity\ExportableItem; +use App\Export\ColumnConverter; use App\Export\ExportFilename; +use App\Export\ExportRendererInterface; use App\Export\Package\CellFormatter\DateStringFormatter; +use App\Export\Package\CellFormatter\DurationPlainFormatter; use App\Export\Package\SpoutSpreadsheet; -use App\Export\RendererInterface; -use App\Export\TimesheetExportInterface; +use App\Export\TemplateInterface; use App\Repository\Query\TimesheetQuery; use OpenSpout\Writer\CSV\Options; use OpenSpout\Writer\CSV\Writer; +use Symfony\Component\DependencyInjection\Attribute\Exclude; use Symfony\Component\HttpFoundation\Response; use Symfony\Contracts\Translation\TranslatorInterface; -final class CsvRenderer implements RendererInterface, TimesheetExportInterface +#[Exclude] +final class CsvRenderer extends AbstractSpreadsheetRenderer implements ExportRendererInterface { - use ExportTrait; - public function __construct( - private readonly SpreadsheetRenderer $spreadsheetRenderer, - private readonly TranslatorInterface $translator + private readonly ColumnConverter $columnConverter, + private readonly TranslatorInterface $translator, + private readonly TemplateInterface $template, ) { } - public function getId(): string + public function getType(): string { return 'csv'; } + public function getId(): string + { + return $this->template->getId(); + } + public function getTitle(): string { - return 'csv'; + return $this->template->getTitle(); } /** @@ -57,7 +65,7 @@ final class CsvRenderer implements RendererInterface, TimesheetExportInterface /** * @param ExportableItem[] $exportItems */ - public function renderFile(array $exportItems, TimesheetQuery $query): \SplFileInfo + private function renderFile(array $exportItems, TimesheetQuery $query): \SplFileInfo { $filename = @tempnam(sys_get_temp_dir(), 'kimai-export-csv'); if (false === $filename) { @@ -67,11 +75,19 @@ final class CsvRenderer implements RendererInterface, TimesheetExportInterface $options = new Options(); $options->SHOULD_ADD_BOM = false; - $spreadsheet = new SpoutSpreadsheet(new Writer($options), $this->translator); + $opts = $this->template->getOptions(); + if (\array_key_exists('separator', $opts) && $opts['separator'] === ';') { + $options->FIELD_DELIMITER = ';'; + } + + $spreadsheet = new SpoutSpreadsheet(new Writer($options), $this->translator, $this->template->getLocale()); $spreadsheet->open($filename); - $this->spreadsheetRenderer->registerFormatter('date', new DateStringFormatter()); - $this->spreadsheetRenderer->writeSpreadsheet($spreadsheet, $exportItems, $query); + $this->columnConverter->registerFormatter('date', new DateStringFormatter()); + $this->columnConverter->registerFormatter('duration', new DurationPlainFormatter(false)); + $this->columnConverter->registerFormatter('duration_seconds', new DurationPlainFormatter(true)); + + $this->writeSpreadsheet($this->columnConverter, $this->template, $spreadsheet, $exportItems, $query); return new \SplFileInfo($filename); } diff --git a/src/Export/Base/ExportTrait.php b/src/Export/Base/ExportTrait.php deleted file mode 100644 index a62f44373..000000000 --- a/src/Export/Base/ExportTrait.php +++ /dev/null @@ -1,31 +0,0 @@ -headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename); - - $response->headers->set('Content-Type', $contentType); - $response->headers->set('Content-Disposition', $disposition); - $response->deleteFileAfterSend(true); - - return $response; - } -} diff --git a/src/Export/Base/HtmlRenderer.php b/src/Export/Base/HtmlRenderer.php index d51ad3b07..fea8dce39 100644 --- a/src/Export/Base/HtmlRenderer.php +++ b/src/Export/Base/HtmlRenderer.php @@ -26,25 +26,41 @@ use App\Repository\Query\ProjectQuery; use App\Repository\Query\TimesheetQuery; use App\Twig\SecurityPolicy\ExportPolicy; use Psr\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\DependencyInjection\Attribute\Exclude; use Symfony\Component\HttpFoundation\Response; use Twig\Environment; use Twig\Extension\SandboxExtension; +/** + * TODO 3.0 remove default values from constructor parameters and make class final + * @final + */ +#[Exclude] class HtmlRenderer implements ExportRendererInterface { use RendererTrait; - private string $id = 'html'; - private string $template = 'default.html.twig'; - public function __construct( protected readonly Environment $twig, protected readonly EventDispatcherInterface $dispatcher, private readonly ProjectStatisticService $projectStatisticService, - private readonly ActivityStatisticService $activityStatisticService + private readonly ActivityStatisticService $activityStatisticService, + private string $id = 'html', // deprecated default parameter - TODO 3.0 + private readonly string $title = 'print', // deprecated default parameter - TODO 3.0 + private string $template = 'export/print.html.twig', // deprecated default parameter - TODO 3.0 ) { } + public function isInternal(): bool + { + return false; + } + + public function getType(): string + { + return 'html'; + } + /** * @return MetaTableTypeInterface[] */ @@ -68,9 +84,9 @@ class HtmlRenderer implements ExportRendererInterface } /** - * @param ExportableItem[] $timesheets + * @param ExportableItem[] $exportItems */ - public function render(array $timesheets, TimesheetQuery $query): Response + public function render(array $exportItems, TimesheetQuery $query): Response { $timesheetMetaFields = $this->findMetaColumns(new TimesheetMetaDisplayEvent($query, TimesheetMetaDisplayEvent::EXPORT)); $customerMetaFields = $this->findMetaColumns(new CustomerMetaDisplayEvent($query->copyTo(new CustomerQuery()), CustomerMetaDisplayEvent::EXPORT)); @@ -81,7 +97,7 @@ class HtmlRenderer implements ExportRendererInterface $this->dispatcher->dispatch($event); $userPreferences = $event->getPreferences(); - $summary = $this->calculateSummary($timesheets); + $summary = $this->calculateSummary($exportItems); // enable basic security measures $sandbox = new SandboxExtension(new ExportPolicy()); @@ -89,11 +105,11 @@ class HtmlRenderer implements ExportRendererInterface $this->twig->addExtension($sandbox); $content = $this->twig->render($this->getTemplate(), array_merge([ - 'entries' => $timesheets, + 'entries' => $exportItems, 'query' => $query, 'summaries' => $summary, - 'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectStatisticService), - 'activity_budgets' => $this->calculateActivityBudget($timesheets, $query, $this->activityStatisticService), + 'budgets' => $this->calculateProjectBudget($exportItems, $query, $this->projectStatisticService), + 'activity_budgets' => $this->calculateActivityBudget($exportItems, $query, $this->activityStatisticService), 'timesheetMetaFields' => $timesheetMetaFields, 'customerMetaFields' => $customerMetaFields, 'projectMetaFields' => $projectMetaFields, @@ -109,14 +125,20 @@ class HtmlRenderer implements ExportRendererInterface protected function getTemplate(): string { - return '@export/' . $this->template; + return $this->template; } + /** + * @deprecated since 2.40.0 + */ public function setTemplate(string $filename): void { - $this->template = $filename; + $this->template = '@export/' . $filename; } + /** + * @deprecated since 2.40.0 + */ public function setId(string $id): void { $this->id = $id; @@ -129,6 +151,6 @@ class HtmlRenderer implements ExportRendererInterface public function getTitle(): string { - return 'print'; + return $this->title; } } diff --git a/src/Export/Base/PDFRenderer.php b/src/Export/Base/PDFRenderer.php index 3e2fed1f9..0aecdb660 100644 --- a/src/Export/Base/PDFRenderer.php +++ b/src/Export/Base/PDFRenderer.php @@ -12,42 +12,58 @@ namespace App\Export\Base; use App\Entity\ExportableItem; use App\Export\ExportFilename; use App\Export\ExportRendererInterface; -use App\Export\TimesheetExportInterface; use App\Pdf\HtmlToPdfConverter; use App\Pdf\PdfContext; use App\Pdf\PdfRendererTrait; use App\Project\ProjectStatisticService; use App\Repository\Query\TimesheetQuery; use App\Twig\SecurityPolicy\ExportPolicy; +use Symfony\Component\DependencyInjection\Attribute\Exclude; use Symfony\Component\HttpFoundation\Response; use Twig\Environment; use Twig\Extension\SandboxExtension; -class PDFRenderer implements DispositionInlineInterface, ExportRendererInterface, TimesheetExportInterface +/** + * TODO 3.0 remove default values from constructor parameters and make class final + * @final + */ +#[Exclude] +class PDFRenderer implements DispositionInlineInterface, ExportRendererInterface { use RendererTrait; use PDFRendererTrait; - private string $id = 'pdf'; - private string $template = 'default.pdf.twig'; private array $pdfOptions = []; public function __construct( private readonly Environment $twig, private readonly HtmlToPdfConverter $converter, - private readonly ProjectStatisticService $projectStatisticService + private readonly ProjectStatisticService $projectStatisticService, + private string $id = 'pdf', // deprecated default parameter - TODO 3.0 + private string $title = 'pdf', // deprecated default parameter - TODO 3.0 + private string $template = 'export/pdf-layout.html.twig', // deprecated default parameter - TODO 3.0 ) { } - public function getTitle(): string + public function isInternal(): bool + { + return false; + } + + public function getType(): string { return 'pdf'; } + public function getTitle(): string + { + return $this->title; + } + protected function getTemplate(): string { - return '@export/' . $this->template; + return $this->template; } protected function getOptions(TimesheetQuery $query): array @@ -67,28 +83,24 @@ class PDFRenderer implements DispositionInlineInterface, ExportRendererInterface return $this->pdfOptions; } - public function setPdfOption(string $key, string $value): PDFRenderer + public function setPdfOption(string $key, string $value): void { $this->pdfOptions[$key] = $value; - - return $this; } /** - * @param ExportableItem[] $timesheets - * @param TimesheetQuery $query - * @return Response + * @param ExportableItem[] $exportItems * @throws \Twig\Error\LoaderError * @throws \Twig\Error\RuntimeError * @throws \Twig\Error\SyntaxError */ - public function render(array $timesheets, TimesheetQuery $query): Response + public function render(array $exportItems, TimesheetQuery $query): Response { $filename = new ExportFilename($query); $context = new PdfContext(); $context->setOption('filename', $filename->getFilename()); - $summary = $this->calculateSummary($timesheets); + $summary = $this->calculateSummary($exportItems); // enable basic security measures $sandbox = new SandboxExtension(new ExportPolicy()); @@ -96,10 +108,10 @@ class PDFRenderer implements DispositionInlineInterface, ExportRendererInterface $this->twig->addExtension($sandbox); $content = $this->twig->render($this->getTemplate(), array_merge([ - 'entries' => $timesheets, + 'entries' => $exportItems, 'query' => $query, 'summaries' => $summary, - 'budgets' => $this->calculateProjectBudget($timesheets, $query, $this->projectStatisticService), + 'budgets' => $this->calculateProjectBudget($exportItems, $query, $this->projectStatisticService), 'decimal' => false, 'pdfContext' => $context ], $this->getOptions($query))); @@ -111,18 +123,28 @@ class PDFRenderer implements DispositionInlineInterface, ExportRendererInterface return $this->createPdfResponse($content, $context); } - public function setTemplate(string $filename): PDFRenderer + /** + * @deprecated since 2.40.0 + */ + public function setTemplate(string $filename): void { - $this->template = $filename; - - return $this; + $this->template = '@export/' . $filename; } - public function setId(string $id): PDFRenderer + /** + * @deprecated since 2.40.0 + */ + public function setId(string $id): void { $this->id = $id; + } - return $this; + /** + * @deprecated since 2.40.0 + */ + public function setTitle(string $title): void + { + $this->title = $title; } public function getId(): string diff --git a/src/Export/Base/PdfTemplateRenderer.php b/src/Export/Base/PdfTemplateRenderer.php new file mode 100644 index 000000000..a71480548 --- /dev/null +++ b/src/Export/Base/PdfTemplateRenderer.php @@ -0,0 +1,133 @@ +template->getTitle(); + } + + public function getId(): string + { + return $this->template->getId(); + } + + /** + * @param ExportableItem[] $exportItems + */ + public function render(array $exportItems, TimesheetQuery $query): Response + { + $filename = new ExportFilename($query); + $context = new PdfContext(); + $context->setOption('filename', $filename->getFilename()); + $context->setOption('margin_top', 22); + $context->setOption('margin_bottom', 22); + $context->setOption('PDFA', true); + $context->setOption('PDFAauto', true); + + $options = $this->template->getOptions(); + + $summaryColumns = []; + if (\array_key_exists('summary_columns', $options) && \is_string($options['summary_columns']) && $options['summary_columns'] !== '') { + $summaryColumns = $options['summary_columns']; + $summaryColumns = explode(',', $summaryColumns); + unset($options['summary_columns']); + } + $options['summary'] = $summaryColumns; + if (\count($summaryColumns) > 0) { + $options['summaries'] = $this->calculateSummary($exportItems); + $options['budgets'] = $this->calculateProjectBudget($exportItems, $query, $this->projectStatisticService); + } + + $font = 'sans-serif'; + if (\array_key_exists('font', $options) && \in_array($options['font'], PdfFontType::AVAILABLE_FONTS, true)) { + $font = $options['font']; + } + + $format = 'A4'; + if (\array_key_exists('pageSize', $options) && \is_string($options['pageSize']) && \in_array($options['pageSize'], ['A4', 'A5', 'A6', 'Legal', 'Letter'])) { + $format = $options['pageSize']; + } + if (\array_key_exists('orientation', $options) && $options['orientation'] === 'landscape') { + $format .= '-L'; + } + $context->setOption('format', $format); + + $oldLocale = null; + $locale = $this->template->getLocale(); + if ($locale !== null) { + $oldLocale = $this->localeSwitcher->getLocale(); + $this->localeSwitcher->setLocale($locale); + } + + $content = $this->twig->render('export/renderer.pdf.twig', array_merge([ + 'template' => $this->template, + 'title' => $options['name'] ?? null, + 'locale' => $locale, + 'entries' => $exportItems, + 'query' => $query, + 'font' => $font, + 'columns' => $this->columnConverter->getColumns($this->template, $query), + ], $options)); + + if ($oldLocale !== null) { + $this->localeSwitcher->setLocale($locale); + } + + $pdfOptions = array_merge($context->getOptions(), $options); + + $content = $this->converter->convertToPdf($content, $pdfOptions); + + return $this->createPdfResponse($content, $context); + } +} diff --git a/src/Export/Base/RendererTrait.php b/src/Export/Base/RendererTrait.php index 452ed1a2e..e6f2f3156 100644 --- a/src/Export/Base/RendererTrait.php +++ b/src/Export/Base/RendererTrait.php @@ -21,7 +21,7 @@ trait RendererTrait * FIXME use statistic events to calculate budgets and do NOT iterate all results! * * @param ExportableItem[] $exportItems - * @return array + * @return array */ protected function calculateSummary(array $exportItems): array { @@ -38,10 +38,12 @@ trait RendererTrait $currency = null; if (null !== ($project = $exportItem->getProject())) { - $customer = $project->getCustomer(); - $customerId = $customer->getId(); $projectId = $project->getId(); - $currency = $customer->getCurrency(); + $customer = $project->getCustomer(); + if ($customer !== null) { + $customerId = $customer->getId(); + $currency = $customer->getCurrency(); + } } if (null !== ($activity = $exportItem->getActivity())) { @@ -72,9 +74,12 @@ trait RendererTrait 'users' => [] ]; - if ($project !== null) { + if ($customer !== null) { $summary[$id]['customer'] = $customer->getName(); $summary[$id]['customer_item'] = $customer; + } + + if ($project !== null) { $summary[$id]['project'] = $project->getName(); $summary[$id]['project_item'] = $project; } @@ -171,7 +176,7 @@ trait RendererTrait * @param ExportableItem[] $exportItems * @param TimesheetQuery $query * @param ProjectStatisticService $projectStatisticService - * @return array + * @return array */ protected function calculateProjectBudget(array $exportItems, TimesheetQuery $query, ProjectStatisticService $projectStatisticService): array { @@ -184,12 +189,16 @@ trait RendererTrait $project = null; $customerId = 'none'; $projectId = 'none'; + $time = 0; + $money = 0; if (null !== ($project = $exportItem->getProject())) { $customer = $project->getCustomer(); - $customerId = $customer->getId(); + $customerId = $customer?->getId(); $projectId = $project->getId(); $projects[] = $project; + $time = $project->getTimeBudget(); + $money = $project->getBudget(); } $id = $customerId . '_' . $projectId; @@ -197,8 +206,8 @@ trait RendererTrait if (!isset($summary[$id])) { $summary[$id] = [ 'totals' => $empty->jsonSerialize(), - 'time' => $project->getTimeBudget(), - 'money' => $project->getBudget(), + 'time' => $time, + 'money' => $money, 'time_left' => null, 'money_left' => null, 'time_left_total' => null, @@ -213,8 +222,11 @@ trait RendererTrait foreach ($allBudgets as $projectId => $statisticModel) { $project = $statisticModel->getProject(); - $id = $project->getCustomer()->getId() . '_' . $projectId; + $id = $project->getCustomer()?->getId() . '_' . $projectId; $total = $statisticModel->getStatisticTotal(); + if ($total === null) { + continue; + } $summary[$id]['totals'] = $total->jsonSerialize(); if ($statisticModel->hasTimeBudget()) { $summary[$id]['time_left'] = $statisticModel->getTimeBudgetOpenRelative(); @@ -256,7 +268,7 @@ trait RendererTrait * @param ExportableItem[] $exportItems * @param TimesheetQuery $query * @param ActivityStatisticService $activityStatisticService - * @return array + * @return array */ protected function calculateActivityBudget(array $exportItems, TimesheetQuery $query, ActivityStatisticService $activityStatisticService): array { @@ -282,7 +294,7 @@ trait RendererTrait if (null !== ($project = $exportItem->getProject())) { $projectId = $project->getId(); - $customerId = $project->getCustomer()->getId(); + $customerId = $project->getCustomer()?->getId(); } $id = $customerId . '_' . $projectId; @@ -312,9 +324,14 @@ trait RendererTrait foreach ($allBudgets as $activityId => $statisticModel) { $project = $statisticModel->getActivity()->getProject(); - $id = $project->getCustomer()->getId() . '_' . $project->getId(); + if ($project === null) { + continue; + } + $id = $project->getCustomer()?->getId() . '_' . $project->getId(); $total = $statisticModel->getStatisticTotal(); - $summary[$id][$activityId]['totals'] = $total->jsonSerialize(); + if ($total !== null) { + $summary[$id][$activityId]['totals'] = $total->jsonSerialize(); + } if ($statisticModel->hasTimeBudget()) { $summary[$id][$activityId]['time_left'] = $statisticModel->getTimeBudgetOpenRelative(); $summary[$id][$activityId]['time_left_total'] = $statisticModel->getTimeBudgetOpen(); diff --git a/src/Export/Base/SpreadsheetRenderer.php b/src/Export/Base/SpreadsheetRenderer.php deleted file mode 100644 index ee5c02f9e..000000000 --- a/src/Export/Base/SpreadsheetRenderer.php +++ /dev/null @@ -1,234 +0,0 @@ - - */ - private array $formatter = []; - - public function __construct( - protected EventDispatcherInterface $dispatcher, - protected Security $voter - ) { - } - - private function isRenderRate(TimesheetQuery $query): bool - { - if ($this->voter->getUser() === null) { - // for command line export - return true; - } - - if (null !== $query->getUser()) { - return $this->voter->isGranted('view_rate_own_timesheet'); - } - - return $this->voter->isGranted('view_rate_other_timesheet'); - } - - /** - * @return MetaTableTypeInterface[] - */ - private function findMetaColumns(MetaDisplayEventInterface $event): array - { - $this->dispatcher->dispatch($event); - - return $event->getFields(); - } - - /** - * @param ExportableItem[] $exportItems - */ - public function writeSpreadsheet(SpreadsheetPackage $spreadsheetPackage, array $exportItems, TimesheetQuery $query): void - { - $columns = $this->getColumns($query); - $spreadsheetPackage->setColumns($columns); - - $currentRow = 1; - foreach ($exportItems as $exportItem) { - $cells = []; - foreach ($columns as $column) { - $cells[] = $column->getValue($exportItem); - } - $spreadsheetPackage->addRow($cells); - $currentRow++; - } - - if ($currentRow > 1) { - $totalColumns = ['duration', 'rate', 'internalRate']; - $columnNames = range('A', 'Z'); - $totalRow = []; - $totalColumn = 1; - foreach ($columns as $column) { - $formula = null; - if (\in_array($column->getName(), $totalColumns)) { - $columnName = $columnNames[$totalColumn - 1]; - $formula = \sprintf('=SUM(%s2:%s%s)', $columnName, $columnName, $currentRow); - } - $totalRow[] = $formula; - $totalColumn++; - } - - $spreadsheetPackage->addRow($totalRow, ['totals' => true]); - } - - $spreadsheetPackage->save(); - } - - public function registerFormatter(string $name, CellFormatterInterface $cellFormatter): void - { - $this->formatter[$name] = $cellFormatter; - } - - private function getFormatter(string $name): CellFormatterInterface - { - if (\array_key_exists($name, $this->formatter)) { - return $this->formatter[$name]; - } - - return match ($name) { - 'date' => new DateFormatter(), - 'time' => new TimeFormatter(), - 'duration' => new DurationFormatter(), - default => new DefaultFormatter() - }; - } - - /** - * @return array - */ - private function getColumns(TimesheetQuery $query): array - { - $showRates = $this->isRenderRate($query); - - $columns = []; - - $columns[] = (new Column('date', $this->getFormatter('date')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getBegin()); - $columns[] = (new Column('begin', $this->getFormatter('time')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getBegin())->withColumnWidth(ColumnWidth::SMALL); - $columns[] = (new Column('end', $this->getFormatter('time')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getEnd())->withColumnWidth(ColumnWidth::SMALL); - $columns[] = (new Column('duration', $this->getFormatter('duration')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getDuration())->withColumnWidth(ColumnWidth::SMALL); - - if ($showRates) { - $columns[] = (new Column('currency', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getCurrency())->withColumnWidth(ColumnWidth::SMALL); - $columns[] = (new Column('rate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getRate()); - $columns[] = (new Column('internalRate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getInternalRate()); - $columns[] = (new Column('hourlyRate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getHourlyRate()); - $columns[] = (new Column('fixedRate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getFixedRate()); - } - - $columns[] = (new Column('username', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getUser()?->getDisplayName())->withColumnWidth(ColumnWidth::MEDIUM); - $columns[] = (new Column('account_number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getUser()?->getAccountNumber()); - $columns[] = (new Column('customer', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getName())->withColumnWidth(ColumnWidth::MEDIUM); - $columns[] = (new Column('project', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getName())->withColumnWidth(ColumnWidth::MEDIUM); - $columns[] = (new Column('activity', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getActivity()?->getName())->withColumnWidth(ColumnWidth::MEDIUM); - $columns[] = (new Column('description', new TextFormatter(true)))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getDescription())->withColumnWidth(ColumnWidth::LARGE); - //$columns[] = (new Column('exported', new BooleanFormatter()))->withExtractor(fn(ExportableItem $exportableItem) => $exportableItem->isExported()); - $columns[] = (new Column('billable', new BooleanFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->isBillable())->withColumnWidth(ColumnWidth::SMALL); - $columns[] = (new Column('tags', new ArrayFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getTagsAsArray()); - $columns[] = (new Column('type', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getType()); - $columns[] = (new Column('category', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getCategory()); - $columns[] = (new Column('number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getNumber()); - $columns[] = (new Column('project_number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getNumber()); - $columns[] = (new Column('vat_id', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getVatId()); - $columns[] = (new Column('orderNumber', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getOrderNumber()); - - foreach ($this->findMetaColumns(new TimesheetMetaDisplayEvent($query, TimesheetMetaDisplayEvent::EXPORT)) as $metaField) { - if ($metaField->getName() === null) { - continue; - } - $columns[] = (new Column('timesheet.meta.' . $metaField->getName(), $this->getFormatter('default'))) - ->withHeader($metaField->getLabel()) - ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { - return $exportableItem->getMetaField($metaField->getName())?->getValue(); - }); - } - - foreach ($this->findMetaColumns(new CustomerMetaDisplayEvent($query->copyTo(new CustomerQuery()), CustomerMetaDisplayEvent::EXPORT)) as $metaField) { - if ($metaField->getName() === null) { - continue; - } - $columns[] = (new Column('customer.meta.' . $metaField->getName(), $this->getFormatter('default'))) - ->withHeader($metaField->getLabel()) - ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { - return $exportableItem->getProject()?->getCustomer()?->getMetaField($metaField->getName())?->getValue(); - }); - } - - foreach ($this->findMetaColumns(new ProjectMetaDisplayEvent($query->copyTo(new ProjectQuery()), ProjectMetaDisplayEvent::EXPORT)) as $metaField) { - if ($metaField->getName() === null) { - continue; - } - $columns[] = (new Column('project.meta.' . $metaField->getName(), $this->getFormatter('default'))) - ->withHeader($metaField->getLabel()) - ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { - return $exportableItem->getProject()?->getMetaField($metaField->getName())?->getValue(); - }); - } - - foreach ($this->findMetaColumns(new ActivityMetaDisplayEvent($query->copyTo(new ActivityQuery()), ActivityMetaDisplayEvent::EXPORT)) as $metaField) { - if ($metaField->getName() === null) { - continue; - } - $columns[] = (new Column('activity.meta.' . $metaField->getName(), $this->getFormatter('default'))) - ->withHeader($metaField->getLabel()) - ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { - return $exportableItem->getActivity()?->getMetaField($metaField->getName())?->getValue(); - }); - } - - $event = new UserPreferenceDisplayEvent(UserPreferenceDisplayEvent::EXPORT); - $this->dispatcher->dispatch($event); - foreach ($event->getPreferences() as $metaField) { - if ($metaField->getName() === null) { - continue; - } - $columns[] = (new Column('user.meta.' . $metaField->getName(), $this->getFormatter('default'))) - ->withHeader($metaField->getLabel()) - ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { - return $exportableItem->getUser()?->getPreference($metaField->getName())?->getValue(); - }); - } - - return $columns; - } -} diff --git a/src/Export/Base/XlsxRenderer.php b/src/Export/Base/XlsxRenderer.php index c3c3f7f2f..936633049 100644 --- a/src/Export/Base/XlsxRenderer.php +++ b/src/Export/Base/XlsxRenderer.php @@ -10,34 +10,41 @@ namespace App\Export\Base; use App\Entity\ExportableItem; +use App\Export\ColumnConverter; use App\Export\ExportFilename; +use App\Export\ExportRendererInterface; use App\Export\Package\SpoutSpreadsheet; -use App\Export\RendererInterface; -use App\Export\TimesheetExportInterface; +use App\Export\TemplateInterface; use App\Repository\Query\TimesheetQuery; use OpenSpout\Writer\XLSX\Writer; +use Symfony\Component\DependencyInjection\Attribute\Exclude; use Symfony\Component\HttpFoundation\Response; use Symfony\Contracts\Translation\TranslatorInterface; -final class XlsxRenderer implements RendererInterface, TimesheetExportInterface +#[Exclude] +final class XlsxRenderer extends AbstractSpreadsheetRenderer implements ExportRendererInterface { - use ExportTrait; - public function __construct( - private readonly SpreadsheetRenderer $spreadsheetRenderer, + private readonly ColumnConverter $columnConverter, private readonly TranslatorInterface $translator, + private readonly TemplateInterface $template, ) { } - public function getId(): string + public function getType(): string { return 'xlsx'; } + public function getId(): string + { + return $this->template->getId(); + } + public function getTitle(): string { - return 'xlsx'; + return $this->template->getTitle(); } /** @@ -55,17 +62,17 @@ final class XlsxRenderer implements RendererInterface, TimesheetExportInterface /** * @param ExportableItem[] $exportItems */ - public function renderFile(array $exportItems, TimesheetQuery $query): \SplFileInfo + private function renderFile(array $exportItems, TimesheetQuery $query): \SplFileInfo { $filename = @tempnam(sys_get_temp_dir(), 'kimai-export-xlsx'); if (false === $filename) { throw new \Exception('Could not open temporary file'); } - $spreadsheet = new SpoutSpreadsheet(new Writer(), $this->translator); + $spreadsheet = new SpoutSpreadsheet(new Writer(), $this->translator, $this->template->getLocale()); $spreadsheet->open($filename); - $this->spreadsheetRenderer->writeSpreadsheet($spreadsheet, $exportItems, $query); + $this->writeSpreadsheet($this->columnConverter, $this->template, $spreadsheet, $exportItems, $query); return new \SplFileInfo($filename); } diff --git a/src/Export/ColumnConverter.php b/src/Export/ColumnConverter.php new file mode 100644 index 000000000..833e3bda0 --- /dev/null +++ b/src/Export/ColumnConverter.php @@ -0,0 +1,260 @@ + + */ + private array $formatter = []; + + public function __construct( + private readonly EventDispatcherInterface $eventDispatcher, + private readonly Security $security, + private readonly ?LoggerInterface $logger = null, + ) { + } + + private function isRenderRate(TimesheetQuery $query): bool + { + if ($this->security->getUser() === null) { + // for command line export + return true; + } + + if (null !== $query->getUser()) { + return $this->security->isGranted('view_rate_own_timesheet'); + } + + return $this->security->isGranted('view_rate_other_timesheet'); + } + + /** + * @return MetaTableTypeInterface[] + */ + private function findMetaColumns(MetaDisplayEventInterface $event): array + { + $this->eventDispatcher->dispatch($event); + + return $event->getFields(); + } + + public function registerFormatter(string $name, CellFormatterInterface $cellFormatter): void + { + $this->formatter[$name] = $cellFormatter; + } + + private function getFormatter(string $name): CellFormatterInterface + { + if (\array_key_exists($name, $this->formatter)) { + return $this->formatter[$name]; + } + + return match ($name) { + 'date' => new DateFormatter(), + 'time' => new TimeFormatter(), + 'duration' => new DurationFormatter('[hh]:mm'), + 'duration_decimal' => new DurationDecimalFormatter(), + 'duration_seconds' => new DurationFormatter('[hh]:mm:ss'), + default => new DefaultFormatter() + }; + } + + /** + * @return array + */ + public function getColumns(TemplateInterface $template, TimesheetQuery $query): array + { + $showRates = $this->isRenderRate($query); + + $timesheetMeta = []; + foreach ($this->findMetaColumns(new TimesheetMetaDisplayEvent($query, TimesheetMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $timesheetMeta['timesheet.meta.' . $metaField->getName()] = (new Column('timesheet.meta.' . $metaField->getName(), $this->getFormatter('default'))) + ->withHeader($metaField->getLabel()) + ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { + return $exportableItem->getMetaField($metaField->getName())?->getValue(); + }); + } + } + + $customerMeta = []; + foreach ($this->findMetaColumns(new CustomerMetaDisplayEvent($query->copyTo(new CustomerQuery()), CustomerMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $customerMeta['customer.meta.' . $metaField->getName()] = (new Column('customer.meta.' . $metaField->getName(), $this->getFormatter('default'))) + ->withHeader($metaField->getLabel()) + ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { + return $exportableItem->getProject()?->getCustomer()?->getMetaField($metaField->getName())?->getValue(); + }); + } + } + + $projectMeta = []; + foreach ($this->findMetaColumns(new ProjectMetaDisplayEvent($query->copyTo(new ProjectQuery()), ProjectMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $projectMeta['project.meta.' . $metaField->getName()] = (new Column('project.meta.' . $metaField->getName(), $this->getFormatter('default'))) + ->withHeader($metaField->getLabel()) + ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { + return $exportableItem->getProject()?->getMetaField($metaField->getName())?->getValue(); + }); + } + } + + $activityMeta = []; + foreach ($this->findMetaColumns(new ActivityMetaDisplayEvent($query->copyTo(new ActivityQuery()), ActivityMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $activityMeta['activity.meta.' . $metaField->getName()] = (new Column('activity.meta.' . $metaField->getName(), $this->getFormatter('default'))) + ->withHeader($metaField->getLabel()) + ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { + return $exportableItem->getActivity()?->getMetaField($metaField->getName())?->getValue(); + }); + } + } + + $userMeta = []; + $event = new UserPreferenceDisplayEvent(UserPreferenceDisplayEvent::EXPORT); + $this->eventDispatcher->dispatch($event); + foreach ($event->getPreferences() as $metaField) { + if ($metaField->getName() !== null) { + $userMeta['user.meta.' . $metaField->getName()] = (new Column('user.meta.' . $metaField->getName(), $this->getFormatter('default'))) + ->withHeader($metaField->getLabel()) + ->withExtractor(function (ExportableItem $exportableItem) use ($metaField) { + return $exportableItem->getUser()?->getPreference($metaField->getName())?->getValue(); + }); + } + } + + /** @var array $columns */ + $columns = []; + + $rateColumns = ['currency', 'rate', 'internal_rate', 'hourly_rate', 'fixed_rate']; + + foreach ($template->getColumns($query) as $column) { + if ($column === 'date') { + $columns[$column] = (new Column('date', $this->getFormatter('date')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getBegin()); + } elseif ($column === 'begin') { + $columns[$column] = (new Column('begin', $this->getFormatter('time')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getBegin())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'end') { + $columns[$column] = (new Column('end', $this->getFormatter('time')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getEnd())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'duration') { + $columns[$column] = (new Column('duration', $this->getFormatter('duration')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getDuration())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'duration_decimal') { + $columns[$column] = (new Column('duration', $this->getFormatter('duration_decimal')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getDuration())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'duration_seconds') { + $columns[$column] = (new Column('duration', $this->getFormatter('duration_seconds')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getDuration())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'break') { + // TODO remove method_exists with 3.0 + $columns[$column] = (new Column('break', $this->getFormatter('duration')))->withExtractor(fn (ExportableItem $exportableItem) => method_exists($exportableItem, 'getBreak') ? $exportableItem->getBreak() : 0)->withColumnWidth(ColumnWidth::SMALL); // @phpstan-ignore function.alreadyNarrowedType + } elseif ($column === 'break_decimal') { + // TODO remove method_exists with 3.0 + $columns[$column] = (new Column('break', $this->getFormatter('duration_decimal')))->withExtractor(fn (ExportableItem $exportableItem) => method_exists($exportableItem, 'getBreak') ? $exportableItem->getBreak() : 0)->withColumnWidth(ColumnWidth::SMALL); // @phpstan-ignore function.alreadyNarrowedType + } elseif ($column === 'break_seconds') { + // TODO remove method_exists with 3.0 + $columns[$column] = (new Column('break', $this->getFormatter('duration_seconds')))->withExtractor(fn (ExportableItem $exportableItem) => method_exists($exportableItem, 'getBreak') ? $exportableItem->getBreak() : 0)->withColumnWidth(ColumnWidth::SMALL); // @phpstan-ignore function.alreadyNarrowedType + } elseif ($column === 'currency' && $showRates) { + $columns[$column] = (new Column('currency', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getCurrency())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'rate' && $showRates) { + $columns[$column] = (new Column('rate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getRate()); + } elseif ($column === 'internal_rate' && $showRates) { + $columns[$column] = (new Column('internalRate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getInternalRate()); + } elseif ($column === 'hourly_rate' && $showRates) { + $columns[$column] = (new Column('hourlyRate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getHourlyRate()); + } elseif ($column === 'fixed_rate' && $showRates) { + $columns[$column] = (new Column('fixedRate', new RateFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getFixedRate()); + } elseif ($column === 'user.alias') { + $columns[$column] = (new Column('alias', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getUser()?->getDisplayName())->withColumnWidth(ColumnWidth::MEDIUM); + } elseif ($column === 'user.name') { + $columns[$column] = (new Column('username', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getUser()?->getUserIdentifier())->withColumnWidth(ColumnWidth::MEDIUM); + } elseif ($column === 'user.email') { + $columns[$column] = (new Column('email', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getUser()?->getEmail())->withColumnWidth(ColumnWidth::MEDIUM); + } elseif ($column === 'user.account_number') { + $columns[$column] = (new Column('account_number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getUser()?->getAccountNumber()); + } elseif ($column === 'customer.name') { + $columns[$column] = (new Column('customer', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getName())->withColumnWidth(ColumnWidth::MEDIUM); + } elseif ($column === 'project.name') { + $columns[$column] = (new Column('project', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getName())->withColumnWidth(ColumnWidth::MEDIUM); + } elseif ($column === 'activity.name') { + $columns[$column] = (new Column('activity', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getActivity()?->getName())->withColumnWidth(ColumnWidth::MEDIUM); + } elseif ($column === 'description') { + $columns[$column] = (new Column('description', new TextFormatter(true)))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getDescription())->withColumnWidth(ColumnWidth::LARGE); + } elseif ($column === 'exported') { + $columns[$column] = (new Column('exported', new BooleanFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->isExported()); + } elseif ($column === 'billable') { + $columns[$column] = (new Column('billable', new BooleanFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->isBillable())->withColumnWidth(ColumnWidth::SMALL); + } elseif ($column === 'tags') { + $columns[$column] = (new Column('tags', new ArrayFormatter()))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getTagsAsArray()); + } elseif ($column === 'type') { + $columns[$column] = (new Column('type', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getType()); + } elseif ($column === 'category') { + $columns[$column] = (new Column('category', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getCategory()); + } elseif ($column === 'customer.number') { + $columns[$column] = (new Column('number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getNumber()); + } elseif ($column === 'project.number') { + $columns[$column] = (new Column('project_number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getNumber()); + } elseif ($column === 'activity.number') { + $columns[$column] = (new Column('activity_number', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getActivity()?->getNumber()); + } elseif ($column === 'customer.vat_id') { + $columns[$column] = (new Column('vat_id', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getCustomer()?->getVatId()); + } elseif ($column === 'project.order_number') { + $columns[$column] = (new Column('orderNumber', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getProject()?->getOrderNumber()); + } elseif ($column === 'id') { + $columns[$column] = (new Column('id', $this->getFormatter('default')))->withExtractor(fn (ExportableItem $exportableItem) => $exportableItem->getId()); + } elseif (str_starts_with($column, 'timesheet.meta.') && \array_key_exists($column, $timesheetMeta)) { + $columns[$column] = $timesheetMeta[$column]; + } elseif (str_starts_with($column, 'customer.meta.') && \array_key_exists($column, $customerMeta)) { + $columns[$column] = $customerMeta[$column]; + } elseif (str_starts_with($column, 'project.meta.') && \array_key_exists($column, $projectMeta)) { + $columns[$column] = $projectMeta[$column]; + } elseif (str_starts_with($column, 'activity.meta.') && \array_key_exists($column, $activityMeta)) { + $columns[$column] = $activityMeta[$column]; + } elseif (str_starts_with($column, 'user.meta.') && \array_key_exists($column, $userMeta)) { + $columns[$column] = $userMeta[$column]; + } else { + if ($this->logger !== null && ($showRates || !\in_array($column, $rateColumns, true))) { + $this->logger->warning(\sprintf('Unknown column "%s" used in exporter template "%s".', $column, $template->getTitle())); + } + } + } + + return $columns; + } +} diff --git a/src/Export/DefaultTemplate.php b/src/Export/DefaultTemplate.php new file mode 100644 index 000000000..c9606e8c2 --- /dev/null +++ b/src/Export/DefaultTemplate.php @@ -0,0 +1,145 @@ + + */ + public function getOptions(): array + { + return []; + } + + public function getLocale(): ?string + { + return $this->locale; + } + + public function getId(): string + { + return $this->id; + } + + public function getTitle(): string + { + return $this->title; + } + + /** + * @return MetaTableTypeInterface[] + */ + private function findMetaColumns(MetaDisplayEventInterface $event): array + { + $this->eventDispatcher->dispatch($event); + + return $event->getFields(); + } + + /** + * @return array + */ + public function getColumns(TimesheetQuery $query): array + { + // @deprecated from 2.36 - will be removed with 3.0 + $durationFormatter = 'duration'; + if (($user = $query->getCurrentUser()) instanceof User) { + $durationFormatter = $user->isExportDecimal() ? 'duration_decimal' : 'duration'; + } + + $columns = [ + 'date', + 'begin', + 'end', + $durationFormatter, + 'currency', + 'rate', + 'internal_rate', + 'hourly_rate', + 'fixed_rate', + 'user.alias', + 'user.name', + 'user.email', + 'user.account_number', + 'customer.name', + 'project.name', + 'activity.name', + 'description', + 'billable', + 'tags', + 'type', + 'category', + 'customer.number', + 'project.number', + 'customer.vat_id', + 'project.order_number', + ]; + + foreach ($this->findMetaColumns(new TimesheetMetaDisplayEvent($query, TimesheetMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns[] = 'timesheet.meta.' . $metaField->getName(); + } + } + + foreach ($this->findMetaColumns(new CustomerMetaDisplayEvent(new CustomerQuery(), CustomerMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns[] = 'customer.meta.' . $metaField->getName(); + } + } + + foreach ($this->findMetaColumns(new ProjectMetaDisplayEvent(new ProjectQuery(), ProjectMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns[] = 'project.meta.' . $metaField->getName(); + } + } + + foreach ($this->findMetaColumns(new ActivityMetaDisplayEvent(new ActivityQuery(), ActivityMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns[] = 'activity.meta.' . $metaField->getName(); + } + } + + $event = new UserPreferenceDisplayEvent(UserPreferenceDisplayEvent::EXPORT); + $this->eventDispatcher->dispatch($event); + foreach ($event->getPreferences() as $metaField) { + if ($metaField->getName() !== null) { + $columns[] = 'user.meta.' . $metaField->getName(); + } + } + + return $columns; + } +} diff --git a/src/Export/ExportRendererInterface.php b/src/Export/ExportRendererInterface.php index 3033dedd7..535f94e07 100644 --- a/src/Export/ExportRendererInterface.php +++ b/src/Export/ExportRendererInterface.php @@ -13,22 +13,19 @@ use App\Entity\ExportableItem; use App\Repository\Query\TimesheetQuery; use Symfony\Component\HttpFoundation\Response; +/** + * FIXME change interface for 3.0 + * @method string getType() + * @method bool isInternal() + */ interface ExportRendererInterface { /** * @param ExportableItem[] $exportItems - * @param TimesheetQuery $query - * @return Response */ public function render(array $exportItems, TimesheetQuery $query): Response; - /** - * @return string - */ public function getId(): string; - /** - * @return string - */ public function getTitle(): string; } diff --git a/src/Export/Package/CellFormatter/CellWithFormatInterface.php b/src/Export/Package/CellFormatter/CellWithFormatInterface.php new file mode 100644 index 000000000..02241d3f6 --- /dev/null +++ b/src/Export/Package/CellFormatter/CellWithFormatInterface.php @@ -0,0 +1,15 @@ +duration = new Duration(); + } + + public function formatValue(mixed $value): mixed + { + if (is_numeric($value)) { + return $this->duration->formatDecimal((int) $value); + } + + return 0.0; + } +} diff --git a/src/Export/Package/CellFormatter/DurationFormatter.php b/src/Export/Package/CellFormatter/DurationFormatter.php index 30f1f00f0..80a370e12 100644 --- a/src/Export/Package/CellFormatter/DurationFormatter.php +++ b/src/Export/Package/CellFormatter/DurationFormatter.php @@ -9,14 +9,38 @@ namespace App\Export\Package\CellFormatter; -final class DurationFormatter implements CellFormatterInterface +final class DurationFormatter implements CellFormatterInterface, CellWithFormatInterface { + public function __construct(private readonly string $format) + { + } + public function formatValue(mixed $value): mixed { - if (is_numeric($value)) { - return (float) number_format($value / 3600, 2, '.', ''); + if (!is_numeric($value) || (int) $value === 0) { + return new \DateInterval('PT0S'); } - return 0.0; + $value = (int) $value; + + $seconds = abs($value); + $hours = intdiv($seconds, 3600); + $seconds %= 3600; + $minutes = intdiv($seconds, 60); + $seconds %= 60; + + $intervalSpec = \sprintf('PT%dH%dM%dS', $hours, $minutes, $seconds); + $interval = new \DateInterval($intervalSpec); + + if ($value < 0) { + $interval->invert = 1; + } + + return $interval; + } + + public function getFormat(): string + { + return $this->format; } } diff --git a/src/Export/Package/CellFormatter/DurationPlainFormatter.php b/src/Export/Package/CellFormatter/DurationPlainFormatter.php new file mode 100644 index 000000000..aac69a235 --- /dev/null +++ b/src/Export/Package/CellFormatter/DurationPlainFormatter.php @@ -0,0 +1,49 @@ +withSeconds) { + return '0:00:00'; + } + + return '0:00'; + } + + $value = (int) $value; + + $seconds = abs($value); + $hours = intdiv($seconds, 3600); + $seconds %= 3600; + $minutes = intdiv($seconds, 60); + $seconds %= 60; + + $intervalSpec = \sprintf('PT%dH%dM%dS', $hours, $minutes, $seconds); + $interval = new \DateInterval($intervalSpec); + + if ($value < 0) { + $interval->invert = 1; + } + + if ($this->withSeconds) { + return $interval->format('%r%h:%I:%S'); + } + + return $interval->format('%r%h:%I'); + } +} diff --git a/src/Export/Package/Column.php b/src/Export/Package/Column.php index e6949e631..96b0c18bc 100644 --- a/src/Export/Package/Column.php +++ b/src/Export/Package/Column.php @@ -11,6 +11,7 @@ namespace App\Export\Package; use App\Entity\ExportableItem; use App\Export\Package\CellFormatter\CellFormatterInterface; +use App\Export\Package\CellFormatter\CellWithFormatInterface; class Column { @@ -71,4 +72,13 @@ class Column { return $this->header ?? $this->name; } + + public function getFormat(): ?string + { + if ($this->formatter instanceof CellWithFormatInterface) { + return $this->formatter->getFormat(); + } + + return null; + } } diff --git a/src/Export/Package/SpoutSpreadsheet.php b/src/Export/Package/SpoutSpreadsheet.php index 089c78266..014c5fd9a 100644 --- a/src/Export/Package/SpoutSpreadsheet.php +++ b/src/Export/Package/SpoutSpreadsheet.php @@ -26,15 +26,16 @@ use Symfony\Contracts\Translation\TranslatorInterface; class SpoutSpreadsheet implements SpreadsheetPackage { - private Style $dateStyle; + /** @var array */ + private array $styles = []; public function __construct( private readonly WriterInterface $writer, - private readonly TranslatorInterface $translator + private readonly TranslatorInterface $translator, + private readonly ?string $locale = null, ) { $this->writer->setCreator(Constants::SOFTWARE); - $this->dateStyle = (new Style())->setFormat('yyyy-mm-dd'); } /** @@ -48,9 +49,15 @@ class SpoutSpreadsheet implements SpreadsheetPackage } $tmp = []; + $i = 0; foreach ($columns as $column) { - $title = $this->translator->trans($column->getHeader()); + $title = $this->translator->trans($column->getHeader(), [], null, $this->locale); $tmp[] = Cell::fromValue($title); + $style = null; + if (($format = $column->getFormat()) !== null) { + $style = (new Style())->setFormat($format); + } + $this->styles[$i++] = $style; } $style = new Style(); @@ -100,12 +107,9 @@ class SpoutSpreadsheet implements SpreadsheetPackage } $tmp = []; + $i = 0; foreach ($columns as $column) { - if ($column instanceof \DateTimeInterface) { - $tmp[] = Cell::fromValue($column, $this->dateStyle); - } else { - $tmp[] = Cell::fromValue($column); // @phpstan-ignore argument.type - } + $tmp[] = Cell::fromValue($column, $this->styles[$i++]); // @phpstan-ignore argument.type } $this->writer->addRow(new Row($tmp, $style)); @@ -117,8 +121,10 @@ class SpoutSpreadsheet implements SpreadsheetPackage if ($this->writer instanceof AbstractWriterMultiSheets) { $sheetView = new SheetView(); - $sheetView->setFreezeColumn('D'); - $sheetView->setFreezeRow(2); + + // deactivated, because the column order is now configurable + //$sheetView->setFreezeColumn('D'); + //$sheetView->setFreezeRow(2); $this->writer->getCurrentSheet()->setSheetView($sheetView); } diff --git a/src/Export/Renderer/CsvRendererFactory.php b/src/Export/Renderer/CsvRendererFactory.php new file mode 100644 index 000000000..f0dc25be5 --- /dev/null +++ b/src/Export/Renderer/CsvRendererFactory.php @@ -0,0 +1,42 @@ +converter, $this->translator, $template); + $renderer->setInternal(true); + + return $renderer; + } + + public function createDefault(): CsvRenderer + { + $template = new DefaultTemplate($this->eventDispatcher, 'csv'); + + return new CsvRenderer($this->converter, $this->translator, $template); + } +} diff --git a/src/Export/Renderer/HtmlRendererFactory.php b/src/Export/Renderer/HtmlRendererFactory.php index 0b3a4c912..0f46396f7 100644 --- a/src/Export/Renderer/HtmlRendererFactory.php +++ b/src/Export/Renderer/HtmlRendererFactory.php @@ -27,10 +27,14 @@ final class HtmlRendererFactory public function create(string $id, string $template): HtmlRenderer { - $renderer = new HtmlRenderer($this->twig, $this->dispatcher, $this->projectStatisticService, $this->activityStatisticService); - $renderer->setId($id); - $renderer->setTemplate($template); - - return $renderer; + return new HtmlRenderer( + $this->twig, + $this->dispatcher, + $this->projectStatisticService, + $this->activityStatisticService, + $id, + 'print', + $template + ); } } diff --git a/src/Export/Renderer/PdfRendererFactory.php b/src/Export/Renderer/PdfRendererFactory.php index 01ed9d90a..9e594141b 100644 --- a/src/Export/Renderer/PdfRendererFactory.php +++ b/src/Export/Renderer/PdfRendererFactory.php @@ -10,8 +10,12 @@ namespace App\Export\Renderer; use App\Export\Base\PDFRenderer; +use App\Export\Base\PdfTemplateRenderer; +use App\Export\ColumnConverter; +use App\Export\Template; use App\Pdf\HtmlToPdfConverter; use App\Project\ProjectStatisticService; +use Symfony\Component\Translation\LocaleSwitcher; use Twig\Environment; final class PdfRendererFactory @@ -19,16 +23,33 @@ final class PdfRendererFactory public function __construct( private readonly Environment $twig, private readonly HtmlToPdfConverter $converter, - private readonly ProjectStatisticService $projectStatisticService + private readonly ProjectStatisticService $projectStatisticService, + private readonly LocaleSwitcher $localeSwitcher, + private readonly ColumnConverter $columnConverter ) { } - public function create(string $id, string $template): PDFRenderer + public function create(string $id, string $template, ?string $title = null): PDFRenderer { - $renderer = new PDFRenderer($this->twig, $this->converter, $this->projectStatisticService); - $renderer->setId($id); - $renderer->setTemplate($template); + return new PDFRenderer( + $this->twig, + $this->converter, + $this->projectStatisticService, + $id, + $title ?? $id, + $template, + ); + } - return $renderer; + public function createFromTemplate(Template $template): PdfTemplateRenderer + { + return new PdfTemplateRenderer( + $this->twig, + $this->converter, + $this->projectStatisticService, + $this->columnConverter, + $this->localeSwitcher, + $template + ); } } diff --git a/src/Export/Renderer/XlsxRendererFactory.php b/src/Export/Renderer/XlsxRendererFactory.php new file mode 100644 index 000000000..b0eac301d --- /dev/null +++ b/src/Export/Renderer/XlsxRendererFactory.php @@ -0,0 +1,42 @@ +eventDispatcher, 'xlsx'); + + return new XlsxRenderer($this->converter, $this->translator, $template); + } + + public function create(TemplateInterface $template): XlsxRenderer + { + $renderer = new XlsxRenderer($this->converter, $this->translator, $template); + $renderer->setInternal(true); + + return $renderer; + } +} diff --git a/src/Export/ServiceExport.php b/src/Export/ServiceExport.php index 9bdb9b6e4..9e59672e8 100644 --- a/src/Export/ServiceExport.php +++ b/src/Export/ServiceExport.php @@ -11,10 +11,14 @@ namespace App\Export; use App\Entity\ExportableItem; use App\Event\ExportItemsQueryEvent; +use App\Export\Renderer\CsvRendererFactory; use App\Export\Renderer\HtmlRendererFactory; use App\Export\Renderer\PdfRendererFactory; +use App\Export\Renderer\XlsxRendererFactory; +use App\Repository\ExportTemplateRepository; use App\Repository\Query\ExportQuery; use Psr\EventDispatcher\EventDispatcherInterface; +use Psr\Log\LoggerInterface; final class ServiceExport { @@ -27,7 +31,7 @@ final class ServiceExport */ private array $renderer = []; /** - * @var TimesheetExportInterface[] + * @var ExportRendererInterface[] */ private array $timesheetExporter = []; /** @@ -36,9 +40,13 @@ final class ServiceExport private array $repositories = []; public function __construct( - private EventDispatcherInterface $eventDispatcher, - private HtmlRendererFactory $htmlRendererFactory, - private PdfRendererFactory $pdfRendererFactory + private readonly EventDispatcherInterface $eventDispatcher, + private readonly HtmlRendererFactory $htmlRendererFactory, + private readonly PdfRendererFactory $pdfRendererFactory, + private readonly CsvRendererFactory $csvRendererFactory, + private readonly XlsxRendererFactory $xlsxRendererFactory, + private readonly ExportTemplateRepository $exportTemplateRepository, + private readonly LoggerInterface $logger, ) { } @@ -71,7 +79,37 @@ final class ServiceExport */ public function getRenderer(): array { - $renderer = []; + $renderer = [ + $this->csvRendererFactory->createDefault(), + $this->xlsxRendererFactory->createDefault(), + $this->pdfRendererFactory->create('pdf', 'export/pdf-layout.html.twig', 'default'), + $this->htmlRendererFactory->create('html', 'export/print.html.twig'), + ]; + + foreach ($this->exportTemplateRepository->findAll() as $template) { + $tpl = new Template((string) $template->getId(), $template->getTitle()); // @phpstan-ignore argument.type + $tpl->setColumns($template->getColumns()); + $tpl->setLocale($template->getLanguage()); + $tpl->setOptions($template->getOptions()); + + switch ($template->getRenderer()) { + case 'csv': + $renderer[] = $this->csvRendererFactory->create($tpl); + break; + + case 'xlsx': + $renderer[] = $this->xlsxRendererFactory->create($tpl); + break; + + case 'pdf': + $renderer[] = $this->pdfRendererFactory->createFromTemplate($tpl); + break; + + default: + $this->logger->error('Unknown export template type: ' . $template->getRenderer()); + break; + } + } foreach ($this->documentDirs as $exportPath) { if (!is_dir($exportPath)) { @@ -86,7 +124,7 @@ final class ServiceExport continue; } - $renderer[] = $this->htmlRendererFactory->create($tplName, $tplName); + $renderer[] = $this->htmlRendererFactory->create($tplName, '@export/' . $tplName); } } @@ -98,7 +136,7 @@ final class ServiceExport continue; } - $renderer[] = $this->pdfRendererFactory->create($tplName, $tplName); + $renderer[] = $this->pdfRendererFactory->create($tplName, '@export/' . $tplName); } } } @@ -117,22 +155,29 @@ final class ServiceExport return null; } - public function addTimesheetExporter(TimesheetExportInterface $exporter): void + public function addTimesheetExporter(ExportRendererInterface $exporter): void { $this->timesheetExporter[] = $exporter; } /** - * @return TimesheetExportInterface[] + * @return ExportRendererInterface[] */ public function getTimesheetExporter(): array { - return $this->timesheetExporter; + $exporter = [ + $this->pdfRendererFactory->create('pdf', '@export/timesheet.pdf.twig'), + $this->xlsxRendererFactory->createDefault(), + $this->csvRendererFactory->createDefault(), + $this->htmlRendererFactory->create('print', 'timesheet/export.html.twig'), + ]; + + return array_merge($this->timesheetExporter, $exporter); } - public function getTimesheetExporterById(string $id): ?TimesheetExportInterface + public function getTimesheetExporterById(string $id): ?ExportRendererInterface { - foreach ($this->timesheetExporter as $exporter) { + foreach ($this->getTimesheetExporter() as $exporter) { if ($exporter->getId() === $id) { return $exporter; } @@ -147,7 +192,6 @@ final class ServiceExport } /** - * @param ExportQuery $query * @return ExportableItem[] * @throws TooManyItemsExportException */ diff --git a/src/Export/Template.php b/src/Export/Template.php new file mode 100644 index 000000000..3c7e260c3 --- /dev/null +++ b/src/Export/Template.php @@ -0,0 +1,81 @@ + + */ + private array $columns = []; + /** + * @var array + */ + private array $options = []; + + public function __construct(private readonly string $id, private readonly string $title) + { + } + + /** + * @param array $columns + */ + public function setColumns(array $columns): void + { + $this->columns = $columns; + } + + /** + * @return array + */ + public function getOptions(): array + { + return $this->options; + } + + /** + * @param array $options + */ + public function setOptions(array $options): void + { + $this->options = $options; + } + + public function getLocale(): ?string + { + return $this->locale; + } + + public function setLocale(?string $locale): void + { + $this->locale = $locale; + } + + public function getId(): string + { + return $this->id; + } + + public function getTitle(): string + { + return $this->title; + } + + /** + * @return array + */ + public function getColumns(TimesheetQuery $query): array + { + return $this->columns; + } +} diff --git a/src/Export/TemplateInterface.php b/src/Export/TemplateInterface.php new file mode 100644 index 000000000..30fc9a6d7 --- /dev/null +++ b/src/Export/TemplateInterface.php @@ -0,0 +1,31 @@ + + */ + public function getColumns(TimesheetQuery $query): array; + + public function getLocale(): ?string; + + /** + * @return array + */ + public function getOptions(): array; +} diff --git a/src/Export/Timesheet/HtmlRenderer.php b/src/Export/Timesheet/HtmlRenderer.php deleted file mode 100644 index 74c2900e1..000000000 --- a/src/Export/Timesheet/HtmlRenderer.php +++ /dev/null @@ -1,26 +0,0 @@ -setDefaults([ + 'include_budget' => true, + 'include_time' => true, + ]); + } } diff --git a/src/Form/API/CustomerApiEditForm.php b/src/Form/API/CustomerApiEditForm.php index a59ef71fd..197397949 100644 --- a/src/Form/API/CustomerApiEditForm.php +++ b/src/Form/API/CustomerApiEditForm.php @@ -10,7 +10,22 @@ namespace App\Form\API; use App\Form\CustomerEditForm; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\OptionsResolver\OptionsResolver; -final class CustomerApiEditForm extends CustomerEditForm +final class CustomerApiEditForm extends AbstractType { + public function getParent(): string + { + return CustomerEditForm::class; + } + + public function configureOptions(OptionsResolver $resolver): void + { + // overwritten, so the docs show these fields + $resolver->setDefaults([ + 'include_budget' => true, + 'include_time' => true, + ]); + } } diff --git a/src/Form/API/ProjectApiEditForm.php b/src/Form/API/ProjectApiEditForm.php index 2f5d2ace5..5b41c295b 100644 --- a/src/Form/API/ProjectApiEditForm.php +++ b/src/Form/API/ProjectApiEditForm.php @@ -10,7 +10,22 @@ namespace App\Form\API; use App\Form\ProjectEditForm; +use Symfony\Component\Form\AbstractType; +use Symfony\Component\OptionsResolver\OptionsResolver; -final class ProjectApiEditForm extends ProjectEditForm +final class ProjectApiEditForm extends AbstractType { + public function getParent(): string + { + return ProjectEditForm::class; + } + + public function configureOptions(OptionsResolver $resolver): void + { + // overwritten, so the docs show these fields + $resolver->setDefaults([ + 'include_budget' => true, + 'include_time' => true, + ]); + } } diff --git a/src/Form/API/TimesheetApiEditForm.php b/src/Form/API/TimesheetApiEditForm.php index 67fbe050a..8a0a15313 100644 --- a/src/Form/API/TimesheetApiEditForm.php +++ b/src/Form/API/TimesheetApiEditForm.php @@ -27,11 +27,15 @@ final class TimesheetApiEditForm extends TimesheetEditForm return; } - $builder->add('billable', BillableType::class); + $builder->add('billable', BillableType::class, [ + 'documentation' => [ + 'description' => 'If true, this timesheet will be flagged as billable' + ] + ]); $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) { + function (FormEvent $event): void { $data = $event->getData(); if (\array_key_exists('billable', $data)) { $data['billableMode'] = Timesheet::BILLABLE_AUTOMATIC; @@ -56,6 +60,7 @@ final class TimesheetApiEditForm extends TimesheetEditForm $builder->remove('metaFields'); } + // TODO this is only a quick fix, see bugs reports if ($builder->has('duration')) { $builder->remove('duration'); } @@ -64,11 +69,6 @@ final class TimesheetApiEditForm extends TimesheetEditForm $builder->get('user')->setRequired(false); } - // TODO this is only a quick fix, see bugs reports - if ($builder->has('duration')) { - $builder->remove('duration'); - } - if ($builder->has('tags')) { $builder->remove('tags'); // @deprecated for BC reasons here, arrays will be supported in 2.0 @@ -82,6 +82,10 @@ final class TimesheetApiEditForm extends TimesheetEditForm { $builder->add('begin', DateTimeApiType::class, array_merge($dateTimeOptions, [ 'label' => 'begin', + 'required' => false, + 'documentation' => [ + 'description' => 'If no begin date-time is set, the users current timestamp will be used' + ] ])); } @@ -90,6 +94,9 @@ final class TimesheetApiEditForm extends TimesheetEditForm $builder->add('end', DateTimeApiType::class, array_merge($dateTimeOptions, [ 'label' => 'end', 'required' => false, + 'documentation' => [ + 'description' => 'If no end date-time is set, the timesheet will be running' + ] ])); } diff --git a/src/Form/ColorTrait.php b/src/Form/ColorTrait.php index 1c729fc5f..cbfe5e13e 100644 --- a/src/Form/ColorTrait.php +++ b/src/Form/ColorTrait.php @@ -27,7 +27,7 @@ trait ColorTrait // this code exists only for backward compatibility $builder->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) use ($required) { + function (FormEvent $event) use ($required): void { if (!$event->getForm()->getConfig()->hasOption('choices')) { return; } diff --git a/src/Form/CustomerEditForm.php b/src/Form/CustomerEditForm.php index 1e7cb27c1..f54695221 100644 --- a/src/Form/CustomerEditForm.php +++ b/src/Form/CustomerEditForm.php @@ -33,13 +33,15 @@ class CustomerEditForm extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { - $isNew = false; + $isNew = true; + $hasAddress = false; if (isset($options['data'])) { /** @var Customer $customer */ $customer = $options['data']; $isNew = $customer->getId() === null; $options['currency'] = $customer->getCurrency(); + $hasAddress = $customer->getAddress() !== null && $customer->getAddress() !== ''; } $builder @@ -52,6 +54,9 @@ class CustomerEditForm extends AbstractType ->add('number', TextType::class, [ 'label' => 'number', 'required' => false, + 'attr' => [ + 'maxlength' => 50, + ], ]) ->add('comment', TextareaType::class, [ 'label' => 'description', @@ -69,10 +74,38 @@ class CustomerEditForm extends AbstractType 'label' => 'contact', 'required' => false, ]) - ->add('address', TextareaType::class, [ + ; + + if ($hasAddress) { + $builder + ->add('address', TextareaType::class, [ + 'label' => 'address', + 'help' => 'address_deprecated', + 'required' => false, + ]); + } + + $builder + ->add('addressLine1', TextType::class, [ 'label' => 'address', 'required' => false, ]) + ->add('addressLine2', TextType::class, [ + 'label' => false, + 'required' => false, + ]) + ->add('addressLine3', TextType::class, [ + 'label' => false, + 'required' => false, + ]) + ->add('postCode', TextType::class, [ + 'label' => 'postcode', + 'required' => false, + ]) + ->add('city', TextType::class, [ + 'label' => 'city', + 'required' => false, + ]) ->add('country', CountryType::class, [ 'label' => 'country', ]) @@ -117,6 +150,10 @@ class CustomerEditForm extends AbstractType 'help' => 'help.invoiceTemplate_customer', 'required' => false, ]) + ->add('buyerReference', TextType::class, [ + 'label' => 'buyerReference', + 'required' => false, + ]) ; if ($isNew) { diff --git a/src/Form/EntityFormTrait.php b/src/Form/EntityFormTrait.php index f7f31e7bd..725db896e 100644 --- a/src/Form/EntityFormTrait.php +++ b/src/Form/EntityFormTrait.php @@ -31,6 +31,9 @@ trait EntityFormTrait if ($showMoney) { $builder->add('budget', MoneyType::class, [ + 'documentation' => [ + 'description' => 'The money budget', + ], 'empty_data' => '0.00', 'label' => 'budget', 'required' => false, diff --git a/src/Form/ExportTemplateSpreadsheetForm.php b/src/Form/ExportTemplateSpreadsheetForm.php new file mode 100644 index 000000000..cc2191404 --- /dev/null +++ b/src/Form/ExportTemplateSpreadsheetForm.php @@ -0,0 +1,94 @@ +add('title', TextType::class, ['label' => 'name']); + $builder->add('renderer', ExportRendererType::class, ['label' => 'type']); + $builder->add('language', LanguageType::class, ['required' => false]); + $builder->add('columns', ExportColumnsType::class, ['required' => true]); + + $builder->add('separator', ChoiceType::class, [ + 'choices' => ['Comma (,)' => ',', 'Semicolon (;)' => ';'], + 'row_attr' => ['data-type' => 'csv'], + 'required' => true, + ]); + + $builder->add('name', TextType::class, [ + 'label' => 'title', + 'constraints' => [new Length(max: 100)], + 'attr' => ['maxlength' => 100], + 'row_attr' => ['data-type' => 'pdf'], + 'required' => false, + ]); + + $builder->add('summaryColumns', ExportSummaryColumnsType::class, [ + 'row_attr' => ['data-type' => 'pdf'], + 'required' => false, + ]); + + $builder->add('font', PdfFontType::class, [ + 'row_attr' => ['data-type' => 'pdf'], + 'required' => false, + ]); + + $builder->add('pageSize', ChoiceType::class, [ + 'label' => 'pageSize', + 'choices' => [ + 'A4' => 'A4', + 'A5' => 'A5', + 'A6' => 'A6', + 'Legal' => 'Legal', + 'Letter' => 'Letter', + ], + 'row_attr' => ['data-type' => 'pdf'], + 'required' => false, + ]); + + $builder->add('orientation', ChoiceType::class, [ + 'label' => 'orientation', + 'choices' => [ + 'portrait' => 'portrait', + 'landscape' => 'landscape', + ], + 'row_attr' => ['data-type' => 'pdf'], + 'required' => false, + ]); + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults([ + 'data_class' => ExportTemplate::class, + 'csrf_protection' => true, + 'csrf_field_name' => '_token', + 'csrf_token_id' => 'export_template_create', + 'attr' => [ + 'data-form-event' => 'kimai.exportTemplate' + ], + ]); + } +} diff --git a/src/Form/Extension/EnhancedChoiceTypeExtension.php b/src/Form/Extension/EnhancedChoiceTypeExtension.php index ba855e008..c8a0ef009 100644 --- a/src/Form/Extension/EnhancedChoiceTypeExtension.php +++ b/src/Form/Extension/EnhancedChoiceTypeExtension.php @@ -40,18 +40,22 @@ final class EnhancedChoiceTypeExtension extends AbstractTypeExtension $extendedOptions = ['class' => 'selectpicker']; - if ($options['multiple']) { + if (\array_key_exists('multiple', $options) && $options['multiple']) { $extendedOptions['size'] = 1; } - if (false !== $options['width']) { + if (\array_key_exists('width', $options) && false !== $options['width']) { $extendedOptions['data-width'] = $options['width']; } - if (false === $options['search']) { + if (\array_key_exists('search', $options) && false === $options['search']) { $extendedOptions['data-disable-search'] = 1; } + if (\array_key_exists('order', $options) && true === $options['order']) { + $extendedOptions['data-order'] = 1; + } + // there is a very weird logic in vendor/symfony/twig-bridge/Resources/views/Form/form_div_layout.html.twig // in block "block choice_widget_collapsed" that resets "{% set required = false %}", so we fake it into the select if (true === $options['required'] && \is_array($options['attr']) && (!\array_key_exists('size', $options['attr']) || $options['attr']['size'] <= 1)) { @@ -75,5 +79,9 @@ final class EnhancedChoiceTypeExtension extends AbstractTypeExtension $resolver->setDefined(['search']); $resolver->setAllowedTypes('search', 'boolean'); $resolver->setDefault('search', true); + + $resolver->setDefined(['order']); + $resolver->setAllowedTypes('order', 'boolean'); + $resolver->setDefault('order', false); } } diff --git a/src/Form/FormTrait.php b/src/Form/FormTrait.php index b441e4ebf..59a5baa1f 100644 --- a/src/Form/FormTrait.php +++ b/src/Form/FormTrait.php @@ -58,7 +58,7 @@ trait FormTrait // replaces the project select after submission, to make sure only projects for the selected customer are displayed $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($builder, $project, $customer, $isNew, $options) { + function (FormEvent $event) use ($builder, $project, $customer, $isNew, $options): void { /** @var array $data */ $data = $event->getData(); $customer = \array_key_exists('customer', $data) && $data['customer'] !== '' ? $data['customer'] : null; @@ -114,7 +114,7 @@ trait FormTrait // replaces the activity select after submission, to make sure only activities for the selected project are displayed $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($options) { + function (FormEvent $event) use ($options): void { /** @var array $data */ $data = $event->getData(); diff --git a/src/Form/Helper/ProjectHelper.php b/src/Form/Helper/ProjectHelper.php index 61432c3d0..221bab8f5 100644 --- a/src/Form/Helper/ProjectHelper.php +++ b/src/Form/Helper/ProjectHelper.php @@ -19,7 +19,7 @@ final class ProjectHelper public const PATTERN_NAME = '{name}'; public const PATTERN_NUMBER = '{number}'; public const PATTERN_COMMENT = '{comment}'; - public const PATTERN_ORDERNUMBER = '{ordernumber}'; + public const PATTERN_ORDERNUMBER = '{orderNumber}'; public const PATTERN_DATERANGE = '{daterange}'; public const PATTERN_START = '{start}'; public const PATTERN_END = '{end}'; @@ -74,6 +74,7 @@ final class ProjectHelper $name = str_replace(self::PATTERN_NUMBER, $project->getNumber() ?? '', $name); $name = str_replace(self::PATTERN_COMMENT, $project->getComment() ?? '', $name); $name = str_replace(self::PATTERN_CUSTOMER, $project->getCustomer()?->getName() ?? '', $name); + $name = str_replace('{ordernumber}', self::PATTERN_ORDERNUMBER, $name); // this was a typo before Kimai 2.38, can be removed in the future $name = str_replace(self::PATTERN_ORDERNUMBER, $project->getOrderNumber() ?? '', $name); if ($this->dateFormatter === null) { diff --git a/src/Form/InvoiceTemplateForm.php b/src/Form/InvoiceTemplateForm.php index 0fd8e29cc..716dc1290 100644 --- a/src/Form/InvoiceTemplateForm.php +++ b/src/Form/InvoiceTemplateForm.php @@ -10,10 +10,12 @@ namespace App\Form; use App\Entity\InvoiceTemplate; +use App\Form\Type\CustomerType; use App\Form\Type\InvoiceCalculatorType; use App\Form\Type\InvoiceNumberGeneratorType; use App\Form\Type\InvoiceRendererType; use App\Form\Type\LanguageType; +use App\Form\Type\MetaFieldsCollectionType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\IntegerType; use Symfony\Component\Form\Extension\Core\Type\NumberType; @@ -36,17 +38,6 @@ final class InvoiceTemplateForm extends AbstractType ->add('title', TextType::class, [ 'label' => 'title', ]) - ->add('company', TextType::class, [ - 'label' => 'company', - ]) - ->add('vatId', TextType::class, [ - 'label' => 'vat_id', - 'required' => false, - ]) - ->add('address', TextareaType::class, [ - 'label' => 'address', - 'required' => false, - ]) ->add('contact', TextareaType::class, [ 'label' => 'contact', 'required' => false, @@ -70,6 +61,13 @@ final class InvoiceTemplateForm extends AbstractType ->add('calculator', InvoiceCalculatorType::class) ->add('numberGenerator', InvoiceNumberGeneratorType::class) ->add('language', LanguageType::class) + ->add('customer', CustomerType::class, [ + 'required' => true, + 'label' => 'sending_company', + 'placeholder' => '', + 'help' => 'sending_company.help', + ]) + ->add('metaFields', MetaFieldsCollectionType::class) ; } diff --git a/src/Form/MultiUpdate/MultiUpdateTable.php b/src/Form/MultiUpdate/MultiUpdateTable.php index 584ac4422..bf79656b5 100644 --- a/src/Form/MultiUpdate/MultiUpdateTable.php +++ b/src/Form/MultiUpdate/MultiUpdateTable.php @@ -9,7 +9,6 @@ namespace App\Form\MultiUpdate; -use Doctrine\Common\Collections\Criteria; use Doctrine\ORM\EntityRepository; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\CallbackTransformer; @@ -42,7 +41,12 @@ final class MultiUpdateTable extends AbstractType return []; } - return $repository->matching((new Criteria())->where(Criteria::expr()->in('id', explode(',', $ids)))); + $temp = explode(',', $ids); + if (\count($temp) === 0) { + return []; + } + + return $repository->findBy(['id' => $temp]); } ) ); @@ -56,7 +60,7 @@ final class MultiUpdateTable extends AbstractType 'label' => $key, 'attr' => [ 'data-href' => $value, - 'class' => 'multi_update_table_action' . (stripos($key, 'delete') !== false ? ' btn-danger' : ''), + 'class' => 'multi_update_table_action' . (stripos($key, 'delete') !== false ? ' btn-danger' : ' btn-primary'), ], ]); } diff --git a/src/Form/MultiUpdate/TimesheetMultiUpdate.php b/src/Form/MultiUpdate/TimesheetMultiUpdate.php index dcf45f203..44b0d8c9a 100644 --- a/src/Form/MultiUpdate/TimesheetMultiUpdate.php +++ b/src/Form/MultiUpdate/TimesheetMultiUpdate.php @@ -21,7 +21,6 @@ use App\Form\Type\UserType; use App\Form\Type\YesNoType; use App\Repository\CustomerRepository; use App\Repository\TimesheetRepository; -use Doctrine\Common\Collections\Criteria; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; @@ -94,7 +93,7 @@ final class TimesheetMultiUpdate extends AbstractType // TODO replace me with FormTrait $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($project, $customer) { + function (FormEvent $event) use ($project, $customer): void { $data = $event->getData(); $customer = isset($data['customer']) && !empty($data['customer']) ? $data['customer'] : null; $project = isset($data['project']) && !empty($data['project']) ? $data['project'] : $project; @@ -126,7 +125,7 @@ final class TimesheetMultiUpdate extends AbstractType // TODO replace me with FormTrait $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($activityOptions) { + function (FormEvent $event) use ($activityOptions): void { $data = $event->getData(); if (!isset($data['project']) || empty($data['project'])) { return; @@ -183,8 +182,8 @@ final class TimesheetMultiUpdate extends AbstractType 'label' => 'mark_as_exported', 'required' => false, 'choices' => [ - 'entryState.exported' => true, - 'entryState.not_exported' => false + 'yes' => true, + 'no' => false ] ]); } @@ -253,7 +252,12 @@ final class TimesheetMultiUpdate extends AbstractType return []; } - return $this->timesheet->matching((new Criteria())->where(Criteria::expr()->in('id', explode(',', $ids)))); + $temp = explode(',', $ids); + if (\count($temp) === 0) { + return []; + } + + return $this->timesheet->findBy(['id' => $temp]); } ) ); diff --git a/src/Form/ProjectEditForm.php b/src/Form/ProjectEditForm.php index 6d9ade3ed..62f16ae82 100644 --- a/src/Form/ProjectEditForm.php +++ b/src/Form/ProjectEditForm.php @@ -29,7 +29,7 @@ class ProjectEditForm extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $customer = null; - $isNew = false; + $isNew = true; $options['currency'] = null; $customerOptions = []; diff --git a/src/Form/QuickEntryForm.php b/src/Form/QuickEntryForm.php index fc67d6b4e..59601c4dc 100644 --- a/src/Form/QuickEntryForm.php +++ b/src/Form/QuickEntryForm.php @@ -18,6 +18,7 @@ use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\Extension\Core\Type\CollectionType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; +use Symfony\Component\Form\FormView; use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\Validator\Constraints\All; use Symfony\Component\Validator\Constraints\Valid; @@ -33,6 +34,18 @@ final class QuickEntryForm extends AbstractType $builder->addModelTransformer(new CallbackTransformer( function ($value) { // page is loaded, nothing to do + if (!$value instanceof QuickEntryWeek) { + return $value; + } + + foreach ($value->getRows() as $row) { + foreach ($row->getTimesheets() as $timesheet) { + foreach ($timesheet->getMetaFields() as $metaField) { + $row->setMetaFieldValue($metaField); + } + } + } + return $value; }, function (?QuickEntryWeek $value) { @@ -49,6 +62,24 @@ final class QuickEntryForm extends AbstractType foreach ($row->getTimesheets() as $timesheet) { $timesheet->setProject($project); $timesheet->setActivity($activity); + foreach ($row->getMetaFields() as $metaField) { + if (null === ($name = $metaField->getName())) { + continue; + } + + if (null === $timesheet->getMetaField($name)) { + $timesheet->setMetaField($metaField); + } + + if (null === ($tmpField = $timesheet->getMetaField($name))) { + continue; + } + + if ($tmpField->getValue() !== $metaField->getValue()) { + $tmpField->setValue($metaField->getValue()); + $timesheet->markAsModified(); + } + } } } @@ -62,13 +93,16 @@ final class QuickEntryForm extends AbstractType 'entry_options' => [ 'label' => false, 'duration_minutes' => $this->configuration->getTimesheetIncrementDuration(), - // this is NOT the start_date, because it would prevent projects from appearing - // in the first days of the week, if the projects ends at the end of the week - // the validation still triggers if the user selects days outside the project range + // this is NOT the start_date, because it would prevent projects from appearing in the + // first days of the week if the project ends at the end of the week. + // the validation still triggers if the user selects days outside the project range. 'start_date' => $options['end_date'], 'end_date' => $options['end_date'], 'empty_data' => function (FormInterface $form) use ($options) { - return clone $options['prototype_data']; + if ($options['prototype_data'] instanceof QuickEntryModel) { + return clone $options['prototype_data']; + } + throw new \Exception('Invalid Prototype given'); }, 'prototype_data' => clone $options['prototype_data'], ], @@ -81,6 +115,25 @@ final class QuickEntryForm extends AbstractType ]); } + public function finishView(FormView $view, FormInterface $form, array $options): void + { + usort($view['rows']->children, function (FormView $a, FormView $b) { + /** @var \App\Model\QuickEntryModel $objectA */ + $objectA = $a->vars['data']; + /** @var \App\Model\QuickEntryModel $objectB */ + $objectB = $b->vars['data']; + + $existingA = $objectA->hasExistingTimesheet(); + $existingB = $objectB->hasExistingTimesheet(); + + if ($existingA === $existingB) { + return 0; + } + + return ($existingA && !$existingB) ? -1 : 1; + }); + } + public function configureOptions(OptionsResolver $resolver): void { $start = new \DateTime(); diff --git a/src/Form/TimesheetEditForm.php b/src/Form/TimesheetEditForm.php index d3812a745..04ed7c0f4 100644 --- a/src/Form/TimesheetEditForm.php +++ b/src/Form/TimesheetEditForm.php @@ -18,6 +18,7 @@ use App\Form\Type\DescriptionType; use App\Form\Type\DurationType; use App\Form\Type\FixedRateType; use App\Form\Type\HourlyRateType; +use App\Form\Type\InternalRateType; use App\Form\Type\MetaFieldsCollectionType; use App\Form\Type\TagsType; use App\Form\Type\TimePickerType; @@ -42,7 +43,10 @@ class TimesheetEditForm extends AbstractType { use FormTrait; - public function __construct(private CustomerRepository $customers, private SystemConfiguration $systemConfiguration) + public function __construct( + private readonly CustomerRepository $customers, + private readonly SystemConfiguration $systemConfiguration + ) { } @@ -55,8 +59,7 @@ class TimesheetEditForm extends AbstractType $timezone = $options['timezone']; $isNew = true; - if (isset($options['data'])) { - /** @var Timesheet $entry */ + if (isset($options['data']) && $options['data'] instanceof Timesheet) { $entry = $options['data']; $activity = $entry->getActivity(); @@ -102,6 +105,10 @@ class TimesheetEditForm extends AbstractType $this->addDuration($builder, $options, (!$options['allow_begin_datetime'] || !$options['allow_end_datetime']), $isNew); } + if ($this->systemConfiguration->isBreakTimeEnabled()) { + $builder->add('break', DurationType::class, ['label' => 'break', 'required' => false, 'icon' => 'break']); + } + // ----------------------------------------------------- $query = new CustomerFormTypeQuery($customer); $query->setUser($options['user']); // @phpstan-ignore-line @@ -185,7 +192,7 @@ class TimesheetEditForm extends AbstractType $builder->addEventListener( FormEvents::POST_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Timesheet $timesheet */ $timesheet = $event->getData(); $begin = $timesheet->getBegin(); @@ -200,21 +207,28 @@ class TimesheetEditForm extends AbstractType // map single fields to original datetime object $builder->addEventListener( FormEvents::SUBMIT, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Timesheet $data */ $data = $event->getData(); /** @var \DateTime|null $date */ $date = $event->getForm()->get('begin_date')->getData(); + /** @var \DateTime|null $time */ $time = $event->getForm()->get('begin_time')->getData(); if ($date === null || $time === null) { return; } + $seconds = 0; + // if the user did not change the time, make sure to keep the seconds (ONLY if the timesheet is already existing) + if ($data->getBegin()?->format('H:i') === $time->format('H:i') && $data->getId() !== null) { + $seconds = $data->getBegin()->format('s') ?? 0; + } + // mutable datetime are a problem for doctrine $newDate = clone $date; - $newDate->setTime($time->format('H'), $time->format('i')); + $newDate->setTime((int) $time->format('H'), (int) $time->format('i'), (int) $seconds); if ($data->getBegin() === null || $data->getBegin()->getTimestamp() !== $newDate->getTimestamp()) { $data->setBegin($newDate); @@ -233,7 +247,7 @@ class TimesheetEditForm extends AbstractType $builder->addEventListener( FormEvents::POST_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Timesheet|null $data */ $data = $event->getData(); if (null !== $data->getEnd()) { @@ -245,11 +259,12 @@ class TimesheetEditForm extends AbstractType // make sure that date & time fields are mapped back to begin & end fields $builder->addEventListener( FormEvents::SUBMIT, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Timesheet $timesheet */ $timesheet = $event->getData(); $oldEnd = $timesheet->getEnd(); + /** @var \DateTime|null $end */ $end = $event->getForm()->get('end_time')->getData(); if ($end === null || $end === false) { $timesheet->setEnd(null); @@ -266,8 +281,15 @@ class TimesheetEditForm extends AbstractType if ($time === null) { throw new \Exception('Cannot work with timesheets without start time'); } + + $seconds = 0; + // if the user did not change the time, make sure to keep the seconds (ONLY if the timesheet is already existing) + if ($oldEnd !== null && $oldEnd->format('H:i') === $end->format('H:i') && $timesheet->getId() !== null) { + $seconds = $oldEnd->format('s') ?? 0; + } + $newEnd = clone $time; - $newEnd->setTime($end->format('H'), $end->format('i')); + $newEnd->setTime((int) $end->format('H'), (int) $end->format('i'), (int) $seconds); if ($newEnd < $time) { $newEnd->modify('+ 1 day'); @@ -310,16 +332,12 @@ class TimesheetEditForm extends AbstractType $builder->add('duration', DurationType::class, $durationOptions); - if ($this->systemConfiguration->isBreakTimeEnabled()) { - $builder->add('break', DurationType::class, ['label' => 'break', 'required' => false]); - } - $builder->addEventListener( FormEvents::POST_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Timesheet|null $timesheet */ $timesheet = $event->getData(); - if (null === $timesheet || $timesheet->isRunning()) { + if (null === $timesheet || ($timesheet instanceof Timesheet && $timesheet->isRunning())) { $event->getForm()->get('duration')->setData(null); } } @@ -328,7 +346,7 @@ class TimesheetEditForm extends AbstractType // make sure that duration is mapped back to end field $builder->addEventListener( FormEvents::SUBMIT, - function (FormEvent $event) use ($forceApply) { + function (FormEvent $event) use ($forceApply): void { /** @var Timesheet $timesheet */ $timesheet = $event->getData(); @@ -359,13 +377,13 @@ class TimesheetEditForm extends AbstractType return; } + $moneyOptions = ['currency' => $currency]; + $builder - ->add('fixedRate', FixedRateType::class, [ - 'currency' => $currency, - ]) - ->add('hourlyRate', HourlyRateType::class, [ - 'currency' => $currency, - ]); + ->add('fixedRate', FixedRateType::class, $moneyOptions) + ->add('hourlyRate', HourlyRateType::class, $moneyOptions) + //->add('internalRate', InternalRateType::class, $moneyOptions) + ; } protected function addUser(FormBuilderInterface $builder, array $options): void @@ -374,7 +392,14 @@ class TimesheetEditForm extends AbstractType return; } - $builder->add('user', UserType::class); + $users = []; + if (isset($options['data']) && $options['data'] instanceof Timesheet) { + $users = [$options['data']->getUser()]; + } + + $builder->add('user', UserType::class, [ + 'include_users' => $users, + ]); } protected function addExported(FormBuilderInterface $builder, array $options): void @@ -384,14 +409,17 @@ class TimesheetEditForm extends AbstractType } $builder->add('exported', YesNoType::class, [ - 'label' => 'exported' + 'label' => 'exported', + 'documentation' => [ + 'description' => 'If true, this timesheet will be flagged as being exported' + ] ]); } protected function addBillable(FormBuilderInterface $builder, array $options): void { if ($options['include_billable']) { - $builder->add('billableMode', TimesheetBillableType::class, []); + $builder->add('billableMode', TimesheetBillableType::class); } $builder->addModelTransformer(new CallbackTransformer( diff --git a/src/Form/CalendarForm.php b/src/Form/Toolbar/CalendarToolbarForm.php similarity index 50% rename from src/Form/CalendarForm.php rename to src/Form/Toolbar/CalendarToolbarForm.php index 07bc74189..ee8d7aba7 100644 --- a/src/Form/CalendarForm.php +++ b/src/Form/Toolbar/CalendarToolbarForm.php @@ -7,28 +7,39 @@ * file that was distributed with this source code. */ -namespace App\Form; +namespace App\Form\Toolbar; +use App\Form\Type\CalendarViewType; +use App\Form\Type\DayPickerType; use App\Form\Type\UserType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; -final class CalendarForm extends AbstractType +final class CalendarToolbarForm extends AbstractType { public function buildForm(FormBuilderInterface $builder, array $options): void { - $builder->add('user', UserType::class, [ - 'required' => false, - 'attr' => ['onchange' => 'this.form.submit()'] + $builder->add('date', DayPickerType::class, [ + 'model_timezone' => $options['timezone'], + 'view_timezone' => $options['timezone'], ]); + $builder->add('view', CalendarViewType::class, []); + if ($options['change_user']) { + $builder->add('user', UserType::class, [ + 'required' => false, + 'attr' => ['onchange' => 'this.form.submit()'] + ]); + } } public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'csrf_protection' => false, + 'timezone' => date_default_timezone_get(), 'method' => 'GET', + 'change_user' => true, ]); } } diff --git a/src/Form/Toolbar/TimesheetToolbarForm.php b/src/Form/Toolbar/TimesheetToolbarForm.php index 2f397d771..d2d597a78 100644 --- a/src/Form/Toolbar/TimesheetToolbarForm.php +++ b/src/Form/Toolbar/TimesheetToolbarForm.php @@ -44,8 +44,12 @@ final class TimesheetToolbarForm extends AbstractType $this->addExportStateChoice($builder); $this->addPageSizeChoice($builder); $this->addHiddenPagination($builder); - $this->addOrder($builder); - $this->addOrderBy($builder, TimesheetQuery::TIMESHEET_ORDER_ALLOWED); + + $query = $options['data']; + if ($query instanceof TimesheetQuery) { + $this->addOrder($builder); + $this->addOrderBy($builder, $query->getAllowedOrderColumns()); + } } public function configureOptions(OptionsResolver $resolver): void diff --git a/src/Form/Toolbar/ToolbarFormTrait.php b/src/Form/Toolbar/ToolbarFormTrait.php index 75f45d886..b4592e19b 100644 --- a/src/Form/Toolbar/ToolbarFormTrait.php +++ b/src/Form/Toolbar/ToolbarFormTrait.php @@ -98,7 +98,7 @@ trait ToolbarFormTrait $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($builder, $options, $name, $multiCustomer, $multiProject) { + function (FormEvent $event) use ($builder, $options, $name, $multiCustomer, $multiProject): void { /** @var array $data */ $data = $event->getData(); $event->getForm()->add($name, CustomerType::class, array_merge([ @@ -187,7 +187,7 @@ trait ToolbarFormTrait $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($builder, $options, $name, $multiCustomer, $multiProject, $multiActivity) { + function (FormEvent $event) use ($builder, $options, $name, $multiCustomer, $multiProject, $multiActivity): void { /** @var array $data */ $data = $event->getData(); $event->getForm()->add($name, ProjectType::class, array_merge([ @@ -266,7 +266,7 @@ trait ToolbarFormTrait $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($name, $multiProject, $activityOptions, $options) { + function (FormEvent $event) use ($name, $multiProject, $activityOptions, $options): void { /** @var array $data */ $data = $event->getData(); $event->getForm()->add($name, ActivityType::class, array_merge($activityOptions, [ diff --git a/src/Form/Type/BudgetType.php b/src/Form/Type/BudgetType.php index 132a3c429..482c0d526 100644 --- a/src/Form/Type/BudgetType.php +++ b/src/Form/Type/BudgetType.php @@ -31,6 +31,9 @@ final class BudgetType extends AbstractType 'choices' => [ 'budgetType_month' => self::TYPE_MONTH, ], + 'documentation' => [ + 'description' => 'The type of budget. Only submit if you want to use a monthly budget.', + ], ]); } diff --git a/src/Form/Type/CalendarViewType.php b/src/Form/Type/CalendarViewType.php index 859573669..7137f7386 100644 --- a/src/Form/Type/CalendarViewType.php +++ b/src/Form/Type/CalendarViewType.php @@ -10,7 +10,9 @@ namespace App\Form\Type; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; /** @@ -20,12 +22,28 @@ final class CalendarViewType extends AbstractType { public const DEFAULT_VIEW = 'month'; + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder->addModelTransformer(new CallbackTransformer( + function ($transform) { + return match ($transform) { + 'agendaDay', 'day' => 'day', + 'agendaWeek', 'week' => 'week', + default => self::DEFAULT_VIEW, + }; + }, + function ($reverseTransform) { + return $reverseTransform; + } + )); + } + public function configureOptions(OptionsResolver $resolver): void { $choices = [ 'month' => 'month', - 'agendaWeek' => 'agendaWeek', - 'agendaDay' => 'agendaDay', + 'agendaWeek' => 'week', + 'agendaDay' => 'day', ]; $resolver->setDefaults([ diff --git a/src/Form/Type/DateRangeType.php b/src/Form/Type/DateRangeType.php index 2cb78edcf..104c68d9c 100644 --- a/src/Form/Type/DateRangeType.php +++ b/src/Form/Type/DateRangeType.php @@ -147,7 +147,7 @@ final class DateRangeType extends AbstractType } /** - * @param array{'format': non-empty-string, 'separator': non-empty-string, 'allow_empty': true, 'timezone': non-empty-string} $options + * @param array{'format': non-empty-string, 'separator': non-empty-string, 'allow_empty': true, 'timezone': non-empty-string, 'user': User} $options */ public function buildForm(FormBuilderInterface $builder, array $options): void // @phpstan-ignore-line { diff --git a/src/Form/Type/DayPickerType.php b/src/Form/Type/DayPickerType.php new file mode 100644 index 000000000..05b1615a0 --- /dev/null +++ b/src/Form/Type/DayPickerType.php @@ -0,0 +1,43 @@ +setDefaults([ + 'label' => 'date', + 'widget' => 'single_text', + 'html5' => true, + 'format' => DateType::HTML5_FORMAT, + 'model_timezone' => date_default_timezone_get(), + 'view_timezone' => date_default_timezone_get(), + 'datepicker' => false, + ]); + } + + public function getParent(): string + { + return DateType::class; + } + + public function getBlockPrefix(): string + { + return 'day'; + } +} diff --git a/src/Form/Type/DurationType.php b/src/Form/Type/DurationType.php index 41789c75c..d5ffd487c 100644 --- a/src/Form/Type/DurationType.php +++ b/src/Form/Type/DurationType.php @@ -32,7 +32,12 @@ final class DurationType extends AbstractType 'preset_minutes' => null, 'toggle' => false, 'max_hours' => 24, - 'icon' => 'clock', + 'icon' => 'duration', + 'documentation' => [ + 'type' => 'string', + 'description' => 'Duration - supports various formats: https://www.kimai.org/documentation/duration-format.html', + 'example' => '01:30', + ] ]); $resolver->setAllowedTypes('max_hours', 'int'); } @@ -44,6 +49,7 @@ final class DurationType extends AbstractType $class .= ' ' . $view->vars['attr']['class']; } $view->vars['attr']['class'] = $class; + $view->vars['attr']['autocomplete'] = 'off'; $view->vars['toggle'] = $options['toggle']; if ($options['preset_hours'] !== null && $options['preset_minutes'] !== null) { diff --git a/src/Form/Type/EntityMetaDefinitionType.php b/src/Form/Type/EntityMetaDefinitionType.php index af3909de8..1556ce84d 100644 --- a/src/Form/Type/EntityMetaDefinitionType.php +++ b/src/Form/Type/EntityMetaDefinitionType.php @@ -30,7 +30,7 @@ final class EntityMetaDefinitionType extends AbstractType { $builder->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var MetaTableTypeInterface $definition */ $definition = $event->getData(); diff --git a/src/Form/Type/ExportColumnsType.php b/src/Form/Type/ExportColumnsType.php new file mode 100644 index 000000000..b9811b9da --- /dev/null +++ b/src/Form/Type/ExportColumnsType.php @@ -0,0 +1,180 @@ + + */ + private array $ordered = []; + + public function __construct( + private readonly EventDispatcherInterface $dispatcher, + private readonly TranslatorInterface $translator, + private readonly SystemConfiguration $configuration, + ) + { + } + + public function configureOptions(OptionsResolver $resolver): void + { + $columns = [ + 'timesheet' => [ + 'id' => 'id', + 'date' => 'date', + 'begin' => 'begin', + 'end' => 'end', + $this->translator->trans('duration') . ' (1:30)' => 'duration', + $this->translator->trans('duration') . ' (1:30:00)' => 'duration_seconds', + $this->translator->trans('duration') . ' (1.5)' => 'duration_decimal', + 'currency' => 'currency', + 'rate' => 'rate', + 'internalRate' => 'internal_rate', + 'hourlyRate' => 'hourly_rate', + 'fixedRate' => 'fixed_rate', + 'description' => 'description', + 'exported' => 'exported', + 'billable' => 'billable', + 'tags' => 'tags', + 'type' => 'type', + 'category' => 'category', + ], + 'user' => [ + 'alias' => 'user.alias', + 'username' => 'user.name', + 'account_number' => 'user.account_number', + ], + 'customer' => [ + 'customer' => 'customer.name', + 'number' => 'customer.number', + 'vat_id' => 'customer.vat_id', + ], + 'project' => [ + 'project' => 'project.name', + 'project_number' => 'project.number', + 'orderNumber' => 'project.order_number', + ], + 'activity' => [ + 'activity' => 'activity.name', + 'activity_number' => 'activity.number', + ], + ]; + + if ($this->configuration->isBreakTimeEnabled()) { + $tmp = [ + $this->translator->trans('break') . ' (0:30)' => 'break', + $this->translator->trans('break') . ' (0:30:00)' => 'break_seconds', + $this->translator->trans('break') . ' (0.5)' => 'break_decimal', + ]; + foreach ($tmp as $k => $v) { + $columns['timesheet'][$k] = $v; + } + } + + foreach ($this->findMetaColumns(new TimesheetMetaDisplayEvent(new TimesheetQuery(), TimesheetMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns['timesheet'][$metaField->getLabel()] = 'timesheet.meta.' . $metaField->getName(); + } + } + + foreach ($this->findMetaColumns(new CustomerMetaDisplayEvent(new CustomerQuery(), CustomerMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns['customer'][$metaField->getLabel()] = 'customer.meta.' . $metaField->getName(); + } + } + + foreach ($this->findMetaColumns(new ProjectMetaDisplayEvent(new ProjectQuery(), ProjectMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns['project'][$metaField->getLabel()] = 'project.meta.' . $metaField->getName(); + } + } + + foreach ($this->findMetaColumns(new ActivityMetaDisplayEvent(new ActivityQuery(), ActivityMetaDisplayEvent::EXPORT)) as $metaField) { + if ($metaField->getName() !== null) { + $columns['activity'][$metaField->getLabel()] = 'activity.meta.' . $metaField->getName(); + } + } + + $event = new UserPreferenceDisplayEvent(UserPreferenceDisplayEvent::EXPORT); + $this->dispatcher->dispatch($event); + foreach ($event->getPreferences() as $metaField) { + if ($metaField->getName() !== null) { + $columns['user'][$metaField->getLabel()] = 'user.meta.' . $metaField->getName(); + } + } + + $resolver->setDefaults([ + 'choices' => $columns, + 'label' => 'modal.columns.label', + 'multiple' => true, + // does not work in the frontend + //'order' => true, + ]); + } + + /** + * @param array $options + */ + public function buildForm(FormBuilderInterface $builder, array $options): void + { + $builder->addEventListener( + FormEvents::PRE_SUBMIT, + function (FormEvent $event): void { + $data = $event->getData(); + if (\is_array($data)) { + $this->ordered = $data; // @phpstan-ignore assign.propertyType + } + } + ); + $builder->addEventListener( + FormEvents::SUBMIT, + function (FormEvent $event): void { + $event->setData($this->ordered); + } + ); + } + + /** + * @return array + */ + private function findMetaColumns(MetaDisplayEventInterface $event): array + { + $this->dispatcher->dispatch($event); + + return $event->getFields(); + } + + public function getParent(): string + { + return ChoiceType::class; + } +} diff --git a/src/Form/Type/ExportRendererType.php b/src/Form/Type/ExportRendererType.php new file mode 100644 index 000000000..c6770828d --- /dev/null +++ b/src/Form/Type/ExportRendererType.php @@ -0,0 +1,33 @@ +setDefaults([ + 'choices' => [ + 'button.csv' => 'csv', + 'button.xlsx' => 'xlsx', + 'button.pdf' => 'pdf' + ], + ]); + } + + public function getParent(): string + { + return ChoiceType::class; + } +} diff --git a/src/Form/Type/ExportSummaryColumnsType.php b/src/Form/Type/ExportSummaryColumnsType.php new file mode 100644 index 000000000..dc6f0fd9a --- /dev/null +++ b/src/Form/Type/ExportSummaryColumnsType.php @@ -0,0 +1,47 @@ +translator->trans('duration') . ' (1:30)' => 'duration', + $this->translator->trans('duration') . ' (1.5)' => 'duration_decimal', + 'rate' => 'rate', + 'internalRate' => 'internal_rate', + \sprintf('%s (%s)', $this->translator->trans('remaining_budget'), $this->translator->trans('budget')) => 'project_budget_money', + \sprintf('%s (%s)', $this->translator->trans('remaining_budget'), $this->translator->trans('timeBudget')) => 'project_budget_time', + ]; + + $resolver->setDefaults([ + 'choices' => $columns, + 'label' => 'export.summary', + 'multiple' => true, + ]); + } + + public function getParent(): string + { + return ChoiceType::class; + } +} diff --git a/src/Form/Type/InternalRateType.php b/src/Form/Type/InternalRateType.php new file mode 100644 index 000000000..99a7faee5 --- /dev/null +++ b/src/Form/Type/InternalRateType.php @@ -0,0 +1,38 @@ +setDefaults([ + // documentation is for NelmioApiDocBundle + 'documentation' => [ + 'type' => 'number', + 'description' => 'Internal (hourly) rate', + ], + 'required' => false, + 'label' => 'internalRate', + ]); + } + + public function getParent(): string + { + return MoneyType::class; + } +} diff --git a/src/Form/Type/MetaFieldsCollectionType.php b/src/Form/Type/MetaFieldsCollectionType.php index 06b1939bf..70e15c9aa 100644 --- a/src/Form/Type/MetaFieldsCollectionType.php +++ b/src/Form/Type/MetaFieldsCollectionType.php @@ -27,7 +27,7 @@ final class MetaFieldsCollectionType extends AbstractType { $builder->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) use ($options) { + function (FormEvent $event) use ($options): void { /** @var ArrayCollection $collection */ $collection = $event->getData(); foreach ($collection as $collectionItem) { diff --git a/src/Form/Type/PdfFontType.php b/src/Form/Type/PdfFontType.php new file mode 100644 index 000000000..dac6751a4 --- /dev/null +++ b/src/Form/Type/PdfFontType.php @@ -0,0 +1,48 @@ +setDefaults([ + 'choices' => $columns, + 'label' => 'font', + 'multiple' => false, + ]); + } + + public function getParent(): string + { + return ChoiceType::class; + } +} diff --git a/src/Form/Type/QuickEntryTimesheetType.php b/src/Form/Type/QuickEntryTimesheetType.php index 8359bc9d9..1b079ecd5 100644 --- a/src/Form/Type/QuickEntryTimesheetType.php +++ b/src/Form/Type/QuickEntryTimesheetType.php @@ -20,7 +20,7 @@ use Symfony\Component\OptionsResolver\OptionsResolver; final class QuickEntryTimesheetType extends AbstractType { - public function __construct(private Security $security) + public function __construct(private readonly Security $security) { } @@ -53,15 +53,35 @@ final class QuickEntryTimesheetType extends AbstractType $builder->addEventListener( FormEvents::POST_SET_DATA, - function (FormEvent $event) use ($durationOptions) { + function (FormEvent $event) use ($durationOptions): void { /** @var Timesheet|null $data */ $data = $event->getData(); if (null === $data || $data->isRunning()) { $event->getForm()->get('duration')->setData(null); } - if (null !== $data && !$this->security->isGranted('edit', $data)) { + if ($data instanceof Timesheet && !$this->security->isGranted('edit', $data)) { + // do not call $event->getForm()->remove() this would change the field order $event->getForm()->add('duration', DurationType::class, array_merge(['disabled' => true], $durationOptions)); + + $mainForm = $event->getForm()->getParent()?->getParent(); + if ($mainForm === null) { + return; + } + + $isNew = $data->getId() === null; + + foreach($mainForm->all() as $key => $child) { + if ($key === 'timesheets') { + continue; + } + if ($child->isDisabled() || $isNew) { + continue; + } + $type = \get_class($child->getConfig()->getType()->getInnerType()); + // do not call $mainForm->remove() this would change the field order + $mainForm->add($key, $type, array_merge($child->getConfig()->getOptions(), ['disabled' => true])); + } } } ); @@ -69,7 +89,7 @@ final class QuickEntryTimesheetType extends AbstractType // make sure that duration is mapped back to end field $builder->addEventListener( FormEvents::SUBMIT, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Timesheet $data */ $data = $event->getData(); $duration = $data->getDuration(false); diff --git a/src/Form/Type/QuickEntryWeekType.php b/src/Form/Type/QuickEntryWeekType.php index 5704cef6c..e9ab8e2a3 100644 --- a/src/Form/Type/QuickEntryWeekType.php +++ b/src/Form/Type/QuickEntryWeekType.php @@ -9,7 +9,6 @@ namespace App\Form\Type; -use App\Entity\User; use App\Model\QuickEntryModel; use App\Validator\Constraints\QuickEntryTimesheet; use DateTime; @@ -40,7 +39,7 @@ final class QuickEntryWeekType extends AbstractType $builder->add('project', ProjectType::class, $projectOptions); - $projectFunction = function (FormEvent $event) use ($projectOptions) { + $projectFunction = function (FormEvent $event) use ($projectOptions): void { /** @var QuickEntryModel|null $data */ $data = $event->getData(); if ($data === null || $data->getProject() === null) { @@ -63,7 +62,7 @@ final class QuickEntryWeekType extends AbstractType $builder->add('activity', ActivityType::class, $activityOptions); - $activityFunction = function (FormEvent $event) use ($activityOptions) { + $activityFunction = function (FormEvent $event) use ($activityOptions): void { /** @var QuickEntryModel|null $data */ $data = $event->getData(); if ($data === null || $data->getActivity() === null) { @@ -77,21 +76,26 @@ final class QuickEntryWeekType extends AbstractType }; $builder->addEventListener(FormEvents::PRE_SET_DATA, $activityFunction); - $activityPreSubmitFunction = function (FormEvent $event) use ($activityOptions) { + // make sure to pre-fill the form, so non-global activities can be loaded for the select project + $activityPreSubmitFunction = function (FormEvent $event) use ($activityOptions): void { $data = $event->getData(); - if (isset($data['project']) && !empty($data['project'])) { - $activityOptions['projects'] = [$data['project']]; - } + if (\is_array($data)) { + if (!empty($data['project'])) { + $activityOptions['projects'] = [$data['project']]; + } - if (isset($data['activity']) && !empty($data['activity'])) { - $activityOptions['activities'] = [$data['activity']]; + if (!empty($data['activity'])) { + $activityOptions['activities'] = [$data['activity']]; + } } $event->getForm()->add('activity', ActivityType::class, $activityOptions); }; $builder->addEventListener(FormEvents::PRE_SUBMIT, $activityPreSubmitFunction); + $builder->add('metaFields', MetaFieldsCollectionType::class); + $builder->add('timesheets', CollectionType::class, [ 'entry_type' => QuickEntryTimesheetType::class, 'label' => false, @@ -109,14 +113,14 @@ final class QuickEntryWeekType extends AbstractType ], ]); - $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options) { - if ($event->getData() === null) { + $builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($options): void { + if ($event->getData() === null && $options['prototype_data'] instanceof QuickEntryModel) { $event->setData(clone $options['prototype_data']); } }); $builder->addModelTransformer(new CallbackTransformer( - function ($transformValue) use ($options) { + function ($transformValue) { /** @var QuickEntryModel|null $transformValue */ if ($transformValue === null || $transformValue->isPrototype()) { return $transformValue; @@ -131,9 +135,6 @@ final class QuickEntryWeekType extends AbstractType } $user = $transformValue->getUser(); - if ($user === null && $options['user'] instanceof User) { - $user = $options['user']; - } foreach ($transformValue->getTimesheets() as $timesheet) { $timesheet->setUser($user); $timesheet->setProject($project); @@ -150,7 +151,7 @@ final class QuickEntryWeekType extends AbstractType // make sure that duration is mapped back to end field $builder->addEventListener( FormEvents::SUBMIT, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var QuickEntryModel $data */ $data = $event->getData(); $newRecords = $data->getNewTimesheet(); @@ -160,9 +161,7 @@ final class QuickEntryWeekType extends AbstractType $activity = $data->getActivity(); foreach ($newRecords as $record) { - if ($user !== null) { - $record->setUser($user); - } + $record->setUser($user); if ($project !== null) { $record->setProject($project); } diff --git a/src/Form/Type/SkinType.php b/src/Form/Type/SkinType.php index 2216ba451..c7109491a 100644 --- a/src/Form/Type/SkinType.php +++ b/src/Form/Type/SkinType.php @@ -18,18 +18,17 @@ use Symfony\Component\OptionsResolver\OptionsResolver; */ final class SkinType extends AbstractType { - public const THEMES = [ - 'skin.light' => 'default', - 'skin.dark' => 'dark', - ]; - public function configureOptions(OptionsResolver $resolver): void { $resolver->setDefaults([ 'label' => 'skin', 'search' => false, 'required' => true, - 'choices' => self::THEMES, + 'choices' => [ + 'automatic' => 'auto', + 'skin.light' => 'default', + 'skin.dark' => 'dark', + ], ]); } diff --git a/src/Form/Type/SystemConfigurationType.php b/src/Form/Type/SystemConfigurationType.php index 0f774524d..df8feb709 100644 --- a/src/Form/Type/SystemConfigurationType.php +++ b/src/Form/Type/SystemConfigurationType.php @@ -31,7 +31,7 @@ final class SystemConfigurationType extends AbstractType { $builder->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var Configuration $preference */ $preference = $event->getData(); diff --git a/src/Form/Type/TagsSelectType.php b/src/Form/Type/TagsSelectType.php index 215905c6f..0db3c0801 100644 --- a/src/Form/Type/TagsSelectType.php +++ b/src/Form/Type/TagsSelectType.php @@ -35,7 +35,7 @@ final class TagsSelectType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { - $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options) { + $builder->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use ($options): void { /** @var array $tagIds */ $tagIds = $event->getData(); diff --git a/src/Form/Type/TagsType.php b/src/Form/Type/TagsType.php index 2ca3e895e..a9fb5da4a 100644 --- a/src/Form/Type/TagsType.php +++ b/src/Form/Type/TagsType.php @@ -39,7 +39,7 @@ final class TagsType extends AbstractType public function getParent(): string { if ($this->count === null) { - $this->count = $this->repository->count([]); + $this->count = $this->repository->count(['visible' => true]); } if ($this->count > self::MAX_AMOUNT_SELECT) { diff --git a/src/Form/Type/TimePickerType.php b/src/Form/Type/TimePickerType.php index 34bcc936b..b573d8bb4 100644 --- a/src/Form/Type/TimePickerType.php +++ b/src/Form/Type/TimePickerType.php @@ -11,6 +11,7 @@ namespace App\Form\Type; use App\Configuration\LocaleService; use App\Utils\FormFormatConverter; +use App\Utils\JavascriptFormatConverter; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\CallbackTransformer; use Symfony\Component\Form\Exception\TransformationFailedException; @@ -18,33 +19,47 @@ use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormInterface; use Symfony\Component\Form\FormView; +use Symfony\Component\OptionsResolver\Options; use Symfony\Component\OptionsResolver\OptionsResolver; final class TimePickerType extends AbstractType { - public function __construct(private LocaleService $localeService) + public function __construct(private readonly LocaleService $localeService) { } public function configureOptions(OptionsResolver $resolver): void { - $format = $this->localeService->getTimeFormat(\Locale::getDefault()); - $converter = new FormFormatConverter(); - $formFormat = $converter->convert($format); - $resolver->setDefaults([ 'input' => 'string', - 'format' => $formFormat, - 'placeholder' => $formFormat, // $format + 'locale' => \Locale::getDefault(), 'model_timezone' => date_default_timezone_get(), 'view_timezone' => date_default_timezone_get(), 'block_prefix' => 'time' ]); + + $resolver->setDefault('time_format', function (Options $options): string { + // We used the configured time format via "getTimeFormat()" for entering times before, but it caused issues. + // So now we only allow two different input types: 12-hour with AM/PM suffix and 24-hour + return $this->localeService->is24Hour($options['locale']) ? 'HH:mm' : 'h:mm a'; + }); + + $resolver->setDefault('format', function (Options $options): string { + $converter = new FormFormatConverter(); + + return $converter->convert($options['time_format']); + }); + + $resolver->setDefault('placeholder', function (Options $options): string { + return $options['time_format']; + }); } public function buildView(FormView $view, FormInterface $form, array $options): void { $view->vars['format'] = $options['format']; + $view->vars['time_format'] = $options['time_format']; + $view->vars['js_format'] = (new JavascriptFormatConverter())->convert($options['time_format']); // @phpstan-ignore argument.type } public function buildForm(FormBuilderInterface $builder, array $options): void diff --git a/src/Form/Type/UserPreferenceType.php b/src/Form/Type/UserPreferenceType.php index 5df131e5d..9e979c1e8 100644 --- a/src/Form/Type/UserPreferenceType.php +++ b/src/Form/Type/UserPreferenceType.php @@ -37,7 +37,7 @@ final class UserPreferenceType extends AbstractType { $builder->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var UserPreference $preference */ $preference = $event->getData(); diff --git a/src/Form/Type/UserPreferencesCollectionType.php b/src/Form/Type/UserPreferencesCollectionType.php index b28662d0d..7764c23a6 100644 --- a/src/Form/Type/UserPreferencesCollectionType.php +++ b/src/Form/Type/UserPreferencesCollectionType.php @@ -29,7 +29,7 @@ final class UserPreferencesCollectionType extends AbstractType { $builder->addEventListener( FormEvents::PRE_SET_DATA, - function (FormEvent $event) { + function (FormEvent $event): void { /** @var ArrayCollection $collection */ $collection = $event->getData(); foreach ($collection as $collectionItem) { diff --git a/src/Form/Type/UserType.php b/src/Form/Type/UserType.php index 0549550d2..8d1c018c5 100644 --- a/src/Form/Type/UserType.php +++ b/src/Form/Type/UserType.php @@ -70,11 +70,20 @@ final class UserType extends AbstractType // includes the current user if it is a system-account, which is especially useful for forms pages, // which have a user switcher and display the logged-in user by default 'include_current_user_if_system_account' => false, - 'documentation' => [ + ]); + + $resolver->setDefault('documentation', function (Options $options) { + $example = 0; + if ($options['user'] instanceof User) { + $example = $options['user']->getId(); + } + + return [ 'type' => 'integer', 'description' => 'User ID', - ], - ]); + 'example' => $example + ]; + }); $resolver->setDefault('choices', function (Options $options) { $query = new UserFormTypeQuery(); diff --git a/src/Invoice/Calculator/AbstractCalculator.php b/src/Invoice/Calculator/AbstractCalculator.php index d9484420e..aa09853fa 100644 --- a/src/Invoice/Calculator/AbstractCalculator.php +++ b/src/Invoice/Calculator/AbstractCalculator.php @@ -11,15 +11,48 @@ namespace App\Invoice\Calculator; use App\Invoice\InvoiceItem; use App\Invoice\InvoiceModel; +use App\Invoice\TaxRow; abstract class AbstractCalculator { protected InvoiceModel $model; + /** + * @var InvoiceItem[] + */ + private array $cached = []; /** + * TODO make this method abstract in 3.0 + * * @return InvoiceItem[] */ - abstract public function getEntries(): array; + protected function calculateEntries(): array + { + return []; + } + + /** + * TODO make this method final in 3.0 + * + * @return InvoiceItem[] + */ + public function getEntries(): array + { + if (\count($this->cached) === 0) { + foreach ($this->calculateEntries() as $entry) { + if (!$entry->isFixedRate() && $entry->getHourlyRate() !== null && $entry->getHourlyRate() > 0) { + $entry->setDuration($this->model->getRateCalculatorMode()->roundDuration($entry->getDuration())); + // when merging many entries, we might run into rounding issues + // so we have to recalculate the hourly rate here + $entry->setRate($this->model->getRateCalculatorMode()->calculateRate($entry->getHourlyRate(), $entry->getDuration())); + } + + $this->cached[] = $entry; + } + } + + return $this->cached; + } /** * @param array $items @@ -44,44 +77,58 @@ abstract class AbstractCalculator public function getSubtotal(): float { $amount = 0.00; - foreach ($this->model->getEntries() as $entry) { + // using the entries and not the raw data, so we make sure to use the same base for everything + foreach ($this->getEntries() as $entry) { $amount += $entry->getRate(); } - return round($amount, 2); + return round($amount, 2, PHP_ROUND_HALF_UP); } + /** + * @deprecated use getTaxRows() instead + */ public function getVat(): float { return $this->model->getTemplate()->getVat() ?? 0.00; } - public function getTax(): float + /** + * @return array + */ + public function getTaxRows(): array { - $vat = $this->getVat(); - if (0.00 === $vat) { - return 0.00; + $rows = []; + foreach ($this->model->getTemplate()->getTaxRates() as $taxRate) { + $rows[] = new TaxRow($taxRate, $this->getSubtotal()); } - $percent = $vat / 100.00; + return $rows; + } - return round($this->getSubtotal() * $percent, 2); + public function getTax(): float + { + $tax = 0.00; + foreach ($this->getTaxRows() as $row) { + $tax += $row->getAmount(); + } + + return round($tax, 2, PHP_ROUND_HALF_UP); } public function getTotal(): float { - return $this->getSubtotal() + $this->getTax(); + return round($this->getSubtotal() + $this->getTax(), 2, PHP_ROUND_HALF_UP); } /** * Returns the total amount of worked time in seconds. - * - * @return int */ public function getTimeWorked(): int { $time = 0; - foreach ($this->model->getEntries() as $entry) { + // using the entries and not the raw data, so we make sure to use the same base for everything + foreach ($this->getEntries() as $entry) { if (null !== $entry->getDuration()) { $time += $entry->getDuration(); } diff --git a/src/Invoice/Calculator/AbstractMergedCalculator.php b/src/Invoice/Calculator/AbstractMergedCalculator.php index ab7b6fa38..97d0892b9 100644 --- a/src/Invoice/Calculator/AbstractMergedCalculator.php +++ b/src/Invoice/Calculator/AbstractMergedCalculator.php @@ -43,7 +43,7 @@ abstract class AbstractMergedCalculator extends AbstractCalculator $invoiceItem->setAmount($invoiceItem->getAmount() + $amount); $invoiceItem->setUser($entry->getUser()); $invoiceItem->setRate($invoiceItem->getRate() + $entry->getRate()); - $invoiceItem->setInternalRate($invoiceItem->getInternalRate() + ($entry->getInternalRate() ?? 0.00)); + $invoiceItem->setInternalRate($invoiceItem->getInternalRate() + ($entry->getInternalRate() ?? 0.00)); // @phpstan-ignore method.deprecated,method.deprecated $invoiceItem->setDuration($duration); if (null !== $entry->getFixedRate()) { diff --git a/src/Invoice/Calculator/AbstractSumInvoiceCalculator.php b/src/Invoice/Calculator/AbstractSumInvoiceCalculator.php index 4b6f4ca0d..e5679dbd7 100644 --- a/src/Invoice/Calculator/AbstractSumInvoiceCalculator.php +++ b/src/Invoice/Calculator/AbstractSumInvoiceCalculator.php @@ -47,16 +47,16 @@ abstract class AbstractSumInvoiceCalculator extends AbstractMergedCalculator imp $prefix = $this->calculateSumIdentifier($entry); if (null !== $entry->getFixedRate()) { - return $prefix . '_fixed_' . (string) $entry->getFixedRate(); + return $prefix . '_fixed_' . $entry->getFixedRate(); } - return $prefix . '_hourly_' . (string) $entry->getHourlyRate(); + return $prefix . '_hourly_' . ($entry->getHourlyRate() ?? '__NULL__'); } /** * @return InvoiceItem[] */ - public function getEntries(): array + protected function calculateEntries(): array { $entries = $this->model->getEntries(); if (empty($entries)) { diff --git a/src/Invoice/Calculator/DefaultCalculator.php b/src/Invoice/Calculator/DefaultCalculator.php index 3d412d9ad..c1f89e263 100644 --- a/src/Invoice/Calculator/DefaultCalculator.php +++ b/src/Invoice/Calculator/DefaultCalculator.php @@ -23,7 +23,7 @@ final class DefaultCalculator extends AbstractMergedCalculator implements Calcul /** * @return InvoiceItem[] */ - public function getEntries(): array + protected function calculateEntries(): array { $entries = []; diff --git a/src/Invoice/Calculator/PriceInvoiceCalculator.php b/src/Invoice/Calculator/PriceInvoiceCalculator.php index bbef2f2fa..9c8b8ed22 100644 --- a/src/Invoice/Calculator/PriceInvoiceCalculator.php +++ b/src/Invoice/Calculator/PriceInvoiceCalculator.php @@ -23,7 +23,7 @@ final class PriceInvoiceCalculator extends AbstractSumInvoiceCalculator implemen return ['fixed_' . $invoiceItem->getFixedRate()]; } - return ['hourly_' . $invoiceItem->getHourlyRate()]; + return ['hourly_' . ($invoiceItem->getHourlyRate() ?? '__NULL__')]; } public function getId(): string diff --git a/src/Invoice/Calculator/ProjectActivityInvoiceCalculator.php b/src/Invoice/Calculator/ProjectActivityInvoiceCalculator.php new file mode 100644 index 000000000..3b43f54da --- /dev/null +++ b/src/Invoice/Calculator/ProjectActivityInvoiceCalculator.php @@ -0,0 +1,41 @@ +getProject()?->getId(), + $invoiceItem->getActivity()?->getId() + ]; + } + + protected function mergeSumInvoiceItem(InvoiceItem $invoiceItem, ExportableItem $entry): void + { + $project = $entry->getProject(); + if ($project !== null) { + $invoiceItem->setDescription($project->getInvoiceText() ?? $project->getName()); + } + } + + public function getId(): string + { + return 'project_activity'; + } +} diff --git a/src/Invoice/Calculator/ProjectUserInvoiceCalculator.php b/src/Invoice/Calculator/ProjectUserInvoiceCalculator.php index 9a2ba6c7e..ed3d5b109 100644 --- a/src/Invoice/Calculator/ProjectUserInvoiceCalculator.php +++ b/src/Invoice/Calculator/ProjectUserInvoiceCalculator.php @@ -44,14 +44,9 @@ final class ProjectUserInvoiceCalculator extends AbstractSumInvoiceCalculator im protected function mergeSumInvoiceItem(InvoiceItem $invoiceItem, ExportableItem $entry): void { - if ($entry->getProject() === null) { - return; - } - - if ($entry->getProject()->getInvoiceText() !== null) { - $invoiceItem->setDescription($entry->getProject()->getInvoiceText()); - } else { - $invoiceItem->setDescription($entry->getProject()->getName()); + $project = $entry->getProject(); + if ($project !== null) { + $invoiceItem->setDescription($project->getInvoiceText() ?? $project->getName()); } } diff --git a/src/Invoice/Calculator/ShortInvoiceCalculator.php b/src/Invoice/Calculator/ShortInvoiceCalculator.php index 3286ae02e..19ac57e54 100644 --- a/src/Invoice/Calculator/ShortInvoiceCalculator.php +++ b/src/Invoice/Calculator/ShortInvoiceCalculator.php @@ -21,7 +21,7 @@ final class ShortInvoiceCalculator extends AbstractMergedCalculator implements C /** * @return InvoiceItem[] */ - public function getEntries(): array + protected function calculateEntries(): array { $entries = $this->model->getEntries(); if (empty($entries)) { diff --git a/src/Invoice/CalculatorInterface.php b/src/Invoice/CalculatorInterface.php index bcc94845f..34353c049 100644 --- a/src/Invoice/CalculatorInterface.php +++ b/src/Invoice/CalculatorInterface.php @@ -26,39 +26,35 @@ interface CalculatorInterface /** * Set the invoice model and can be used to fetch the customer. - * - * @param InvoiceModel $model */ public function setModel(InvoiceModel $model): void; /** * Returns the subtotal before taxes. - * - * @return float */ public function getSubtotal(): float; /** * Returns the tax amount for this invoice. - * - * @return float */ public function getTax(): float; /** * Returns the total amount for this invoice including taxes. - * - * @return float */ public function getTotal(): float; /** * Returns the percentage for the value-added tax (VAT) calculation. - * - * @return float + * @deprecated use getTaxRows() instead */ public function getVat(): float; + /** + * @return array + */ + public function getTaxRows(): array; + /** * Returns the total amount of worked time in seconds. * @@ -71,8 +67,6 @@ interface CalculatorInterface * * Prefix it with your company name followed by a hyphen (e.g. "acme-"), * if this is a third-party calculator. - * - * @return string */ public function getId(): string; } diff --git a/src/Invoice/Hydrator/InvoiceItemDefaultHydrator.php b/src/Invoice/Hydrator/InvoiceItemDefaultHydrator.php index 7b47ff68b..b787aee77 100644 --- a/src/Invoice/Hydrator/InvoiceItemDefaultHydrator.php +++ b/src/Invoice/Hydrator/InvoiceItemDefaultHydrator.php @@ -29,7 +29,7 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator $formatter = $this->model->getFormatter(); $rate = $item->getRate(); - $internalRate = $item->getInternalRate(); + $internalRate = $item->getInternalRate(); // @phpstan-ignore method.deprecated $appliedRate = $item->getHourlyRate(); $amount = $formatter->getFormattedDecimalDuration($item->getDuration()); $description = $item->getDescription(); @@ -63,9 +63,9 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator 'entry.rate' => $formatter->getFormattedMoney($appliedRate, $currency), 'entry.rate_nc' => $formatter->getFormattedMoney($appliedRate, $currency, false), 'entry.rate_plain' => $appliedRate, - 'entry.rate_internal' => $formatter->getFormattedMoney($internalRate, $currency), - 'entry.rate_internal_nc' => $formatter->getFormattedMoney($internalRate, $currency, false), - 'entry.rate_internal_plain' => $internalRate, + 'entry.rate_internal' => $formatter->getFormattedMoney($internalRate, $currency), // @deprecated since 2.41 + 'entry.rate_internal_nc' => $formatter->getFormattedMoney($internalRate, $currency, false), // @deprecated since 2.41 + 'entry.rate_internal_plain' => $internalRate, // @deprecated since 2.41 'entry.rate_fixed' => ($item->isFixedRate() ? $item->getFixedRate() : null), 'entry.total' => $formatter->getFormattedMoney($rate, $currency), 'entry.total_nc' => $formatter->getFormattedMoney($rate, $currency, false), @@ -75,6 +75,8 @@ final class InvoiceItemDefaultHydrator implements InvoiceItemHydrator 'entry.duration_format' => $formatter->getFormattedDuration($item->getDuration()), 'entry.duration_decimal' => $formatter->getFormattedDecimalDuration($item->getDuration()), 'entry.duration_minutes' => (int) ($item->getDuration() / 60), + // prepare optional field with empty string + 'entry.activity' => '', ]; if ($begin !== null) { diff --git a/src/Invoice/Hydrator/InvoiceModelCustomerHydrator.php b/src/Invoice/Hydrator/InvoiceModelCustomerHydrator.php index 8c862bfb2..4e5b4f31f 100644 --- a/src/Invoice/Hydrator/InvoiceModelCustomerHydrator.php +++ b/src/Invoice/Hydrator/InvoiceModelCustomerHydrator.php @@ -12,6 +12,7 @@ namespace App\Invoice\Hydrator; use App\Customer\CustomerStatisticService; use App\Invoice\InvoiceModel; use App\Invoice\InvoiceModelHydrator; +use Symfony\Component\Intl\Countries; final class InvoiceModelCustomerHydrator implements InvoiceModelHydrator { @@ -25,22 +26,26 @@ final class InvoiceModelCustomerHydrator implements InvoiceModelHydrator { $customer = $model->getCustomer(); - if (null === $customer) { - return []; - } - $prefix = 'customer.'; + $language = $model->getTemplate()->getLanguage(); + $country = $customer->getCountry(); $values = [ $prefix . 'id' => $customer->getId(), - $prefix . 'address' => $customer->getAddress() ?? '', + $prefix . 'address' => $customer->getFormattedAddress() ?? '', // deprecated since 2.44 + $prefix . 'address_line1' => $customer->getAddressLine1() ?? '', + $prefix . 'address_line2' => $customer->getAddressLine2() ?? '', + $prefix . 'address_line3' => $customer->getAddressLine3() ?? '', + $prefix . 'postcode' => $customer->getPostCode() ?? '', + $prefix . 'city' => $customer->getCity() ?? '', $prefix . 'name' => $customer->getName() ?? '', $prefix . 'contact' => $customer->getContact() ?? '', $prefix . 'company' => $customer->getCompany() ?? '', $prefix . 'vat' => $customer->getVatId() ?? '', // deprecated since 2.0.15 $prefix . 'vat_id' => $customer->getVatId() ?? '', $prefix . 'number' => $customer->getNumber() ?? '', - $prefix . 'country' => $customer->getCountry(), + $prefix . 'country' => $country, + $prefix . 'country_name' => $country !== null ? Countries::getName($country, $language) : null, $prefix . 'homepage' => $customer->getHomepage() ?? '', $prefix . 'comment' => $customer->getComment() ?? '', $prefix . 'email' => $customer->getEmail() ?? '', @@ -48,6 +53,7 @@ final class InvoiceModelCustomerHydrator implements InvoiceModelHydrator $prefix . 'phone' => $customer->getPhone() ?? '', $prefix . 'mobile' => $customer->getMobile() ?? '', $prefix . 'invoice_text' => $customer->getInvoiceText() ?? '', + $prefix . 'buyer_reference' => $customer->getBuyerReference() ?? '', ]; $end = $model->getQuery()?->getEnd(); diff --git a/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php b/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php index a41110063..55c4f3b8b 100644 --- a/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php +++ b/src/Invoice/Hydrator/InvoiceModelDefaultHydrator.php @@ -11,6 +11,7 @@ namespace App\Invoice\Hydrator; use App\Invoice\InvoiceModel; use App\Invoice\InvoiceModelHydrator; +use Symfony\Component\Intl\Countries; final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator { @@ -18,11 +19,28 @@ final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator public function hydrate(InvoiceModel $model): array { + $template = $model->getTemplate(); + $calculator = $model->getCalculator(); + if ($calculator === null) { + throw new \InvalidArgumentException('InvoiceModel needs a calculator'); + } + $currency = $model->getCurrency(); - $tax = $model->getCalculator()->getTax(); - $total = $model->getCalculator()->getTotal(); - $subtotal = $model->getCalculator()->getSubtotal(); + $tax = $calculator->getTax(); + $total = $calculator->getTotal(); + $subtotal = $calculator->getSubtotal(); $formatter = $model->getFormatter(); + $language = $template->getLanguage(); + if ($language === null) { + throw new \InvalidArgumentException('InvoiceTemplate needs a language'); + } + + $taxRows = $calculator->getTaxRows(); + + $vat = 0.00; + foreach ($taxRows as $taxRow) { + $vat += $taxRow->getTax()->getRate(); + } $values = [ 'invoice.due_date' => $formatter->getFormattedDateTime($model->getDueDate()), @@ -31,15 +49,15 @@ final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator 'invoice.date_process' => $model->getInvoiceDate()->format(self::DATE_PROCESS_FORMAT), // since 2.14 'invoice.number' => $model->getInvoiceNumber(), 'invoice.currency' => $currency, - 'invoice.language' => $model->getTemplate()->getLanguage(), // since 1.9 + 'invoice.language' => $language, // since 1.9 'invoice.currency_symbol' => $formatter->getCurrencySymbol($currency), - 'invoice.vat' => $model->getCalculator()->getVat(), - 'invoice.tax_hide' => $model->isHideZeroTax() && $tax === 0.00, - 'invoice.tax' => $formatter->getFormattedMoney($tax, $currency), - 'invoice.tax_nc' => $formatter->getFormattedMoney($tax, $currency, false), - 'invoice.tax_plain' => $tax, - 'invoice.total_time' => $formatter->getFormattedDuration($model->getCalculator()->getTimeWorked()), - 'invoice.duration_decimal' => $formatter->getFormattedDecimalDuration($model->getCalculator()->getTimeWorked()), + 'invoice.vat' => $vat, // @deprecated, use invoice.tax_rows instead + 'invoice.tax_hide' => $model->isHideZeroTax() && $tax === 0.00, // @deprecated, use invoice.tax_rows instead + 'invoice.tax' => $formatter->getFormattedMoney($tax, $currency), // @deprecated, use invoice.tax_rows instead + 'invoice.tax_nc' => $formatter->getFormattedMoney($tax, $currency, false), // @deprecated, use invoice.tax_rows instead + 'invoice.tax_plain' => $tax, // @deprecated, use invoice.tax_rows instead + 'invoice.total_time' => $formatter->getFormattedDuration($calculator->getTimeWorked()), + 'invoice.duration_decimal' => $formatter->getFormattedDecimalDuration($calculator->getTimeWorked()), 'invoice.total' => $formatter->getFormattedMoney($total, $currency), 'invoice.total_nc' => $formatter->getFormattedMoney($total, $currency, false), 'invoice.total_plain' => $total, @@ -47,47 +65,71 @@ final class InvoiceModelDefaultHydrator implements InvoiceModelHydrator 'invoice.subtotal_nc' => $formatter->getFormattedMoney($subtotal, $currency, false), 'invoice.subtotal_plain' => $subtotal, - 'template.name' => $model->getTemplate()->getName() ?? '', - 'template.company' => $model->getTemplate()->getCompany() ?? '', - 'template.address' => $model->getTemplate()->getAddress() ?? '', - 'template.title' => $model->getTemplate()->getTitle() ?? '', - 'template.payment_terms' => $model->getTemplate()->getPaymentTerms() ?? '', - 'template.due_days' => $model->getTemplate()->getDueDays(), - 'template.vat_id' => $model->getTemplate()->getVatId() ?? '', - 'template.contact' => $model->getTemplate()->getContact() ?? '', - 'template.payment_details' => $model->getTemplate()->getPaymentDetails() ?? '', + 'template.name' => $template->getName() ?? '', + 'template.company' => $template->getCompany() ?? '', // deprecated since 2.45 + 'template.address' => $template->getAddress() ?? '', + 'template.title' => $template->getTitle() ?? '', + 'template.payment_terms' => $template->getPaymentTerms() ?? '', + 'template.due_days' => $template->getDueDays(), + 'template.vat_id' => $template->getVatId() ?? '', // deprecated since 2.45 + 'template.contact' => $template->getContact() ?? '', + 'template.country' => null, + 'template.country_name' => null, + 'template.payment_details' => $template->getPaymentDetails() ?? '', 'query.begin' => '', 'query.begin_day' => '', - 'query.begin_process' => null, // since 2.14 + 'query.begin_process' => null, // since 2.14 'query.begin_month' => '', 'query.begin_month_number' => '', 'query.begin_year' => '', - 'query.end' => '', // since 1.9 - 'query.end_day' => '', // since 1.9 - 'query.end_process' => null, // since 2.14 - 'query.end_month' => '', // since 1.9 - 'query.end_month_number' => '', // since 1.9 - 'query.end_year' => '', // since 1.9 + 'query.end' => '', // since 1.9 + 'query.end_day' => '', // since 1.9 + 'query.end_process' => null, // since 2.14 + 'query.end_month' => '', // since 1.9 + 'query.end_month_number' => '', // since 1.9 + 'query.end_year' => '', // since 1.9 // since 2.0.15 'user.see_others' => ($model->getQuery()?->getUser() === null), ]; + $values['invoice.tax_rows'] = []; + $counter = 1; + foreach ($taxRows as $taxRow) { + $tax = $taxRow->getTax(); + $values['invoice.tax_rows'][] = [ + 'counter' => $counter++, + 'type' => $tax->getType()->value, + 'name' => $tax->getName(), + 'rate' => $tax->getRate(), + 'note' => $tax->getNote(), + 'show' => $tax->isShow(), + 'currency' => $currency, + 'amount' => $taxRow->getAmount(), // do not format, only available in twig anyway + 'base' => $taxRow->getBasePrice(), // do not format, only available in twig anyway + ]; + } + + $seller = $template->getCustomer(); + if ($seller !== null) { + $country = $seller->getCountry(); + if ($country !== null) { + $values['template.country'] = $country; // deprecated since 2.45 + $values['template.country_name'] = Countries::getName($country, $language); // deprecated since 2.45 + } + } + $query = $model->getQuery(); if ($query !== null) { $begin = $query->getBegin(); if ($begin !== null) { $values = array_merge($values, [ 'query.day' => $begin->format('d'), - // @deprecated - but impossible to delete - 'query.month' => $formatter->getFormattedMonthName($begin), - // @deprecated - but impossible to delete - 'query.month_number' => $begin->format('m'), - // @deprecated - but impossible to delete - 'query.year' => $begin->format('Y'), - // @deprecated - but impossible to delete - 'query.begin' => $formatter->getFormattedDateTime($begin), + 'query.month' => $formatter->getFormattedMonthName($begin), // @deprecated - but impossible to delete + 'query.month_number' => $begin->format('m'), // @deprecated - but impossible to delete + 'query.year' => $begin->format('Y'), // @deprecated - but impossible to delete + 'query.begin' => $formatter->getFormattedDateTime($begin), // @deprecated - but impossible to delete 'query.begin_process' => $begin->format(self::DATE_PROCESS_FORMAT), // since 2.14 'query.begin_day' => $begin->format('d'), 'query.begin_month' => $formatter->getFormattedMonthName($begin), diff --git a/src/Invoice/Hydrator/InvoiceModelIssuerHydrator.php b/src/Invoice/Hydrator/InvoiceModelIssuerHydrator.php new file mode 100644 index 000000000..712d0ddfa --- /dev/null +++ b/src/Invoice/Hydrator/InvoiceModelIssuerHydrator.php @@ -0,0 +1,65 @@ + + */ + public function hydrate(InvoiceModel $model): array + { + $customer = $model->getTemplate()->getCustomer(); + if (null === $customer) { + return []; + } + + $prefix = 'issuer.'; + $language = $model->getTemplate()->getLanguage(); + $country = $customer->getCountry(); + + $values = [ + $prefix . 'id' => $customer->getId(), + $prefix . 'address' => $customer->getFormattedAddress() ?? '', + $prefix . 'address_line1' => $customer->getAddressLine1() ?? '', + $prefix . 'address_line2' => $customer->getAddressLine2() ?? '', + $prefix . 'address_line3' => $customer->getAddressLine3() ?? '', + $prefix . 'postcode' => $customer->getPostCode() ?? '', + $prefix . 'city' => $customer->getCity() ?? '', + $prefix . 'name' => $customer->getName() ?? '', + $prefix . 'contact' => $customer->getContact() ?? '', + $prefix . 'company' => $customer->getCompany() ?? '', + $prefix . 'vat_id' => $customer->getVatId() ?? '', + $prefix . 'number' => $customer->getNumber() ?? '', + $prefix . 'country' => $country, + $prefix . 'country_name' => $country !== null ? Countries::getName($country, $language) : null, + $prefix . 'homepage' => $customer->getHomepage() ?? '', + $prefix . 'comment' => $customer->getComment() ?? '', + $prefix . 'email' => $customer->getEmail() ?? '', + $prefix . 'fax' => $customer->getFax() ?? '', + $prefix . 'phone' => $customer->getPhone() ?? '', + $prefix . 'mobile' => $customer->getMobile() ?? '', + $prefix . 'invoice_text' => $customer->getInvoiceText() ?? '', + $prefix . 'buyer_reference' => $customer->getBuyerReference() ?? '', + ]; + + foreach ($customer->getMetaFields() as $metaField) { + $values = array_merge($values, [ + $prefix . 'meta.' . $metaField->getName() => $metaField->getValue(), + ]); + } + + return $values; + } +} diff --git a/src/Invoice/InvoiceItem.php b/src/Invoice/InvoiceItem.php index 20152dec3..81271618b 100644 --- a/src/Invoice/InvoiceItem.php +++ b/src/Invoice/InvoiceItem.php @@ -19,6 +19,9 @@ final class InvoiceItem private ?float $fixedRate = null; private ?float $hourlyRate = null; private float $rate = 0.00; + /** + * @deprecated since 2.41 - internal rate is not needed in invoices + */ private float $rateInternal = 0.00; private float $amount = 0.00; private ?string $description = null; @@ -85,9 +88,14 @@ final class InvoiceItem return $this; } + public function getAppliedRate(): float + { + return $this->fixedRate ?? $this->hourlyRate ?? 0.00; + } + public function isFixedRate(): bool { - return null !== $this->getFixedRate(); + return $this->fixedRate !== null; } public function getFixedRate(): ?float @@ -126,11 +134,17 @@ final class InvoiceItem return $this; } + /** + * @deprecated since 2.41 - internal rate is not needed in invoices + */ public function getInternalRate(): float { return $this->rateInternal; } + /** + * @deprecated since 2.41 - internal rate is not needed in invoices + */ public function setInternalRate(float $rateInternal): InvoiceItem { $this->rateInternal = $rateInternal; diff --git a/src/Invoice/InvoiceItemHydrator.php b/src/Invoice/InvoiceItemHydrator.php index 6bcac48db..cbf2b1d56 100644 --- a/src/Invoice/InvoiceItemHydrator.php +++ b/src/Invoice/InvoiceItemHydrator.php @@ -9,6 +9,9 @@ namespace App\Invoice; +use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag; + +#[AutoconfigureTag] interface InvoiceItemHydrator { public function setInvoiceModel(InvoiceModel $model): void; diff --git a/src/Invoice/InvoiceModel.php b/src/Invoice/InvoiceModel.php index 630c82808..7e2348463 100644 --- a/src/Invoice/InvoiceModel.php +++ b/src/Invoice/InvoiceModel.php @@ -9,39 +9,30 @@ namespace App\Invoice; -use App\Activity\ActivityStatisticService; -use App\Customer\CustomerStatisticService; use App\Entity\Customer; use App\Entity\ExportableItem; use App\Entity\InvoiceTemplate; use App\Entity\User; -use App\Invoice\Hydrator\InvoiceItemDefaultHydrator; -use App\Invoice\Hydrator\InvoiceModelActivityHydrator; -use App\Invoice\Hydrator\InvoiceModelCustomerHydrator; -use App\Invoice\Hydrator\InvoiceModelDefaultHydrator; -use App\Invoice\Hydrator\InvoiceModelProjectHydrator; -use App\Invoice\Hydrator\InvoiceModelUserHydrator; -use App\Project\ProjectStatisticService; use App\Repository\Query\InvoiceQuery; +use App\Timesheet\RateCalculator\RateCalculatorMode; +use Symfony\Component\DependencyInjection\Attribute\Exclude; /** * InvoiceModel is the ONLY value that a RendererInterface receives for generating the invoice, * besides the InvoiceDocument which is used as a "template". */ +#[Exclude] final class InvoiceModel { - private ?Customer $customer = null; private ?InvoiceQuery $query = null; /** * @var ExportableItem[] */ private array $entries = []; - private ?InvoiceTemplate $template = null; private ?CalculatorInterface $calculator = null; private ?NumberGeneratorInterface $generator = null; private \DateTimeInterface $invoiceDate; private ?User $user = null; - private InvoiceFormatter $formatter; /** * @var InvoiceModelHydrator[] */ @@ -52,20 +43,39 @@ final class InvoiceModel private array $itemHydrator = []; private ?string $invoiceNumber = null; private bool $hideZeroTax = false; + private bool $isPreview = false; + /** + * @var array|null|bool|int|float> + */ + private array $options = []; /** * @internal use InvoiceModelFactory */ - public function __construct(InvoiceFormatter $formatter, CustomerStatisticService $customerStatistic, ProjectStatisticService $projectStatistic, ActivityStatisticService $activityStatistic) + public function __construct( + private InvoiceFormatter $formatter, + private readonly Customer $customer, + private readonly InvoiceTemplate $template, + private readonly RateCalculatorMode $rateCalculatorMode + ) { $this->invoiceDate = new \DateTimeImmutable(); - $this->formatter = $formatter; - $this->addModelHydrator(new InvoiceModelDefaultHydrator()); - $this->addModelHydrator(new InvoiceModelCustomerHydrator($customerStatistic)); - $this->addModelHydrator(new InvoiceModelProjectHydrator($projectStatistic)); - $this->addModelHydrator(new InvoiceModelActivityHydrator($activityStatistic)); - $this->addModelHydrator(new InvoiceModelUserHydrator()); - $this->addItemHydrator(new InvoiceItemDefaultHydrator()); + } + + /** + * @param string|array|null|bool|int|float $value + */ + public function setOption(string $key, string|array|null|bool|int|float $value): void + { + $this->options[$key] = $value; + } + + /** + * @return array|null|bool|int|float> + */ + public function getOptions(): array + { + return $this->options; } public function getQuery(): ?InvoiceQuery @@ -117,37 +127,20 @@ final class InvoiceModel return $this; } - public function getTemplate(): ?InvoiceTemplate + public function getTemplate(): InvoiceTemplate { return $this->template; } - public function setTemplate(InvoiceTemplate $template): void - { - $this->template = $template; - } - - public function getCustomer(): ?Customer + public function getCustomer(): Customer { return $this->customer; } - public function setCustomer(Customer $customer): void - { - $this->customer = $customer; - } - - /** - * Requires the template and invoice date to be set - */ public function getDueDate(): \DateTimeInterface { $date = \DateTimeImmutable::createFromInterface($this->getInvoiceDate()); - - $dueDays = 14; - if ($this->getTemplate() !== null) { - $dueDays = $this->getTemplate()->getDueDays(); - } + $dueDays = $this->template->getDueDays(); return $date->add(new \DateInterval('P' . $dueDays . 'D')); } @@ -196,10 +189,13 @@ final class InvoiceModel return $this->calculator; } + public function getRateCalculatorMode(): RateCalculatorMode + { + return $this->rateCalculatorMode; + } + /** - * Returns the user who is currently creating the invoice. - * - * @return User|null + * Returns the user currently creating the invoice. */ public function getUser(): ?User { @@ -227,8 +223,8 @@ final class InvoiceModel public function getCurrency(): string { - if (null !== $this->getCustomer() && $this->getCustomer()->getCurrency() !== null) { - return $this->getCustomer()->getCurrency(); + if ($this->customer->getCurrency() !== null) { + return $this->customer->getCurrency(); } return Customer::DEFAULT_CURRENCY; @@ -265,4 +261,14 @@ final class InvoiceModel { $this->hideZeroTax = $hideZeroTax; } + + public function isPreview(): bool + { + return $this->isPreview; + } + + public function setPreview(bool $preview): void + { + $this->isPreview = $preview; + } } diff --git a/src/Invoice/InvoiceModelFactory.php b/src/Invoice/InvoiceModelFactory.php index e24916eec..729564a23 100644 --- a/src/Invoice/InvoiceModelFactory.php +++ b/src/Invoice/InvoiceModelFactory.php @@ -9,28 +9,37 @@ namespace App\Invoice; -use App\Activity\ActivityStatisticService; -use App\Customer\CustomerStatisticService; use App\Entity\Customer; use App\Entity\InvoiceTemplate; -use App\Project\ProjectStatisticService; use App\Repository\Query\InvoiceQuery; +use App\Timesheet\RateCalculator\RateCalculatorMode; +use Symfony\Component\DependencyInjection\Attribute\TaggedIterator; final class InvoiceModelFactory { + /** + * @param iterable $modelHydrators + * @param iterable $itemHydrators + */ public function __construct( - private readonly CustomerStatisticService $customerStatisticService, - private readonly ProjectStatisticService $projectStatisticService, - private readonly ActivityStatisticService $activityStatisticService + private readonly RateCalculatorMode $rateCalculatorMode, + #[TaggedIterator(InvoiceModelHydrator::class)] + private readonly iterable $modelHydrators, + #[TaggedIterator(InvoiceItemHydrator::class)] + private readonly iterable $itemHydrators, ) { } public function createModel(InvoiceFormatter $formatter, Customer $customer, InvoiceTemplate $template, InvoiceQuery $query): InvoiceModel { - $model = new InvoiceModel($formatter, $this->customerStatisticService, $this->projectStatisticService, $this->activityStatisticService); + $model = new InvoiceModel($formatter, $customer, $template, $this->rateCalculatorMode); + foreach ($this->modelHydrators as $modelHydrator) { + $model->addModelHydrator($modelHydrator); + } + foreach ($this->itemHydrators as $itemHydrator) { + $model->addItemHydrator($itemHydrator); + } - $model->setCustomer($customer); - $model->setTemplate($template); $model->setQuery($query); return $model; diff --git a/src/Invoice/InvoiceModelHydrator.php b/src/Invoice/InvoiceModelHydrator.php index 8d5b481bf..1882dcfe8 100644 --- a/src/Invoice/InvoiceModelHydrator.php +++ b/src/Invoice/InvoiceModelHydrator.php @@ -9,6 +9,9 @@ namespace App\Invoice; +use Symfony\Component\DependencyInjection\Attribute\AutoconfigureTag; + +#[AutoconfigureTag] interface InvoiceModelHydrator { public function hydrate(InvoiceModel $model): array; diff --git a/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php b/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php index c3ee8682f..2949979ef 100644 --- a/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php +++ b/src/Invoice/NumberGenerator/ConfigurableNumberGenerator.php @@ -53,11 +53,11 @@ final class ConfigurableNumberGenerator implements NumberGeneratorInterface throw new \InvalidArgumentException('Missing invoice model, cannot calculate invoice number'); } - if ($format === 'cname' && $this->model->getCustomer()?->getName() === null) { + if ($format === 'cname' && $this->model->getCustomer()->getName() === null) { throw new \InvalidArgumentException('Customer has no name, replacer {cname} failed evaluation'); } - if ($format === 'cnumber' && $this->model->getCustomer()?->getNumber() === null) { + if ($format === 'cnumber' && $this->model->getCustomer()->getNumber() === null) { throw new \InvalidArgumentException('Customer has no number, replacer {cnumber} failed evaluation'); } @@ -87,8 +87,8 @@ final class ConfigurableNumberGenerator implements NumberGeneratorInterface 'cy' => $this->repository->getCounterForYear($invoiceDate) + $increaseBy, 'cm' => $this->repository->getCounterForMonth($invoiceDate) + $increaseBy, 'cd' => $this->repository->getCounterForDay($invoiceDate) + $increaseBy, - 'cname' => (string) $this->model->getCustomer()?->getName(), - 'cnumber' => (string) $this->model->getCustomer()?->getNumber(), + 'cname' => (string) $this->model->getCustomer()->getName(), + 'cnumber' => (string) $this->model->getCustomer()->getNumber(), default => $originalFormat, }; }); diff --git a/src/Invoice/Renderer/DocxRenderer.php b/src/Invoice/Renderer/DocxRenderer.php index 0cb72eeac..62831015b 100644 --- a/src/Invoice/Renderer/DocxRenderer.php +++ b/src/Invoice/Renderer/DocxRenderer.php @@ -29,6 +29,11 @@ final class DocxRenderer extends AbstractRenderer implements RendererInterface $template = new TemplateProcessor($document->getFilename()); foreach ($model->toArray() as $search => $replace) { + if (\is_array($replace)) { + // TODO tax rows + continue; + } + $replace = $xmlEscaper->escape($replace); $replace = preg_replace('/\n|\r\n?/', '', $replace); diff --git a/src/Invoice/Renderer/PdfRenderer.php b/src/Invoice/Renderer/PdfRenderer.php index b3030dbfe..17ec78f58 100644 --- a/src/Invoice/Renderer/PdfRenderer.php +++ b/src/Invoice/Renderer/PdfRenderer.php @@ -23,7 +23,7 @@ final class PdfRenderer extends AbstractTwigRenderer implements DispositionInlin { use PDFRendererTrait; - public function __construct(Environment $twig, private HtmlToPdfConverter $converter) + public function __construct(Environment $twig, private readonly HtmlToPdfConverter $converter) { parent::__construct($twig); } @@ -45,7 +45,7 @@ final class PdfRenderer extends AbstractTwigRenderer implements DispositionInlin $context->setOption('margin_bottom', '8'); $content = $this->renderTwigTemplate($document, $model, ['pdfContext' => $context]); - $content = $this->converter->convertToPdf($content, $context->getOptions()); + $content = $this->converter->convertToPdf($content, array_merge($model->getOptions(), $context->getOptions())); return $this->createPdfResponse($content, $context); } diff --git a/src/Invoice/ServiceInvoice.php b/src/Invoice/ServiceInvoice.php index 0e4d90d30..01a3dbf5b 100644 --- a/src/Invoice/ServiceInvoice.php +++ b/src/Invoice/ServiceInvoice.php @@ -49,11 +49,11 @@ final class ServiceInvoice private array $invoiceItemRepositories = []; public function __construct( - private InvoiceDocumentRepository $documents, - private FileHelper $fileHelper, - private InvoiceRepository $invoiceRepository, - private LocaleService $formatter, - private InvoiceModelFactory $invoiceModelFactory + private readonly InvoiceDocumentRepository $documents, + private readonly FileHelper $fileHelper, + private readonly InvoiceRepository $invoiceRepository, + private readonly LocaleService $formatter, + private readonly InvoiceModelFactory $invoiceModelFactory ) { } diff --git a/src/Invoice/TaxRow.php b/src/Invoice/TaxRow.php new file mode 100644 index 000000000..8fca4b2e7 --- /dev/null +++ b/src/Invoice/TaxRow.php @@ -0,0 +1,39 @@ +tax; + } + + public function getBasePrice(): float + { + return $this->basePrice; + } + + public function getAmount(): float + { + $percent = $this->tax->getRate() / 100.00; + + return round($this->basePrice * $percent, 4); + } +} diff --git a/src/Kernel.php b/src/Kernel.php index 9293f2b39..83e96d060 100644 --- a/src/Kernel.php +++ b/src/Kernel.php @@ -88,6 +88,14 @@ class Kernel extends BaseKernel } $plugins = []; + $finder = new Finder(); + $finder->ignoreUnreadableDirs()->directories()->name('*Bundle-*'); + foreach ($finder->in($pluginsDir) as $bundleDir) { + throw new \Exception( + \sprintf('Bundle "%s" has invalid directory name. Remove the version number, see https://www.kimai.org/documentation/plugin-management.html.', $bundleDir->getRelativePathname()) + ); + } + $finder = new Finder(); $finder->ignoreUnreadableDirs()->directories()->name('*Bundle'); /** @var SplFileInfo $bundleDir */ diff --git a/src/Ldap/LdapAuthenticator.php b/src/Ldap/LdapAuthenticator.php index 1dce36110..a84e67315 100644 --- a/src/Ldap/LdapAuthenticator.php +++ b/src/Ldap/LdapAuthenticator.php @@ -74,7 +74,7 @@ final class LdapAuthenticator implements AuthenticationEntryPointInterface, Inte return false; } - public function start(Request $request, AuthenticationException $authException = null): Response + public function start(Request $request, ?AuthenticationException $authException = null): Response { if (!$this->authenticator instanceof AuthenticationEntryPointInterface) { throw new NotAnEntryPointException(\sprintf('Decorated authenticator "%s" does not implement interface "%s".', get_debug_type($this->authenticator), AuthenticationEntryPointInterface::class)); diff --git a/src/Ldap/LdapCredentialsSubscriber.php b/src/Ldap/LdapCredentialsSubscriber.php index c3d8576da..ad78febc6 100644 --- a/src/Ldap/LdapCredentialsSubscriber.php +++ b/src/Ldap/LdapCredentialsSubscriber.php @@ -13,12 +13,11 @@ use App\Entity\User; use Symfony\Component\EventDispatcher\EventSubscriberInterface; use Symfony\Component\Security\Core\Exception\BadCredentialsException; use Symfony\Component\Security\Http\Authenticator\Passport\Credentials\PasswordCredentials; -use Symfony\Component\Security\Http\Authenticator\Passport\Passport; use Symfony\Component\Security\Http\Event\CheckPassportEvent; final class LdapCredentialsSubscriber implements EventSubscriberInterface { - public function __construct(private LdapManager $ldapManager) + public function __construct(private readonly LdapManager $ldapManager) { } @@ -40,7 +39,7 @@ final class LdapCredentialsSubscriber implements EventSubscriberInterface return; } - if (!$passport instanceof Passport || !$passport->hasBadge(PasswordCredentials::class)) { + if (!$passport->hasBadge(PasswordCredentials::class)) { throw new \LogicException(\sprintf('LDAP authentication requires a passport containing a user and password credentials, authenticator "%s" does not fulfill these requirements.', \get_class($event->getAuthenticator()))); } @@ -78,6 +77,6 @@ final class LdapCredentialsSubscriber implements EventSubscriberInterface } // make sure that the normal auth process is not triggered - $passwordCredentials->markResolved(); + $passwordCredentials->markResolved(); // @phpstan-ignore method.internal } } diff --git a/src/Ldap/LdapDriver.php b/src/Ldap/LdapDriver.php index b04eab812..6c52b6e2c 100644 --- a/src/Ldap/LdapDriver.php +++ b/src/Ldap/LdapDriver.php @@ -21,7 +21,10 @@ class LdapDriver { private ?Ldap $driver = null; - public function __construct(private LdapConfiguration $config, private ?LoggerInterface $logger = null) + public function __construct( + private readonly LdapConfiguration $config, + private readonly LoggerInterface $logger + ) { } @@ -41,10 +44,8 @@ class LdapDriver } /** - * @param string $baseDn - * @param string $filter - * @param array $attributes - * @return array + * @param array $attributes + * @return array{'count': int, array>} * @throws LdapDriverException */ public function search(string $baseDn, string $filter, array $attributes = []): array @@ -53,7 +54,7 @@ class LdapDriver $attributes = array_unique(array_merge($attributes, ['+', '*'])); - $this->logDebug('{action}({base_dn}, {filter}, {attributes})', [ + $this->logger->debug('{action}({base_dn}, {filter}, {attributes})', [ 'action' => 'ldap_search', 'base_dn' => $baseDn, 'filter' => $filter, @@ -67,7 +68,7 @@ class LdapDriver // searchEntries don't return 'count' key as specified by php native function ldap_get_entries() $entries['count'] = \count($entries); } catch (LdapException $exception) { - $this->ldapExceptionHandler($exception); + $this->logger->error(\sprintf('Failed to search LDAP: %s', $exception->getMessage()), ['exception' => $exception]); throw new LdapDriverException('An error occurred with the search operation.'); } @@ -80,7 +81,7 @@ class LdapDriver $driver = $this->getDriver(); try { - $this->logDebug('{action}({bindDn}, ****)', [ + $this->logger->debug('{action}({bindDn}, ****)', [ 'action' => 'ldap_bind', 'bindDn' => $bindDn, ]); @@ -88,36 +89,9 @@ class LdapDriver return $bind instanceof Ldap; } catch (LdapException $exception) { - $this->ldapExceptionHandler($exception, $password); + $this->logger->error(\sprintf('Failed binding to LDAP at %s: %s', $bindDn, $exception->getMessage()), ['exception' => new SanitizingException($exception, $password)]); } return false; } - - private function ldapExceptionHandler(LdapException $exception, string $password = null): void - { - $sanitizedException = null !== $password ? new SanitizingException($exception, $password) : $exception; - - switch ($exception->getCode()) { - // Error level codes - case LdapException::LDAP_SERVER_DOWN: - if ($this->logger) { - $this->logger->error('{exception}', ['exception' => $sanitizedException]); - } - break; - - // Other level codes - default: - $this->logDebug('{exception}', ['exception' => $sanitizedException]); - break; - } - } - - private function logDebug(string $message, array $context = []): void - { - if (null === $this->logger) { - return; - } - $this->logger->debug($message, $context); - } } diff --git a/src/Mail/KimaiMailer.php b/src/Mail/KimaiMailer.php index f15049bae..8c244b147 100644 --- a/src/Mail/KimaiMailer.php +++ b/src/Mail/KimaiMailer.php @@ -24,7 +24,7 @@ final class KimaiMailer implements MailerInterface { } - public function send(RawMessage $message, Envelope $envelope = null): void + public function send(RawMessage $message, ?Envelope $envelope = null): void { if (!$message instanceof Email) { $email = new Email(); @@ -43,7 +43,7 @@ final class KimaiMailer implements MailerInterface $this->mailer->send($message); } - public function sendToUser(User $user, Email $message, Envelope $envelope = null): void + public function sendToUser(User $user, Email $message, ?Envelope $envelope = null): void { if (!$user->isEnabled() || $user->getEmail() === null) { return; diff --git a/src/Model/ActivityBudgetStatisticModel.php b/src/Model/ActivityBudgetStatisticModel.php index 43c7d76bb..511fb7faf 100644 --- a/src/Model/ActivityBudgetStatisticModel.php +++ b/src/Model/ActivityBudgetStatisticModel.php @@ -14,7 +14,6 @@ use App\Entity\Activity; /** * Object used to unify the access to budget data in charts. * - * @internal do not use in plugins, no BC promise given! * @method Activity getEntity() */ class ActivityBudgetStatisticModel extends BudgetStatisticModel diff --git a/src/Model/BudgetStatisticModel.php b/src/Model/BudgetStatisticModel.php index 6218fc0bc..9652a1522 100644 --- a/src/Model/BudgetStatisticModel.php +++ b/src/Model/BudgetStatisticModel.php @@ -14,8 +14,6 @@ use App\Model\Statistic\BudgetStatistic; /** * Object used to unify the access to budget data in charts. - * - * @internal do not use in plugins, no BC promise given! */ class BudgetStatisticModel implements BudgetStatisticModelInterface { diff --git a/src/Model/BudgetStatisticModelInterface.php b/src/Model/BudgetStatisticModelInterface.php index 1d22dc5dc..df1fa8069 100644 --- a/src/Model/BudgetStatisticModelInterface.php +++ b/src/Model/BudgetStatisticModelInterface.php @@ -9,9 +9,6 @@ namespace App\Model; -/** - * @internal do not use in plugins, no BC promise given! - */ interface BudgetStatisticModelInterface { public function isMonthlyBudget(): bool; diff --git a/src/Model/CustomerBudgetStatisticModel.php b/src/Model/CustomerBudgetStatisticModel.php index 333535a29..56c55ccef 100644 --- a/src/Model/CustomerBudgetStatisticModel.php +++ b/src/Model/CustomerBudgetStatisticModel.php @@ -14,7 +14,6 @@ use App\Entity\Customer; /** * Object used to unify the access to budget data in charts. * - * @internal do not use in plugins, no BC promise given! * @method Customer getEntity() */ class CustomerBudgetStatisticModel extends BudgetStatisticModel diff --git a/src/Model/PermissionSection.php b/src/Model/PermissionSection.php index ded843603..ff6595061 100644 --- a/src/Model/PermissionSection.php +++ b/src/Model/PermissionSection.php @@ -9,7 +9,10 @@ namespace App\Model; -class PermissionSection implements PermissionSectionInterface +/** + * @final with 3.0 + */ +class PermissionSection implements PermissionSectionInterface // @phpstan-ignore class.implementsDeprecatedInterface { /** @var array */ private array $filter; @@ -17,7 +20,7 @@ class PermissionSection implements PermissionSectionInterface /** * @param string|array $filter */ - public function __construct(private string $title, string|array $filter) + public function __construct(private readonly string $title, string|array $filter) { if (!\is_array($filter)) { $filter = [$filter]; diff --git a/src/Model/PermissionSectionInterface.php b/src/Model/PermissionSectionInterface.php index 189117ce6..81c017038 100644 --- a/src/Model/PermissionSectionInterface.php +++ b/src/Model/PermissionSectionInterface.php @@ -9,6 +9,9 @@ namespace App\Model; +/** + * @deprecated since 2.38 - use PermissionSection directly + */ interface PermissionSectionInterface { /** diff --git a/src/Model/ProjectBudgetStatisticModel.php b/src/Model/ProjectBudgetStatisticModel.php index 7343dda0f..8c8973784 100644 --- a/src/Model/ProjectBudgetStatisticModel.php +++ b/src/Model/ProjectBudgetStatisticModel.php @@ -14,7 +14,6 @@ use App\Entity\Project; /** * Object used to unify the access to budget data in charts. * - * @internal do not use in plugins, no BC promise given! * @method Project getEntity() */ class ProjectBudgetStatisticModel extends BudgetStatisticModel diff --git a/src/Model/QuickEntryModel.php b/src/Model/QuickEntryModel.php index 5455e8289..3f312a03b 100644 --- a/src/Model/QuickEntryModel.php +++ b/src/Model/QuickEntryModel.php @@ -10,9 +10,12 @@ namespace App\Model; use App\Entity\Activity; +use App\Entity\MetaTableTypeInterface; use App\Entity\Project; use App\Entity\Timesheet; use App\Entity\User; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; /** * @internal @@ -24,9 +27,18 @@ class QuickEntryModel * @var Timesheet[] */ private array $timesheets = []; + /** + * @var Collection + */ + private Collection $metaFields; - public function __construct(private User $user, private ?Project $project = null, private ?Activity $activity = null) + public function __construct( + private readonly User $user, + private ?Project $project = null, + private ?Activity $activity = null + ) { + $this->metaFields = new ArrayCollection(); } public function markAsPrototype(): void @@ -184,4 +196,36 @@ class QuickEntryModel $this->timesheets[] = clone $record; } } + + /** + * @return Collection + */ + public function getMetaFields(): Collection + { + return $this->metaFields; + } + + public function setMetaFieldValue(MetaTableTypeInterface $metaField): void + { + // we only update the value for fields which were previously registered + // as we do NOT want new fields to show up by accident + foreach ($this->metaFields as $field) { + if ($field->getName() === $metaField->getName() && $metaField->getValue() !== null) { + $field->setValue($metaField->getValue()); + break; + } + } + } + + /** + * @param array $metaFields + */ + public function setMetaFields(array $metaFields): void + { + $collection = new ArrayCollection(); + foreach($metaFields as $field) { + $collection->add(clone $field); + } + $this->metaFields = $collection; + } } diff --git a/src/Model/QuickEntryWeek.php b/src/Model/QuickEntryWeek.php index 5b99ca8ee..c4de20f6f 100644 --- a/src/Model/QuickEntryWeek.php +++ b/src/Model/QuickEntryWeek.php @@ -23,7 +23,7 @@ class QuickEntryWeek */ private array $rows = []; - public function __construct(private \DateTime $startDate) + public function __construct(private readonly \DateTime $startDate) { } @@ -79,7 +79,7 @@ class QuickEntryWeek $result = strcmp((string) $aName, (string) $bName); } - return $result < 0 ? -1 : 1; + return $result < 0 ? -1 : 1; } /** diff --git a/src/Model/TimesheetCountedStatistic.php b/src/Model/TimesheetCountedStatistic.php index 920bf6d4f..1f89c71ae 100644 --- a/src/Model/TimesheetCountedStatistic.php +++ b/src/Model/TimesheetCountedStatistic.php @@ -9,9 +9,6 @@ namespace App\Model; -/** - * @internal - */ class TimesheetCountedStatistic implements \JsonSerializable { private int $counter = 0; @@ -34,8 +31,6 @@ class TimesheetCountedStatistic implements \JsonSerializable /** * For unified access, used in frontend. - * - * @return int */ public function getCounter(): int { @@ -84,8 +79,6 @@ class TimesheetCountedStatistic implements \JsonSerializable /** * For unified access, used in frontend. - * - * @return int */ public function getValue(): int { @@ -104,8 +97,6 @@ class TimesheetCountedStatistic implements \JsonSerializable /** * For unified access, used in frontend. - * - * @return int */ public function getDuration(): int { @@ -114,8 +105,6 @@ class TimesheetCountedStatistic implements \JsonSerializable /** * For unified access, used in frontend. - * - * @return float */ public function getRate(): float { @@ -134,8 +123,6 @@ class TimesheetCountedStatistic implements \JsonSerializable /** * Returns the total internal rate of all included timesheet records. - * - * @return float */ public function getInternalRate(): float { diff --git a/src/Pdf/HtmlToPdfConverter.php b/src/Pdf/HtmlToPdfConverter.php index ca83caf0d..a8f7f1ea9 100644 --- a/src/Pdf/HtmlToPdfConverter.php +++ b/src/Pdf/HtmlToPdfConverter.php @@ -15,9 +15,7 @@ interface HtmlToPdfConverter * Returns the binary content of the PDF, which can be saved as file. * Throws an exception if conversion fails. * - * @param string $html - * @param array $options - * @return string + * @param array> $options * @throws \Exception */ public function convertToPdf(string $html, array $options = []): string; diff --git a/src/Pdf/MPdfConverter.php b/src/Pdf/MPdfConverter.php index 6e2ef7a29..9419bbec5 100644 --- a/src/Pdf/MPdfConverter.php +++ b/src/Pdf/MPdfConverter.php @@ -18,22 +18,29 @@ use Mpdf\Output\Destination; final class MPdfConverter implements HtmlToPdfConverter { - public function __construct(private FileHelper $fileHelper, private string $cacheDirectory) + public function __construct( + private readonly FileHelper $fileHelper, + private readonly string $cacheDirectory + ) { } + /** + * @param array> $options + * @return array> + */ private function sanitizeOptions(array $options): array { - $configs = new ConfigVariables(); - $fonts = new FontVariables(); - $allowed = [ - 'mode', 'format', 'default_font_size', 'default_font', 'margin_left', 'margin_right', 'margin_top', - 'margin_bottom', 'margin_header', 'margin_footer', 'orientation', 'fonts', - ]; - - $filtered = array_filter($options, function ($key) use ($allowed, $configs, $fonts): bool { + $filtered = array_filter($options, function ($key): bool { + $allowed = [ + 'mode', 'format', 'default_font_size', 'default_font', 'margin_left', 'margin_right', 'margin_top', + 'margin_bottom', 'margin_header', 'margin_footer', 'orientation', 'fonts', 'associated_files', 'additional_xmp_rdf' + ]; if (!\in_array($key, $allowed)) { + $configs = new ConfigVariables(); if (!\array_key_exists($key, $configs->getDefaults())) { + $fonts = new FontVariables(); + return \array_key_exists($key, $fonts->getDefaults()); } } @@ -49,10 +56,7 @@ final class MPdfConverter implements HtmlToPdfConverter } /** - * @param string $html - * @param array $options - * @return string - * @throws \Mpdf\MpdfException + * @param array> $options */ public function convertToPdf(string $html, array $options = []): string { @@ -93,17 +97,36 @@ final class MPdfConverter implements HtmlToPdfConverter } /** - * @param array> $options - * @return Mpdf + * @param array> $options */ private function initMpdf(array $options): Mpdf { $options['fontDir'] = $this->getFontDirectories(); $options['fontdata'] = $this->mergeFontData($options); + $associatedFiles = []; + if (\array_key_exists('associated_files', $options) && \is_array($options['associated_files'])) { + $associatedFiles = $options['associated_files']; + unset($options['associated_files']); + } + + $additionalXmpRdf = null; + if (\array_key_exists('additional_xmp_rdf', $options) && \is_string($options['additional_xmp_rdf'])) { + $additionalXmpRdf = $options['additional_xmp_rdf']; + unset($options['additional_xmp_rdf']); + } + $mpdf = new Mpdf($options); $mpdf->creator = Constants::SOFTWARE; + if (\count($associatedFiles) > 0) { + $mpdf->SetAssociatedFiles($associatedFiles); + } + + if ($additionalXmpRdf !== null) { + $mpdf->SetAdditionalXmpRdf($additionalXmpRdf); + } + return $mpdf; } @@ -120,8 +143,8 @@ final class MPdfConverter implements HtmlToPdfConverter } /** - * @param array> $options - * @return array> + * @param array> $options + * @return array> */ private function mergeFontData(array $options): array { diff --git a/src/Pdf/PdfContext.php b/src/Pdf/PdfContext.php index 227b76d67..4ae802b17 100644 --- a/src/Pdf/PdfContext.php +++ b/src/Pdf/PdfContext.php @@ -17,17 +17,20 @@ final class PdfContext { private array $options = []; - public function setOption(string $key, string|array|null|bool $value): void + public function setOption(string $key, string|int|array|null|bool $value): void { $this->options[$key] = $value; } + /** + * @return array + */ public function getOptions(): array { return $this->options; } - public function getOption(string $key): array|string|null + public function getOption(string $key): string|int|array|null|bool { if (\array_key_exists($key, $this->options)) { return $this->options[$key]; diff --git a/src/Pdf/PdfRendererTrait.php b/src/Pdf/PdfRendererTrait.php index 4cd928dda..4cb325ac5 100644 --- a/src/Pdf/PdfRendererTrait.php +++ b/src/Pdf/PdfRendererTrait.php @@ -25,7 +25,7 @@ trait PdfRendererTrait protected function createPdfResponse(string $content, PdfContext $context): Response { $filename = $context->getOption('filename'); - if (empty($filename)) { + if (!\is_string($filename) || empty($filename)) { throw new \Exception('Empty PDF filename given'); } $filename = FileHelper::convertToAsciiFilename($filename); diff --git a/src/Project/ProjectDuplicationService.php b/src/Project/ProjectDuplicationService.php index 212fcd9cd..3c954ff64 100644 --- a/src/Project/ProjectDuplicationService.php +++ b/src/Project/ProjectDuplicationService.php @@ -9,6 +9,7 @@ namespace App\Project; +use App\Activity\ActivityService; use App\Entity\Project; use App\Repository\ActivityRateRepository; use App\Repository\ActivityRepository; @@ -21,7 +22,8 @@ final class ProjectDuplicationService private readonly ProjectService $projectService, private readonly ActivityRepository $activityRepository, private readonly ProjectRateRepository $projectRateRepository, - private readonly ActivityRateRepository $activityRateRepository + private readonly ActivityRateRepository $activityRateRepository, + private readonly ActivityService $activityService ) { } @@ -46,7 +48,7 @@ final class ProjectDuplicationService $newProject->setEnd(null); } - $this->projectService->saveNewProject($newProject); + $this->projectService->saveProject($newProject); foreach ($this->projectRateRepository->getRatesForProject($project) as $rate) { $newRate = clone $rate; @@ -68,7 +70,7 @@ final class ProjectDuplicationService $newActivity->setMetaField($newMetaField); } - $this->activityRepository->saveActivity($newActivity); + $this->activityService->saveActivity($newActivity); foreach ($this->activityRateRepository->getRatesForActivity($activity) as $rate) { $newRate = clone $rate; diff --git a/src/Project/ProjectService.php b/src/Project/ProjectService.php index e8eb500ee..4e0fe9571 100644 --- a/src/Project/ProjectService.php +++ b/src/Project/ProjectService.php @@ -41,6 +41,11 @@ final class ProjectService { } + public function loadMetaFields(Project $project): void + { + $this->dispatcher->dispatch(new ProjectMetaDefinitionEvent($project)); + } + public function createNewProject(?Customer $customer = null): Project { $project = new Project(); @@ -50,12 +55,24 @@ final class ProjectService $project->setCustomer($customer); } - $this->dispatcher->dispatch(new ProjectMetaDefinitionEvent($project)); + $this->loadMetaFields($project); $this->dispatcher->dispatch(new ProjectCreateEvent($project)); return $project; } + public function saveProject(Project $project, ?Context $context = null): Project + { + if ($project->isNew()) { + return $this->saveNewProject($project, $context); // @phpstan-ignore method.deprecated + } else { + return $this->updateProject($project); // @phpstan-ignore method.deprecated + } + } + + /** + * @deprecated since 2.35 - use saveProject() instead + */ public function saveNewProject(Project $project, ?Context $context = null): Project { if (null !== $project->getId()) { @@ -78,10 +95,10 @@ final class ProjectService return $project; } - public function deleteProject(Project $project): void + public function deleteProject(Project $project, ?Project $replace = null): void { - $this->dispatcher->dispatch(new ProjectDeleteEvent($project)); - $this->repository->deleteProject($project); + $this->dispatcher->dispatch(new ProjectDeleteEvent($project, $replace)); + $this->repository->deleteProject($project, $replace); } /** @@ -93,10 +110,13 @@ final class ProjectService $errors = $this->validator->validate($project, null, $groups); if ($errors->count() > 0) { - throw new ValidationFailedException($errors, 'Validation Failed'); + throw new ValidationFailedException($errors); } } + /** + * @deprecated since 2.35 - use saveProject() instead + */ public function updateProject(Project $project): Project { $this->validateProject($project); @@ -108,8 +128,12 @@ final class ProjectService return $project; } - public function findProjectByName(string $name): ?Project + public function findProjectByName(string $name, ?Customer $customer): ?Project { + if ($customer !== null) { + return $this->repository->findOneBy(['name' => $name, 'customer' => $customer->getId()]); + } + return $this->repository->findOneBy(['name' => $name]); } @@ -128,12 +152,23 @@ final class ProjectService // we cannot use max(number) because a varchar column returns unexpected results $start = $this->repository->countProject(); $i = 0; + $createDate = new \DateTimeImmutable(); do { $start++; - $numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($start): string|int { + $numberGenerator = new NumberGenerator($format, function (string $originalFormat, string $format, int $increaseBy) use ($start, $createDate): string|int { return match ($format) { + 'Y' => $createDate->format('Y'), + 'y' => $createDate->format('y'), + 'M' => $createDate->format('m'), + 'm' => $createDate->format('n'), + 'D' => $createDate->format('d'), + 'd' => $createDate->format('j'), + 'YY' => (int) $createDate->format('Y') + $increaseBy, + 'yy' => (int) $createDate->format('y') + $increaseBy, + 'MM' => (int) $createDate->format('m') + $increaseBy, + 'DD' => (int) $createDate->format('d') + $increaseBy, 'pc' => $start + $increaseBy, default => $originalFormat, }; diff --git a/src/Project/ProjectStatisticService.php b/src/Project/ProjectStatisticService.php index bc88546d9..ce353369d 100644 --- a/src/Project/ProjectStatisticService.php +++ b/src/Project/ProjectStatisticService.php @@ -721,6 +721,7 @@ class ProjectStatisticService $qb = clone $tplQb; $qb->addSelect('MAX(t.date) as lastRecord'); $result = $qb->getQuery()->getScalarResult(); + /** @var array{id: int, lastRecord: string, duration: int, rate: float} $row */ foreach ($result as $row) { if ($row['lastRecord'] !== null) { // might be the wrong timezone @@ -736,6 +737,7 @@ class ProjectStatisticService ; $result = $qb->getQuery()->getScalarResult(); + /** @var array{id: int, lastRecord: string, duration: int, rate: float} $row */ foreach ($result as $row) { $projectViews[$row['id']]->setDurationDay($row['duration'] ?? 0); } @@ -749,6 +751,7 @@ class ProjectStatisticService ; $result = $qb->getQuery()->getScalarResult(); + /** @var array{id: int, lastRecord: string, duration: int, rate: float} $row */ foreach ($result as $row) { $projectViews[$row['id']]->setDurationWeek($row['duration']); } @@ -762,6 +765,7 @@ class ProjectStatisticService ; $result = $qb->getQuery()->getScalarResult(); + /** @var array{id: int, lastRecord: string, duration: int, rate: float} $row */ foreach ($result as $row) { $projectViews[$row['id']]->setDurationMonth($row['duration']); } diff --git a/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php b/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php index 36dad7055..5890f4b3c 100644 --- a/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php +++ b/src/Reporting/ProjectDateRange/ProjectDateRangeForm.php @@ -14,6 +14,7 @@ use App\Form\Type\MonthPickerType; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\Extension\Core\Type\CheckboxType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; +use Symfony\Component\Form\Extension\Core\Type\HiddenType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolver; @@ -41,6 +42,8 @@ final class ProjectDateRangeForm extends AbstractType 'label' => 'includeNoWork', ]); + $builder->add('view', HiddenType::class); + $builder->add('budgetType', ChoiceType::class, [ 'placeholder' => null, 'required' => false, diff --git a/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php b/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php index 7211e1d9d..47f10d00f 100644 --- a/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php +++ b/src/Reporting/ProjectDateRange/ProjectDateRangeQuery.php @@ -18,6 +18,7 @@ final class ProjectDateRangeQuery private ?Customer $customer = null; private bool $includeNoWork = false; private ?string $budgetType = null; + private ?string $view = '0'; public function __construct(\DateTime $month, private User $user) { @@ -83,4 +84,14 @@ final class ProjectDateRangeQuery { $this->budgetType = $budgetType; } + + public function getView(): ?string + { + return $this->view; + } + + public function setView(?string $view): void + { + $this->view = $view; + } } diff --git a/src/Reporting/ProjectDetails/ProjectDetailsForm.php b/src/Reporting/ProjectDetails/ProjectDetailsForm.php index 2c7027fdf..15f85c44f 100644 --- a/src/Reporting/ProjectDetails/ProjectDetailsForm.php +++ b/src/Reporting/ProjectDetails/ProjectDetailsForm.php @@ -34,7 +34,7 @@ final class ProjectDetailsForm extends AbstractType $builder->addEventListener( FormEvents::PRE_SUBMIT, - function (FormEvent $event) use ($projectOptions) { + function (FormEvent $event) use ($projectOptions): void { $data = $event->getData(); if (isset($data['project']) && !empty($data['project'])) { $projectId = $data['project']; diff --git a/src/Repository/ActivityRepository.php b/src/Repository/ActivityRepository.php index 5e086fc15..68cded8c2 100644 --- a/src/Repository/ActivityRepository.php +++ b/src/Repository/ActivityRepository.php @@ -21,22 +21,21 @@ use App\Repository\Paginator\PaginatorInterface; use App\Repository\Query\ActivityFormTypeQuery; use App\Repository\Query\ActivityQuery; use App\Repository\Query\ActivityQueryHydrate; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use Doctrine\DBAL\ParameterType; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Exception\ORMException; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\QueryBuilder; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class ActivityRepository extends EntityRepository { - use RepositorySearchTrait; - /** * @param int[] $activityIds * @return array @@ -152,8 +151,6 @@ class ActivityRepository extends EntityRepository /** * Returns a query builder that is used for ActivityType and your own 'query_builder' option. - * - * @internal */ public function getQueryBuilderForFormType(ActivityFormTypeQuery $query): QueryBuilder { @@ -330,29 +327,17 @@ class ActivityRepository extends EntityRepository $this->addPermissionCriteria($qb, $query->getCurrentUser(), $query->getTeams(), $query->isGlobalsOnly()); - $this->addSearchTerm($qb, $query); + $configuration = new SearchConfiguration( + ['a.name', 'a.comment', 'a.number'], + ActivityMeta::class, + 'activity' + ); + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); return $qb; } - private function getMetaFieldClass(): string - { - return ActivityMeta::class; - } - - private function getMetaFieldName(): string - { - return 'activity'; - } - - /** - * @return array - */ - private function getSearchableFields(): array - { - return ['a.name', 'a.comment', 'a.number']; - } - /** * @return int<0, max> */ @@ -428,7 +413,7 @@ class ActivityRepository extends EntityRepository $em->remove($delete); $em->flush(); $em->commit(); - } catch (ORMException $ex) { + } catch (\Exception $ex) { $em->rollback(); throw $ex; } diff --git a/src/Repository/ApiUserRepository.php b/src/Repository/ApiUserRepository.php index cb8dab42f..c5f563313 100644 --- a/src/Repository/ApiUserRepository.php +++ b/src/Repository/ApiUserRepository.php @@ -15,12 +15,9 @@ use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface; use Symfony\Component\Security\Core\User\PasswordUpgraderInterface; use Symfony\Component\Security\Core\User\UserInterface; -/** - * @template-implements PasswordUpgraderInterface - */ class ApiUserRepository implements UserLoaderInterface, PasswordUpgraderInterface { - public function __construct(private UserRepository $userRepository) + public function __construct(private readonly UserRepository $userRepository) { } diff --git a/src/Repository/CustomerRateRepository.php b/src/Repository/CustomerRateRepository.php index bc2202a70..a76d8f3bd 100644 --- a/src/Repository/CustomerRateRepository.php +++ b/src/Repository/CustomerRateRepository.php @@ -14,7 +14,7 @@ use App\Entity\CustomerRate; use Doctrine\ORM\EntityRepository; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class CustomerRateRepository extends EntityRepository { diff --git a/src/Repository/CustomerRepository.php b/src/Repository/CustomerRepository.php index 0e99f7258..af37e6087 100644 --- a/src/Repository/CustomerRepository.php +++ b/src/Repository/CustomerRepository.php @@ -21,10 +21,11 @@ use App\Repository\Paginator\PaginatorInterface; use App\Repository\Query\CustomerFormTypeQuery; use App\Repository\Query\CustomerQuery; use App\Repository\Query\CustomerQueryHydrate; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use Doctrine\DBAL\ParameterType; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Exception\ORMException; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\Expr\Andx; @@ -35,8 +36,6 @@ use Doctrine\ORM\QueryBuilder; */ class CustomerRepository extends EntityRepository { - use RepositorySearchTrait; - /** * @param int[] $customerIDs * @return array @@ -134,8 +133,6 @@ class CustomerRepository extends EntityRepository /** * Returns a query builder that is used for CustomerType and your own 'query_builder' option. - * - * @internal */ public function getQueryBuilderForFormType(CustomerFormTypeQuery $query): QueryBuilder { @@ -209,29 +206,17 @@ class CustomerRepository extends EntityRepository $this->addPermissionCriteria($qb, $query->getCurrentUser(), $query->getTeams()); - $this->addSearchTerm($qb, $query); + $configuration = new SearchConfiguration( + ['c.name', 'c.comment', 'c.company', 'c.vatId', 'c.number', 'c.contact', 'c.phone', 'c.email', 'c.address'], + CustomerMeta::class, + 'customer' + ); + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); return $qb; } - private function getMetaFieldClass(): string - { - return CustomerMeta::class; - } - - private function getMetaFieldName(): string - { - return 'customer'; - } - - /** - * @return array - */ - private function getSearchableFields(): array - { - return ['c.name', 'c.comment', 'c.company', 'c.vatId', 'c.number', 'c.contact', 'c.phone', 'c.email', 'c.address']; - } - public function getPagerfantaForQuery(CustomerQuery $query): Pagination { return new Pagination($this->getPaginatorForQuery($query), $query); @@ -348,7 +333,7 @@ class CustomerRepository extends EntityRepository $em->remove($delete); $em->flush(); $em->commit(); - } catch (ORMException $ex) { + } catch (\Exception $ex) { $em->rollback(); throw $ex; } diff --git a/src/Repository/ExportTemplateRepository.php b/src/Repository/ExportTemplateRepository.php new file mode 100644 index 000000000..7f376da1d --- /dev/null +++ b/src/Repository/ExportTemplateRepository.php @@ -0,0 +1,31 @@ + + */ +class ExportTemplateRepository extends EntityRepository +{ + public function saveExportTemplate(ExportTemplate $template): void + { + $this->getEntityManager()->persist($template); + $this->getEntityManager()->flush(); + } + + public function removeExportTemplate(ExportTemplate $template): void + { + $this->getEntityManager()->remove($template); + $this->getEntityManager()->flush(); + } +} diff --git a/src/Repository/InvoiceRepository.php b/src/Repository/InvoiceRepository.php index 2991ad5a2..475b88eca 100644 --- a/src/Repository/InvoiceRepository.php +++ b/src/Repository/InvoiceRepository.php @@ -17,6 +17,8 @@ use App\Entity\User; use App\Repository\Paginator\PaginatorInterface; use App\Repository\Paginator\QueryPaginator; use App\Repository\Query\InvoiceArchiveQuery; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use Doctrine\ORM\EntityRepository; use Doctrine\ORM\Mapping\ClassMetadata; @@ -24,12 +26,10 @@ use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class InvoiceRepository extends EntityRepository { - use RepositorySearchTrait; - public function saveInvoice(Invoice $invoice): void { $entityManager = $this->getEntityManager(); @@ -235,30 +235,19 @@ class InvoiceRepository extends EntityRepository if ($query->hasSearchTerm()) { $qb->leftJoin('i.customer', 'customer'); - $this->addSearchTerm($qb, $query); + + $configuration = new SearchConfiguration( + ['i.comment', 'customer.name', 'customer.company'], + InvoiceMeta::class, + 'invoice' + ); + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); } return $qb; } - private function getMetaFieldClass(): string - { - return InvoiceMeta::class; - } - - private function getMetaFieldName(): string - { - return 'invoice'; - } - - /** - * @return array - */ - private function getSearchableFields(): array - { - return ['i.comment', 'customer.name', 'customer.company']; - } - /** * @return int<0, max> */ diff --git a/src/Repository/InvoiceTemplateRepository.php b/src/Repository/InvoiceTemplateRepository.php index bcb7465c8..c23698042 100644 --- a/src/Repository/InvoiceTemplateRepository.php +++ b/src/Repository/InvoiceTemplateRepository.php @@ -19,7 +19,7 @@ use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class InvoiceTemplateRepository extends EntityRepository { diff --git a/src/Repository/ProjectRateRepository.php b/src/Repository/ProjectRateRepository.php index a7966cee0..bd8ea4ca5 100644 --- a/src/Repository/ProjectRateRepository.php +++ b/src/Repository/ProjectRateRepository.php @@ -14,7 +14,7 @@ use App\Entity\ProjectRate; use Doctrine\ORM\EntityRepository; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class ProjectRateRepository extends EntityRepository { diff --git a/src/Repository/ProjectRepository.php b/src/Repository/ProjectRepository.php index 8c15a7adc..d0017a093 100644 --- a/src/Repository/ProjectRepository.php +++ b/src/Repository/ProjectRepository.php @@ -22,24 +22,23 @@ use App\Repository\Paginator\PaginatorInterface; use App\Repository\Query\ProjectFormTypeQuery; use App\Repository\Query\ProjectQuery; use App\Repository\Query\ProjectQueryHydrate; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use DateTime; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Types\Types; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Exception\ORMException; use Doctrine\ORM\Mapping\ClassMetadata; use Doctrine\ORM\Query; use Doctrine\ORM\Query\Expr\Andx; use Doctrine\ORM\QueryBuilder; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class ProjectRepository extends EntityRepository { - use RepositorySearchTrait; - /** * @param int[] $projectIds * @return array @@ -147,8 +146,6 @@ class ProjectRepository extends EntityRepository /** * Returns a query builder that is used for ProjectType and your own 'query_builder' option. - * - * @internal */ public function getQueryBuilderForFormType(ProjectFormTypeQuery $query): QueryBuilder { @@ -281,29 +278,17 @@ class ProjectRepository extends EntityRepository $this->addPermissionCriteria($qb, $query->getCurrentUser()); - $this->addSearchTerm($qb, $query); + $configuration = new SearchConfiguration( + ['p.name', 'p.comment', 'p.orderNumber', 'p.number'], + ProjectMeta::class, + 'project' + ); + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); return $qb; } - private function getMetaFieldClass(): string - { - return ProjectMeta::class; - } - - private function getMetaFieldName(): string - { - return 'project'; - } - - /** - * @return array - */ - private function getSearchableFields(): array - { - return ['p.name', 'p.comment', 'p.orderNumber', 'p.number']; - } - private function addProjectStartAndEndDate(QueryBuilder $qb, ?DateTime $begin, ?DateTime $end): Andx { $and = $qb->expr()->andX(); @@ -429,7 +414,7 @@ class ProjectRepository extends EntityRepository $em->remove($delete); $em->flush(); $em->commit(); - } catch (ORMException $ex) { + } catch (\Exception $ex) { $em->rollback(); throw $ex; } diff --git a/src/Repository/Query/BaseQuery.php b/src/Repository/Query/BaseQuery.php index f553d3ae1..09b6d6656 100644 --- a/src/Repository/Query/BaseQuery.php +++ b/src/Repository/Query/BaseQuery.php @@ -44,6 +44,10 @@ class BaseQuery * @var array */ private array $orderGroups = []; + /** + * @var array + */ + private array $allowedOrderColumns = []; private ?User $currentUser = null; /** * @var array @@ -320,7 +324,6 @@ class BaseQuery * @template T of BaseQuery * @param T $query * @return T - * @internal */ final public function copyTo(BaseQuery $query): BaseQuery { @@ -428,4 +431,25 @@ class BaseQuery { return $this->isApiCall; } + + /** + * @return string[] + */ + public function getAllowedOrderColumns(): array + { + return $this->allowedOrderColumns; + } + + /** + * @param array $allowedOrderColumns + */ + public function setAllowedOrderColumns(array $allowedOrderColumns): void + { + $this->allowedOrderColumns = $allowedOrderColumns; + } + + public function addAllowedOrderColumns(string $allowedOrderColumn): void + { + $this->allowedOrderColumns[] = $allowedOrderColumn; + } } diff --git a/src/Repository/Query/CustomerQuery.php b/src/Repository/Query/CustomerQuery.php index 5d6620283..d870f3473 100644 --- a/src/Repository/Query/CustomerQuery.php +++ b/src/Repository/Query/CustomerQuery.php @@ -16,14 +16,14 @@ class CustomerQuery extends BaseQuery implements VisibilityInterface public const CUSTOMER_ORDER_ALLOWED = [ 'name', 'description' => 'comment', - 'country', 'number', + 'country', + 'number', 'homepage', 'email', 'mobile', 'fax', 'phone', 'currency', - 'address', 'contact', 'company', 'vat_id', diff --git a/src/Repository/Query/TagQuery.php b/src/Repository/Query/TagQuery.php index 3c520b9ee..9f3426962 100644 --- a/src/Repository/Query/TagQuery.php +++ b/src/Repository/Query/TagQuery.php @@ -9,7 +9,7 @@ namespace App\Repository\Query; -class TagQuery extends BaseQuery +class TagQuery extends BaseQuery implements VisibilityInterface { use VisibilityTrait; diff --git a/src/Repository/Query/TimesheetQuery.php b/src/Repository/Query/TimesheetQuery.php index 0d935c41c..b138e0451 100644 --- a/src/Repository/Query/TimesheetQuery.php +++ b/src/Repository/Query/TimesheetQuery.php @@ -25,7 +25,10 @@ class TimesheetQuery extends ActivityQuery implements BillableInterface, DateRan public const STATE_EXPORTED = 4; public const STATE_NOT_EXPORTED = 5; - public const TIMESHEET_ORDER_ALLOWED = ['begin', 'end', 'duration', 'rate', 'hourlyRate', 'customer', 'project', 'activity', 'description']; + /** + * @deprecated since 2.31.0 + */ + public const TIMESHEET_ORDER_ALLOWED = ['begin', 'end', 'duration', 'rate', 'hourlyRate', 'customer', 'project', 'activity', 'description', 'billable', 'exported']; private ?User $timesheetUser = null; /** @var array */ @@ -33,7 +36,7 @@ class TimesheetQuery extends ActivityQuery implements BillableInterface, DateRan private int $state = self::STATE_ALL; private int $exported = self::STATE_ALL; private ?int $maxResults = null; - private ?\DateTime $modifiedAfter = null; + private ?\DateTimeInterface $modifiedAfter = null; /** * @var array */ @@ -61,6 +64,7 @@ class TimesheetQuery extends ActivityQuery implements BillableInterface, DateRan 'users' => [], 'activities' => [], ]); + $this->setAllowedOrderColumns(self::TIMESHEET_ORDER_ALLOWED); // @phpstan-ignore-line } public function addQueryHint(TimesheetQueryHint $hint): void @@ -240,15 +244,13 @@ class TimesheetQuery extends ActivityQuery implements BillableInterface, DateRan $this->tags[$tag->getId()] = $tag; } - public function getModifiedAfter(): ?\DateTime + public function getModifiedAfter(): ?\DateTimeInterface { return $this->modifiedAfter; } - public function setModifiedAfter(\DateTime $modifiedAfter): TimesheetQuery + public function setModifiedAfter(\DateTimeInterface $modifiedAfter): void { $this->modifiedAfter = $modifiedAfter; - - return $this; } } diff --git a/src/Repository/Query/UserQuery.php b/src/Repository/Query/UserQuery.php index 3ca548ca5..bc42079a8 100644 --- a/src/Repository/Query/UserQuery.php +++ b/src/Repository/Query/UserQuery.php @@ -18,7 +18,7 @@ class UserQuery extends BaseQuery implements VisibilityInterface { use VisibilityTrait; - public const USER_ORDER_ALLOWED = ['username', 'alias', 'title', 'email', 'systemAccount']; + public const USER_ORDER_ALLOWED = ['username', 'alias', 'title', 'email', 'system_account' => 'systemAccount']; private ?string $role = null; /** diff --git a/src/Repository/Query/VisibilityTrait.php b/src/Repository/Query/VisibilityTrait.php index e2f3b9231..1629a48a5 100644 --- a/src/Repository/Query/VisibilityTrait.php +++ b/src/Repository/Query/VisibilityTrait.php @@ -20,10 +20,9 @@ trait VisibilityTrait public function setVisibility(int $visibility): void { - if (!\in_array($visibility, VisibilityInterface::ALLOWED_VISIBILITY_STATES, true)) { - throw new \InvalidArgumentException('Unknown visibility given'); + if (\in_array($visibility, VisibilityInterface::ALLOWED_VISIBILITY_STATES, true)) { + $this->visibility = $visibility; } - $this->visibility = $visibility; } public function isShowHidden(): bool @@ -36,6 +35,9 @@ trait VisibilityTrait return $this->visibility === VisibilityInterface::SHOW_VISIBLE; } + /** + * @deprecated since 2.41 + */ public function setShowBoth(): void { $this->setVisibility(VisibilityInterface::SHOW_BOTH); diff --git a/src/Repository/RepositorySearchTrait.php b/src/Repository/RepositorySearchTrait.php index 947e8e7eb..18706c0c7 100644 --- a/src/Repository/RepositorySearchTrait.php +++ b/src/Repository/RepositorySearchTrait.php @@ -10,20 +10,42 @@ namespace App\Repository; use App\Repository\Query\BaseQuery; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use Doctrine\ORM\QueryBuilder; -trait RepositorySearchTrait +/** + * @deprecated since 2.34.0 use SearchHelper instead + */ +trait RepositorySearchTrait // @phpstan-ignore trait.unused { + /** + * The name of the meta-field class, e.g. ProjectMeta::class. + * Null if entity does not support meta-fields. + */ private function getMetaFieldClass(): ?string { return null; } + /** + * This is the attribute/field name of the parent class within the meta-field class from getMetaFieldClass() + * Null if entity does not support meta-fields. + */ private function getMetaFieldName(): ?string { return null; } + /** + * This is the attribute/field name of meta-field class within the entity + * Null if entity does not support meta-fields. + */ + private function getEntityFieldName(): ?string + { + return 'meta'; + } + /** * @return array */ @@ -32,96 +54,16 @@ trait RepositorySearchTrait return []; } - private function supportsMetaFields(): bool - { - /* @phpstan-ignore-next-line */ - return $this->getMetaFieldClass() !== null && $this->getMetaFieldName() !== null; - } - private function addSearchTerm(QueryBuilder $qb, BaseQuery $query): void { - $searchTerm = $query->getSearchTerm(); + $configuration = new SearchConfiguration( + $this->getSearchableFields(), + $this->getMetaFieldClass(), + $this->getMetaFieldName() + ); + $configuration->setEntityFieldName($this->getEntityFieldName()); - if ($searchTerm === null) { - return; - } - - if (!$this->supportsMetaFields() && !$searchTerm->hasSearchTerm()) { - return; - } - - $aliases = $qb->getRootAliases(); - if (!isset($aliases[0])) { - throw new RepositoryException('No alias was set before invoking addSearchTerm().'); - } - $rootAlias = $aliases[0]; - - $searchAnd = $qb->expr()->andX(); - - if ($this->supportsMetaFields()) { - $i = 0; - $a = 0; - $c = 0; - foreach ($searchTerm->getSearchFields() as $metaName => $metaValue) { - $and = $qb->expr()->andX(); - /** @var non-falsy-string&lowercase-string $alias */ - $alias = 'meta' . $a++; - $paramName = 'metaName' . $i++; - $paramValue = 'metaValue' . $c++; - - if ($metaValue === '*') { - $qb->leftJoin($rootAlias . '.meta', $alias); - $and->add($qb->expr()->eq($alias . '.name', ':' . $paramName)); - $qb->setParameter($paramName, $metaName); - $and->add($qb->expr()->isNotNull($alias . '.value')); - } elseif ($metaValue === '~') { - $and->add( - \sprintf('NOT EXISTS(SELECT metaNotExists FROM %s metaNotExists WHERE metaNotExists.%s = %s.id)', $this->getMetaFieldClass(), $this->getMetaFieldName(), $rootAlias) - ); - } elseif ($metaValue === '' || $metaValue === null) { - $qb->leftJoin($rootAlias . '.meta', $alias); - $and->add( - $qb->expr()->orX( - $qb->expr()->andX( - $qb->expr()->eq($alias . '.name', ':' . $paramName), - $qb->expr()->isNull($alias . '.value') - ), - \sprintf('NOT EXISTS(SELECT metaNotExists FROM %s metaNotExists WHERE metaNotExists.%s = %s.id)', $this->getMetaFieldClass(), $this->getMetaFieldName(), $rootAlias) - ) - ); - $qb->setParameter($paramName, $metaName); - } else { - $qb->leftJoin($rootAlias . '.meta', $alias); - $and->add($qb->expr()->eq($alias . '.name', ':' . $paramName)); - $and->add($qb->expr()->like($alias . '.value', ':' . $paramValue)); - $qb->setParameter($paramName, $metaName); - $qb->setParameter($paramValue, '%' . $metaValue . '%'); - } - - $searchAnd->add($and); - } - } - - $fields = $this->getSearchableFields(); - - if ($searchTerm->hasSearchTerm() && \count($fields) > 0) { - $or = $qb->expr()->orX(); - $i = 0; - foreach ($fields as $field) { - $param = 'searchTerm' . $i++; - if (stripos($field, '.') === false) { - $field = $rootAlias . '.' . $field; - } - $or->add( - $qb->expr()->like($field, ':' . $param), - ); - $qb->setParameter($param, '%' . $searchTerm->getSearchTerm() . '%'); - } - $searchAnd->add($or); - } - - if ($searchAnd->count() > 0) { - $qb->andWhere($searchAnd); - } + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); } } diff --git a/src/Repository/Result/TimesheetResult.php b/src/Repository/Result/TimesheetResult.php index 18208abef..4161c0201 100644 --- a/src/Repository/Result/TimesheetResult.php +++ b/src/Repository/Result/TimesheetResult.php @@ -18,9 +18,6 @@ use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; -/** - * @internal - */ final class TimesheetResult { private ?TimesheetResultStatistic $statisticCache = null; diff --git a/src/Repository/RolePermissionRepository.php b/src/Repository/RolePermissionRepository.php index d3623d2fe..d08f9cc9c 100644 --- a/src/Repository/RolePermissionRepository.php +++ b/src/Repository/RolePermissionRepository.php @@ -14,7 +14,7 @@ use App\Entity\RolePermission; use Doctrine\ORM\EntityRepository; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository */ class RolePermissionRepository extends EntityRepository { diff --git a/src/Repository/RoleRepository.php b/src/Repository/RoleRepository.php index 379b1424a..5a066cb45 100644 --- a/src/Repository/RoleRepository.php +++ b/src/Repository/RoleRepository.php @@ -11,10 +11,9 @@ namespace App\Repository; use App\Entity\Role; use Doctrine\ORM\EntityRepository; -use Doctrine\ORM\Exception\ORMException; /** - * @extends \Doctrine\ORM\EntityRepository + * @extends EntityRepository * @method Role[] findAll() */ class RoleRepository extends EntityRepository @@ -35,7 +34,7 @@ class RoleRepository extends EntityRepository $em->remove($role); $em->flush(); $em->commit(); - } catch (ORMException $ex) { + } catch (\Exception $ex) { $em->rollback(); throw $ex; } diff --git a/src/Repository/Search/SearchConfiguration.php b/src/Repository/Search/SearchConfiguration.php new file mode 100644 index 000000000..f8c0b0d8b --- /dev/null +++ b/src/Repository/Search/SearchConfiguration.php @@ -0,0 +1,66 @@ + $searchableFields + */ + public function __construct( + private readonly array $searchableFields = [], + private readonly ?string $metaFieldClass = null, + private readonly ?string $metaFieldName = null, + ) + { + } + + /** + * The name of the meta-field class, e.g. ProjectMeta::class. + * Null if entity does not support meta-fields. + */ + public function getMetaFieldClass(): ?string + { + return $this->metaFieldClass; + } + + /** + * This is the attribute/field name of the parent class within the meta-field class from getMetaFieldClass() + * Null if entity does not support meta-fields. + */ + public function getMetaFieldName(): ?string + { + return $this->metaFieldName; + } + + public function setEntityFieldName(string $entityFieldName): void + { + $this->entityFieldName = $entityFieldName; + } + + /** + * This is the attribute/field name of meta-field class within the entity + * Null if entity does not support meta-fields. + */ + public function getEntityFieldName(): ?string + { + return $this->entityFieldName; + } + + /** + * @return array + */ + public function getSearchableFields(): array + { + return $this->searchableFields; + } +} diff --git a/src/Repository/Search/SearchConfigurationInterface.php b/src/Repository/Search/SearchConfigurationInterface.php new file mode 100644 index 000000000..0111bfc86 --- /dev/null +++ b/src/Repository/Search/SearchConfigurationInterface.php @@ -0,0 +1,36 @@ + + */ + public function getSearchableFields(): array; +} diff --git a/src/Repository/Search/SearchHelper.php b/src/Repository/Search/SearchHelper.php new file mode 100644 index 000000000..132a7a18e --- /dev/null +++ b/src/Repository/Search/SearchHelper.php @@ -0,0 +1,149 @@ +configuration->getMetaFieldClass() !== null && $this->configuration->getMetaFieldName() !== null && $this->configuration->getEntityFieldName() !== null; + } + + public function addSearchTerm(QueryBuilder $qb, BaseQuery $query): void + { + $searchTerm = $query->getSearchTerm(); + + if ($searchTerm === null) { + return; + } + + if (!$this->supportsMetaFields() && !$searchTerm->hasSearchTerm()) { + return; + } + + $aliases = $qb->getRootAliases(); + if (!isset($aliases[0])) { + throw new RepositoryException('No alias was set before invoking addSearchTerm().'); + } + + $rootAlias = $aliases[0]; + $searchAnd = $qb->expr()->andX(); + $metaFieldClass = $this->configuration->getMetaFieldClass(); + $metaFieldName = $this->configuration->getMetaFieldName(); + + if ($metaFieldClass !== null && $metaFieldName !== null && $this->supportsMetaFields()) { + $metaFieldRef = $rootAlias . '.' . $this->configuration->getEntityFieldName(); + $i = 0; + $c = 0; + $j = 0; + foreach ($searchTerm->getParts() as $part) { + // we do NOT search for unspecific/global terms as of now, because it is not clear if the user wants that + if (($metaName = $part->getField()) === null) { + continue; + } + $alias = 'meta' . $j++; + $qb->leftJoin($metaFieldRef, $alias); + $metaValue = $part->getTerm(); + $paramName = 'metaName' . $i++; + $paramValue = 'metaValue' . $c++; + $subqueryName = 'metaNotExists' . $metaName; + $field = $alias . '.value'; + + $and = $qb->expr()->andX(); + + if ($metaValue === '*') { + $and->add($qb->expr()->eq($alias . '.name', ':' . $paramName)); + $and->add($qb->expr()->isNotNull($field)); + } elseif ($metaValue === '~') { + $and->add( + \sprintf('NOT EXISTS(SELECT %s FROM %s %s WHERE %s.%s = %s.id AND %s.name = :%s)', $subqueryName, $metaFieldClass, $subqueryName, $subqueryName, $metaFieldName, $rootAlias, $subqueryName, $paramName) + ); + } elseif ($metaValue === '') { + $and->add( + $qb->expr()->orX( + $qb->expr()->andX( + $qb->expr()->eq($alias . '.name', ':' . $paramName), + $qb->expr()->isNull($field) + ), + \sprintf('NOT EXISTS(SELECT %s FROM %s %s WHERE %s.%s = %s.id AND %s.name = :%s)', $subqueryName, $metaFieldClass, $subqueryName, $subqueryName, $metaFieldName, $rootAlias, $subqueryName, $paramName) + ) + ); + } else { + $and->add($qb->expr()->eq($alias . '.name', ':' . $paramName)); + if (!$part->isExcluded()) { + $and->add($qb->expr()->like($field, ':' . $paramValue)); + } else { + $and->add( + $qb->expr()->orX()->addMultiple([ + $qb->expr()->isNull($field), + $qb->expr()->notLike($field, ':' . $paramValue), + ]) + ); + } + $qb->setParameter($paramValue, '%' . $metaValue . '%'); + } + + $qb->setParameter($paramName, $metaName); + + $searchAnd->add($and); + } + } + + if ($searchTerm->hasSearchTerm()) { + $i = 0; + $fields = $this->configuration->getSearchableFields(); + $and = $qb->expr()->andX(); + foreach ($searchTerm->getParts() as $part) { + // currently only meta fields have a name, so we do not use them here + if ($part->getField() !== null) { + continue; + } + $or = $qb->expr()->orX(); + foreach ($fields as $field) { + if (stripos($field, '.') === false) { + $field = $rootAlias . '.' . $field; + } + $param = 'searchTerm' . $i++; + if ($part->isExcluded()) { + $searchAnd->add( + $qb->expr()->orX()->addMultiple([ + $qb->expr()->isNull($field), + $qb->expr()->notLike($field, ':' . $param), + ]) + ); + } else { + $or->add( + $qb->expr()->like($field, ':' . $param), + ); + } + $qb->setParameter($param, '%' . $part->getTerm() . '%'); + } + if ($or->count() > 0) { + $and->add($or); + } + } + if ($and->count() > 0) { + $searchAnd->add($and); + } + } + + if ($searchAnd->count() > 0) { + $qb->andWhere($searchAnd); + } + } +} diff --git a/src/Repository/TagRepository.php b/src/Repository/TagRepository.php index 44d03f5b9..e2b13f5b8 100644 --- a/src/Repository/TagRepository.php +++ b/src/Repository/TagRepository.php @@ -14,6 +14,8 @@ use App\Entity\Timesheet; use App\Repository\Paginator\QueryPaginator; use App\Repository\Query\TagFormTypeQuery; use App\Repository\Query\TagQuery; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use Doctrine\DBAL\ParameterType; use Doctrine\ORM\EntityRepository; @@ -155,22 +157,9 @@ class TagRepository extends EntityRepository $qb->addOrderBy($orderBy, $query->getOrder()); - $searchTerm = $query->getSearchTerm(); - if ($searchTerm !== null) { - $searchAnd = $qb->expr()->andX(); - - if ($searchTerm->hasSearchTerm()) { - $searchAnd->add( - $qb->expr()->orX( - $qb->expr()->like('tag.name', ':searchTerm') - ) - ); - $qb->setParameter('searchTerm', '%' . $searchTerm->getSearchTerm() . '%'); - } - - if ($searchAnd->count() > 0) { - $qb->andWhere($searchAnd); - } + if ($query->hasSearchTerm()) { + $helper = new SearchHelper(new SearchConfiguration(['tag.name'])); + $helper->addSearchTerm($qb, $query); } return $qb; diff --git a/src/Repository/TimesheetRepository.php b/src/Repository/TimesheetRepository.php index 614711d5e..35e7e1ae2 100644 --- a/src/Repository/TimesheetRepository.php +++ b/src/Repository/TimesheetRepository.php @@ -26,6 +26,8 @@ use App\Repository\Paginator\PaginatorInterface; use App\Repository\Query\TimesheetQuery; use App\Repository\Query\TimesheetQueryHint; use App\Repository\Result\TimesheetResult; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use DateInterval; use DateTime; @@ -43,8 +45,6 @@ use InvalidArgumentException; */ class TimesheetRepository extends EntityRepository { - use RepositorySearchTrait; - /** @deprecated since 2.0.35 */ public const STATS_QUERY_DURATION = 'duration'; /** @deprecated since 2.0.35 */ @@ -605,7 +605,13 @@ class TimesheetRepository extends EntityRepository $requiresTeams = $this->addPermissionCriteria($qb, $query->getCurrentUser(), $query->getTeams()); - $this->addSearchTerm($qb, $query); + $configuration = new SearchConfiguration( + ['t.description'], + TimesheetMeta::class, + 'timesheet' + ); + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); if ($requiresCustomer || $requiresProject || $requiresTeams) { $qb->leftJoin('t.project', 'p'); @@ -626,24 +632,6 @@ class TimesheetRepository extends EntityRepository return $qb; } - private function getMetaFieldClass(): string - { - return TimesheetMeta::class; - } - - private function getMetaFieldName(): string - { - return 'timesheet'; - } - - /** - * @return array - */ - private function getSearchableFields(): array - { - return ['t.description']; - } - /** * @return Timesheet[] */ @@ -689,11 +677,6 @@ class TimesheetRepository extends EntityRepository ->setParameter('begin', \DateTimeImmutable::createFromInterface($startFrom), Types::DATETIME_IMMUTABLE); } - $qb->join('t.project', 'p'); - $qb->join('p.customer', 'c'); - - $this->addPermissionCriteria($qb, $user); - $results = $qb->getQuery()->getScalarResult(); if (empty($results)) { diff --git a/src/Repository/UserRepository.php b/src/Repository/UserRepository.php index 18564cc1d..71e6219d6 100644 --- a/src/Repository/UserRepository.php +++ b/src/Repository/UserRepository.php @@ -20,6 +20,8 @@ use App\Repository\Paginator\PaginatorInterface; use App\Repository\Query\UserFormTypeQuery; use App\Repository\Query\UserQuery; use App\Repository\Query\VisibilityInterface; +use App\Repository\Search\SearchConfiguration; +use App\Repository\Search\SearchHelper; use App\Utils\Pagination; use Doctrine\DBAL\ParameterType; use Doctrine\DBAL\Types\Types; @@ -35,7 +37,6 @@ use Symfony\Component\Security\Core\User\UserProviderInterface; /** * @extends EntityRepository - * @template-implements PasswordUpgraderInterface * @template-implements UserProviderInterface */ class UserRepository extends EntityRepository implements UserLoaderInterface, UserProviderInterface, PasswordUpgraderInterface @@ -115,7 +116,7 @@ class UserRepository extends EntityRepository implements UserLoaderInterface, Us * Overwritten to fetch preferences when using the Profile controller actions. * Depends on the query, some magic mechanisms like the ParamConverter will use this method to fetch the user. */ - public function findOneBy(array $criteria, array $orderBy = null): ?object + public function findOneBy(array $criteria, ?array $orderBy = null): ?object { if (\count($criteria) === 1 && isset($criteria['username']) && \is_string($criteria['username'])) { return $this->loadUserByIdentifier($criteria['username']); @@ -169,6 +170,9 @@ class UserRepository extends EntityRepository implements UserLoaderInterface, Us public function refreshUser(UserInterface $user): User { + // TODO 3.0 add a last_updated field to user and ONLY load this for comparison. + // TODO then only execute the below code if last_updated != session.last_updated + return $this->loadUserByIdentifier($user->getUserIdentifier()); } @@ -321,39 +325,14 @@ class UserRepository extends EntityRepository implements UserLoaderInterface, Us $qb->setParameter('system', $query->getSystemAccount(), Types::BOOLEAN); } - $searchTerm = $query->getSearchTerm(); - if ($searchTerm !== null) { - $searchAnd = $qb->expr()->andX(); - - foreach ($searchTerm->getSearchFields() as $metaName => $metaValue) { - $qb->leftJoin('u.preferences', 'meta'); - $searchAnd->add( - $qb->expr()->andX( - $qb->expr()->eq('meta.name', ':metaName'), - $qb->expr()->like('meta.value', ':metaValue') - ) - ); - $qb->setParameter('metaName', $metaName); - $qb->setParameter('metaValue', '%' . $metaValue . '%'); - } - - if ($searchTerm->hasSearchTerm()) { - $searchAnd->add( - $qb->expr()->orX( - $qb->expr()->like('u.alias', ':searchTerm'), - $qb->expr()->like('u.title', ':searchTerm'), - $qb->expr()->like('u.accountNumber', ':searchTerm'), - $qb->expr()->like('u.email', ':searchTerm'), - $qb->expr()->like('u.username', ':searchTerm') - ) - ); - $qb->setParameter('searchTerm', '%' . $searchTerm->getSearchTerm() . '%'); - } - - if ($searchAnd->count() > 0) { - $qb->andWhere($searchAnd); - } - } + $configuration = new SearchConfiguration( + ['u.alias', 'u.title', 'u.accountNumber', 'u.email', 'u.username'], + UserPreference::class, + 'user' + ); + $configuration->setEntityFieldName('preferences'); + $helper = new SearchHelper($configuration); + $helper->addSearchTerm($qb, $query); return $qb; } diff --git a/src/Repository/WorkingTimeRepository.php b/src/Repository/WorkingTimeRepository.php index 4f4031f3d..57495bb19 100644 --- a/src/Repository/WorkingTimeRepository.php +++ b/src/Repository/WorkingTimeRepository.php @@ -21,18 +21,10 @@ class WorkingTimeRepository extends EntityRepository { private bool $pendingUpdate = false; - public function deleteWorkingTime(WorkingTime $workingTime): void + public function scheduleWorkingTimeDelete(WorkingTime $workingTime): void { - $entityManager = $this->getEntityManager(); - $entityManager->remove($workingTime); - $entityManager->flush(); - } - - public function saveWorkingTime(WorkingTime $workingTime): void - { - $entityManager = $this->getEntityManager(); - $entityManager->persist($workingTime); - $entityManager->flush(); + $this->pendingUpdate = true; + $this->getEntityManager()->remove($workingTime); } public function scheduleWorkingTimeUpdate(WorkingTime $workingTime): void diff --git a/src/Saml/SamlAuthenticator.php b/src/Saml/SamlAuthenticator.php index 45bb76741..a41e86730 100644 --- a/src/Saml/SamlAuthenticator.php +++ b/src/Saml/SamlAuthenticator.php @@ -12,6 +12,7 @@ namespace App\Saml; use App\Configuration\SamlConfigurationInterface; use App\Saml\Security\SamlAuthenticationFailureHandler; use App\Saml\Security\SamlAuthenticationSuccessHandler; +use Psr\Log\LoggerInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; @@ -40,7 +41,8 @@ class SamlAuthenticator extends AbstractAuthenticator private readonly SamlAuthenticationFailureHandler $failureHandler, private readonly SamlAuthFactory $samlAuthFactory, private readonly SamlProvider $samlProvider, - private readonly SamlConfigurationInterface $configuration + private readonly SamlConfigurationInterface $configuration, + private readonly LoggerInterface $logger ) { } @@ -86,6 +88,7 @@ class SamlAuthenticator extends AbstractAuthenticator // file_put_contents(__DIR__ . '/../../var/log/saml.xml', $oneLoginAuth->getLastResponseXML()); if (\count($oneLoginAuth->getErrors()) > 0) { + $this->logger->critical('SAML login failed: ' . $oneLoginAuth->getLastErrorReason()); throw new AuthenticationException($oneLoginAuth->getLastErrorReason()); } @@ -102,7 +105,9 @@ class SamlAuthenticator extends AbstractAuthenticator if (isset($this->options['username_attribute'])) { if (!\array_key_exists($this->options['username_attribute'], $attributes)) { - throw new \Exception(\sprintf("Attribute '%s' not found in SAML data", $this->options['username_attribute'])); + $errorMessage = \sprintf("Attribute '%s' not found in SAML data", $this->options['username_attribute']); + $this->logger->critical($errorMessage); + throw new \Exception($errorMessage); } $username = $attributes[$this->options['username_attribute']][0]; diff --git a/src/Saml/SamlProvider.php b/src/Saml/SamlProvider.php index 545978897..7cee3b525 100644 --- a/src/Saml/SamlProvider.php +++ b/src/Saml/SamlProvider.php @@ -54,7 +54,7 @@ final class SamlProvider } catch (\Exception $ex) { $this->logger->error($ex->getMessage()); throw new AuthenticationException( - \sprintf('Failed creating or hydrating user "%s": %s', $token->getUserIdentifier(), $ex->getMessage()) + \sprintf('Failed creating or hydrating user "%s": %s', $token->getUserIdentifier() ?? '*unknown*', $ex->getMessage()) ); } @@ -97,6 +97,9 @@ final class SamlProvider $field = $mapping['kimai']; $attribute = $mapping['saml']; $value = $this->getPropertyValue($token, $attribute); + if ($value === null) { + continue; + } $setter = 'set' . ucfirst($field); if (method_exists($user, $setter)) { $user->$setter($value); @@ -117,7 +120,7 @@ final class SamlProvider $user->setAuth(User::AUTH_SAML); } - private function getPropertyValue(SamlLoginAttributes $token, $attribute): string + private function getPropertyValue(SamlLoginAttributes $token, $attribute): ?string { $results = []; $attributes = $token->getAttributes(); @@ -129,11 +132,16 @@ final class SamlProvider } if ($part[0] === '$') { $key = substr($part, 1); - if (!\array_key_exists($key, $attributes)) { + $optional = false; + if ($key[0] === '$') { + $key = substr($key, 1); + $optional = true; + } + if (!$optional && !\array_key_exists($key, $attributes)) { throw new \RuntimeException('Missing SAML attribute in response: ' . $key); } - if (\is_array($attributes[$key]) && isset($attributes[$key][0])) { + if (\array_key_exists($key, $attributes) && \is_array($attributes[$key]) && isset($attributes[$key][0])) { $results[] = $attributes[$key][0]; } } else { @@ -145,6 +153,6 @@ final class SamlProvider return implode(' ', $results); } - return $attribute; + return null; } } diff --git a/src/Saml/Security/SamlAuthenticationSuccessHandler.php b/src/Saml/Security/SamlAuthenticationSuccessHandler.php index 0874a211d..4cd6101c0 100644 --- a/src/Saml/Security/SamlAuthenticationSuccessHandler.php +++ b/src/Saml/Security/SamlAuthenticationSuccessHandler.php @@ -24,7 +24,7 @@ final class SamlAuthenticationSuccessHandler extends DefaultAuthenticationSucces protected function determineTargetUrl(Request $request): string { - $relayState = $request->get('RelayState'); + $relayState = $request->request->get('RelayState', $request->query->get('RelayState')); if (\is_scalar($relayState)) { $relayState = (string) $relayState; if ($relayState !== $this->httpUtils->generateUri($request, (string) $this->options['login_path'])) { diff --git a/src/Security/KimaiUserProvider.php b/src/Security/KimaiUserProvider.php index 3f292c5f8..f0a672f98 100644 --- a/src/Security/KimaiUserProvider.php +++ b/src/Security/KimaiUserProvider.php @@ -19,7 +19,6 @@ use Symfony\Component\Security\Core\User\UserInterface; use Symfony\Component\Security\Core\User\UserProviderInterface; /** - * @template-implements PasswordUpgraderInterface * @template-implements UserProviderInterface */ final class KimaiUserProvider implements UserProviderInterface, PasswordUpgraderInterface @@ -29,7 +28,7 @@ final class KimaiUserProvider implements UserProviderInterface, PasswordUpgrader /** * @param iterable> $providers */ - public function __construct(private iterable $providers, private SystemConfiguration $configuration) + public function __construct(private readonly iterable $providers, private readonly SystemConfiguration $configuration) { } diff --git a/src/Timesheet/Calculator/RateCalculator.php b/src/Timesheet/Calculator/RateCalculator.php index 1b4e28173..ba0ee3305 100644 --- a/src/Timesheet/Calculator/RateCalculator.php +++ b/src/Timesheet/Calculator/RateCalculator.php @@ -18,7 +18,7 @@ use App\Timesheet\RateServiceInterface; */ final class RateCalculator implements CalculatorInterface { - public function __construct(private RateServiceInterface $service) + public function __construct(private readonly RateServiceInterface $service) { } diff --git a/src/Timesheet/DateTimeFactory.php b/src/Timesheet/DateTimeFactory.php index ce24e02e4..068ac843e 100644 --- a/src/Timesheet/DateTimeFactory.php +++ b/src/Timesheet/DateTimeFactory.php @@ -48,8 +48,14 @@ final class DateTimeFactory return $date; } + /** + * @deprecated + * @codeCoverageIgnore + */ public function getStartOfLastMonth(): DateTimeInterface { + @trigger_error('The method "DateTimeFactory::getStartOfLastMonth()" will be removed soon', E_USER_DEPRECATED); + $date = $this->createDateTime('first day of -1 month'); $date = $date->setTime(0, 0, 0); @@ -66,7 +72,24 @@ final class DateTimeFactory return $this->createDateTime($date); } - return DateTime::createFromInterface($date); + return $this->createDateTime($date->format('Y-m-d H:i:s')); + } + + /** + * @deprecated + * @codeCoverageIgnore + */ + private function createDate(DateTimeInterface|string|null $date = null): \DateTimeImmutable + { + if ($date === null) { + $date = 'now'; + } + + if (\is_string($date)) { + return $this->create($date); + } + + return $this->create($date->format('Y-m-d H:i:s')); } public function getStartOfWeek(DateTimeInterface|string|null $date = null): DateTime @@ -112,8 +135,14 @@ final class DateTimeFactory return $date; } + /** + * @deprecated + * @codeCoverageIgnore + */ public function getEndOfLastMonth(): DateTimeInterface { + @trigger_error('The method "DateTimeFactory::getEndOfLastMonth()" will be removed soon', E_USER_DEPRECATED); + $date = $this->createDateTime('last day of -1 month'); $date = $date->setTime(23, 59, 59); @@ -154,11 +183,32 @@ final class DateTimeFactory } /** - * @param string $format - * @param null|string $datetime - * @return bool|DateTime + * @deprecated + * @codeCoverageIgnore */ - public function createDateTimeFromFormat(string $format, ?string $datetime = 'now'): bool|DateTime + public function createStartOfDay(DateTimeInterface|string|null $date = null): \DateTimeImmutable + { + @trigger_error('The method "DateTimeFactory::createStartOfDay()" will be removed soon', E_USER_DEPRECATED); + + $date = $this->createDate($date); + + return $date->modify('00:00:00'); + } + + /** + * @deprecated + * @codeCoverageIgnore + */ + public function createEndOfDay(DateTimeInterface|string|null $date = null): \DateTimeImmutable + { + @trigger_error('The method "DateTimeFactory::createEndOfDay()" will be removed soon', E_USER_DEPRECATED); + + $date = $this->createDate($date); + + return $date->modify('23:59:59'); + } + + public function createDateTimeFromFormat(string $format, ?string $datetime = 'now'): false|DateTime { return DateTime::createFromFormat($format, $datetime ?? 'now', $this->getTimezone()); } diff --git a/src/Timesheet/LockdownService.php b/src/Timesheet/LockdownService.php index a8ba8d8e4..db6971834 100644 --- a/src/Timesheet/LockdownService.php +++ b/src/Timesheet/LockdownService.php @@ -17,7 +17,7 @@ final class LockdownService { private ?bool $isActive = null; - public function __construct(private SystemConfiguration $configuration) + public function __construct(private readonly SystemConfiguration $configuration) { } @@ -225,7 +225,7 @@ final class LockdownService return true; } - // further validate entries inside of the most recent lockdown + // further validate entries inside the most recent lockdown if ($timesheetStart >= $lockdownStart) { // if grace period is still in effect, validation succeeds if ($now <= $lockdownGrace) { diff --git a/src/Timesheet/RateCalculator/ClassicRateCalculator.php b/src/Timesheet/RateCalculator/ClassicRateCalculator.php new file mode 100644 index 000000000..e1108f1b1 --- /dev/null +++ b/src/Timesheet/RateCalculator/ClassicRateCalculator.php @@ -0,0 +1,31 @@ +configuration->find('invoice.rounding_mode') === 'decimal') { + return new DecimalRateCalculator(); + } + + return new ClassicRateCalculator(); + } +} diff --git a/src/Timesheet/RateCalculator/RateCalculatorMode.php b/src/Timesheet/RateCalculator/RateCalculatorMode.php new file mode 100644 index 000000000..e15bb0d1f --- /dev/null +++ b/src/Timesheet/RateCalculator/RateCalculatorMode.php @@ -0,0 +1,23 @@ +getDuration()) { - $totalRate = Util::calculateRate($factoredHourlyRate, $record->getDuration()); - $totalInternalRate = Util::calculateRate($factoredInternalRate, $record->getDuration()); + $totalRate = $this->calculatorMode->calculateRate($factoredHourlyRate, $record->getDuration()); + $totalInternalRate = $this->calculatorMode->calculateRate($factoredInternalRate, $record->getDuration()); } return new Rate($totalRate, $totalInternalRate, $factoredHourlyRate, null); diff --git a/src/Timesheet/Rounding/DefaultRounding.php b/src/Timesheet/Rounding/DefaultRounding.php index 022fa18fa..572785c47 100644 --- a/src/Timesheet/Rounding/DefaultRounding.php +++ b/src/Timesheet/Rounding/DefaultRounding.php @@ -24,6 +24,10 @@ final class DefaultRounding implements RoundingInterface return; } + if ($record->getBegin() === null) { + return; + } + $timestamp = $record->getBegin()->getTimestamp(); $seconds = $minutes * 60; $diff = $timestamp % $seconds; @@ -43,6 +47,10 @@ final class DefaultRounding implements RoundingInterface return; } + if ($record->getEnd() === null) { + return; + } + $timestamp = $record->getEnd()->getTimestamp(); $seconds = $minutes * 60; $diff = $timestamp % $seconds; diff --git a/src/Timesheet/RoundingService.php b/src/Timesheet/RoundingService.php index 914776e0c..c9037881e 100644 --- a/src/Timesheet/RoundingService.php +++ b/src/Timesheet/RoundingService.php @@ -73,12 +73,12 @@ final class RoundingService public function roundBegin(Timesheet $record): void { - foreach ($this->getRoundingRules() as $rounding) { - if ($record->getBegin() === null) { - continue; - } - $weekday = $record->getBegin()->format('l'); + if ($record->getBegin() === null) { + return; + } + $weekday = $record->getBegin()->format('l'); + foreach ($this->getRoundingRules() as $rounding) { if (\in_array(strtolower($weekday), $rounding['days'], true)) { $rounder = $this->getRoundingMode($rounding['mode']); $rounder->roundBegin($record, $rounding['begin']); @@ -88,12 +88,12 @@ final class RoundingService public function roundEnd(Timesheet $record): void { - foreach ($this->getRoundingRules() as $rounding) { - if ($record->getEnd() === null) { - continue; - } - $weekday = $record->getEnd()->format('l'); + if ($record->getEnd() === null) { + return; + } + $weekday = $record->getEnd()->format('l'); + foreach ($this->getRoundingRules() as $rounding) { if (\in_array(strtolower($weekday), $rounding['days'], true)) { $rounder = $this->getRoundingMode($rounding['mode']); $rounder->roundEnd($record, $rounding['end']); @@ -103,12 +103,12 @@ final class RoundingService public function roundDuration(Timesheet $record): void { - foreach ($this->getRoundingRules() as $rounding) { - if ($record->getEnd() === null) { - continue; - } - $weekday = $record->getEnd()->format('l'); + if ($record->getEnd() === null) { + return; + } + $weekday = $record->getEnd()->format('l'); + foreach ($this->getRoundingRules() as $rounding) { if (\in_array(strtolower($weekday), $rounding['days'], true)) { $rounder = $this->getRoundingMode($rounding['mode']); $rounder->roundDuration($record, $rounding['duration']); @@ -118,16 +118,12 @@ final class RoundingService public function applyRoundings(Timesheet $record): void { - if (null === $record->getEnd()) { + if ($record->getEnd() === null) { return; } + $weekday = $record->getEnd()->format('l'); foreach ($this->getRoundingRules() as $rounding) { - if ($record->getEnd() === null) { - continue; - } - $weekday = $record->getEnd()->format('l'); - if (\in_array(strtolower($weekday), $rounding['days'], true)) { $rounder = $this->getRoundingMode($rounding['mode']); $rounder->roundBegin($record, $rounding['begin']); diff --git a/src/Timesheet/TimesheetService.php b/src/Timesheet/TimesheetService.php index 6a8ef9ecf..ae0707cc5 100644 --- a/src/Timesheet/TimesheetService.php +++ b/src/Timesheet/TimesheetService.php @@ -45,12 +45,12 @@ final class TimesheetService private array $doNotValidateCodes = []; public function __construct( - private SystemConfiguration $configuration, - private TimesheetRepository $repository, - private TrackingModeService $trackingModeService, - private EventDispatcherInterface $dispatcher, - private AuthorizationCheckerInterface $auth, - private ValidatorInterface $validator + private readonly SystemConfiguration $configuration, + private readonly TimesheetRepository $repository, + private readonly TrackingModeService $trackingModeService, + private readonly EventDispatcherInterface $dispatcher, + private readonly AuthorizationCheckerInterface $auth, + private readonly ValidatorInterface $validator ) { } @@ -101,7 +101,7 @@ final class TimesheetService public function restartTimesheet(Timesheet $timesheet, Timesheet $copyFrom): Timesheet { $this->dispatcher->dispatch(new TimesheetRestartPreEvent($timesheet, $copyFrom)); - $this->saveNewTimesheet($timesheet); + $this->saveNewTimesheet($timesheet); // @phpstan-ignore method.deprecated $this->dispatcher->dispatch(new TimesheetRestartPostEvent($timesheet, $copyFrom)); return $timesheet; @@ -111,6 +111,7 @@ final class TimesheetService * @throws ValidationFailedException for invalid timesheets or running timesheets that should be stopped * @throws InvalidArgumentException for already persisted timesheets * @throws AccessDeniedException if user is not allowed to start timesheet + * @deprecated since 2.36.0 - use saveTimesheet() instead */ public function saveNewTimesheet(Timesheet $timesheet): Timesheet { @@ -150,12 +151,19 @@ final class TimesheetService return $timesheet; } + public function saveTimesheet(Timesheet $timesheet): Timesheet + { + if ($timesheet->getId() === null) { + return $this->saveNewTimesheet($timesheet); // @phpstan-ignore method.deprecated + } else { + return $this->updateTimesheet($timesheet); // @phpstan-ignore method.deprecated + } + } + /** - * Does NOT validate the given timesheet! + * Does NOT validate the given timesheet. * - * @param Timesheet $timesheet - * @return Timesheet - * @throws \Exception + * @deprecated since 2.36.0 - use saveTimesheet() instead */ public function updateTimesheet(Timesheet $timesheet): Timesheet { @@ -245,7 +253,7 @@ final class TimesheetService continue; } - throw new ValidationFailedException($errors, 'Validation Failed'); + throw new ValidationFailedException($errors); } } } diff --git a/src/Timesheet/TrackingMode/AbstractTrackingMode.php b/src/Timesheet/TrackingMode/AbstractTrackingMode.php index a2ae3a6eb..f29864bfe 100644 --- a/src/Timesheet/TrackingMode/AbstractTrackingMode.php +++ b/src/Timesheet/TrackingMode/AbstractTrackingMode.php @@ -27,9 +27,9 @@ abstract class AbstractTrackingMode implements TrackingModeInterface $this->setFromToFromRequest($timesheet, $request); } - protected function setBeginEndFromRequest(Timesheet $entry, Request $request) + protected function setBeginEndFromRequest(Timesheet $entry, Request $request): void { - $start = $request->get('begin'); + $start = $request->query->get('begin'); if (null === $start) { return; } @@ -42,7 +42,7 @@ abstract class AbstractTrackingMode implements TrackingModeInterface $entry->setBegin($start); // only check for an end date if a begin date was given - $end = $request->get('end'); + $end = $request->query->get('end'); if (null === $end) { return; } @@ -59,33 +59,33 @@ abstract class AbstractTrackingMode implements TrackingModeInterface $entry->setDuration($end->getTimestamp() - $start->getTimestamp()); } - protected function setFromToFromRequest(Timesheet $entry, Request $request) + protected function setFromToFromRequest(Timesheet $entry, Request $request): void { - $from = $request->get('from'); - if (null === $from) { + $from = $request->query->get('from'); + if (!\is_string($from)) { return; } try { $from = new DateTime($from, $this->getTimezone($entry)); + $entry->setBegin($from); } catch (\Exception $ex) { return; } - $entry->setBegin($from); - - $to = $request->get('to'); - if (null === $to) { + // only check for an end date if a valid begin date was given + $to = $request->query->get('to'); + if (!\is_string($to)) { return; } try { $to = new DateTime($to, $this->getTimezone($entry)); + $entry->setEnd($to); } catch (\Exception $ex) { return; } - $entry->setEnd($to); $entry->setDuration($to->getTimestamp() - $from->getTimestamp()); } } diff --git a/src/Timesheet/Util.php b/src/Timesheet/Util.php index 663d59973..d8564cb64 100644 --- a/src/Timesheet/Util.php +++ b/src/Timesheet/Util.php @@ -10,7 +10,7 @@ namespace App\Timesheet; /** - * A static helper class for re-usable functionality. + * @deprecated use RateCalculatorMode instead */ final class Util { @@ -23,8 +23,18 @@ final class Util */ public static function calculateRate(float $hourlyRate, int $seconds): float { - $rate = $hourlyRate * ($seconds / 3600); + $rate = $hourlyRate * round(($seconds / 3600), 2, PHP_ROUND_HALF_UP); - return round($rate, 4); + return round($rate, 2, PHP_ROUND_HALF_UP); + } + + /** + * Makes sure that the duration is full compatible with decimal format, stripping away overflowing seconds. + */ + public static function decimalizeDuration(int $seconds): int + { + $decimal = round(($seconds / 3600), 2, PHP_ROUND_HALF_UP); + + return (int) round(($decimal * 3600), 0, PHP_ROUND_HALF_UP); } } diff --git a/src/Twig/LocaleFormatExtensions.php b/src/Twig/LocaleFormatExtensions.php index 3b30d18d7..ce2de883a 100644 --- a/src/Twig/LocaleFormatExtensions.php +++ b/src/Twig/LocaleFormatExtensions.php @@ -191,6 +191,7 @@ final class LocaleFormatExtensions extends AbstractExtension implements LocaleAw $admin = false; $superAdmin = false; $timezone = date_default_timezone_get(); + $roles = []; if ($user !== null) { $browserTitle = (bool) $user->getPreferenceValue('update_browser_title'); @@ -200,6 +201,7 @@ final class LocaleFormatExtensions extends AbstractExtension implements LocaleAw $admin = $user->isAdmin(); $superAdmin = $user->isSuperAdmin(); $timezone = $user->getTimezone(); + $roles = $user->getRoles(); } $language ??= $this->locale ?? User::DEFAULT_LANGUAGE; @@ -213,7 +215,7 @@ final class LocaleFormatExtensions extends AbstractExtension implements LocaleAw 'twentyFourHours' => $this->localeService->is24Hour($this->locale), 'updateBrowserTitle' => $browserTitle, 'timezone' => $timezone, - 'user' => ['id' => $id, 'name' => $name, 'admin' => $admin, 'superAdmin' => $superAdmin], + 'user' => ['id' => $id, 'name' => $name, 'admin' => $admin, 'superAdmin' => $superAdmin, 'roles' => $roles], ]; } diff --git a/src/Twig/Runtime/ThemeExtension.php b/src/Twig/Runtime/ThemeExtension.php index fb64360f8..27a7c79aa 100644 --- a/src/Twig/Runtime/ThemeExtension.php +++ b/src/Twig/Runtime/ThemeExtension.php @@ -17,33 +17,31 @@ use App\Event\ThemeEvent; use App\Event\ThemeJavascriptTranslationsEvent; use App\Utils\Color; use Symfony\Bundle\SecurityBundle\Security; -use Symfony\Component\EventDispatcher\EventDispatcherInterface; +use Symfony\Contracts\EventDispatcher\EventDispatcherInterface; use Symfony\Contracts\Translation\TranslatorInterface; use Twig\Environment; use Twig\Extension\RuntimeExtensionInterface; final class ThemeExtension implements RuntimeExtensionInterface { - public function __construct(private EventDispatcherInterface $eventDispatcher, private TranslatorInterface $translator, private SystemConfiguration $configuration, private Security $security) + public function __construct( + private readonly EventDispatcherInterface $eventDispatcher, + private readonly TranslatorInterface $translator, + private readonly SystemConfiguration $configuration, + private readonly Security $security + ) { } /** - * @param Environment $environment - * @param string $eventName * @param array $payload - * @return ThemeEvent */ public function trigger(Environment $environment, string $eventName, array $payload = []): ThemeEvent { /** @var User $user */ $user = $this->security->getUser(); - $themeEvent = new ThemeEvent($user, $payload); - - if ($this->eventDispatcher->hasListeners($eventName)) { - $this->eventDispatcher->dispatch($themeEvent, $eventName); - } + $this->eventDispatcher->dispatch($themeEvent, $eventName); return $themeEvent; } @@ -51,22 +49,19 @@ final class ThemeExtension implements RuntimeExtensionInterface public function actions(User $user, string $action, string $view, array $payload = []): ThemeEvent { $themeEvent = new PageActionsEvent($user, $payload, $action, $view); - - if ($this->eventDispatcher->hasListeners($themeEvent->getEventName())) { - $this->eventDispatcher->dispatch($themeEvent, $themeEvent->getEventName()); - } + $this->eventDispatcher->dispatch($themeEvent, $themeEvent->getEventName()); return $themeEvent; } public function getJavascriptTranslations(): array { - $event = new ThemeJavascriptTranslationsEvent(); + $event = new ThemeJavascriptTranslationsEvent(); // @phpstan-ignore new.deprecatedClass $this->eventDispatcher->dispatch($event); $all = []; - foreach ($event->getTranslations() as $key => $translation) { + foreach ($event->getTranslations() as $key => $translation) { // @phpstan-ignore method.deprecatedClass $all[$key] = $this->translator->trans($translation[0], [], $translation[1]); } @@ -95,9 +90,9 @@ final class ThemeExtension implements RuntimeExtensionInterface return $class; } - public function generateTitle(?string $prefix = null, string $delimiter = ' – '): string + public function generateTitle(): string { - return ($prefix ?? '') . Constants::SOFTWARE . $delimiter . $this->translator->trans('time_tracking', [], 'messages'); + return Constants::SOFTWARE; } public function colorize(?string $color, ?string $identifier = null): string diff --git a/src/Twig/RuntimeExtensions.php b/src/Twig/RuntimeExtensions.php index ac22b83e6..210ce47b7 100644 --- a/src/Twig/RuntimeExtensions.php +++ b/src/Twig/RuntimeExtensions.php @@ -46,7 +46,7 @@ final class RuntimeExtensions extends AbstractExtension public function getFilters(): array { return [ - new TwigFilter('md2html', [MarkdownExtension::class, 'markdownToHtml'], ['pre_escape' => 'html', 'is_safe' => ['html']]), + new TwigFilter('md2html', [MarkdownExtension::class, 'markdownToHtml'], ['is_safe' => ['html']]), new TwigFilter('desc2html', [MarkdownExtension::class, 'timesheetContent'], ['is_safe' => ['html']]), new TwigFilter('comment2html', [MarkdownExtension::class, 'commentContent'], ['is_safe' => ['html']]), new TwigFilter('comment1line', [MarkdownExtension::class, 'commentOneLiner'], ['pre_escape' => 'html', 'is_safe' => ['html']]), diff --git a/src/Twig/SecurityPolicy/ForbiddenPolicy.php b/src/Twig/SecurityPolicy/ForbiddenPolicy.php index cab45ce9a..b5199d633 100644 --- a/src/Twig/SecurityPolicy/ForbiddenPolicy.php +++ b/src/Twig/SecurityPolicy/ForbiddenPolicy.php @@ -34,11 +34,11 @@ final class ForbiddenPolicy implements SecurityPolicyInterface * @param array $forbiddenFunctions */ public function __construct( - private array $forbiddenTags = [], - private array $forbiddenFilters = [], + private readonly array $forbiddenTags = [], + private readonly array $forbiddenFilters = [], array $forbiddenMethods = [], - private array $forbiddenProperties = [], - private array $forbiddenFunctions = [] + private readonly array $forbiddenProperties = [], + private readonly array $forbiddenFunctions = [] ) { $this->forbiddenMethods = []; @@ -70,7 +70,7 @@ final class ForbiddenPolicy implements SecurityPolicyInterface public function checkMethodAllowed($obj, $method): void { - if ($obj instanceof Template || $obj instanceof Markup) { + if ($obj instanceof Template || $obj instanceof Markup) { // @phpstan-ignore instanceof.internalClass return; } diff --git a/src/Twig/SecurityPolicy/InvoicePolicy.php b/src/Twig/SecurityPolicy/InvoicePolicy.php index 46507ce9b..8db0fa967 100644 --- a/src/Twig/SecurityPolicy/InvoicePolicy.php +++ b/src/Twig/SecurityPolicy/InvoicePolicy.php @@ -204,7 +204,7 @@ final class InvoicePolicy implements SecurityPolicyInterface public function checkMethodAllowed($obj, $method): void { - if ($obj instanceof Template || $obj instanceof Markup || $obj instanceof UnicodeString) { + if ($obj instanceof Template || $obj instanceof Markup || $obj instanceof UnicodeString) { // @phpstan-ignore instanceof.internalClass return; } diff --git a/src/User/LoginManager.php b/src/User/LoginManager.php index 128daba5c..b5b1fa4f2 100644 --- a/src/User/LoginManager.php +++ b/src/User/LoginManager.php @@ -22,15 +22,15 @@ use Symfony\Component\Security\Http\Session\SessionAuthenticationStrategyInterfa final class LoginManager { public function __construct( - private TokenStorageInterface $tokenStorage, - private UserChecker $userChecker, - private SessionAuthenticationStrategyInterface $sessionStrategy, - private RequestStack $requestStack, - private EventDispatcherInterface $eventDispatcher, + private readonly TokenStorageInterface $tokenStorage, + private readonly UserChecker $userChecker, + private readonly SessionAuthenticationStrategyInterface $sessionStrategy, + private readonly RequestStack $requestStack, + private readonly EventDispatcherInterface $eventDispatcher, ) { } - public function logInUser(User $user, Response $response = null) + public function logInUser(User $user, ?Response $response = null): void { $this->userChecker->checkPreAuth($user); diff --git a/src/User/TeamService.php b/src/User/TeamService.php index 1bd239b27..a64996bc4 100644 --- a/src/User/TeamService.php +++ b/src/User/TeamService.php @@ -9,7 +9,18 @@ namespace App\User; +use App\Entity\Team; +use App\Event\TeamCreateEvent; +use App\Event\TeamCreatePostEvent; +use App\Event\TeamCreatePreEvent; +use App\Event\TeamDeleteEvent; +use App\Event\TeamUpdatePostEvent; +use App\Event\TeamUpdatePreEvent; use App\Repository\TeamRepository; +use App\Validator\ValidationFailedException; +use InvalidArgumentException; +use Psr\EventDispatcher\EventDispatcherInterface; +use Symfony\Component\Validator\Validator\ValidatorInterface; final class TeamService { @@ -18,10 +29,19 @@ final class TeamService */ private array $cache = []; - public function __construct(private TeamRepository $repository) + public function __construct( + private readonly TeamRepository $repository, + private readonly ValidatorInterface $validator, + private readonly EventDispatcherInterface $dispatcher, + ) { } + public function findTeamByName(string $name): ?Team + { + return $this->repository->findOneBy(['name' => $name]); + } + public function countTeams(): int { if (!\array_key_exists('count', $this->cache)) { @@ -31,8 +51,67 @@ final class TeamService return $this->cache['count']; } + public function createNewTeam(string $name): Team + { + $team = new Team($name); + $this->dispatcher->dispatch(new TeamCreateEvent($team)); + + return $team; + } + + public function saveTeam(Team $team): Team + { + if(null === $team->getId()) { + // invalidate cache only on new teams + return $this->saveNewTeam($team); + } + + return $this->updateTeam($team); + } + + private function saveNewTeam(Team $team): Team + { + if (null !== $team->getId()) { + throw new InvalidArgumentException('Cannot create team, already persisted'); + } + + $this->validateTeam($team); + + $this->dispatcher->dispatch(new TeamCreatePreEvent($team)); + $this->repository->saveTeam($team); + $this->dispatcher->dispatch(new TeamCreatePostEvent($team)); + + return $team; + } + public function hasTeams(): bool { return $this->countTeams() > 0; } + + private function validateTeam(Team $team): void + { + $errors = $this->validator->validate($team); + + if ($errors->count() > 0) { + throw new ValidationFailedException($errors); + } + } + + private function updateTeam(Team $team): Team + { + $this->validateTeam($team); + + $this->dispatcher->dispatch(new TeamUpdatePreEvent($team)); + $this->repository->saveTeam($team); + $this->dispatcher->dispatch(new TeamUpdatePostEvent($team)); + + return $team; + } + + public function deleteTeam(Team $delete): void + { + $this->dispatcher->dispatch(new TeamDeleteEvent($delete)); + $this->repository->deleteTeam($delete); + } } diff --git a/src/User/UserService.php b/src/User/UserService.php index 1852a2400..baa8aedf0 100644 --- a/src/User/UserService.php +++ b/src/User/UserService.php @@ -112,7 +112,7 @@ class UserService $errors = $this->validator->validate($user, null, $groups); if ($errors->count() > 0) { - throw new ValidationFailedException($errors, 'Validation Failed'); + throw new ValidationFailedException($errors); } } diff --git a/src/Utils/Context.php b/src/Utils/Context.php index aafc54f17..d5844d96a 100644 --- a/src/Utils/Context.php +++ b/src/Utils/Context.php @@ -10,10 +10,12 @@ namespace App\Utils; use App\Entity\User; +use Symfony\Component\DependencyInjection\Attribute\Exclude; +#[Exclude] final class Context { - public function __construct(private User $user) + public function __construct(private readonly User $user) { } diff --git a/src/Utils/Duration.php b/src/Utils/Duration.php index c6914379a..6f2b37581 100644 --- a/src/Utils/Duration.php +++ b/src/Utils/Duration.php @@ -19,12 +19,17 @@ final class Duration public const FORMAT_DECIMAL = 'decimal'; public const FORMAT_DEFAULT = '%h:%m'; + public function formatDecimal(?int $seconds): float + { + if ($seconds === null || $seconds === 0) { + return 0.0; + } + + return (float) number_format($seconds / 3600, 2, '.', ''); + } + /** * Transforms seconds into a duration string. - * - * @param int|null $seconds - * @param string $format - * @return string|null */ public function format(?int $seconds, string $format = self::FORMAT_DEFAULT): ?string { diff --git a/src/Utils/FileHelper.php b/src/Utils/FileHelper.php index 9b6898a27..f7f6220d8 100644 --- a/src/Utils/FileHelper.php +++ b/src/Utils/FileHelper.php @@ -29,7 +29,7 @@ final class FileHelper $this->dataDir = $directory; } - public function getDataDirectory(string $subDirectory = null): string + public function getDataDirectory(?string $subDirectory = null): string { $directory = $this->dataDir . '/'; diff --git a/src/Utils/FormFormatConverter.php b/src/Utils/FormFormatConverter.php index 64f2fdc92..0ae55b378 100644 --- a/src/Utils/FormFormatConverter.php +++ b/src/Utils/FormFormatConverter.php @@ -56,6 +56,9 @@ final class FormFormatConverter $pattern = $format; + // special case for Chinese + $pattern = str_replace('B', '', $pattern); + // special case fr_CA $pattern = str_replace('\\\\h', '*****', $pattern); $pattern = str_replace('\\h', '*****', $pattern); diff --git a/src/Utils/LocaleFormatter.php b/src/Utils/LocaleFormatter.php index e7479b8f5..8245846ec 100644 --- a/src/Utils/LocaleFormatter.php +++ b/src/Utils/LocaleFormatter.php @@ -18,10 +18,33 @@ use NumberFormatter; use Symfony\Component\Intl\Currencies; /** - * Use this class to format values into locale specific representations. + * Use this class to format values into locale-specific representations. */ final class LocaleFormatter { + /** + * Special locales to test: + * + * - el h:mm a 9:41 π.μ. + * - fr_CA HH 'h' mm 09 h 41 + * - ko h:mm a 10:18 오전 + * - tr_CY h:mm a 9:41 ÖÖ + * - pa h:mm a 10:18 ਪੂ.ਦੁ. + * - pt_MO h:mm a 9:41 da manhã + * - zh_Hant Bh:mm 上午9:41 + * - zh_Hant_TW Bh:mm 上午9:41 + */ + // IntlDateFormatter::RELATIVE_* - not usable for times + // IntlDateFormatter::LONG - with seconds and timezone, and translation for h and min if locale supports it + // IntlDateFormatter::MEDIUM - with seconds, and translation for h and min if locale supports it + // IntlDateFormatter::SHORT - no seconds, no timezone - but translates e.g. am/pm to locale specific like zh_Hant + public const TIME_PATTERN = \IntlDateFormatter::SHORT; + // IntlDateFormatter::RELATIVE_* - translates words for "today" and "yesterday" + // IntlDateFormatter::LONG - translates the month name + // IntlDateFormatter::MEDIUM - date as we likely want to use it, but with translations if locale supports it, e.g. 2025年5月26日 + // IntlDateFormatter::SHORT - date with dots, but year with two numbers in some locales causing conflicts e.g., in invoices + public const DATE_PATTERN = \IntlDateFormatter::SHORT; + private ?Duration $durationFormatter = null; private ?IntlDateFormatter $dateFormatter = null; private ?IntlDateFormatter $dateTimeFormatter = null; @@ -44,10 +67,7 @@ final class LocaleFormatter return $this->durationDecimal($duration); } - return $this->formatDuration( - $this->getSecondsForDuration($duration), - $this->localeService->getDurationFormat($this->locale) - ); + return $this->formatDuration($this->getSecondsForDuration($duration)); } /** @@ -84,13 +104,13 @@ final class LocaleFormatter return (int) $duration; } - private function formatDuration(int $seconds, string $format): string + private function formatDuration(int $seconds): string { if ($this->durationFormatter === null) { $this->durationFormatter = new Duration(); } - return $this->durationFormatter->format($seconds, $format); + return $this->durationFormatter->format($seconds); } /** @@ -170,8 +190,8 @@ final class LocaleFormatter if (null === $this->dateFormatter) { $this->dateFormatter = new IntlDateFormatter( $this->locale, - IntlDateFormatter::MEDIUM, - IntlDateFormatter::MEDIUM, + self::DATE_PATTERN, + IntlDateFormatter::NONE, date_default_timezone_get(), IntlDateFormatter::GREGORIAN, $this->localeService->getDateFormat($this->locale) @@ -204,8 +224,8 @@ final class LocaleFormatter if (null === $this->dateTimeFormatter) { $this->dateTimeFormatter = new IntlDateFormatter( $this->locale, - IntlDateFormatter::MEDIUM, - IntlDateFormatter::MEDIUM, + self::DATE_PATTERN, + self::TIME_PATTERN, date_default_timezone_get(), IntlDateFormatter::GREGORIAN, $this->localeService->getDateTimeFormat($this->locale) @@ -255,8 +275,8 @@ final class LocaleFormatter if (null === $this->timeFormatter) { $this->timeFormatter = new IntlDateFormatter( $this->locale, - IntlDateFormatter::MEDIUM, - IntlDateFormatter::MEDIUM, + IntlDateFormatter::NONE, + self::TIME_PATTERN, date_default_timezone_get(), IntlDateFormatter::GREGORIAN, $this->localeService->getTimeFormat($this->locale) diff --git a/src/Utils/Markdown.php b/src/Utils/Markdown.php index 08d81c52b..362725e33 100644 --- a/src/Utils/Markdown.php +++ b/src/Utils/Markdown.php @@ -33,7 +33,7 @@ final class Markdown public function withFullMarkdownSupport(string $text): string { if ($this->parserFull === null) { - $this->parserFull = new \Parsedown(); + $this->parserFull = new Parsedown(); $this->parserFull->setUrlsLinked(true); $this->parserFull->setBreaksEnabled(true); $this->parserFull->setSafeMode(true); diff --git a/src/Utils/MenuItemModel.php b/src/Utils/MenuItemModel.php index 05a7bc8f6..57fe2ae7e 100644 --- a/src/Utils/MenuItemModel.php +++ b/src/Utils/MenuItemModel.php @@ -28,6 +28,7 @@ final class MenuItemModel implements MenuItemInterface private bool $divider = false; private bool $lastWasDivider = false; private bool $expanded = false; + private bool $disabled = false; private string $translationDomain = 'messages'; public function __construct( @@ -308,4 +309,14 @@ final class MenuItemModel implements MenuItemInterface { $this->translationDomain = $translationDomain; } + + public function setDisabled(bool $disabled): void + { + $this->disabled = $disabled; + } + + public function isDisabled(): bool + { + return $this->disabled; + } } diff --git a/src/Utils/Parsedown.php b/src/Utils/Parsedown.php new file mode 100644 index 000000000..d261bced1 --- /dev/null +++ b/src/Utils/Parsedown.php @@ -0,0 +1,85 @@ + */ + private array $ids = []; + + protected function blockHeader($Line) + { + $block = parent::blockHeader($Line); + + $text = $block['element']['text']; + + if (\is_string($text) && $text !== '') { + $id = $this->getIDfromText($text); + + // add id-attribute + $block['element']['attributes'] = [ + 'id' => $id + ]; + } + + return $block; + } + + /** + * github-action for creating ids: + * + * - It downcases the header string + * - Removes anything that is not a letter, number, space or hyphen + * - Changes any space to a hyphen + * - If that is not unique, add "-1", "-2", "-3",... to make it unique + * # + * @param non-empty-string $text + * @return string + */ + private function getIDfromText(string $text): string + { + $text = strtolower($text); + + $text = preg_replace('/[^A-Za-z0-9\-\ ]/', '', $text); + $text = strtr($text, [' ' => '-']); + + if (isset($this->ids[$text])) { + $i = 0; + $numberedText = $text . '-1'; + + while (isset($this->ids[$numberedText])) { + $i++; + $numberedText = $text . '-' . $i; + } + + $text = $numberedText; + } + + $this->ids[$text] = ''; + + return $text; + } + + protected function blockTable($Line, ?array $Block = null) // @phpstan-ignore missingType.return,missingType.iterableValue,missingType.parameter + { + $Block = parent::blockTable($Line, $Block); + + if ($Block === null) { + return null; + } + + $Block['element']['attributes']['class'] = 'table table-striped table-vcenter'; + + return $Block; + } +} diff --git a/src/Utils/ParsedownExtension.php b/src/Utils/ParsedownExtension.php index e2189bff9..833b13895 100644 --- a/src/Utils/ParsedownExtension.php +++ b/src/Utils/ParsedownExtension.php @@ -12,13 +12,10 @@ namespace App\Utils; /** * This Class extends the default Parsedown Class for custom methods. */ -final class ParsedownExtension extends \Parsedown +final class ParsedownExtension extends Parsedown { - /** @var array */ - private array $ids = []; - /** - * Overwritten to prevent # to show up as headings for two reasons: + * Overwritten to prevent # and = to show up as headings for two reasons: * - Hashes are often used to cross-link issues in other systems * - Headings should not occur in time record listings */ @@ -98,57 +95,7 @@ final class ParsedownExtension extends \Parsedown return null; } - protected function blockHeader($Line) - { - $block = parent::blockHeader($Line); - - $text = $block['element']['text']; - $id = $this->getIDfromText($text); - - // add id-attribute - $block['element']['attributes'] = [ - 'id' => $id - ]; - - return $block; - } - - /** - * github-action for creating ids: - * - * - It downcases the header string - * - remove anything that is not a letter, number, space or hyphen - * - changes any space to a hyphen. - * - If that is not unique, add "-1", "-2", "-3",... to make it unique - * - * @param string $text - * @return string - */ - private function getIDfromText($text): string - { - $text = strtolower($text); - - $text = preg_replace('/[^A-Za-z0-9\-\ ]/', '', $text); - $text = strtr($text, [' ' => '-']); - - if (isset($this->ids[$text])) { - $i = 0; - $numberedText = $text . '-1'; - - while (isset($this->ids[$numberedText])) { - $i++; - $numberedText = $text . '-' . $i; - } - - $text = $numberedText; - } - - $this->ids[$text] = ''; - - return $text; - } - - protected function blockTable($Line, array $Block = null) + protected function blockTable($Line, ?array $Block = null) // @phpstan-ignore missingType.return,missingType.iterableValue,missingType.parameter { $Block = parent::blockTable($Line, $Block); diff --git a/src/Utils/SearchTerm.php b/src/Utils/SearchTerm.php index 3348f95c1..87fafb237 100644 --- a/src/Utils/SearchTerm.php +++ b/src/Utils/SearchTerm.php @@ -14,56 +14,92 @@ final class SearchTerm private string $originalTerm; private string $term; /** - * @var string[] + * @var SearchTermPart[] */ - private array $fields; + private array $parts = []; public function __construct(string $searchTerm) { $this->originalTerm = $searchTerm; $terms = explode(' ', $searchTerm); - $fields = []; $finalTerm = []; foreach ($terms as $term) { - $tmp = explode(':', $term); - if (\count($tmp) === 2) { - $fields[$tmp[0]] = $tmp[1]; - } else { - $finalTerm[] = $term; + $part = new SearchTermPart($term); + if ($part->getField() === null) { + $finalTerm[] = $part->getTerm(); } + $this->parts[] = $part; } $this->term = implode(' ', $finalTerm); - $this->fields = $fields; } + /** + * @deprecated since 2.34.0 + */ public function hasSearchField(string $name): bool { - return \array_key_exists($name, $this->fields); - } + @trigger_error('The SearchTerm::hasSearchField() method is deprecated and will be removed with 3.0', E_USER_DEPRECATED); - public function getSearchField(string $name): ?string - { - if (!$this->hasSearchField($name)) { - return null; + foreach ($this->parts as $part) { + if ($part->getField() === $name) { + return true; + } } - return $this->fields[$name]; + return false; } + /** + * @deprecated since 2.34.0 + */ + public function getSearchField(string $name): ?string + { + @trigger_error('The SearchTerm::getSearchField() method is deprecated and will be removed with 3.0', E_USER_DEPRECATED); + + foreach ($this->parts as $part) { + if ($part->getField() === $name) { + return $part->getTerm(); + } + } + + return null; + } + + /** + * @return array + */ public function getSearchFields(): array { - return $this->fields; + // TODO deprecated 3.0 - all places that use this method should use the RepositorySearchTrait instead (soft deprecation for plugins) + $fields = []; + foreach ($this->parts as $part) { + if (($field = $part->getField()) !== null) { + $fields[$field] = $part->getTerm(); + } + } + + return $fields; + } + + /** + * @return SearchTermPart[] + */ + public function getParts(): array + { + return $this->parts; } public function getSearchTerm(): string { + // TODO deprecated 3.0 - all places that use this method should use the RepositorySearchTrait instead (soft deprecation for plugins) return $this->term; } public function hasSearchTerm(): bool { + // TODO refactor and use the parts and check if any part has an emoty field name return $this->term !== ''; } diff --git a/src/Utils/SearchTermPart.php b/src/Utils/SearchTermPart.php new file mode 100644 index 000000000..e9f71599c --- /dev/null +++ b/src/Utils/SearchTermPart.php @@ -0,0 +1,51 @@ +field = $tmp[0]; + $term = $tmp[1] !== '""' ? $tmp[1] : ''; + } + } + + if (\strlen($term) > 1 && $term[0] === '!') { + $term = substr($term, 1); + $this->excluded = true; + } + + $this->term = $term; + } + + public function getTerm(): string + { + return $this->term; + } + + public function getField(): ?string + { + return $this->field; + } + + public function isExcluded(): bool + { + return $this->excluded; + } +} diff --git a/src/Validator/Constraints/ExportRenderer.php b/src/Validator/Constraints/ExportRenderer.php new file mode 100644 index 000000000..f1a211a68 --- /dev/null +++ b/src/Validator/Constraints/ExportRenderer.php @@ -0,0 +1,24 @@ + 'Unknown exporter type.', + ]; + + public string $message = 'Unknown exporter type.'; +} diff --git a/src/Validator/Constraints/ExportRendererValidator.php b/src/Validator/Constraints/ExportRendererValidator.php new file mode 100644 index 000000000..64528a1d5 --- /dev/null +++ b/src/Validator/Constraints/ExportRendererValidator.php @@ -0,0 +1,41 @@ +context->buildViolation(ExportRenderer::getErrorName(ExportRenderer::UNKNOWN_TYPE)) + ->setParameter('{{ value }}', $this->formatValue($value)) + ->setTranslationDomain('validators') + ->setCode(ExportRenderer::UNKNOWN_TYPE) + ->addViolation(); + } + } +} diff --git a/src/Validator/Constraints/TimesheetLongRunningValidator.php b/src/Validator/Constraints/TimesheetLongRunningValidator.php index 97cf5acf8..18dba8640 100644 --- a/src/Validator/Constraints/TimesheetLongRunningValidator.php +++ b/src/Validator/Constraints/TimesheetLongRunningValidator.php @@ -11,6 +11,7 @@ namespace App\Validator\Constraints; use App\Configuration\SystemConfiguration; use App\Entity\Timesheet as TimesheetEntity; +use App\Utils\Duration; use Symfony\Component\Validator\Constraint; use Symfony\Component\Validator\ConstraintValidator; use Symfony\Component\Validator\Exception\UnexpectedTypeException; @@ -64,7 +65,7 @@ final class TimesheetLongRunningValidator extends ConstraintValidator return; } - $format = new \App\Utils\Duration(); + $format = new Duration(); $hours = $format->format($maxMinutes * 60); $this->context->buildViolation($constraint->message) diff --git a/src/Validator/Constraints/TimesheetNegativeDuration.php b/src/Validator/Constraints/TimesheetNegativeDuration.php new file mode 100644 index 000000000..2e884ee1c --- /dev/null +++ b/src/Validator/Constraints/TimesheetNegativeDuration.php @@ -0,0 +1,26 @@ + 'Duration cannot be negative.', + ]; + + public string $message = 'Duration cannot be negative.'; + + public function getTargets(): string + { + return self::CLASS_CONSTRAINT; + } +} diff --git a/src/Validator/Constraints/TimesheetNegativeDurationValidator.php b/src/Validator/Constraints/TimesheetNegativeDurationValidator.php new file mode 100644 index 000000000..72bc8f50a --- /dev/null +++ b/src/Validator/Constraints/TimesheetNegativeDurationValidator.php @@ -0,0 +1,43 @@ +isRunning()) { + return; + } + + $duration = $value->getCalculatedDuration(); + + if ($duration !== null && $duration < 0) { + $this->context->buildViolation($constraint->message) + ->atPath('duration') + ->setTranslationDomain('validators') + ->setCode(TimesheetNegativeDuration::NEGATIVE_DURATION_ERROR) + ->addViolation(); + } + } +} diff --git a/src/Validator/Constraints/TimesheetZeroDurationValidator.php b/src/Validator/Constraints/TimesheetZeroDurationValidator.php index 347ff4393..bfdd6bad4 100644 --- a/src/Validator/Constraints/TimesheetZeroDurationValidator.php +++ b/src/Validator/Constraints/TimesheetZeroDurationValidator.php @@ -44,7 +44,7 @@ final class TimesheetZeroDurationValidator extends ConstraintValidator $duration = $value->getCalculatedDuration(); } - if ($duration <= 0) { + if ($duration === 0) { $this->context->buildViolation($constraint->message) ->atPath('duration') ->setTranslationDomain('validators') diff --git a/src/Validator/ValidationException.php b/src/Validator/ValidationException.php index 1dd242baf..538164d3b 100644 --- a/src/Validator/ValidationException.php +++ b/src/Validator/ValidationException.php @@ -11,10 +11,10 @@ namespace App\Validator; final class ValidationException extends \RuntimeException { - public function __construct(string $message = null) + public function __construct(?string $message = null) { if ($message === null) { - $message = 'Validation failed'; + $message = 'Validation Failed'; } parent::__construct($message, 400); } diff --git a/src/Validator/ValidationFailedException.php b/src/Validator/ValidationFailedException.php index 5150ebac7..24940b220 100644 --- a/src/Validator/ValidationFailedException.php +++ b/src/Validator/ValidationFailedException.php @@ -13,10 +13,10 @@ use Symfony\Component\Validator\ConstraintViolationListInterface; final class ValidationFailedException extends \RuntimeException { - public function __construct(private ConstraintViolationListInterface $violations, ?string $message = null) + public function __construct(private readonly ConstraintViolationListInterface $violations, ?string $message = null) { if ($message === null) { - $message = 'Validation failed'; + $message = 'Validation Failed'; } parent::__construct($message, 400); } diff --git a/src/Webhook/Attribute/AsWebhook.php b/src/Webhook/Attribute/AsWebhook.php new file mode 100644 index 000000000..91f1129a1 --- /dev/null +++ b/src/Webhook/Attribute/AsWebhook.php @@ -0,0 +1,18 @@ +getMode($user->getWorkContractMode()); } catch (\InvalidArgumentException $ex) { $this->logger->error( - \sprintf('Unknown mode "%s" requested for user %s', $user->getWorkContractMode(), $user->getId()) + \sprintf('Unknown mode "%s" requested for user %s', $user->getWorkContractMode(), $user->getUserIdentifier()) ); return new WorkingTimeModeNone(); // @CloudRequired diff --git a/src/WorkingTime/Model/YearPerUserSummary.php b/src/WorkingTime/Model/YearPerUserSummary.php index bfd7a988d..0dde6ac34 100644 --- a/src/WorkingTime/Model/YearPerUserSummary.php +++ b/src/WorkingTime/Model/YearPerUserSummary.php @@ -59,8 +59,8 @@ final class YearPerUserSummary implements \Countable, \IteratorAggregate public function getExpectedTime(): int { $all = 0; - foreach ($this->getSummaries() as $month) { - $all += $month->getExpectedTime(); + foreach ($this->getSummaries() as $year) { + $all += $year->getExpectedTime(); } return $all; @@ -69,8 +69,8 @@ final class YearPerUserSummary implements \Countable, \IteratorAggregate public function getActualTime(): int { $all = 0; - foreach ($this->getSummaries() as $month) { - $all += $month->getActualTime(); + foreach ($this->getSummaries() as $year) { + $all += $year->getActualTime(); } return $all; diff --git a/src/WorkingTime/WorkingTimeService.php b/src/WorkingTime/WorkingTimeService.php index 5937503e2..abbf0020f 100644 --- a/src/WorkingTime/WorkingTimeService.php +++ b/src/WorkingTime/WorkingTimeService.php @@ -13,6 +13,7 @@ use App\Entity\User; use App\Entity\WorkingTime; use App\Event\WorkingTimeApproveMonthEvent; use App\Event\WorkingTimeQueryStatsEvent; +use App\Event\WorkingTimeUnlockMonthEvent; use App\Event\WorkingTimeYearEvent; use App\Event\WorkingTimeYearSummaryEvent; use App\Repository\TimesheetRepository; @@ -26,9 +27,6 @@ use App\WorkingTime\Model\Year; use App\WorkingTime\Model\YearPerUserSummary; use Psr\EventDispatcher\EventDispatcherInterface; -/** - * @internal this API and the entire namespace is experimental: expect changes! - */ final class WorkingTimeService { private const LATEST_APPROVAL_PREF = '_latest_approval'; @@ -155,12 +153,14 @@ final class WorkingTimeService $dayDate = $day->getDay(); $result = new WorkingTime($user, $dayDate); - if (($firstDay === null || $firstDay <= $dayDate) && ($lastDay === null || $lastDay >= $dayDate)) { - $result->setExpectedTime($calculator->getWorkHoursForDay($dayDate)); - } + if ($dayDate <= $until) { + if (($firstDay === null || $firstDay <= $dayDate) && ($lastDay === null || $lastDay >= $dayDate)) { + $result->setExpectedTime($calculator->getWorkHoursForDay($dayDate)); + } - if (\array_key_exists($key, $stats)) { - $result->setActualTime($stats[$key]); + if (\array_key_exists($key, $stats)) { + $result->setActualTime($stats[$key]); + } } $day->setWorkingTime($result); @@ -181,6 +181,7 @@ final class WorkingTimeService return $year->getMonth($monthDate); } + // FIXME deprecated 3.0 remove $user, fetch from $month->getUser() instead public function approveMonth(User $user, Month $month, \DateTimeInterface $approvalDate, User $approvedBy): void { foreach ($month->getDays() as $day) { @@ -189,10 +190,6 @@ final class WorkingTimeService continue; } - if ($workingTime->getId() !== null) { - continue; - } - if ($month->isLocked() || $workingTime->isApproved()) { continue; } @@ -205,15 +202,38 @@ final class WorkingTimeService $this->workingTimeRepository->persistScheduledWorkingTimes(); + // $user = $month->getUser(); $user->setPreferenceValue(self::LATEST_APPROVAL_PREF, $this->workingTimeRepository->getLatestApprovalDate($user)?->format(self::LATEST_APPROVAL_FORMAT)); $this->userRepository->saveUser($user); - $this->eventDispatcher->dispatch(new WorkingTimeApproveMonthEvent($user, $month, $approvalDate, $approvedBy)); + $this->eventDispatcher->dispatch(new WorkingTimeApproveMonthEvent($month, $approvedBy)); + } + + public function unlockMonth(Month $month, User $unlockedBy): void + { + foreach ($month->getDays() as $day) { + $workingTime = $day->getWorkingTime(); + if ($workingTime === null || $workingTime->getId() === null) { + continue; + } + + if (!$workingTime->isApproved()) { + continue; + } + + $this->workingTimeRepository->scheduleWorkingTimeDelete($workingTime); + } + + $this->workingTimeRepository->persistScheduledWorkingTimes(); + + $user = $month->getUser(); + $user->setPreferenceValue(self::LATEST_APPROVAL_PREF, $this->workingTimeRepository->getLatestApprovalDate($user)?->format(self::LATEST_APPROVAL_FORMAT)); + $this->userRepository->saveUser($user); + + $this->eventDispatcher->dispatch(new WorkingTimeUnlockMonthEvent($month, $unlockedBy)); } /** - * @param \DateTimeInterface $year - * @param User $user * @return array */ private function getYearStatistics(\DateTimeInterface $year, User $user): array diff --git a/symfony.lock b/symfony.lock index 5645c1ab5..9f35a6aa5 100644 --- a/symfony.lock +++ b/symfony.lock @@ -1,7 +1,4 @@ { - "behat/transliterator": { - "version": "v1.2.0" - }, "composer/pcre": { "version": "1.0.1" }, diff --git a/templates/activity/edit.html.twig b/templates/activity/edit.html.twig index 4a415f542..f4de98671 100644 --- a/templates/activity/edit.html.twig +++ b/templates/activity/edit.html.twig @@ -8,6 +8,7 @@ 'back': path('admin_activity') } %} {% embed formEditTemplate with formOptions %} + {% import "macros/form_helper.html.twig" as form_helper %} {% block form_body %}
@@ -49,6 +50,18 @@
{% endif %} + {{ form_helper.metafields(form, null) }} + {% embed '@theme/embeds/collapsible.html.twig' with {id: 'activity_invoice_settings'} %} + {% import "macros/widgets.html.twig" as widgets %} + {% import "macros/form_helper.html.twig" as form_helper %} + {% block title %}{{ 'invoices'|trans }}{% endblock %} + {% block body %} + {% if form.invoiceText is defined %} + {{ form_row(form.invoiceText) }} + {% endif %} + {{ form_helper.metafields(form, 'invoice') }} + {% endblock %} + {% endembed %}
{{ form_row(form.visible) }} @@ -57,18 +70,6 @@ {{ form_row(form.billable) }}
- {% if form.metaFields is defined and form.metaFields is not empty %} - {{ form_row(form.metaFields) }} - {% endif %} - {% embed '@theme/embeds/collapsible.html.twig' with {id: 'activity_invoice_settings'} %} - {% import "macros/widgets.html.twig" as widgets %} - {% block title %}{{ 'invoices'|trans }}{% endblock %} - {% block body %} - {% if form.invoiceText is defined %} - {{ form_row(form.invoiceText) }} - {% endif %} - {% endblock %} - {% endembed %} {{ form_rest(form) }} {% endblock %} {% endembed %} diff --git a/templates/base.html.twig b/templates/base.html.twig index b7faa0d67..297ab5e0c 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -1,4 +1,4 @@ -{% extends '@theme/layout/default-layout.html.twig' %} +{% extends tabler_bundle.isBoxedLayout() ? '@Tabler/layout_horizontal.html.twig' : '@Tabler/layout_vertical.html.twig' %} {% block body_start %} data-title="{{- get_title()|e('html_attr') -}}" @@ -25,8 +25,6 @@
{% endblock %} -{% block page_content_class %}{{ parent() }} {% block page_class %}{% endblock %}{% endblock %} - {% block page_content_start %} {% if app.session and app.session.started and app.session.flashbag.peekAll|length > 0 %} {% set domain = 'flashmessages' %} @@ -57,10 +55,11 @@
{% block main_before %}{% endblock %}
+
{% endblock %} {% block page_content_after %} - {% block main_after %}{% endblock %} +
{% set event = trigger(constant('App\\Event\\ThemeEvent::CONTENT_AFTER')) %} {{ event.content|raw }} {% if page_setup is defined and page_setup.help is not null %} @@ -142,7 +141,7 @@ {% set mylogo %}{{ parent() }}{% endset %} {# only for mobile view #}
-

+

{{- block('page_title') -}}

{{ mylogo }} diff --git a/templates/bundles/NelmioApiDocBundle/Stoplight/index.html.twig b/templates/bundles/NelmioApiDocBundle/Stoplight/index.html.twig new file mode 100644 index 000000000..5bd786d75 --- /dev/null +++ b/templates/bundles/NelmioApiDocBundle/Stoplight/index.html.twig @@ -0,0 +1,10 @@ +{% extends '@!NelmioApiDoc/Stoplight/index.html.twig' %} + +{% block stylesheets %} + {{ parent() }} + +{% endblock stylesheets %} \ No newline at end of file diff --git a/templates/bundles/TablerBundle/layout/default-layout.html.twig b/templates/bundles/TablerBundle/layout/default-layout.html.twig deleted file mode 100644 index 6e8d6ea89..000000000 --- a/templates/bundles/TablerBundle/layout/default-layout.html.twig +++ /dev/null @@ -1 +0,0 @@ -{% extends tabler_bundle.isBoxedLayout() ? '@Tabler/layout-horizontal.html.twig' : '@Tabler/layout-vertical.html.twig' %} diff --git a/templates/bundles/TablerBundle/layout/security-layout.html.twig b/templates/bundles/TablerBundle/layout/security-layout.html.twig deleted file mode 100644 index 3ae36de9b..000000000 --- a/templates/bundles/TablerBundle/layout/security-layout.html.twig +++ /dev/null @@ -1 +0,0 @@ -{% extends '@Tabler/security.html.twig' %} diff --git a/templates/calendar/drag-drop.html.twig b/templates/calendar/drag-drop.html.twig index 2a3cc0a34..8e72f5e7b 100644 --- a/templates/calendar/drag-drop.html.twig +++ b/templates/calendar/drag-drop.html.twig @@ -1,5 +1,10 @@ {% block dd_timesheet %} {% import "macros/widgets.html.twig" as widgets %} {% import "calendar/widgets.html.twig" as calendar %} - {{ calendar.dd_event(widgets.label_color(entry.title, entry.color), entry.project ? widgets.label_customer(entry.project.customer) : null, entry.project ? widgets.label_project(entry.project) : null, null) }} + {% if entry.activity is not null %} + {% set title = widgets.label_activity(entry.activity, entry.activity.color) %} + {% else %} + {% set title = widgets.label_color(entry.title, entry.color) %} + {% endif %} + {{ calendar.dd_event(title, entry.project ? widgets.label_customer(entry.project.customer) : null, entry.project ? widgets.label_project(entry.project) : null, null) }} {% endblock %} diff --git a/templates/calendar/user.html.twig b/templates/calendar/user.html.twig index c062c93aa..06a8e8b7f 100644 --- a/templates/calendar/user.html.twig +++ b/templates/calendar/user.html.twig @@ -9,9 +9,19 @@ {% if form is not null %} {% embed '@theme/embeds/card.html.twig' %} {% block box_body %} - {{ form_start(form) }} + {{ form_start(form, {attr: {id: 'calendar-form'}}) }} {% if form.user is defined %} - {{ form_row(form.user) }} + {% set user_class = '' %} + {% if form.user.vars.choices|length < 2 %} + {% set user_class = 'd-none' %} + {% endif %} + {{ form_row(form.user, {row_attr: {class: user_class}}) }} + {% endif %} + {% if form.date is defined %} + {{ form_row(form.date, {row_attr: {class: 'd-none'}}) }} + {% endif %} + {% if form.view is defined %} + {{ form_row(form.view, {row_attr: {class: 'd-none'}}) }} {% endif %} {{ form_rest(form) }} {{ form_end(form) }} @@ -25,13 +35,13 @@ {% block box_body %}
{% for entry in source.entries|slice(0, config.dragDropAmount) %} -
+
{% if source.blockInclude is not null and entry.blockName is not null and block(entry.blockName, source.blockInclude) is defined %} {{ block(entry.blockName, source.blockInclude) }} {% else %} - {{ entry.title }} + {{ entry.title }} {% endif %}
@@ -92,15 +102,33 @@ document.addEventListener('kimai.timesheetUpdate', reloader); document.addEventListener('kimai.timesheetDelete', reloader); + document.addEventListener('kimai.calendar.changeDate', function(event) { + var queryParams = new URLSearchParams(window.location.search); + + const dateSelect = document.getElementById('date'); + if (dateSelect !== null) { + dateSelect.value = event.detail.date; + queryParams.set('date', event.detail.date); + } + const viewSelect = document.getElementById('view'); + if (viewSelect !== null) { + viewSelect.value = event.detail.view; + queryParams.set('view', event.detail.view); + } + + history.replaceState(null, null, "?" + queryParams.toString()); + }); + document.addEventListener('kimai.initialized', function(event) { const kimai = event.detail.kimai; let calendarOptions = { + initialDate: '{{ initial_date|report_date }}', dragdrop: { container: '.external-events', items: '.external-event', }, - initialView: '{{ app.user.getPreferenceValue('calendar_initial_view') }}', + initialView: '{{ initial_view }}', translations: { customer: '{{ 'customer'|trans }}', project: '{{ 'project'|trans }}', @@ -135,7 +163,7 @@ { id: 'kimaiUserTimeSource', type: 'timesheet', - url: '{{ path('get_timesheets', {'user': user.id, 'size': 1000, 'full': 'true', 'begin': '__FROM__', 'end': '__TO__'})|raw }}', + url: '{{ path('get_timesheets', {'user': user.id, 'size': constant('\\App\\API\\BaseApiController::MAX_PAGE_SIZE'), 'full': 'true', 'begin': '__FROM__', 'end': '__TO__'})|raw }}', options: { color: '{{ config('theme.calendar.background_color') }}', }, diff --git a/templates/calendar/widgets.html.twig b/templates/calendar/widgets.html.twig index 7e64dbc33..af176b114 100644 --- a/templates/calendar/widgets.html.twig +++ b/templates/calendar/widgets.html.twig @@ -2,6 +2,6 @@ {% import "macros/widgets.html.twig" as widgets %} {{ title }} {% if project is not null %} - {{ project }}{% if customer is not null %}, {{ customer }}{% endif %} + {{ project }}{% if customer is not null %}, {{ customer }}{% endif %} {% endif %} {% endmacro %} diff --git a/templates/contract/status.html.twig b/templates/contract/status.html.twig index b788e4f55..be0f1e08f 100644 --- a/templates/contract/status.html.twig +++ b/templates/contract/status.html.twig @@ -98,10 +98,7 @@ {% for month in year.months %} {% set monthShould = month.expectedTime(now) %} {% set monthIs = month.actualTime %} - {% set showStats = now > month.month or monthIs > 0 %} - {% if showStats %} - {% set yearShould = yearShould + monthShould %} - {% endif %} + {% set yearShould = yearShould + monthShould %} {% set yearIs = yearIs + monthIs %} {% if month.locked %} {% set approved = approved + 1 %} @@ -137,7 +134,6 @@ {% for month in year.months %} {% set monthShould = month.expectedTime(now) %} {% set monthIs = month.actualTime %} - {% set showStats = now > month.month or monthIs > 0 %} {% if withWorkHourConfiguration %} @@ -152,9 +148,7 @@ {{ month.month|month_name }} - {% if showStats %} - {{ work_times_result(monthShould, monthIs, decimal) }} - {% endif %} + {{ work_times_result(monthShould, monthIs, decimal) }} {{ monthShould|duration(decimal) }} @@ -228,6 +222,38 @@ {% endembed %} {% endif %} + {% if withWorkHourConfiguration %} + {% set expectedWeekTimes = 0 %} + {% for day in days %} + {% set expectedWeekTimes = expectedWeekTimes + day.duration %} + {% endfor %} + + {% embed '@theme/embeds/collapsible.html.twig' with {id: 'work_contract_should_preview', border: false, item: {options: {bodyExtraClass: 'border-top'}}} %} + {% from "macros/status.html.twig" import status_duration %} + {% block title %} + {{ 'work_times_should'|trans }} +   + {{ status_duration(expectedWeekTimes|duration) }} + {% endblock %} + {% block body %} +
+ {% for day in days %} +
+
{{ day.date|day_name }}
+
+ {% if day.duration is not null %} + {{ day.duration|duration }} + {% else %} + – + {% endif %} +
+
+ {% endfor %} +
+ {% endblock %} + {% endembed %} + {% endif %} + {% for controller in boxes %} {{ render(controller(controller, {'year': year, 'boxConfiguration': box_configuration})) }} {% endfor %} diff --git a/templates/customer/details.html.twig b/templates/customer/details.html.twig index 34e164675..ec2ffa937 100644 --- a/templates/customer/details.html.twig +++ b/templates/customer/details.html.twig @@ -38,10 +38,31 @@ {% endif %} + {% if customer.addressLine1 is not empty %} + + {{ 'address'|trans }} + + {{ customer.addressLine1 }}
+ {% if customer.addressLine2 is not empty %} + {{ customer.addressLine2 }}
+ {% endif %} + {% if customer.addressLine3 is not empty %} + {{ customer.addressLine3 }}
+ {% endif %} + {{ customer.postCode }} {{ customer.city }} + + + {% endif %} {% if customer.address is not empty %} {{ 'address'|trans }} - {{ customer.address|nl2br }} + + {{ widgets.alert('info', 'address_deprecated'|trans) }} +
+ + {{ customer.address|nl2br }} + + {% endif %} {% if customer.country is not empty %} diff --git a/templates/customer/edit.html.twig b/templates/customer/edit.html.twig index ceeea3bbe..fc6a17d71 100644 --- a/templates/customer/edit.html.twig +++ b/templates/customer/edit.html.twig @@ -8,6 +8,7 @@ 'back': path('admin_customer') } %} {% embed formEditTemplate with formOptions %} + {% import "macros/form_helper.html.twig" as form_helper %} {% block form_body %}
@@ -18,28 +19,16 @@
{{ form_row(form.comment) }} - {{ form_row(form.address) }}
-
- {{ form_row(form.company) }} -
{{ form_row(form.number) }}
{{ form_row(form.vatId) }}
-
-
-
- {{ form_row(form.country) }} -
{{ form_row(form.currency) }}
-
- {{ form_row(form.timezone) }} -
@@ -87,6 +76,75 @@
{% endif %} + {{ form_helper.metafields(form, null) }} + {% embed '@theme/embeds/collapsible.html.twig' with {id: 'customer_address_settings'} %} + {% import "macros/widgets.html.twig" as widgets %} + {% import "macros/form_helper.html.twig" as form_helper %} + {% block title %}{{ 'address'|trans }}{% endblock %} + {% block body %} +
+
+ {{ form_row(form.company) }} +
+
+ {% if form.address is defined %} +
+
+ {{ form_row(form.address) }} +
+
+ {% endif %} +
+
+ {{ form_row(form.addressLine1, {attr: {placeholder: 'address_row'|trans({'%row%': 1})}}) }} +
+
+
+
+ {{ form_row(form.addressLine2, {attr: {placeholder: 'address_row'|trans({'%row%': 2})}}) }} +
+
+
+
+ {{ form_row(form.addressLine3, {attr: {placeholder: 'address_row'|trans({'%row%': 3})}}) }} +
+
+
+
+ {{ form_row(form.postCode) }} +
+
+ {{ form_row(form.city) }} +
+
+
+
+ {{ form_row(form.country) }} +
+
+ {{ form_row(form.timezone) }} +
+
+ {{ form_helper.metafields(form, 'address') }} + {% endblock %} + {% endembed %} + {% embed '@theme/embeds/collapsible.html.twig' with {id: 'customer_invoice_settings'} %} + {% import "macros/widgets.html.twig" as widgets %} + {% import "macros/form_helper.html.twig" as form_helper %} + {% block title %}{{ 'invoices'|trans }}{% endblock %} + {% block body %} + {% if form.buyerReference is defined %} + {{ form_row(form.buyerReference) }} + {% endif %} + {% if form.invoiceTemplate is defined %} + {{ form_row(form.invoiceTemplate) }} + {% endif %} + {% if form.invoiceText is defined %} + {{ form_row(form.invoiceText) }} + {% endif %} + {{ form_helper.metafields(form, 'invoice') }} + {% endblock %} + {% endembed %}
{{ form_row(form.visible) }} @@ -95,21 +153,6 @@ {{ form_row(form.billable) }}
- {% if form.metaFields is defined and form.metaFields is not empty %} - {{ form_row(form.metaFields) }} - {% endif %} - {% embed '@theme/embeds/collapsible.html.twig' with {id: 'customer_invoice_settings'} %} - {% import "macros/widgets.html.twig" as widgets %} - {% block title %}{{ 'invoices'|trans }}{% endblock %} - {% block body %} - {% if form.invoiceTemplate is defined %} - {{ form_row(form.invoiceTemplate) }} - {% endif %} - {% if form.invoiceText is defined %} - {{ form_row(form.invoiceText) }} - {% endif %} - {% endblock %} - {% endembed %} {{ form_rest(form) }} {% endblock %} {% endembed %} diff --git a/templates/customer/index.html.twig b/templates/customer/index.html.twig index b3e300b57..94de7caaf 100644 --- a/templates/customer/index.html.twig +++ b/templates/customer/index.html.twig @@ -17,8 +17,8 @@ {{ entry.vatId }} {% elseif column == 'contact' %} {{ entry.contact }} - {% elseif column == 'address' %} - {{ entry.address }} + {% elseif column == 'city' %} + {{ entry.postcode }} {{ entry.city }} {% elseif column == 'country' %} {{ entry.country|country_name }} {% elseif column == 'currency' %} diff --git a/templates/doctor/index.html.twig b/templates/doctor/index.html.twig index 6435fda5e..69613aaf6 100644 --- a/templates/doctor/index.html.twig +++ b/templates/doctor/index.html.twig @@ -3,7 +3,7 @@ {% block status %} {% from "macros/status.html.twig" import status %} {{ status(constant('App\\Constants::VERSION')) }} - {{ status(environment, environment == 'dev' ? 'red' : 'green') }} + {{ status(environment, environment == 'dev' ? 'danger-lt' : 'success-lt') }} {% endblock %} {% block main %} diff --git a/templates/export/index.html.twig b/templates/export/index.html.twig index 08f7a24b8..119e2b688 100644 --- a/templates/export/index.html.twig +++ b/templates/export/index.html.twig @@ -19,17 +19,25 @@ {% set columns = { 'avatar': {'class': 'text-nowrap w-avatar d-none d-md-table-cell', 'title': false, 'orderBy': false}, 'date': {'class': 'alwaysVisible text-nowrap', 'orderBy': false}, + 'begin': {'class': 'd-none', 'orderBy': false}, + 'end': {'class': 'd-none', 'orderBy': false}, 'user': {'class': 'd-none', 'orderBy': false}, 'project': {'class': 'd-none d-sm-table-cell', 'orderBy': false}, 'activity': {'class': 'd-none', 'orderBy': false}, 'description': {'class': 'd-none d-xl-table-cell timesheet-description', 'orderBy': false}, 'tags': {'class': 'd-none d-xl-table-cell', 'orderBy': false}, - 'unit_price': {'class': 'd-none text-nowrap text-end', 'orderBy': false}, 'duration': {'class': 'text-end text-nowrap', 'orderBy': false}, - 'internalRate': {'class': 'text-end d-none text-nowrap', 'orderBy': false}, - 'total_rate': {'class': 'text-end text-nowrap', 'orderBy': false}, - 'actions': {'class': 'actions alwaysVisible', 'orderBy': false}, } %} +{% if show_rates %} + {% set columns = columns|merge({ + 'unit_price': {'class': 'd-none text-nowrap text-end', 'orderBy': false}, + 'internalRate': {'class': 'text-end d-none text-nowrap', 'orderBy': false}, + 'total_rate': {'class': 'text-end text-nowrap', 'orderBy': false}, + }) %} +{% endif %} +{% set columns = columns|merge({ + 'actions': {'class': 'actions alwaysVisible', 'orderBy': false}, +}) %} {% set tableName = 'export' %} {% set editExported = is_granted('edit_exported_timesheet') %} @@ -45,9 +53,11 @@ {% if totalDuration > 0 %} {{ status_duration(totalDuration|duration) }} {% endif %} - {% for totalCurrency, totalRate in totalRates %} - {{ status_money(totalRate|money(totalCurrency)) }} - {% endfor %} + {% if show_rates %} + {% for totalCurrency, totalRate in totalRates %} + {{ status_money(totalRate|money(totalCurrency)) }} + {% endfor %} + {% endif %} {% endblock %} {% block main_before %} @@ -102,16 +112,6 @@ {% block box_attributes %}id="preview_export"{% endblock %} {% block box_body_class %}p-0{% endblock %} {% block box_footer %} - {% set buttons = {} %} - {% for button in renderer %} - {% set title = button.title %} - {% set group = [] %} - {% if buttons[(title)] is defined %} - {% set group = buttons[(title)] %} - {% endif %} - {% set group = group|merge([button]) %} - {% set buttons = buttons|merge({(title): group}) %} - {% endfor %} {% if showMarkAsExportedButton %}
@@ -122,33 +122,53 @@ {% endif %}
- {% for group in buttons %} - {% set button = group.0 %} - {% set btnTitle = ('button.' ~ button.title)|trans %} - {% if btnTitle == ('button.' ~ button.title) %} - {% set btnTitle = button.title %} + {% set allowCreate = is_granted('create_export_template') %} + {% for type, group in buttons %} + {% set btnTitle = ('button.' ~ type)|trans %} + {% if btnTitle == ('button.' ~ type) %} + {% set btnTitle = type|trans %} {% endif %} {% if group|length == 1 %} - - {% elseif group|length > 1 %} + {% for id, cfg in group %} + {% set title = cfg.title %} + {% set btnTitle2 = ('button.' ~ title)|trans %} + {% if btnTitle2 != ('button.' ~ title) %} + {% set btnTitle = btnTitle2 %} + {% endif %} + + {% endfor %} + {% else %} {% endif %} {% endfor %} + {% if allowCreate %} + {{ widgets.action_button('create', {'url': path('export_template_create'), 'class': 'btn modal-ajax-form open-edit', 'title': 'create'|trans}) }} + {% endif %}
{% if showToggleButton %} @@ -259,7 +295,7 @@ {{ 'entryState.exported'|trans }} {% endif %} {% else %} - @@ -288,6 +324,8 @@ {% block javascripts %} {{ parent() }} + {% endblock %} + {% endembed %} +{% endblock %} diff --git a/templates/favorite/index.html.twig b/templates/favorite/index.html.twig index 4b8e424fa..b5e4a94e1 100644 --- a/templates/favorite/index.html.twig +++ b/templates/favorite/index.html.twig @@ -1,10 +1,6 @@ {% set favorites = favorite_timesheets(app.user, 10) %} {% if favorites|length > 0 %} {% from 'macros/widgets.html.twig' import label_customer, label_project, label_activity %} - {% set class = "btn-outline-white" %} - {% if tabler_bundle.isDarkMode() or tabler_bundle.isNavbarOverlapping() %} - {% set class = "btn-dark" %} - {% endif %}