handsontable 17.1.0-rc8 → 17.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/base.js +2 -2
- package/base.mjs +2 -2
- package/core.js +13 -5
- package/core.mjs +13 -5
- package/dist/handsontable.full.js +284 -127
- package/dist/handsontable.full.min.js +108 -108
- package/dist/handsontable.js +69 -28
- package/dist/handsontable.min.js +30 -30
- package/dist/languages/all.min.js +1 -1
- package/dist/themes/classic.js +2 -2
- package/dist/themes/classic.min.js +2 -2
- package/dist/themes/horizon.js +2 -2
- package/dist/themes/horizon.min.js +2 -2
- package/dist/themes/main.js +2 -2
- package/dist/themes/main.min.js +2 -2
- package/dist/themes/static/variables/colors/ant.js +2 -2
- package/dist/themes/static/variables/colors/ant.min.js +2 -2
- package/dist/themes/static/variables/colors/classic.js +2 -2
- package/dist/themes/static/variables/colors/classic.min.js +2 -2
- package/dist/themes/static/variables/colors/horizon.js +2 -2
- package/dist/themes/static/variables/colors/horizon.min.js +2 -2
- package/dist/themes/static/variables/colors/main.js +2 -2
- package/dist/themes/static/variables/colors/main.min.js +2 -2
- package/dist/themes/static/variables/colors/material.js +2 -2
- package/dist/themes/static/variables/colors/material.min.js +2 -2
- package/dist/themes/static/variables/colors/shadcn.js +2 -2
- package/dist/themes/static/variables/colors/shadcn.min.js +2 -2
- package/dist/themes/static/variables/density.js +2 -2
- package/dist/themes/static/variables/density.min.js +2 -2
- package/dist/themes/static/variables/helpers/iconsMap.js +2 -2
- package/dist/themes/static/variables/helpers/iconsMap.min.js +2 -2
- package/dist/themes/static/variables/icons/horizon.js +2 -2
- package/dist/themes/static/variables/icons/horizon.min.js +2 -2
- package/dist/themes/static/variables/icons/main.js +2 -2
- package/dist/themes/static/variables/icons/main.min.js +2 -2
- package/dist/themes/static/variables/sizing.js +2 -2
- package/dist/themes/static/variables/sizing.min.js +2 -2
- package/dist/themes/static/variables/tokens/classic.js +2 -2
- package/dist/themes/static/variables/tokens/classic.min.js +2 -2
- package/dist/themes/static/variables/tokens/horizon.js +2 -2
- package/dist/themes/static/variables/tokens/horizon.min.js +2 -2
- package/dist/themes/static/variables/tokens/main.js +2 -2
- package/dist/themes/static/variables/tokens/main.min.js +2 -2
- package/helpers/dom/element.js +2 -4
- package/helpers/dom/element.mjs +2 -4
- package/helpers/mixed.js +1 -1
- package/helpers/mixed.mjs +1 -1
- package/package.json +1 -1
- package/plugins/dataProvider/query/pagination.js +6 -3
- package/plugins/dataProvider/query/pagination.mjs +17 -7
- package/plugins/dialog/dialog.js +2 -1
- package/plugins/dialog/dialog.mjs +2 -1
- package/plugins/emptyDataState/emptyDataState.js +1 -1
- package/plugins/emptyDataState/emptyDataState.mjs +1 -1
- package/plugins/pagination/pagination.d.ts +1 -0
- package/plugins/pagination/pagination.js +7 -0
- package/plugins/pagination/pagination.mjs +7 -0
- package/selection/mouseEventHandler.js +12 -2
- package/selection/mouseEventHandler.mjs +12 -2
- package/styles/handsontable.css +2 -2
- package/styles/handsontable.min.css +2 -2
- package/styles/handsontableStyles.js +1 -1
- package/styles/handsontableStyles.mjs +1 -1
- package/styles/ht-icons-horizon.min.css +2 -2
- package/styles/ht-icons-main.min.css +2 -2
- package/styles/ht-theme-classic-no-icons.min.css +2 -2
- package/styles/ht-theme-classic.min.css +2 -2
- package/styles/ht-theme-horizon-no-icons.min.css +2 -2
- package/styles/ht-theme-horizon.min.css +2 -2
- package/styles/ht-theme-main-no-icons.min.css +2 -2
- package/styles/ht-theme-main.min.css +2 -2
- package/themes/engine/manager.js +50 -2
- package/themes/engine/manager.mjs +50 -2
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
* INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM
|
|
26
26
|
* USE OR INABILITY TO USE THIS SOFTWARE.
|
|
27
27
|
*
|
|
28
|
-
* Version: 17.1.0
|
|
29
|
-
* Release date:
|
|
28
|
+
* Version: 17.1.0
|
|
29
|
+
* Release date: 19/05/2026 (built at 19/05/2026 14:51:40)
|
|
30
30
|
*/
|
|
31
31
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
32
32
|
|
|
@@ -34258,8 +34258,8 @@ Handsontable.hooks = _core_hooks__rspack_import_10.Hooks.getSingleton();
|
|
|
34258
34258
|
Handsontable.CellCoords = _3rdparty_walkontable_src__rspack_import_0["default"];
|
|
34259
34259
|
Handsontable.CellRange = _3rdparty_walkontable_src__rspack_import_1["default"];
|
|
34260
34260
|
Handsontable.packageName = 'handsontable';
|
|
34261
|
-
Handsontable.buildDate = "
|
|
34262
|
-
Handsontable.version = "17.1.0
|
|
34261
|
+
Handsontable.buildDate = "19/05/2026 14:51:40";
|
|
34262
|
+
Handsontable.version = "17.1.0";
|
|
34263
34263
|
Handsontable.languages = {
|
|
34264
34264
|
dictionaryKeys: _i18n_registry__rspack_import_11.dictionaryKeys,
|
|
34265
34265
|
getLanguageDictionary: _i18n_registry__rspack_import_11.getLanguageDictionary,
|
|
@@ -35230,6 +35230,7 @@ const deprecationWarns = new Set();
|
|
|
35230
35230
|
this.rootGridElement.appendChild(this.rootElement);
|
|
35231
35231
|
this.rootWrapperElement.appendChild(this.rootGridElement);
|
|
35232
35232
|
this.rootContainer.appendChild(this.rootWrapperElement);
|
|
35233
|
+
this.rootWrapperElement.__hotInstance = this;
|
|
35233
35234
|
(0,_helpers_dom_element__rspack_import_2.addClass)(this.rootPortalElement, 'ht-portal');
|
|
35234
35235
|
this.rootDocument.body.appendChild(this.rootPortalElement);
|
|
35235
35236
|
}
|
|
@@ -35469,7 +35470,9 @@ const deprecationWarns = new Set();
|
|
|
35469
35470
|
const selectionSource = selection.getSelectionSource();
|
|
35470
35471
|
const ignoreScrollSources = [
|
|
35471
35472
|
'loadData',
|
|
35472
|
-
'updateData'
|
|
35473
|
+
'updateData',
|
|
35474
|
+
'deselect',
|
|
35475
|
+
'shift'
|
|
35473
35476
|
];
|
|
35474
35477
|
if (isLastSelectionLayer && !ignoreScrollSources.includes(selectionSource) && (!preventScrolling.isTouched() || preventScrolling.isTouched() && !preventScrolling.value)) {
|
|
35475
35478
|
viewportScroller.scrollTo(cellCoords);
|
|
@@ -35500,14 +35503,16 @@ const deprecationWarns = new Set();
|
|
|
35500
35503
|
'shift',
|
|
35501
35504
|
'refresh',
|
|
35502
35505
|
'loadData',
|
|
35503
|
-
'updateData'
|
|
35506
|
+
'updateData',
|
|
35507
|
+
'deselect'
|
|
35504
35508
|
].includes(selectionSource)) {
|
|
35505
35509
|
editorManager.closeEditor(null);
|
|
35506
35510
|
}
|
|
35507
35511
|
if (![
|
|
35508
35512
|
'refresh',
|
|
35509
35513
|
'loadData',
|
|
35510
|
-
'updateData'
|
|
35514
|
+
'updateData',
|
|
35515
|
+
'deselect'
|
|
35511
35516
|
].includes(selectionSource)) {
|
|
35512
35517
|
instance.view.render();
|
|
35513
35518
|
editorManager.prepareEditor();
|
|
@@ -35531,7 +35536,10 @@ const deprecationWarns = new Set();
|
|
|
35531
35536
|
const { from, to } = cellRanges[selectionLayerLevel];
|
|
35532
35537
|
this.runHooks('afterSelectionEnd', from.row, from.col, to.row, to.col, selectionLayerLevel);
|
|
35533
35538
|
this.runHooks('afterSelectionEndByProp', from.row, instance.colToProp(from.col), to.row, instance.colToProp(to.col), selectionLayerLevel);
|
|
35534
|
-
if (
|
|
35539
|
+
if ([
|
|
35540
|
+
'refresh',
|
|
35541
|
+
'deselect'
|
|
35542
|
+
].includes(selection.getSelectionSource())) {
|
|
35535
35543
|
instance.view.render();
|
|
35536
35544
|
editorManager.prepareEditor();
|
|
35537
35545
|
}
|
|
@@ -36188,7 +36196,7 @@ const deprecationWarns = new Set();
|
|
|
36188
36196
|
focusGridManager.init();
|
|
36189
36197
|
if ((0,_utils_rootInstance__rspack_import_1.isRootInstance)(this)) {
|
|
36190
36198
|
(0,_utils_a11yAnnouncer__rspack_import_26.install)(instance.rootPortalElement);
|
|
36191
|
-
(0,_helpers_mixed__rspack_import_19._injectProductInfo)(mergedUserSettings.licenseKey, this.rootWrapperElement, "
|
|
36199
|
+
(0,_helpers_mixed__rspack_import_19._injectProductInfo)(mergedUserSettings.licenseKey, this.rootWrapperElement, "19/05/2026");
|
|
36192
36200
|
}
|
|
36193
36201
|
instance.runHooks('init');
|
|
36194
36202
|
this.render();
|
|
@@ -61931,13 +61939,11 @@ function getScrollbarWidth() {
|
|
|
61931
61939
|
*/ function observeVisibilityChangeOnce(elementToBeObserved, callback) {
|
|
61932
61940
|
const visibilityObserver = new IntersectionObserver((entries, observer)=>{
|
|
61933
61941
|
entries.forEach((entry)=>{
|
|
61934
|
-
if (entry.isIntersecting
|
|
61942
|
+
if (entry.isIntersecting) {
|
|
61935
61943
|
callback();
|
|
61936
|
-
observer.
|
|
61944
|
+
observer.disconnect();
|
|
61937
61945
|
}
|
|
61938
61946
|
});
|
|
61939
|
-
}, {
|
|
61940
|
-
root: elementToBeObserved.ownerDocument.body
|
|
61941
61947
|
});
|
|
61942
61948
|
visibilityObserver.observe(elementToBeObserved);
|
|
61943
61949
|
}
|
|
@@ -62594,7 +62600,7 @@ const domMessages = {
|
|
|
62594
62600
|
function _injectProductInfo(key, element, releaseDate) {
|
|
62595
62601
|
const hasValidType = !isEmpty(key);
|
|
62596
62602
|
const isNonCommercial = typeof key === 'string' && (key.toLowerCase() === 'non-commercial-and-evaluation' || key.toLowerCase() === 'ht68e-1f2b7-47158-70b05-0842f');
|
|
62597
|
-
const hotVersion = "17.1.0
|
|
62603
|
+
const hotVersion = "17.1.0";
|
|
62598
62604
|
let keyValidityDate;
|
|
62599
62605
|
let consoleMessageState = 'invalid';
|
|
62600
62606
|
let domMessageState = 'invalid';
|
|
@@ -79348,22 +79354,32 @@ const PAGINATION_PLUGIN_KEY = 'pagination';
|
|
|
79348
79354
|
/**
|
|
79349
79355
|
* Copies enabled Pagination `pageSize` and current page into query parameters.
|
|
79350
79356
|
*
|
|
79351
|
-
* Uses [[Pagination#getCurrentPage]] when present so refetches
|
|
79352
|
-
* without calling [[Pagination#getPaginationData]]
|
|
79353
|
-
*
|
|
79354
|
-
*
|
|
79355
|
-
*
|
|
79357
|
+
* Uses [[Pagination#getCurrentPage]] and [[Pagination#getCurrentPageSize]] when present so refetches
|
|
79358
|
+
* (e.g. after sort) keep the user-selected state without calling [[Pagination#getPaginationData]]
|
|
79359
|
+
* (unsafe before DataProvider registers external-pagination hooks).
|
|
79360
|
+
* Falls back to `pageSize` / `initialPage` from settings when the state getters are missing (tests)
|
|
79361
|
+
* or return a non-numeric value (e.g. `'auto'`).
|
|
79362
|
+
*
|
|
79363
|
+
* @param {{
|
|
79364
|
+
* enabled?: boolean,
|
|
79365
|
+
* getSetting: function(string): *,
|
|
79366
|
+
* getCurrentPage?: function(): number,
|
|
79367
|
+
* getCurrentPageSize?: function(): number | 'auto' | undefined,
|
|
79368
|
+
* }|null|undefined} paginationPlugin Pagination plugin instance.
|
|
79356
79369
|
* @param {{ page: number, pageSize: number }} queryParameters Target object (mutated).
|
|
79357
79370
|
* @returns {void}
|
|
79358
79371
|
*/ function applyPaginationToQueryParameters(paginationPlugin, queryParameters) {
|
|
79359
79372
|
if (!paginationPlugin?.enabled) {
|
|
79360
79373
|
return;
|
|
79361
79374
|
}
|
|
79362
|
-
const
|
|
79375
|
+
const currentPageSize = typeof paginationPlugin.getCurrentPageSize === 'function' ? paginationPlugin.getCurrentPageSize() : undefined;
|
|
79376
|
+
const settingsPageSize = paginationPlugin.getSetting('pageSize');
|
|
79363
79377
|
const initialPage = paginationPlugin.getSetting('initialPage');
|
|
79364
79378
|
const currentPage = typeof paginationPlugin.getCurrentPage === 'function' ? paginationPlugin.getCurrentPage() : undefined;
|
|
79365
|
-
if (typeof
|
|
79366
|
-
queryParameters.pageSize =
|
|
79379
|
+
if (typeof currentPageSize === 'number') {
|
|
79380
|
+
queryParameters.pageSize = currentPageSize;
|
|
79381
|
+
} else if (typeof settingsPageSize === 'number') {
|
|
79382
|
+
queryParameters.pageSize = settingsPageSize;
|
|
79367
79383
|
}
|
|
79368
79384
|
if (typeof currentPage === 'number' && currentPage >= 1) {
|
|
79369
79385
|
queryParameters.page = currentPage;
|
|
@@ -80087,7 +80103,8 @@ const SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;
|
|
|
80087
80103
|
this.hot.view.render();
|
|
80088
80104
|
this.#selectionState = null;
|
|
80089
80105
|
} else {
|
|
80090
|
-
this.hot.
|
|
80106
|
+
this.hot.view.render();
|
|
80107
|
+
this.#selectionState = null;
|
|
80091
80108
|
}
|
|
80092
80109
|
this.hot.runHooks('afterDialogHide');
|
|
80093
80110
|
}
|
|
@@ -82160,7 +82177,7 @@ const SHORTCUTS_CONTEXT_NAME = `plugin:${PLUGIN_KEY}`;
|
|
|
82160
82177
|
this.hot.view.render();
|
|
82161
82178
|
this.#selectionState = null;
|
|
82162
82179
|
} else {
|
|
82163
|
-
this.hot.selectCell(0, 0);
|
|
82180
|
+
this.hot.selectCell(0, 0, undefined, undefined, false);
|
|
82164
82181
|
}
|
|
82165
82182
|
this.hot.runHooks('afterEmptyDataStateHide');
|
|
82166
82183
|
}
|
|
@@ -108835,6 +108852,13 @@ const AUTO_PAGE_SIZE_WARNING = (0,_helpers_templateLiteralTag__rspack_import_1.t
|
|
|
108835
108852
|
return this.#currentPage;
|
|
108836
108853
|
}
|
|
108837
108854
|
/**
|
|
108855
|
+
* Returns the current page size from internal pagination state. May be `'auto'`.
|
|
108856
|
+
*
|
|
108857
|
+
* @returns {number | 'auto'} Current page size or `'auto'`.
|
|
108858
|
+
*/ getCurrentPageSize() {
|
|
108859
|
+
return this.#pageSize;
|
|
108860
|
+
}
|
|
108861
|
+
/**
|
|
108838
108862
|
* Allows changing the page for specified page number.
|
|
108839
108863
|
*
|
|
108840
108864
|
* @param {number} pageNumber The page number to set (from 1 to N). If `0` is passed, it
|
|
@@ -115548,17 +115572,27 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
115548
115572
|
const lastRenderableRange = renderableRange.current();
|
|
115549
115573
|
if (renderableRange.size() > 1 && !lastRenderableRange.isHeader() && !selection.isMultiple(lastRenderableRange)) {
|
|
115550
115574
|
const ranges = renderableRange.findAll(lastRenderableRange);
|
|
115551
|
-
//
|
|
115552
|
-
//
|
|
115575
|
+
// Mark the selection source as 'deselect' so `afterSetRangeEnd` in core.js skips the
|
|
115576
|
+
// viewport scroll for this dedup-driven refresh. Other side effects (`closeEditor`,
|
|
115577
|
+
// per-range `render` + `prepareEditor`, and the final batched render in
|
|
115578
|
+
// `afterSelectionFinished`) are guarded against the 'deselect' source in the same way
|
|
115579
|
+
// the existing 'refresh' source is handled - so a single batched render still happens
|
|
115580
|
+
// once the refresh completes.
|
|
115553
115581
|
if (ranges.length === renderableRange.size()) {
|
|
115582
|
+
// if the last selection range is the same as the first one (case when the single cell
|
|
115583
|
+
// is selected twice or more) remove duplicate ranges
|
|
115584
|
+
selection.markSource('deselect');
|
|
115554
115585
|
selectionRange.pop();
|
|
115555
115586
|
selection.refresh();
|
|
115587
|
+
selection.markEndSource();
|
|
115556
115588
|
} else if (ranges.length > 1) {
|
|
115589
|
+
selection.markSource('deselect');
|
|
115557
115590
|
selectionRange.removeLayers(ranges.map((param)=>{
|
|
115558
115591
|
let { layer } = param;
|
|
115559
115592
|
return layer;
|
|
115560
115593
|
}));
|
|
115561
115594
|
selection.refresh();
|
|
115595
|
+
selection.markEndSource();
|
|
115562
115596
|
}
|
|
115563
115597
|
}
|
|
115564
115598
|
}
|
|
@@ -120667,7 +120701,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
120667
120701
|
__webpack_require__.d(__webpack_exports__, {
|
|
120668
120702
|
"default": () => (__rspack_default_export)
|
|
120669
120703
|
});
|
|
120670
|
-
/* eslint-disable max-len, quotes */ /* This file is autogenerated. */ /* export default */ const __rspack_default_export = ("/*!\n * Copyright (c) HANDSONCODE sp. z o. o.\n *\n * HANDSONTABLE is a software distributed by HANDSONCODE sp. z o. o., a Polish corporation based in\n * Gdynia, Poland, at Aleja Zwyciestwa 96-98, registered by the District Court in Gdansk under number\n * 538651, EU tax ID number: PL5862294002, share capital: PLN 62,800.00.\n *\n * This software is protected by applicable copyright laws, including international treaties, and dual-\n * licensed - depending on whether your use for commercial purposes, meaning intended for or\n * resulting in commercial advantage or monetary compensation, or not.\n *\n * If your use is strictly personal or solely for evaluation purposes, meaning for the purposes of testing\n * the suitability, performance, and usefulness of this software outside the production environment,\n * you agree to be bound by the terms included in the \"handsontable-non-commercial-license.pdf\" file.\n *\n * Your use of this software for commercial purposes is subject to the terms included in an applicable\n * license agreement.\n *\n * In any case, you must not make any such use of this software as to develop software which may be\n * considered competitive with this software.\n *\n * UNLESS EXPRESSLY AGREED OTHERWISE, HANDSONCODE PROVIDES THIS SOFTWARE ON AN \"AS IS\"\n * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND IN NO EVENT AND UNDER NO\n * LEGAL THEORY, SHALL HANDSONCODE BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT,\n * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM\n * USE OR INABILITY TO USE THIS SOFTWARE.\n *\n * Version: 17.1.0-rc8\n * Release date: 08/05/2026 (built at 08/05/2026 12:05:21)\n */\n.ht-root-wrapper {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.htFocusCatcher {\n display: block !important;\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n opacity: 0;\n z-index: -1;\n}\n\n.ht-grid {\n flex: 1 1 auto;\n min-height: 0;\n}\n\n.htScrollbarTest {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n}\n\n.htScrollbarSafariTest::-webkit-scrollbar {\n width: 9px;\n height: 9px;\n}\n\n.handsontable {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n position: relative;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n letter-spacing: var(--ht-letter-spacing);\n color: var(--ht-foreground-color);\n /* Miscellaneous */\n touch-action: manipulation;\n}\n.handsontable .wtHolder {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n}\n.handsontable .wtHolder::-webkit-scrollbar {\n width: 9px;\n height: 9px;\n}\n.handsontable .wtHolder::-webkit-scrollbar-track {\n background: var(--ht-scrollbar-track-color);\n border-radius: var(--ht-scrollbar-border-radius);\n}\n.handsontable .wtHolder::-webkit-scrollbar-thumb {\n background-color: var(--ht-scrollbar-thumb-color);\n border-radius: var(--ht-scrollbar-border-radius);\n}\n.handsontable .wtHolder::-webkit-scrollbar-corner {\n background: var(--ht-scrollbar-track-color);\n border-end-end-radius: var(--ht-scrollbar-border-radius);\n}\n.handsontable.ht-wrapper {\n border-radius: var(--ht-wrapper-border-radius, 0);\n height: 100%;\n width: 100%;\n}\n.handsontable.ht-wrapper:not(.htFirstDatasetColumnNotRendered) td:first-of-type {\n border-inline-start-width: 1px;\n}\n.handsontable.ht-wrapper::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n border: var(--ht-wrapper-border-width) solid var(--ht-wrapper-border-color);\n border-radius: var(--ht-wrapper-border-radius, 0);\n z-index: 999;\n pointer-events: none;\n overflow: hidden;\n}\n.handsontable.htGhostTable.htNestedHeaders table {\n border-spacing: 0;\n border-collapse: collapse;\n}\n.handsontable.htGhostTable table thead th {\n border-bottom-width: 0;\n}\n.handsontable.htGhostTable table tbody tr:first-of-type th:first-child,\n.handsontable.htGhostTable table tbody tr:first-of-type td:first-child {\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n}\n.handsontable.htGhostTable table tbody tr th,\n.handsontable.htGhostTable table tbody tr td {\n border-top-width: 0;\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n}\n.handsontable.htHasScrollX:not(.htHorizontallyScrollableByWindow):not(.htScrollbarHidden) .ht_master .wtHolder, .handsontable.htHasScrollY:not(.htVerticallyScrollableByWindow):not(.htScrollbarHidden) .ht_master .wtHolder {\n border-radius: var(--ht-wrapper-border-radius, 0);\n}\n.handsontable:not(.htHorizontallyScrollableByWindow).htPagination .ht_master .wtHolder, .handsontable:not(.htHorizontallyScrollableByWindow).htHasScrollX .ht_master .wtHolder, .handsontable:not(.htHorizontallyScrollableByWindow).htHasScrollY .ht_master .wtHolder, .handsontable:not(.htVerticallyScrollableByWindow).htPagination .ht_master .wtHolder, .handsontable:not(.htVerticallyScrollableByWindow).htHasScrollX .ht_master .wtHolder, .handsontable:not(.htVerticallyScrollableByWindow).htHasScrollY .ht_master .wtHolder {\n background-color: var(--ht-background-color);\n}\n.handsontable tr.ht__row_even th {\n background-color: var(--ht-row-header-even-background-color);\n}\n.handsontable tr.ht__row_even td {\n background-color: var(--ht-row-cell-even-background-color);\n}\n.handsontable tr.ht__row_odd th {\n background-color: var(--ht-row-header-odd-background-color);\n}\n.handsontable tr.ht__row_odd td {\n background-color: var(--ht-row-cell-odd-background-color);\n}\n.handsontable th,\n.handsontable td {\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n vertical-align: top;\n border-top-width: 0;\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n border-bottom-width: 1px;\n border-style: solid;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n white-space: pre-wrap;\n overflow: hidden;\n outline: none;\n outline-width: 0;\n empty-cells: show;\n box-sizing: border-box;\n color: var(--ht-foreground-color);\n border-top-color: var(--ht-cell-vertical-border-color);\n border-bottom-color: var(--ht-cell-vertical-border-color);\n border-inline-start-color: var(--ht-cell-horizontal-border-color);\n border-inline-end-color: var(--ht-cell-horizontal-border-color);\n}\n.handsontable th.invisibleSelection,\n.handsontable td.invisibleSelection {\n outline: none;\n}\n.handsontable th.invisibleSelection::selection,\n.handsontable td.invisibleSelection::selection {\n background: transparent;\n}\n.handsontable th {\n position: relative;\n overflow: visible;\n text-align: center;\n font-weight: var(--ht-header-font-weight);\n white-space: nowrap;\n color: var(--ht-header-foreground-color);\n background-color: var(--ht-header-background-color);\n}\n.handsontable th:last-child {\n /* Foundation framework fix */\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n border-bottom-width: 1px;\n border-inline-end-color: var(--ht-border-color);\n}\n.handsontable th:last-child.ht__active_highlight {\n border-inline-end-color: var(--ht-header-active-border-color);\n}\n.handsontable th:first-child {\n border-inline-start-color: var(--ht-border-color);\n}\n.handsontable th:first-child.ht__active_highlight {\n border-inline-start-color: var(--ht-header-active-border-color);\n}\n.handsontable th:first-child, .handsontable th:nth-child(2) {\n border-inline-start-width: 1px;\n}\n.handsontable th.current {\n box-shadow: inset 0 0 0 1px var(--ht-cell-selection-border-color);\n}\n.handsontable th.active {\n color: var(--ht-header-active-foreground-color);\n background-color: var(--ht-header-active-background-color);\n}\n.handsontable th.ht__highlight {\n color: var(--ht-header-highlighted-foreground-color);\n background-color: var(--ht-header-highlighted-background-color);\n}\n.handsontable th.ht__active_highlight {\n border-color: var(--ht-header-active-border-color);\n color: var(--ht-header-active-foreground-color);\n background-color: var(--ht-header-active-background-color);\n}\n.handsontable tbody tr.ht__row_odd th.ht__highlight, .handsontable tbody tr.ht__row_even th.ht__highlight {\n color: var(--ht-header-row-highlighted-foreground-color);\n background-color: var(--ht-header-row-highlighted-background-color);\n}\n.handsontable tbody tr.ht__row_odd th.ht__active_highlight, .handsontable tbody tr.ht__row_even th.ht__active_highlight {\n color: var(--ht-header-row-active-foreground-color);\n background-color: var(--ht-header-row-active-background-color);\n}\n.handsontable tbody tr:first-of-type th:first-child:empty::after,\n.handsontable tbody tr:first-of-type td:first-child:empty::after {\n content: \"\";\n display: block;\n min-height: var(--ht-line-height);\n}\n.handsontable tbody tr th {\n padding: 0;\n color: var(--ht-header-row-foreground-color);\n background-color: var(--ht-header-row-background-color);\n}\n.handsontable tbody tr th.ht__active_highlight {\n box-shadow: 0 -1px 0 0 var(--ht-header-active-border-color);\n}\n.handsontable tbody tr th .relative {\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n min-height: 100%;\n}\n.handsontable tbody tr td:first-child {\n border-inline-start-color: var(--ht-border-color);\n}\n.handsontable tbody tr td:last-child {\n border-inline-end-color: var(--ht-border-color);\n}\n.handsontable thead tr th {\n padding: 0;\n}\n.handsontable thead tr th.ht__active_highlight {\n box-shadow: -1px 0 0 0 var(--ht-header-active-border-color);\n}\n.handsontable thead tr th .relative {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n gap: 2px;\n}\n.handsontable thead tr th .relative .colHeader {\n flex: 1 1 auto;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n vertical-align: top;\n}\n.handsontable tr:first-child th,\n.handsontable tr:first-child td {\n border-top-color: var(--ht-border-color);\n border-top-width: 1px;\n}\n.handsontable tr:first-child th.ht__active_highlight,\n.handsontable tr:first-child td.ht__active_highlight {\n border-top-color: var(--ht-header-active-border-color);\n}\n.handsontable tr:last-child th,\n.handsontable tr:last-child td {\n border-bottom-color: var(--ht-border-color);\n}\n.handsontable tr:last-child th.ht__active_highlight,\n.handsontable tr:last-child td.ht__active_highlight {\n border-bottom-color: var(--ht-header-active-border-color);\n}\n.handsontable div[class^=ht_clone] thead .ht__highlight .relative::after {\n content: \"\";\n display: block;\n position: absolute;\n left: -1px;\n right: -1px;\n bottom: -1px;\n height: var(--ht-header-highlighted-shadow-size);\n background-color: var(--ht-accent-color);\n}\n.handsontable div[class^=ht_clone] thead tr:only-of-type .ht__highlight .relative::after {\n bottom: 0;\n}\n.handsontable div[class^=ht_clone] tbody .ht__highlight .relative::after {\n content: \"\";\n display: block;\n position: absolute;\n top: -1px;\n right: -1px;\n bottom: -1px;\n width: var(--ht-header-highlighted-shadow-size);\n background-color: var(--ht-accent-color);\n}\n.handsontable div[class^=ht_clone] td:first-of-type {\n border-inline-start-width: 1px;\n}\n.handsontable thead tr:not(:last-child) th {\n /* Fix for - nested columns with hidden column */\n overflow: hidden;\n}\n.handsontable .hide {\n display: none;\n}\n.handsontable .relative {\n position: relative;\n box-sizing: border-box;\n}\n.handsontable .wtHider {\n width: 0;\n}\n.handsontable .wtSpreader {\n position: relative;\n /* must be 0, otherwise blank space appears in scroll demo after scrolling max to the right */\n width: 0;\n height: auto;\n}\n.handsontable .htAutoSize {\n position: absolute;\n left: -99000px;\n top: -99000px;\n visibility: hidden;\n}\n.handsontable .htTextEllipsis {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n.handsontable table,\n.handsontable tbody,\n.handsontable thead,\n.handsontable input,\n.handsontable textarea,\n.handsontable div {\n box-sizing: content-box;\n}\n.handsontable input,\n.handsontable textarea {\n min-height: initial;\n}\n.handsontable .htCore {\n width: 0;\n margin: 0;\n border-width: 0;\n border-spacing: 0;\n border-collapse: separate;\n outline-width: 0;\n table-layout: fixed;\n cursor: default;\n background-color: var(--ht-background-color);\n}\n.handsontable col {\n width: 64px;\n}\n.handsontable col.rowHeader {\n width: 64px;\n}\n.handsontable col.hidden {\n width: 0 !important;\n}\n.handsontable span.colHeader, .handsontable span.rowHeader {\n display: inline-block;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n}\n.handsontable tr.hidden {\n display: none;\n}\n.handsontable tr.hidden td,\n.handsontable tr.hidden th {\n display: none;\n}\n.handsontable a {\n color: var(--ht-link-color);\n}\n.handsontable a:hover {\n color: var(--ht-link-hover-color);\n}\n.handsontable .ht_clone_top th:nth-child(2) {\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n}\n.handsontable .ht_clone_top_inline_start_corner th:nth-child(2) {\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n}\n.handsontable.htRowHeaders thead tr th:nth-child(2) {\n border-inline-start-width: 1px;\n}\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) ~ .handsontable:not(.htGhostTable) tbody tr th,\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) ~ .handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child {\n border-inline-end-width: 0;\n border-inline-start-width: 1px;\n}\n.handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th, .handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) ~ .handsontable thead tr:last-child th,\n.handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th, .handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) ~ .handsontable thead tr.lastChild th {\n border-bottom-width: 0;\n}\n.handsontable.htAutoRowSize .ht_master.innerBorderTop tbody tr:first-child th,\n.handsontable.htAutoRowSize .ht_master.innerBorderTop tbody tr:first-child td {\n border-top-width: 0;\n}\n.handsontable.htAutoRowSize .ht_master.innerBorderTop ~ .ht_clone_inline_start tbody tr:first-child th,\n.handsontable.htAutoRowSize .ht_master.innerBorderTop ~ .ht_clone_inline_start tbody tr:first-child td {\n border-top-width: 0;\n}\n.handsontable .ht_master table.htCore > thead,\n.handsontable .ht_master table.htCore > tbody > tr > th,\n.handsontable .ht_clone_inline_start table.htCore > thead {\n visibility: hidden;\n}\n\n.ht_master,\n.ht_clone_inline_start,\n.ht_clone_top,\n.ht_clone_bottom {\n overflow: hidden;\n}\n.ht_master .wtHolder,\n.ht_clone_inline_start .wtHolder,\n.ht_clone_top .wtHolder,\n.ht_clone_bottom .wtHolder {\n overflow: hidden;\n}\n\n.ht_master .wtHolder {\n overflow: auto;\n}\n\n[dir=rtl].handsontable td[dir=ltr] {\n border-inline-end-width: 0;\n border-inline-start-width: 1px;\n}\n[dir=rtl].handsontable tbody tr td[dir=ltr]:last-child {\n border-inline-start-color: var(--ht-border-color);\n}\n[dir=rtl].handsontable div[class^=ht_clone] tbody .ht__highlight .relative::after {\n right: auto;\n left: -1px;\n}\n\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_master .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_master .htCore tbody tr:first-child td:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top_inline_start_corner .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top .htCore tbody tr:first-child td:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_inline_start .htCore tbody tr:first-child th:first-child,\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_inline_start .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore {\n border-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:first-child th:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:last-child th:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:last-child th:last-child {\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore tbody tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore tbody tr:last-child td:last-child {\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top .htCore {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top .htCore thead tr:first-child th:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child th:first-child,\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tr:last-child th:first-child,\n.handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom .htCore {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child th:first-child,\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child th:last-child,\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child td:last-child {\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper.htHasScrollX .htCore {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htHasScrollX .htCore thead tr:last-child th:first-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child td:first-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child th:first-child {\n border-end-start-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htHasScrollX .htCore thead tr:last-child th:last-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child td:last-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child th:last-child {\n border-end-end-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore thead tr:first-child th:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:first-child td:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:first-child th:last-child {\n border-start-end-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore thead tr:last-child th:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:last-child td:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:last-child th:last-child {\n border-end-end-radius: 0 !important;\n}\n\n.handsontable.mobile {\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n -webkit-overflow-scrolling: touch;\n}\n.handsontable.mobile .wtHolder {\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n -webkit-overflow-scrolling: touch;\n}\n.handsontable.mobile .handsontableInput:focus {\n box-shadow: inset 0 0 0 2px var(--ht-accent-color);\n -webkit-appearance: none;\n}\n.handsontable .topSelectionHandle,\n.handsontable .topSelectionHandle-HitArea,\n.handsontable .bottomSelectionHandle,\n.handsontable .bottomSelectionHandle-HitArea {\n inset-inline-start: -10000px;\n inset-inline-end: unset;\n top: -10000px;\n z-index: 9999;\n}\n.handsontable.hide-tween {\n -webkit-animation: opacity-hide 0.2s;\n animation: opacity-hide 0.2s;\n animation-fill-mode: forwards;\n -webkit-animation-fill-mode: forwards;\n}\n.handsontable.show-tween {\n -webkit-animation: opacity-show 0.3s;\n animation: opacity-show 0.3s;\n animation-fill-mode: forwards;\n -webkit-animation-fill-mode: forwards;\n}\n\n.ht_clone_master {\n z-index: 100;\n}\n\n.ht_clone_inline_start {\n z-index: 120;\n}\n\n.ht_clone_bottom {\n z-index: 130;\n}\n\n.ht_clone_bottom_inline_start_corner {\n z-index: 150;\n}\n\n.ht_clone_top {\n z-index: 160;\n}\n\n.ht_clone_top_inline_start_corner {\n z-index: 180;\n}\n\n.ht_editor_hidden {\n z-index: -1;\n}\n\n.ht_editor_visible {\n z-index: 200;\n}\n\n.handsontable td.area {\n position: relative;\n}\n.handsontable td.area::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-1 {\n position: relative;\n}\n.handsontable td.area-1::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-2 {\n position: relative;\n}\n.handsontable td.area-2::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-3 {\n position: relative;\n}\n.handsontable td.area-3::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-4 {\n position: relative;\n}\n.handsontable td.area-4::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-5 {\n position: relative;\n}\n.handsontable td.area-5::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-6 {\n position: relative;\n}\n.handsontable td.area-6::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-7 {\n position: relative;\n}\n.handsontable td.area-7::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area::before {\n opacity: 0.14;\n}\n.handsontable td.area-1::before {\n opacity: 0.21;\n}\n.handsontable td.area-2::before {\n opacity: 0.28;\n}\n.handsontable td.area-3::before {\n opacity: 0.35;\n}\n.handsontable td.area-4::before {\n opacity: 0.42;\n}\n.handsontable td.area-5::before {\n opacity: 0.49;\n}\n.handsontable td.area-6::before {\n opacity: 0.56;\n}\n.handsontable td.area-7::before {\n opacity: 0.63;\n}\n.handsontable td.area {\n border-color: color-mix(in srgb, var(--ht-border-color), var(--ht-foreground-color) 10%);\n}\n.handsontable .wtBorder {\n position: absolute;\n font-size: 0;\n}\n.handsontable .wtBorder:nth-child(1), .handsontable .wtBorder:nth-child(3) {\n z-index: 2;\n}\n.handsontable .wtBorder:nth-child(2), .handsontable .wtBorder:nth-child(4) {\n z-index: 1;\n}\n.handsontable .wtBorder.hidden {\n display: none !important;\n}\n.handsontable .wtBorder.current {\n z-index: 10;\n background-color: var(--ht-cell-selection-border-color) !important;\n}\n.handsontable .wtBorder.area {\n z-index: 8;\n background-color: var(--ht-cell-selection-border-color) !important;\n}\n.handsontable .wtBorder.fill {\n z-index: 6;\n background-color: var(--ht-cell-autofill-fill-border-color, #68696c) !important;\n}\n.handsontable .wtBorder.corner {\n border-radius: var(--ht-cell-autofill-border-radius) !important;\n background-color: var(--ht-cell-autofill-background-color, #1a42e8) !important;\n border-color: var(--ht-cell-autofill-border-color) !important;\n font-size: 0;\n cursor: crosshair;\n z-index: 10;\n}\n.handsontable .wtBorder.corner::after {\n content: \"\";\n position: absolute;\n border-radius: var(--ht-cell-autofill-border-radius);\n inset: min(0px, (var(--ht-cell-autofill-size) - var(--ht-cell-autofill-hit-area-size)) / 2);\n background: transparent;\n}\n.handsontable .wtBorder.corner.wtCornerInlineEndEdge::after {\n inset-inline-end: 0;\n}\n.handsontable .wtBorder.corner.wtCornerBlockEndEdge::after {\n inset-block-end: 0;\n}\n\n.hot-display-license-info {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n padding: var(--ht-license-vertical-padding, 16px) var(--ht-license-horizontal-padding, 16px);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n color: var(--ht-license-foreground-color);\n background-color: var(--ht-license-background-color, #f7f7f9);\n text-align: left;\n border: 1px solid var(--ht-border-color, #f7f7f9);\n margin-top: 10px;\n border-radius: var(--ht-wrapper-border-radius);\n}\n.hot-display-license-info a {\n font-size: var(--ht-license-font-size);\n color: var(--ht-link-color);\n}\n.hot-display-license-info a:hover {\n color: var(--ht-link-hover-color);\n}\n\n.handsontable .htAutocompleteArrow {\n position: relative;\n cursor: default;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n font-size: 0;\n float: right;\n top: calc((var(--ht-line-height) - var(--ht-icon-size)) / 2);\n margin-inline-start: calc(var(--ht-gap-size) * 2);\n margin-inline-end: 1px;\n}\n.handsontable .htAutocompleteArrow::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.6;\n}\n\n[dir=rtl].handsontable .htAutocompleteArrow {\n float: left;\n}\n\n.handsontable .htCheckboxRendererInput {\n position: relative;\n display: inline-block;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n margin: 0;\n vertical-align: middle;\n cursor: pointer;\n margin-top: -2px;\n outline: none;\n}\n.handsontable .htCheckboxRendererInput:first-child {\n margin-inline-end: var(--ht-gap-size);\n}\n.handsontable .htCheckboxRendererInput:last-child {\n margin-inline-start: var(--ht-gap-size);\n}\n.handsontable .htCheckboxRendererInput::before {\n content: \"\";\n display: inline-block;\n position: absolute;\n top: 0;\n left: 0;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n border-radius: var(--ht-checkbox-border-radius);\n border: 1px solid var(--ht-checkbox-border-color);\n background-color: var(--ht-checkbox-background-color);\n box-sizing: border-box;\n pointer-events: none;\n transition: all var(--ht-table-transition) ease-in-out;\n}\n.handsontable .htCheckboxRendererInput::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n color: var(--ht-checkbox-icon-color);\n pointer-events: none;\n width: var(--ht-checkbox-size) !important;\n height: var(--ht-checkbox-size) !important;\n}\n.handsontable .htCheckboxRendererInput:checked::before {\n border-color: var(--ht-checkbox-checked-border-color);\n background-color: var(--ht-checkbox-checked-background-color);\n}\n.handsontable .htCheckboxRendererInput:checked::after {\n color: var(--ht-checkbox-checked-icon-color);\n}\n.handsontable .htCheckboxRendererInput:checked:disabled::before {\n border-color: var(--ht-checkbox-checked-disabled-border-color);\n background-color: var(--ht-checkbox-checked-disabled-background-color);\n}\n.handsontable .htCheckboxRendererInput:checked:disabled::after {\n color: var(--ht-checkbox-checked-disabled-icon-color);\n}\n.handsontable .htCheckboxRendererInput:checked:focus::before {\n border-color: var(--ht-checkbox-checked-focus-border-color);\n background-color: var(--ht-checkbox-checked-focus-background-color);\n}\n.handsontable .htCheckboxRendererInput:checked:focus::after {\n color: var(--ht-checkbox-checked-focus-icon-color);\n}\n.handsontable .htCheckboxRendererInput:focus::before {\n border-color: var(--ht-checkbox-focus-border-color);\n background-color: var(--ht-checkbox-focus-background-color);\n outline: 1px solid var(--ht-checkbox-focus-ring-color);\n}\n.handsontable .htCheckboxRendererInput:focus::after {\n color: var(--ht-checkbox-focus-icon-color);\n}\n.handsontable .htCheckboxRendererInput:disabled {\n cursor: initial;\n}\n.handsontable .htCheckboxRendererInput:disabled::before {\n border-color: var(--ht-checkbox-disabled-border-color);\n background-color: var(--ht-checkbox-disabled-background-color);\n}\n.handsontable .htCheckboxRendererInput:disabled::after {\n color: var(--ht-checkbox-disabled-icon-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate::before {\n border-color: var(--ht-checkbox-indeterminate-border-color);\n background-color: var(--ht-checkbox-indeterminate-background-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate::after {\n color: var(--ht-checkbox-indeterminate-icon-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:disabled::before {\n border-color: var(--ht-checkbox-indeterminate-disabled-border-color);\n background-color: var(--ht-checkbox-indeterminate-disabled-background-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:disabled::after {\n color: var(--ht-checkbox-indeterminate-disabled-icon-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:focus::before {\n border-color: var(--ht-checkbox-indeterminate-focus-border-color);\n background-color: var(--ht-checkbox-indeterminate-focus-background-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:focus::after {\n color: var(--ht-checkbox-indeterminate-focus-icon-color);\n}\n.handsontable .htCheckboxRendererInput.noValue {\n opacity: 0.5;\n}\n.handsontable .htCheckboxRendererLabel {\n display: inline-block;\n position: relative;\n font-size: inherit;\n line-height: inherit;\n cursor: pointer;\n color: inherit;\n margin: 0;\n}\n.handsontable .htCheckboxRendererLabel.fullWidth {\n width: 100%;\n}\n\n.handsontable .htPlaceholder {\n color: var(--ht-placeholder-color);\n}\n.handsontable .htDimmed {\n color: var(--ht-read-only-color) !important;\n background-color: var(--ht-cell-read-only-background-color) !important;\n}\n.handsontable .htLeft {\n text-align: left;\n}\n.handsontable .htCenter {\n text-align: center;\n}\n.handsontable .htRight {\n text-align: right;\n}\n.handsontable .htJustify {\n text-align: justify;\n}\n.handsontable .htTop {\n vertical-align: top;\n}\n.handsontable .htMiddle {\n vertical-align: middle;\n}\n.handsontable .htBottom {\n vertical-align: bottom;\n}\n.handsontable .htInvalid {\n /* gives priority over td.area selection background */\n background-color: var(--ht-cell-error-background-color) !important;\n}\n.handsontable .htNoWrap {\n white-space: nowrap;\n}\n.handsontable .htSearchResult {\n background-color: var(--ht-cell-success-background-color) !important;\n}\n\n.handsontable .ht-multi-select-renderer {\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n overflow: hidden;\n}\n.handsontable .ht-multi-select-chips-container {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--ht-gap-size);\n overflow: hidden;\n max-width: 100%;\n}\n.handsontable .ht-multi-select-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--ht-gap-size);\n padding: var(--ht-chip-vertical-padding) calc((var(--ht-line-height) - var(--ht-icon-size)) / 2) var(--ht-chip-vertical-padding) var(--ht-chip-horizontal-padding);\n border-radius: var(--ht-chip-border-radius);\n background: var(--ht-chip-background);\n white-space: nowrap;\n flex-shrink: 0;\n max-width: 100px;\n box-sizing: border-box;\n}\n.handsontable .ht-multi-select-chip-label {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--ht-foreground-color);\n font-style: normal;\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height, 40px);\n letter-spacing: var(--ht-letter-spacing, 0);\n padding: 0 var(--ht-chip-gap);\n}\n.handsontable .ht-multi-select-chip-remove {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--ht-icon-size) !important;\n height: var(--ht-icon-size) !important;\n padding: 0;\n cursor: pointer;\n flex-shrink: 0;\n color: var(--ht-icon-button-icon-color);\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.handsontable .ht-multi-select-chip-remove::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n}\n.handsontable .ht-multi-select-chip-remove:hover {\n background-color: var(--ht-icon-button-hover-background-color);\n}\n.handsontable .ht-multi-select-overflow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--ht-chip-vertical-padding) var(--ht-chip-horizontal-padding);\n background: var(--ht-chip-background);\n border-radius: var(--ht-chip-border-radius);\n color: var(--ht-foreground-color);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.handsontableInputHolder {\n position: absolute;\n top: 0;\n left: 0;\n}\n.handsontableInputHolder .handsontableInput {\n display: block;\n margin: 0;\n padding: calc(var(--ht-cell-vertical-padding, 4px) + 1px) calc(var(--ht-cell-horizontal-padding, 8px) + 1px);\n font-family: inherit !important;\n font-size: inherit !important;\n line-height: inherit !important;\n color: var(--ht-cell-editor-foreground-color);\n background-color: var(--ht-cell-editor-background-color, #ffffff);\n box-shadow: inset 0 0 0 var(--ht-cell-editor-border-width, 2px) var(--ht-cell-editor-border-color, #1a42e8), 0 0 var(--ht-cell-editor-shadow-blur-radius, 0) 0 var(--ht-cell-editor-shadow-color, transparent);\n border: none;\n border-radius: 0;\n -webkit-appearance: none !important;\n box-sizing: border-box;\n /* Miscellaneous */\n outline-width: 0;\n /* overwrite styles potentially made by a framework */\n}\n.handsontableInputHolder .handsontableInput:focus {\n outline: none;\n}\n\n.htSelectEditor {\n position: absolute;\n}\n.htSelectEditor select {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n padding: calc(var(--ht-cell-vertical-padding, 4px) + 1px) calc(var(--ht-cell-horizontal-padding, 8px) + 1px);\n padding-inline-end: 26px;\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--ht-cell-editor-foreground-color);\n background-color: var(--ht-cell-editor-background-color, #ffffff);\n font-family: inherit !important;\n font-size: inherit !important;\n line-height: inherit !important;\n box-shadow: inset 0 0 0 var(--ht-cell-editor-border-width, 2px) var(--ht-cell-editor-border-color, #1a42e8), 0 0 var(--ht-cell-editor-shadow-blur-radius, 0) 0 var(--ht-cell-editor-shadow-color, transparent);\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n -webkit-appearance: none !important;\n}\n.htSelectEditor select:focus {\n outline: none;\n}\n.htSelectEditor .htAutocompleteArrow {\n top: 50%;\n transform: translateY(-50%);\n margin-inline-end: 4px;\n z-index: 1;\n pointer-events: none;\n}\n\n.handsontable.listbox {\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n margin: 0;\n border: var(--ht-menu-border-width, 1px) solid var(--ht-menu-border-color, #e5e5e9);\n}\n.handsontable.listbox .ht_master {\n overflow: hidden;\n background-color: var(--ht-background-color);\n}\n.handsontable.listbox .wtHolder {\n overflow: auto;\n border-radius: 0 !important;\n}\n.handsontable.listbox .wtHider, .handsontable.listbox .htCore {\n border-radius: 0 !important;\n}\n.handsontable.listbox table {\n overflow: hidden;\n}\n.handsontable.listbox table th,\n.handsontable.listbox table tr:first-child th,\n.handsontable.listbox table tr:last-child th,\n.handsontable.listbox table tr:first-child td,\n.handsontable.listbox table td {\n border-color: transparent !important;\n}\n.handsontable.listbox table th,\n.handsontable.listbox table td {\n white-space: nowrap;\n text-overflow: ellipsis;\n border-radius: 0 !important;\n}\n.handsontable.listbox table .wtBorder {\n visibility: hidden;\n}\n.handsontable.listbox table strong {\n font-weight: bold;\n color: inherit;\n}\n.handsontable.listbox table tr td:hover td {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent) !important;\n cursor: pointer;\n box-shadow: none !important;\n}\n.handsontable.listbox table td {\n transition: var(--ht-table-transition) background ease-in-out;\n}\n.handsontable.listbox table td:hover {\n background-color: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent) !important;\n cursor: pointer;\n}\n.handsontable.listbox table td.current:not([aria-expanded=true]) {\n box-shadow: inset 0 0 0 1px var(--ht-accent-color);\n}\n.handsontable.listbox table td.htDimmed {\n cursor: default;\n font-style: inherit;\n color: inherit !important;\n}\n.handsontable.listbox table td.htDimmed:not(.handsontable.listbox table td:hover) {\n background-color: inherit !important;\n}\n.handsontable.listbox table thead th {\n height: auto !important;\n text-align: left;\n}\n.handsontable.listbox table thead th .relative {\n padding-top: calc(var(--ht-cell-vertical-padding) + var(--ht-gap-size));\n padding-bottom: calc(var(--ht-cell-vertical-padding) + var(--ht-gap-size));\n}\n.handsontable.listbox .ht_clone_top .wtHider {\n overflow: hidden;\n}\n.handsontable.listbox .ht_clone_top table {\n border-radius: 0;\n}\n.handsontable.listbox .htBorders div {\n background: none !important;\n}\n.handsontable.autocompleteEditor tr.ht__row_even th,\n.handsontable.autocompleteEditor tr.ht__row_even td {\n background-color: var(--ht-background-color, #ffffff);\n}\n.handsontable.autocompleteEditor tr.ht__row_odd th,\n.handsontable.autocompleteEditor tr.ht__row_odd td {\n background-color: var(--ht-background-color, #ffffff);\n}\n\n[dir=rtl].handsontable.listbox table thead th {\n text-align: right;\n}\n\n.pika-single {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n position: relative;\n display: block;\n padding: 10px;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n color: var(--ht-foreground-color);\n background: var(--ht-background-color, #ffffff);\n border: var(--ht-menu-border-width, 1px) solid var(--ht-menu-border-color, #e5e5e9);\n border-radius: var(--ht-menu-border-radius);\n z-index: 9999;\n}\n.pika-single.is-hidden {\n display: none;\n}\n.pika-single .pika-row {\n background-color: transparent;\n}\n.pika-single .pika-title {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.pika-single .pika-label {\n position: relative;\n order: 2;\n padding: 5px;\n color: var(--ht-accent-color);\n}\n.pika-single .pika-label .pika-select {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n}\n.pika-single .pika-prev,\n.pika-single .pika-next {\n width: 20px;\n height: 20px;\n white-space: nowrap;\n text-indent: -9999px;\n cursor: pointer;\n color: var(--ht-accent-color);\n background: none;\n border: none;\n padding: 0;\n}\n.pika-single .pika-prev {\n order: 1;\n margin-right: auto;\n}\n.pika-single .pika-next {\n order: 3;\n margin-left: auto;\n}\n.pika-single .pika-table thead {\n height: 50px;\n}\n.pika-single .pika-table th {\n padding: 1px;\n vertical-align: middle;\n}\n.pika-single .pika-table th abbr {\n text-decoration: none;\n font-weight: normal;\n border: none;\n cursor: initial;\n}\n.pika-single .pika-table td {\n padding: 1px;\n vertical-align: middle;\n}\n.pika-single .pika-table td.is-disabled .pika-button {\n pointer-events: none;\n opacity: 0.5;\n}\n.pika-single .pika-table td.is-today .pika-button {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n.pika-single .pika-table td.is-selected .pika-button {\n background: var(--ht-accent-color, #1a42e8);\n color: var(--ht-primary-button-foreground-color, #ffffff);\n}\n.pika-single .pika-table td.pika-week {\n width: 12.5%;\n text-align: center;\n}\n.pika-single .pika-table .pika-button {\n width: 100%;\n aspect-ratio: 1/1;\n background: transparent;\n color: var(--ht-foreground-color);\n border: none;\n border-radius: var(--ht-button-border-radius);\n margin: 0;\n padding: 10px;\n cursor: pointer;\n font-size: inherit;\n}\n.pika-single .pika-table .pika-button:hover {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n\n[dir=rtl].htDatepickerHolder .pika-single .pika-next {\n transform: rotate(180deg);\n margin-left: 0;\n margin-right: auto;\n}\n[dir=rtl].htDatepickerHolder .pika-single .pika-prev {\n transform: rotate(180deg);\n margin-left: auto;\n margin-right: 0;\n}\n\n.handsontableEditor {\n position: absolute;\n}\n.handsontableEditor .ht-multi-select-editor {\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n overflow-y: auto;\n border-radius: 0 0 var(--ht-menu-border-radius) var(--ht-menu-border-radius);\n border: var(--ht-menu-border-width) solid var(--ht-menu-border-color);\n background: var(--ht-background-color);\n width: max-content;\n min-width: 120px;\n padding: var(--ht-menu-vertical-padding) var(--ht-menu-horizontal-padding);\n}\n.handsontableEditor .ht-multi-select-editor .ht-multi-select-editor-search-input-wrapper {\n display: flex;\n padding: var(--ht-menu-item-vertical-padding) var(--ht-menu-item-horizontal-padding);\n align-items: center;\n gap: var(--ht-gap-size);\n align-self: stretch;\n position: relative;\n}\n.handsontableEditor .ht-multi-select-editor .ht-multi-select-editor-search-icon {\n position: absolute;\n left: calc(var(--ht-menu-item-horizontal-padding) + 10px);\n top: 50%;\n transform: translateY(-50%);\n width: 16px;\n height: 16px;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n opacity: 0.5;\n pointer-events: none;\n z-index: 1;\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input {\n box-sizing: border-box;\n width: 100%;\n border-radius: var(--ht-input-border-radius);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n border: 1px solid var(--ht-input-border-color);\n transition: var(--ht-table-transition) all ease-in-out;\n line-height: var(--ht-line-height);\n font-size: var(--ht-font-size);\n padding: var(--ht-input-vertical-padding) var(--ht-menu-item-horizontal-padding) var(--ht-input-vertical-padding) 32px;\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input:hover {\n border-color: var(--ht-input-hover-border-color);\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input:disabled {\n border-color: var(--ht-input-disabled-border-color);\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input:focus {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n outline: none;\n outline-offset: 0;\n box-shadow: none;\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input::placeholder {\n color: var(--ht-foreground-color);\n opacity: 0.6;\n}\n.handsontableEditor .ht-multi-select-editor .ht-multi-select-editor-separator {\n width: 100%;\n height: 1px;\n background-color: var(--ht-menu-border-color);\n margin: var(--ht-menu-vertical-padding) 0 var(--ht-menu-vertical-padding) 0;\n padding: 0;\n}\n.handsontableEditor .ht-multi-select-editor ul {\n list-style: none;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n margin: 0;\n padding: var(--ht-gap-size) var(--ht-menu-horizontal-padding);\n}\n.handsontableEditor .ht-multi-select-editor ul li {\n display: flex;\n align-items: center;\n align-self: stretch;\n background: var(--ht-background-color);\n padding: var(--ht-menu-item-vertical-padding) var(--ht-menu-item-horizontal-padding);\n user-select: none;\n cursor: pointer;\n}\n.handsontableEditor .ht-multi-select-editor ul li * {\n cursor: pointer;\n}\n.handsontableEditor .ht-multi-select-editor ul li.ht-multi-select-editor-item-selected {\n background: color-mix(in srgb, var(--ht-menu-item-active-color) var(--ht-menu-item-active-color-opacity, 100%), transparent);\n}\n.handsontableEditor .ht-multi-select-editor ul li div {\n display: flex;\n align-items: center;\n flex: 1 0 0;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input {\n position: relative;\n appearance: none;\n margin: 0;\n padding: 0;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n display: flex;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n border-radius: var(--ht-checkbox-border-radius);\n border: 1px solid var(--ht-checkbox-border-color);\n background: var(--ht-checkbox-background-color);\n background-repeat: no-repeat;\n background-position: center;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input:checked::before {\n border-color: var(--ht-checkbox-checked-border-color);\n background: var(--ht-checkbox-checked-background-color);\n}\n.handsontableEditor .ht-multi-select-editor ul li div input:checked::after {\n color: var(--ht-checkbox-checked-icon-color);\n background-color: currentColor;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input:focus {\n outline: none;\n}\n.handsontableEditor .ht-multi-select-editor ul li div label {\n overflow: hidden;\n color: var(--ht-foreground-color);\n text-overflow: ellipsis;\n font-size: var(--ht-font-size);\n font-style: normal;\n font-weight: 400;\n line-height: var(--ht-line-height);\n letter-spacing: var(--ht-letter-spacing);\n width: 100%;\n padding: 0 0 0 calc(var(--ht-gap-size) * 2);\n}\n.handsontableEditor .ht-multi-select-editor ul li:hover {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n.handsontableEditor .ht-multi-select-editor ul li:has(input:focus) {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n\n.handsontable .htUISelectCaption {\n width: 100%;\n padding: var(--ht-input-vertical-padding) var(--ht-input-horizontal-padding);\n padding-inline-end: calc(var(--ht-input-horizontal-padding) + var(--ht-icon-size));\n margin: 0;\n font-family: inherit;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n border-radius: var(--ht-input-border-radius);\n box-sizing: border-box;\n cursor: pointer;\n outline: none !important;\n border: var(--ht-input-border-width) solid var(--ht-input-border-color);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n transition: var(--ht-table-transition) all ease-in-out;\n}\n.handsontable .htUISelectCaption::after {\n content: \"\";\n display: block;\n position: absolute;\n right: calc(var(--ht-input-horizontal-padding) - var(--ht-icon-size) / 4);\n top: 50%;\n transform: translateY(-50%);\n}\n.handsontable .htUISelectCaption:hover {\n border-color: var(--ht-input-hover-border-color);\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n}\n.handsontable .htUISelectCaption:disabled {\n border-color: var(--ht-input-disabled-border-color);\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n}\n.handsontable .htUISelectCaption:focus {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n}\n.handsontable .htUISelect {\n cursor: pointer;\n position: relative;\n outline: none !important;\n}\n.handsontable .htUISelect:focus .htUISelectCaption {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n}\n\n[dir=rtl].handsontable .htUISelectCaption::after {\n right: auto;\n left: calc(var(--ht-input-horizontal-padding) - var(--ht-icon-size) / 4);\n}\n\n.handsontable .htFiltersMenuCondition .htUIInput input,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input {\n width: 100%;\n padding: var(--ht-input-vertical-padding) var(--ht-input-horizontal-padding);\n font-family: inherit;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n border-radius: var(--ht-input-border-radius);\n box-sizing: border-box;\n cursor: pointer;\n outline: none !important;\n border: var(--ht-input-border-width) solid var(--ht-input-border-color);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n transition: var(--ht-table-transition) all ease-in-out;\n}\n.handsontable .htFiltersMenuCondition .htUIInput input:hover,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input:hover {\n border-color: var(--ht-input-hover-border-color);\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n}\n.handsontable .htFiltersMenuCondition .htUIInput input:disabled,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input:disabled {\n border-color: var(--ht-input-disabled-border-color);\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n}\n.handsontable .htFiltersMenuCondition .htUIInput input:focus,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input:focus {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n}\n.handsontable .htUIInput {\n position: relative;\n padding: 0;\n outline: none !important;\n text-align: center;\n}\n.handsontable .htUIInputIcon {\n position: absolute;\n}\n\n.handsontable .htUIInput.htUIButton input, .handsontable .ht-button {\n min-width: 64px;\n padding: var(--ht-button-vertical-padding) var(--ht-button-horizontal-padding);\n font-family: inherit;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n border-radius: var(--ht-button-border-radius);\n border-width: 1px;\n border-style: solid;\n box-sizing: border-box;\n outline: none !important;\n cursor: pointer;\n transition: var(--ht-table-transition) all ease-in-out;\n}\n.handsontable .htUIInput.htUIButtonCancel input, .handsontable .ht-button--secondary {\n border-color: var(--ht-secondary-button-border-color);\n background-color: var(--ht-secondary-button-background-color);\n color: var(--ht-secondary-button-foreground-color);\n}\n.handsontable .htUIInput.htUIButtonCancel input:hover, .handsontable .ht-button--secondary:hover {\n border-color: var(--ht-secondary-button-hover-border-color);\n background-color: var(--ht-secondary-button-hover-background-color);\n color: var(--ht-secondary-button-hover-foreground-color);\n}\n.handsontable .htUIInput.htUIButtonCancel input:disabled, .handsontable .ht-button--secondary:disabled {\n border-color: var(--ht-secondary-button-disabled-border-color);\n background-color: var(--ht-secondary-button-disabled-background-color);\n color: var(--ht-secondary-button-disabled-foreground-color);\n}\n.handsontable .htUIInput.htUIButtonCancel input:focus, .handsontable .ht-button--secondary:focus {\n border-color: var(--ht-secondary-button-focus-border-color);\n background-color: var(--ht-secondary-button-focus-background-color);\n color: var(--ht-secondary-button-focus-foreground-color);\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n\n.htUIInput.htUIButtonOK input, .ht-button--primary {\n border-color: var(--ht-primary-button-border-color);\n background-color: var(--ht-primary-button-background-color);\n color: var(--ht-primary-button-foreground-color);\n}\n.htUIInput.htUIButtonOK input:hover, .ht-button--primary:hover {\n border-color: var(--ht-primary-button-hover-border-color);\n background-color: var(--ht-primary-button-hover-background-color);\n color: var(--ht-primary-button-hover-foreground-color);\n}\n.htUIInput.htUIButtonOK input:disabled, .ht-button--primary:disabled {\n border-color: var(--ht-primary-button-disabled-border-color);\n background-color: var(--ht-primary-button-disabled-background-color);\n color: var(--ht-primary-button-disabled-foreground-color);\n}\n.htUIInput.htUIButtonOK input:focus, .ht-button--primary:focus {\n border-color: var(--ht-primary-button-focus-border-color);\n background-color: var(--ht-primary-button-focus-background-color);\n color: var(--ht-primary-button-focus-foreground-color);\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n\n.handsontable .htUIRadio {\n position: relative;\n display: inline-flex;\n margin: 0;\n padding: var(--ht-gap-size) calc(2 * var(--ht-gap-size));\n padding-bottom: 0;\n align-items: center;\n gap: var(--ht-gap-size);\n cursor: pointer;\n}\n.handsontable .htUIRadio:first-child {\n padding-inline-start: 0;\n}\n.handsontable .htUIRadio > input[type=radio] {\n position: relative;\n width: var(--ht-radio-size);\n height: var(--ht-radio-size);\n margin: 0;\n appearance: none;\n cursor: pointer;\n border-radius: calc(0.5 * var(--ht-radio-size));\n outline: none;\n}\n.handsontable .htUIRadio > input[type=radio]::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n border-radius: calc(0.5 * var(--ht-radio-size));\n border: 1px solid var(--ht-radio-border-color);\n background-color: var(--ht-radio-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]::after {\n content: \"\";\n display: block;\n position: absolute;\n color: var(--ht-radio-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked::before {\n border-color: var(--ht-radio-checked-border-color);\n background-color: var(--ht-radio-checked-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked::after {\n color: var(--ht-radio-checked-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:disabled {\n cursor: initial;\n}\n.handsontable .htUIRadio > input[type=radio]:checked:disabled::before {\n border-color: var(--ht-radio-checked-disabled-border-color);\n background-color: var(--ht-radio-checked-disabled-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:disabled::after {\n color: var(--ht-radio-checked-disabled-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:focus::before {\n border-color: var(--ht-radio-checked-focus-border-color);\n background-color: var(--ht-radio-checked-focus-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:focus::after {\n color: var(--ht-radio-checked-focus-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:disabled {\n cursor: initial;\n}\n.handsontable .htUIRadio > input[type=radio]:disabled::before {\n border-color: var(--ht-radio-disabled-border-color);\n background-color: var(--ht-radio-disabled-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:disabled::after {\n color: var(--ht-radio-disabled-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:focus::before {\n border-color: var(--ht-radio-focus-border-color);\n background-color: var(--ht-radio-focus-background-color);\n outline: 1px solid var(--ht-radio-focus-ring-color);\n}\n.handsontable .htUIRadio > input[type=radio]:focus::after {\n color: var(--ht-radio-focus-icon-color);\n}\n.handsontable .htUIRadio label {\n vertical-align: middle;\n cursor: pointer;\n color: inherit;\n}\n.handsontable .htUIRadio label::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n}\n\n.handsontable .collapsibleIndicator,\n.handsontable .ht_nestingButton {\n position: relative;\n width: var(--ht-icon-button-hit-area-size);\n height: var(--ht-icon-button-hit-area-size);\n margin: calc(-1 * (var(--ht-icon-button-hit-area-size) - var(--ht-icon-size)) / 2 + 1px);\n box-sizing: border-box;\n overflow: visible;\n cursor: pointer;\n /* hide text */\n text-indent: -100px;\n font-size: 0;\n flex-shrink: 0;\n /* Icon: mask + currentColor from ht-icons-main.css; keep ::before for icon only */\n}\n.handsontable .collapsibleIndicator::before,\n.handsontable .ht_nestingButton::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n border-radius: var(--ht-collapse-button-border-radius);\n transition: var(--ht-table-transition) all ease-in-out;\n z-index: 1;\n}\n.handsontable .collapsibleIndicator,\n.handsontable .ht_nestingButton {\n /* Button background and border (behind icon so mask stays visible) */\n}\n.handsontable .collapsibleIndicator::after,\n.handsontable .ht_nestingButton::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n border-radius: var(--ht-collapse-button-border-radius);\n transition: var(--ht-table-transition) all ease-in-out;\n z-index: 0;\n}\n.handsontable .collapsibleIndicator.expanded::before, .handsontable .collapsibleIndicator.ht_nestingCollapse::before,\n.handsontable .ht_nestingButton.expanded::before,\n.handsontable .ht_nestingButton.ht_nestingCollapse::before {\n color: var(--ht-collapse-button-open-icon-color);\n}\n.handsontable .collapsibleIndicator.expanded::after, .handsontable .collapsibleIndicator.ht_nestingCollapse::after,\n.handsontable .ht_nestingButton.expanded::after,\n.handsontable .ht_nestingButton.ht_nestingCollapse::after {\n background-color: var(--ht-collapse-button-open-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-open-border-color);\n}\n.handsontable .collapsibleIndicator.expanded:hover::before, .handsontable .collapsibleIndicator.ht_nestingCollapse:hover::before,\n.handsontable .ht_nestingButton.expanded:hover::before,\n.handsontable .ht_nestingButton.ht_nestingCollapse:hover::before {\n color: var(--ht-collapse-button-open-hover-icon-color);\n}\n.handsontable .collapsibleIndicator.expanded:hover::after, .handsontable .collapsibleIndicator.ht_nestingCollapse:hover::after,\n.handsontable .ht_nestingButton.expanded:hover::after,\n.handsontable .ht_nestingButton.ht_nestingCollapse:hover::after {\n background-color: var(--ht-collapse-button-open-hover-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-open-hover-border-color);\n}\n.handsontable .collapsibleIndicator.collapsed::before, .handsontable .collapsibleIndicator.ht_nestingExpand::before,\n.handsontable .ht_nestingButton.collapsed::before,\n.handsontable .ht_nestingButton.ht_nestingExpand::before {\n color: var(--ht-collapse-button-close-icon-color);\n}\n.handsontable .collapsibleIndicator.collapsed::after, .handsontable .collapsibleIndicator.ht_nestingExpand::after,\n.handsontable .ht_nestingButton.collapsed::after,\n.handsontable .ht_nestingButton.ht_nestingExpand::after {\n background-color: var(--ht-collapse-button-close-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-close-border-color);\n}\n.handsontable .collapsibleIndicator.collapsed:hover::before, .handsontable .collapsibleIndicator.ht_nestingExpand:hover::before,\n.handsontable .ht_nestingButton.collapsed:hover::before,\n.handsontable .ht_nestingButton.ht_nestingExpand:hover::before {\n color: var(--ht-collapse-button-close-hover-icon-color);\n}\n.handsontable .collapsibleIndicator.collapsed:hover::after, .handsontable .collapsibleIndicator.ht_nestingExpand:hover::after,\n.handsontable .ht_nestingButton.collapsed:hover::after,\n.handsontable .ht_nestingButton.ht_nestingExpand:hover::after {\n background-color: var(--ht-collapse-button-close-hover-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-close-hover-border-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.collapsed::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingExpand::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.collapsed::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingExpand::before {\n color: var(--ht-collapse-button-close-icon-active-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.collapsed:hover::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingExpand:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.collapsed:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingExpand:hover::before {\n color: var(--ht-collapse-button-close-hover-icon-active-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.expanded::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingCollapse::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.expanded::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingCollapse::before {\n color: var(--ht-collapse-button-open-icon-active-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.expanded:hover::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingCollapse:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.expanded:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingCollapse:hover::before {\n color: var(--ht-collapse-button-open-hover-icon-active-color);\n}\n\n.handsontable thead th.htRowspanHeader + th {\n border-inline-start-width: 0;\n}\n.handsontable thead th.htRowspanHeader {\n height: auto;\n vertical-align: bottom;\n overflow: visible;\n}\n.handsontable thead th.htRowspanHeader.ht__active_highlight {\n border-inline-start-color: var(--ht-header-active-border-color);\n z-index: 1;\n}\n.handsontable.htRowHeaders.htHasRowspanHeaders thead tr:last-child th:first-child {\n border-end-start-radius: 0;\n}\n.handsontable.htHasRowspanHeaders .ht_clone_inline_start .htCore tbody tr:first-child th:first-child {\n border-start-start-radius: 0;\n}\n.handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead th.htRowspanBottomLevel, .handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) ~ .handsontable thead th.htRowspanBottomLevel {\n border-bottom-width: 0;\n}\n.handsontable thead th.hiddenHeader:not(:first-of-type) {\n display: none;\n}\n.handsontable thead th.hiddenHeaderText .colHeader {\n opacity: 0;\n}\n\n.handsontable th.ht_nestingLevels > .relative {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.handsontable th.ht_nestingLevels span:last-child {\n padding-left: calc(var(--ht-icon-size) + 5px);\n}\n.handsontable th.ht_nestingLevels span.ht_nestingLevel {\n display: inline-block;\n}\n.handsontable th.ht_nestingLevels span.ht_nestingLevel_empty {\n position: relative;\n display: inline-block;\n width: 5px;\n height: 1px;\n order: -2;\n}\n.handsontable th.ht_nestingLevels .ht_nestingButton {\n position: relative;\n cursor: pointer;\n order: -1;\n}\n\n.handsontable th.beforeHiddenColumn, .handsontable th.afterHiddenColumn {\n position: relative;\n}\n.handsontable th.beforeHiddenColumn::before, .handsontable th.beforeHiddenColumn::after, .handsontable th.afterHiddenColumn::before, .handsontable th.afterHiddenColumn::after {\n position: absolute;\n top: 50%;\n width: 10px !important;\n height: 10px !important;\n transform: translateY(-50%);\n color: var(--ht-hidden-indicator-color);\n}\n.handsontable th.beforeHiddenColumn::after {\n content: \"\";\n display: block;\n right: -2px;\n}\n.handsontable th.afterHiddenColumn::before {\n content: \"\";\n display: block;\n left: -2px;\n}\n.handsontable th.ht__active_highlight.beforeHiddenColumn::before, .handsontable th.ht__active_highlight.beforeHiddenColumn::after, .handsontable th.ht__active_highlight.afterHiddenColumn::before, .handsontable th.ht__active_highlight.afterHiddenColumn::after {\n color: var(--ht-icon-button-active-icon-color, var(--ht-icon-active-button-icon-color));\n}\n\n[dir=rtl].handsontable th.beforeHiddenColumn::after {\n right: initial;\n left: -2px;\n transform: translateY(-50%) rotate(180deg);\n}\n[dir=rtl].handsontable th.afterHiddenColumn::before {\n right: -2px;\n left: initial;\n transform: translateY(-50%) rotate(180deg);\n}\n\n.handsontable th.beforeHiddenRow, .handsontable th.afterHiddenRow {\n position: relative;\n}\n.handsontable th.beforeHiddenRow::before, .handsontable th.beforeHiddenRow::after, .handsontable th.afterHiddenRow::before, .handsontable th.afterHiddenRow::after {\n position: absolute;\n left: 50%;\n width: 10px !important;\n height: 10px !important;\n transform: translateX(-50%);\n color: var(--ht-hidden-indicator-color);\n}\n.handsontable th.beforeHiddenRow::after {\n content: \"\";\n display: block;\n bottom: -2px;\n}\n.handsontable th.afterHiddenRow::before {\n content: \"\";\n display: block;\n top: -2px;\n}\n.handsontable th.ht__active_highlight.beforeHiddenRow::before, .handsontable th.ht__active_highlight.beforeHiddenRow::after, .handsontable th.ht__active_highlight.afterHiddenRow::before, .handsontable th.ht__active_highlight.afterHiddenRow::after {\n color: var(--ht-icon-button-active-icon-color, var(--ht-icon-active-button-icon-color));\n}\n\n.handsontable .changeType {\n position: relative;\n box-sizing: border-box;\n width: var(--ht-icon-button-hit-area-size);\n height: var(--ht-icon-button-hit-area-size);\n margin: calc(-1 * (var(--ht-icon-button-hit-area-size) - var(--ht-icon-size)) / 2 + 1px);\n border: none;\n outline: none;\n box-shadow: none;\n background: none;\n background-color: transparent;\n color: inherit;\n padding: 0;\n z-index: 1;\n flex-shrink: 0;\n overflow: visible;\n /* Icon: mask + currentColor from ht-icons-main.css; keep ::before for icon only */\n}\n.handsontable .changeType::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n color: var(--ht-icon-button-icon-color);\n z-index: 1;\n}\n.handsontable .changeType {\n /* Button background and border (behind icon so mask stays visible) */\n}\n.handsontable .changeType::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n border-radius: var(--ht-icon-button-border-radius);\n box-shadow: 0 0 0 1px var(--ht-icon-button-border-color);\n background-color: var(--ht-icon-button-background-color);\n z-index: 0;\n}\n.handsontable .changeType:hover {\n cursor: pointer;\n}\n.handsontable .changeType:hover::before {\n color: var(--ht-icon-button-hover-icon-color);\n}\n.handsontable .changeType:hover::after {\n box-shadow: 0 0 0 1px var(--ht-icon-button-hover-border-color);\n background-color: var(--ht-icon-button-hover-background-color);\n}\n.handsontable .ht__active_highlight .changeType::before {\n color: var(--ht-icon-button-active-icon-color, var(--ht-icon-active-button-icon-color));\n}\n.handsontable .ht__active_highlight .changeType::after {\n box-shadow: 0 0 0 1px var(--ht-icon-button-active-border-color, var(--ht-icon-active-button-border-color));\n background-color: var(--ht-icon-button-active-background-color, var(--ht-icon-active-button-background-color));\n}\n.handsontable .ht__active_highlight .changeType:hover::before {\n color: var(--ht-icon-button-active-hover-icon-color, var(--ht-icon-active-button-hover-icon-color));\n}\n.handsontable .ht__active_highlight .changeType:hover::after {\n box-shadow: 0 0 0 1px var(--ht-icon-button-active-hover-border-color, var(--ht-icon-active-button-hover-border-color));\n background-color: var(--ht-icon-button-active-hover-background-color, var(--ht-icon-active-button-hover-background-color));\n}\n.handsontable th.htFiltersActive {\n background-color: var(--ht-header-filter-background-color);\n}\n.handsontable th.htFiltersActive.ht__active_highlight {\n background-color: color-mix(in srgb, var(--ht-header-active-background-color), var(--ht-header-filter-background-color) 20%);\n}\n.handsontable.htDropdownMenu > .ht_master, .handsontable.htContextMenu > .ht_master, .handsontable.htFiltersConditionsMenu > .ht_master {\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n border: var(--ht-menu-border-width, 1px) solid var(--ht-menu-border-color, #e5e5e9);\n border-radius: var(--ht-menu-border-radius);\n overflow: hidden;\n padding: var(--ht-menu-vertical-padding, 8px) var(--ht-menu-horizontal-padding, 0);\n background-color: var(--ht-background-color, #ffffff);\n}\n.handsontable.htDropdownMenu:not(.htGhostTable), .handsontable.htContextMenu:not(.htGhostTable), .handsontable.htFiltersConditionsMenu:not(.htGhostTable) {\n display: none;\n position: absolute;\n /* needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569) */\n z-index: 1060;\n}\n.handsontable.htDropdownMenu .ht_clone_top,\n.handsontable.htDropdownMenu .ht_clone_bottom,\n.handsontable.htDropdownMenu .ht_clone_inline_start,\n.handsontable.htDropdownMenu .ht_clone_top_inline_start_corner,\n.handsontable.htDropdownMenu .ht_clone_bottom_inline_start_corner, .handsontable.htContextMenu .ht_clone_top,\n.handsontable.htContextMenu .ht_clone_bottom,\n.handsontable.htContextMenu .ht_clone_inline_start,\n.handsontable.htContextMenu .ht_clone_top_inline_start_corner,\n.handsontable.htContextMenu .ht_clone_bottom_inline_start_corner, .handsontable.htFiltersConditionsMenu .ht_clone_top,\n.handsontable.htFiltersConditionsMenu .ht_clone_bottom,\n.handsontable.htFiltersConditionsMenu .ht_clone_inline_start,\n.handsontable.htFiltersConditionsMenu .ht_clone_top_inline_start_corner,\n.handsontable.htFiltersConditionsMenu .ht_clone_bottom_inline_start_corner {\n display: none;\n}\n.handsontable.htDropdownMenu table.htCore, .handsontable.htContextMenu table.htCore, .handsontable.htFiltersConditionsMenu table.htCore {\n overflow: hidden;\n}\n.handsontable.htDropdownMenu .htCustomMenuRenderer .table.htCore, .handsontable.htContextMenu .htCustomMenuRenderer .table.htCore, .handsontable.htFiltersConditionsMenu .htCustomMenuRenderer .table.htCore {\n box-shadow: none;\n}\n.handsontable.htDropdownMenu.handsontable:focus, .handsontable.htContextMenu.handsontable:focus, .handsontable.htFiltersConditionsMenu.handsontable:focus {\n outline: none;\n}\n.handsontable.htDropdownMenu .wtBorder, .handsontable.htContextMenu .wtBorder, .handsontable.htFiltersConditionsMenu .wtBorder {\n visibility: hidden;\n}\n.handsontable.htDropdownMenu tbody tr:first-of-type td:first-child, .handsontable.htDropdownMenu tbody tr:first-of-type th:first-child, .handsontable.htContextMenu tbody tr:first-of-type td:first-child, .handsontable.htContextMenu tbody tr:first-of-type th:first-child, .handsontable.htFiltersConditionsMenu tbody tr:first-of-type td:first-child, .handsontable.htFiltersConditionsMenu tbody tr:first-of-type th:first-child {\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n}\n.handsontable.htDropdownMenu table tbody tr td, .handsontable.htContextMenu table tbody tr td, .handsontable.htFiltersConditionsMenu table tbody tr td {\n position: relative;\n padding: var(--ht-menu-item-vertical-padding, 4px) var(--ht-menu-item-horizontal-padding, 8px);\n border-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n background: var(--ht-background-color, #ffffff);\n cursor: pointer;\n transition: var(--ht-table-transition) background ease-in-out;\n}\n.handsontable.htDropdownMenu table tbody tr td:first-child, .handsontable.htContextMenu table tbody tr td:first-child, .handsontable.htFiltersConditionsMenu table tbody tr td:first-child {\n border-top-width: 0;\n border-inline-end-width: 0;\n border-bottom-width: 0;\n border-inline-start-width: 0;\n}\n.handsontable.htDropdownMenu table tbody tr td.htDimmed, .handsontable.htContextMenu table tbody tr td.htDimmed, .handsontable.htFiltersConditionsMenu table tbody tr td.htDimmed {\n font-style: normal;\n color: inherit !important;\n background-color: inherit !important;\n}\n.handsontable.htDropdownMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled):hover, .handsontable.htContextMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled):hover, .handsontable.htFiltersConditionsMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled):hover {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent) !important;\n cursor: pointer;\n}\n.handsontable.htDropdownMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled).current:not([aria-expanded=true]), .handsontable.htContextMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled).current:not([aria-expanded=true]), .handsontable.htFiltersConditionsMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled).current:not([aria-expanded=true]) {\n box-shadow: inset 0 0 0 1px var(--ht-accent-color);\n}\n.handsontable.htDropdownMenu table tbody tr td.htSubmenu .htItemWrapper, .handsontable.htContextMenu table tbody tr td.htSubmenu .htItemWrapper, .handsontable.htFiltersConditionsMenu table tbody tr td.htSubmenu .htItemWrapper {\n margin-inline-end: calc(2 * var(--ht-gap-size, 4px) + var(--ht-icon-size));\n}\n.handsontable.htDropdownMenu table tbody tr td.htSubmenu .htItemWrapper::after, .handsontable.htContextMenu table tbody tr td.htSubmenu .htItemWrapper::after, .handsontable.htFiltersConditionsMenu table tbody tr td.htSubmenu .htItemWrapper::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n right: calc(var(--ht-menu-item-horizontal-padding) + var(--ht-gap-size) * 2);\n transform: translateY(-50%);\n}\n.handsontable.htDropdownMenu table tbody tr td.htSeparator, .handsontable.htContextMenu table tbody tr td.htSeparator, .handsontable.htFiltersConditionsMenu table tbody tr td.htSeparator {\n border-top: 1px solid var(--ht-border-color);\n height: 0;\n padding: 0;\n cursor: default;\n}\n.handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled {\n color: var(--ht-disabled-color);\n cursor: default;\n}\n.handsontable.htDropdownMenu table tbody tr td.htDisabled:hover, .handsontable.htContextMenu table tbody tr td.htDisabled:hover, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled:hover {\n background: var(--ht-background-color);\n color: var(--ht-disabled-color);\n}\n.handsontable.htDropdownMenu table tbody tr td.htHidden, .handsontable.htContextMenu table tbody tr td.htHidden, .handsontable.htFiltersConditionsMenu table tbody tr td.htHidden {\n display: none;\n}\n.handsontable.htDropdownMenu table tbody tr td:has(.htItemWrapper .selected), .handsontable.htContextMenu table tbody tr td:has(.htItemWrapper .selected), .handsontable.htFiltersConditionsMenu table tbody tr td:has(.htItemWrapper .selected) {\n background-color: color-mix(in srgb, var(--ht-menu-item-active-color) var(--ht-menu-item-active-color-opacity, 100%), transparent);\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper, .handsontable.htContextMenu table tbody tr td .htItemWrapper, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper {\n margin-inline: calc(2 * var(--ht-gap-size, 4px));\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper::before, .handsontable.htContextMenu table tbody tr td .htItemWrapper::before, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper::before {\n vertical-align: text-bottom;\n margin-right: 12px;\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper span.selected, .handsontable.htContextMenu table tbody tr td .htItemWrapper span.selected, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper span.selected {\n font-size: 0;\n inset: 0;\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper span.selected::after, .handsontable.htContextMenu table tbody tr td .htItemWrapper span.selected::after, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper span.selected::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n right: calc(var(--ht-menu-item-horizontal-padding) + var(--ht-gap-size) * 2);\n color: var(--ht-accent-color);\n transform: translateY(-50%);\n}\n.handsontable.htDropdownMenu table tbody tr td div span.selected, .handsontable.htContextMenu table tbody tr td div span.selected, .handsontable.htFiltersConditionsMenu table tbody tr td div span.selected {\n position: absolute;\n inset-inline-end: 0;\n}\n.handsontable.htDropdownMenu table tbody tr td .htUIButton, .handsontable.htContextMenu table tbody tr td .htUIButton, .handsontable.htFiltersConditionsMenu table tbody tr td .htUIButton {\n width: calc(50% - var(--ht-gap-size));\n}\n.handsontable.htDropdownMenu table tbody tr td .htUIButton input, .handsontable.htContextMenu table tbody tr td .htUIButton input, .handsontable.htFiltersConditionsMenu table tbody tr td .htUIButton input {\n width: 100%;\n}\n.handsontable .htUIClearAll a,\n.handsontable .htUISelectAll a {\n padding: var(--ht-gap-size);\n display: inline-block;\n text-decoration: none;\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder {\n overflow-y: scroll !important;\n background: transparent;\n border-radius: 0 !important;\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder .htCore {\n box-shadow: none;\n}\n\n[dir=rtl].handsontable.htDropdownMenu table tbody tr td.htSubmenu .htItemWrapper::after, [dir=rtl].handsontable.htContextMenu table tbody tr td.htSubmenu .htItemWrapper::after, [dir=rtl].handsontable.htFiltersConditionsMenu table tbody tr td.htSubmenu .htItemWrapper::after {\n left: calc(4 * var(--ht-gap-size));\n right: auto;\n transform: translateY(-50%) rotate(180deg);\n}\n[dir=rtl].handsontable.htDropdownMenu table tbody tr td .htItemWrapper span.selected::after, [dir=rtl].handsontable.htContextMenu table tbody tr td .htItemWrapper span.selected::after, [dir=rtl].handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper span.selected::after {\n left: calc(4 * var(--ht-gap-size));\n right: auto;\n}\n\n.handsontable.htFiltersConditionsMenu:not(.htGhostTable) {\n z-index: 1070;\n}\n.handsontable .ht_master table td.htCustomMenuRenderer {\n cursor: auto;\n}\n.handsontable .ht_master table td.htCustomMenuRenderer.htFiltersMenuActionBar {\n padding-top: calc(var(--ht-menu-item-vertical-padding, 4px) * 2);\n}\n.handsontable .htFiltersMenuLabel {\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n margin-bottom: calc(var(--ht-gap-size, 2px) * 2);\n}\n.handsontable .htFiltersMenuLabel:empty {\n display: none;\n}\n.handsontable .htFiltersMenuCondition {\n padding-top: calc(var(--ht-gap-size, 2px) * 3) !important;\n padding-bottom: 0 !important;\n}\n.handsontable .htFiltersMenuCondition .border {\n border-bottom: 1px solid var(--ht-border-color) !important;\n}\n.handsontable .htFiltersMenuCondition .htUIInput {\n margin-top: calc(var(--ht-gap-size, 2px) * 2);\n}\n.handsontable .htFiltersMenuValue {\n padding-top: calc(var(--ht-gap-size, 2px) * 3) !important;\n padding-bottom: 0 !important;\n border-bottom: 1px solid var(--ht-border-color) !important;\n}\n.handsontable .htFiltersMenuOperators {\n padding-top: calc(var(--ht-gap-size, 2px) * 2) !important;\n padding-bottom: 0 !important;\n}\n.handsontable .htUISelectionControls {\n padding-top: calc(var(--ht-gap-size, 2px) * 2) !important;\n padding-bottom: var(--ht-gap-size, 2px) !important;\n margin: 0 calc(var(--ht-gap-size, 2px) * -1);\n}\n.handsontable .htUIMultipleSelectHot {\n --ht-cell-horizontal-padding: calc(\n var(--ht-menu-item-horizontal-padding, 2px) +\n var(--ht-gap-size, 2px) * 2);\n overflow: initial !important;\n width: calc(100% + var(--ht-menu-item-horizontal-padding, 2px) * 2 + var(--ht-gap-size, 2px) * 4);\n margin: 0 calc((var(--ht-menu-item-horizontal-padding, 2px) + var(--ht-gap-size, 2px) * 2) * -1);\n}\n.handsontable .htUIMultipleSelectHot::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -1px;\n left: 0;\n width: 100%;\n height: 1px;\n background-color: var(--ht-border-color);\n}\n.handsontable .htUIMultipleSelectHot .wtHolder {\n padding: 0;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n.handsontable .htUIMultipleSelectHot .wtHolder .wtSpreader {\n padding: calc(var(--ht-gap-size) * 2) 0;\n}\n.handsontable .htUIMultipleSelectHot .wtHolder td {\n height: auto !important;\n padding: 4px var(--ht-cell-horizontal-padding);\n}\n.handsontable .htUIClearAll,\n.handsontable .htUISelectAll {\n display: inline-block;\n margin-right: var(--ht-gap-size, 4px);\n margin-bottom: var(--ht-gap-size, 4px);\n}\n.handsontable .htUIClearAll a,\n.handsontable .htUISelectAll a {\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n color: var(--ht-link-color);\n border-radius: var(--ht-button-border-radius);\n}\n.handsontable .htUIClearAll a:hover,\n.handsontable .htUISelectAll a:hover {\n color: var(--ht-link-hover-color);\n}\n.handsontable .htUIClearAll a:focus,\n.handsontable .htUISelectAll a:focus {\n outline: 1px solid var(--ht-link-hover-color);\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder {\n overflow: auto;\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder .wtHider,\n.handsontable .htUIMultipleSelect .ht_master .wtHolder .htCore,\n.handsontable .htUIMultipleSelect .ht_master .wtHolder tr,\n.handsontable .htUIMultipleSelect .ht_master .wtHolder td {\n background: none;\n}\n.handsontable .htUIInput.htUIButton {\n cursor: pointer;\n display: inline-block;\n}\n.handsontable .htUIInput.htUIButtonOK {\n margin-inline-start: 0;\n margin-inline-end: calc(2 * var(--ht-gap-size, 2px));\n}\n\n.handsontable .htCommentCell {\n position: relative;\n}\n.handsontable .htCommentCell::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n inset-inline-end: 0;\n inset-inline-start: unset;\n border-inline-start: var(--ht-comments-indicator-size, 4px) solid transparent;\n border-inline-end: none;\n border-top: var(--ht-comments-indicator-size, 4px) solid var(--ht-comments-indicator-color, #1a42e8);\n}\n\n.htCommentsContainer .htComments {\n display: none;\n z-index: 1059;\n position: absolute;\n}\n.htCommentsContainer .htCommentTextArea {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n width: 240px;\n height: 88px;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n margin: 0 -1px;\n padding: var(--ht-comments-textarea-vertical-padding) var(--ht-comments-textarea-horizontal-padding);\n border: var(--ht-comments-textarea-border-width, 1px) solid var(--ht-comments-textarea-border-color, transparent);\n border-inline-start: var(--ht-comments-textarea-border-width, 1px) solid var(--ht-comments-textarea-border-color, #1a42e8);\n color: var(--ht-comments-textarea-foreground-color);\n background-color: var(--ht-comments-textarea-background-color, #ffffff);\n outline: 0 !important;\n box-sizing: border-box;\n -webkit-appearance: none;\n}\n.htCommentsContainer .htCommentTextArea:focus {\n border: var(--ht-comments-textarea-focus-border-width, 1px) solid var(--ht-comments-textarea-focus-border-color, #1a42e8);\n color: var(--ht-comments-textarea-focus-foreground-color);\n background-color: var(--ht-comments-textarea-focus-background-color, #ffffff);\n}\n\n.htBorders .wtBorder.ht-border-style-dashed-vertical {\n background-image: repeating-linear-gradient(to bottom, var(--ht-custom-border-color) 0 5px, transparent 0 10px);\n}\n.htBorders .wtBorder.ht-border-style-dashed-horizontal {\n background-image: repeating-linear-gradient(to right, var(--ht-custom-border-color) 0 5px, transparent 0 10px);\n}\n.htBorders .wtBorder.ht-border-style-dotted-horizontal {\n background-image: radial-gradient(circle, var(--ht-custom-border-color) calc(var(--ht-custom-border-size) / 2), transparent 0);\n background-size: calc(var(--ht-custom-border-size) * 2) var(--ht-custom-border-size);\n background-repeat: repeat-x;\n}\n.htBorders .wtBorder.ht-border-style-dotted-vertical {\n background-image: radial-gradient(circle, var(--ht-custom-border-color) calc(var(--ht-custom-border-size) / 2), transparent 0);\n background-size: var(--ht-custom-border-size) calc(var(--ht-custom-border-size) * 2);\n background-repeat: repeat-y;\n}\n\n.handsontable .columnSorting:not(.indicatorDisabled) {\n position: relative;\n}\n.handsontable .columnSorting:not(.indicatorDisabled).sortAction.ascending, .handsontable .columnSorting:not(.indicatorDisabled).sortAction.descending {\n padding-inline-end: calc(var(--ht-icon-size, 16px) + 2px);\n}\n.handsontable .columnSorting:not(.indicatorDisabled).sortAction:hover {\n text-decoration: none;\n cursor: pointer;\n}\n.handsontable .columnSorting:not(.indicatorDisabled).sortAction::before {\n content: \"\";\n display: block;\n width: var(--ht-icon-size, 16px);\n position: absolute;\n top: 50%;\n right: 2px;\n transform: translateY(-50%);\n text-align: right;\n}\n.handsontable .htRight .columnSorting.sortAction.ascending, .handsontable .htRight .columnSorting.sortAction.descending {\n padding-inline-start: calc(var(--ht-icon-size, 16px) + 2px);\n padding-inline-end: 0;\n}\n.handsontable .htRight .columnSorting.sortAction::before {\n left: 2px;\n right: auto;\n text-align: left;\n}\n\n[dir=rtl] .handsontable .columnSorting.sortAction::before {\n left: 2px;\n right: auto;\n text-align: left;\n}\n[dir=rtl] .handsontable .htRight .columnSorting.sortAction.ascending, [dir=rtl] .handsontable .htRight .columnSorting.sortAction.descending {\n padding-inline-start: 0;\n padding-inline-end: calc(var(--ht-icon-size, 16px) + 2px);\n}\n[dir=rtl] .handsontable .htLeft .columnSorting.sortAction.ascending, [dir=rtl] .handsontable .htLeft .columnSorting.sortAction.descending {\n padding-inline-start: calc(var(--ht-icon-size, 16px) + 2px);\n padding-inline-end: 0;\n}\n[dir=rtl] .handsontable .htLeft .columnSorting.sortAction::before {\n left: auto;\n right: 2px;\n text-align: right;\n}\n\n.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled)::before {\n content: \"*\";\n display: inline-block;\n position: relative;\n /* The multi-line header and header with longer text need more padding to not hide arrow,\n we make header wider in `GhostTable` to make some space for arrow which is positioned absolutely in the main table */\n padding-inline-end: calc(var(--ht-icon-size, 16px) + 2px);\n}\n\n.handsontable .colHeader.columnSorting::after {\n content: \"\";\n display: block;\n width: 8px;\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n margin-top: 4px;\n font-size: 8px;\n text-align: right;\n}\n.handsontable .colHeader.columnSorting[class^=sort-]::after, .handsontable .colHeader.columnSorting[class*=\" sort-\"]::after {\n content: \"+\";\n}\n.handsontable .colHeader.columnSorting.sort-1::after {\n content: \"1\";\n}\n.handsontable .colHeader.columnSorting.sort-2::after {\n content: \"2\";\n}\n.handsontable .colHeader.columnSorting.sort-3::after {\n content: \"3\";\n}\n.handsontable .colHeader.columnSorting.sort-4::after {\n content: \"4\";\n}\n.handsontable .colHeader.columnSorting.sort-5::after {\n content: \"5\";\n}\n.handsontable .colHeader.columnSorting.sort-6::after {\n content: \"6\";\n}\n.handsontable .colHeader.columnSorting.sort-7::after {\n content: \"7\";\n}\n.handsontable .htRight .colHeader.columnSorting::after {\n left: 0;\n right: auto;\n text-align: left;\n}\n\n[dir=rtl] .handsontable .colHeader.columnSorting::after {\n left: 0;\n right: auto;\n text-align: left;\n}\n[dir=rtl] .handsontable .htLeft .colHeader.columnSorting::after {\n left: auto;\n right: 0;\n text-align: right;\n}\n\n.htGhostTable th div:has(.changeType) span.colHeader.columnSorting:not(.indicatorDisabled) {\n padding-inline-end: var(--ht-gap-size);\n}\n\n.handsontable .htRowHeaders .ht_master.innerBorderInlineStart ~ .ht_clone_top_inline_start_corner th:nth-child(2), .handsontable .htRowHeaders .ht_master.innerBorderInlineStart ~ .ht_clone_inline_start td:first-of-type {\n border-left: 0 none;\n}\n.handsontable .ht_clone_top_inline_start_corner th.ht__active_highlight {\n box-shadow: none;\n}\n\n.handsontable .manualColumnResizer {\n position: absolute;\n top: 0;\n width: 10px;\n margin: 0;\n cursor: col-resize;\n background: none;\n opacity: 0;\n z-index: 210;\n}\n.handsontable .manualColumnResizer::before, .handsontable .manualColumnResizer::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 1px;\n width: 2px;\n height: calc(100% - 12px);\n max-height: 16px;\n margin-top: 0.5px;\n background: var(--ht-resize-indicator-color);\n border-radius: 2px;\n transform: translateY(-50%);\n}\n.handsontable .manualColumnResizer::after {\n left: auto;\n right: 0;\n}\n.handsontable .manualColumnResizer:hover, .handsontable .manualColumnResizer.active {\n opacity: 1;\n}\n.handsontable .manualColumnResizerGuide {\n position: absolute;\n inset-inline-end: unset;\n top: 0;\n width: 0;\n margin-inline-start: 5px;\n margin-inline-end: unset;\n display: none;\n border-inline-end: 1px solid var(--ht-accent-color);\n border-inline-start: none;\n}\n.handsontable .manualColumnResizerGuide.active {\n display: block;\n z-index: 209;\n}\n\n.handsontable .manualRowResizer {\n position: absolute;\n left: 0;\n z-index: 210;\n height: 10px;\n margin: 0;\n cursor: row-resize;\n background: none;\n opacity: 0;\n}\n.handsontable .manualRowResizer::before, .handsontable .manualRowResizer::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 1px;\n left: 50%;\n width: calc(100% - 12px);\n max-width: 16px;\n height: 2px;\n background: var(--ht-resize-indicator-color);\n border-radius: 2px;\n transform: translateX(-50%);\n}\n.handsontable .manualRowResizer::after {\n top: auto;\n bottom: 0;\n}\n.handsontable .manualRowResizer:hover, .handsontable .manualRowResizer.active {\n opacity: 1;\n}\n.handsontable .manualRowResizerGuide {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 0;\n margin-top: 5px;\n display: none;\n border-bottom: 1px solid var(--ht-accent-color);\n border-top: none;\n}\n.handsontable .manualRowResizerGuide.active {\n display: block;\n z-index: 209;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight]:not([class*=fullySelectedMergedCell])::before {\n opacity: 0;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-multiple]::before {\n opacity: 0.14;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-0]:before {\n opacity: 0.14;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-1]:before {\n opacity: 0.21;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-2]:before {\n opacity: 0.28;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-3]:before {\n opacity: 0.35;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-4]:before {\n opacity: 0.42;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-5]:before {\n opacity: 0.49;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-6]:before {\n opacity: 0.56;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-7]:before {\n opacity: 0.63;\n}\n\n.handsontable .wtHider {\n position: relative;\n}\n.handsontable .ht__manualColumnMove.after-selection--columns thead th.ht__highlight, .handsontable.ht__manualColumnMove.after-selection--columns thead th.ht__highlight {\n cursor: move;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.handsontable .ht__manualColumnMove.on-moving--columns *,\n.handsontable .ht__manualColumnMove.on-moving--columns thead th.ht__highlight, .handsontable.ht__manualColumnMove.on-moving--columns *,\n.handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight {\n cursor: move;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.handsontable .ht__manualColumnMove.on-moving--columns .manualColumnResizer, .handsontable.ht__manualColumnMove.on-moving--columns .manualColumnResizer {\n display: none;\n}\n.handsontable .ht__manualColumnMove--guideline, .handsontable .ht__manualColumnMove--backlight, .handsontable.ht__manualColumnMove--guideline, .handsontable.ht__manualColumnMove--backlight {\n position: absolute;\n height: 100%;\n display: none;\n}\n.handsontable .ht__manualColumnMove--guideline, .handsontable.ht__manualColumnMove--guideline {\n width: 1px;\n top: 0;\n margin-inline-start: -0.5px;\n margin-inline-end: 0;\n z-index: 205;\n background: var(--ht-move-indicator-color, #1a42e8);\n}\n.handsontable .ht__manualColumnMove--backlight, .handsontable.ht__manualColumnMove--backlight {\n display: none;\n z-index: 205;\n pointer-events: none;\n background: color-mix(in srgb, var(--ht-move-backlight-color) var(--ht-move-backlight-opacity, 100%), transparent);\n}\n.handsontable .on-moving--columns.show-ui .ht__manualColumnMove--guideline,\n.handsontable .on-moving--columns .ht__manualColumnMove--backlight, .handsontable.on-moving--columns.show-ui .ht__manualColumnMove--guideline,\n.handsontable.on-moving--columns .ht__manualColumnMove--backlight {\n display: block;\n}\n\n.handsontable .wtHider {\n position: relative;\n}\n.handsontable .ht__manualRowMove.after-selection--rows tbody th.ht__highlight, .handsontable.ht__manualRowMove.after-selection--rows tbody th.ht__highlight {\n cursor: move;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.handsontable .ht__manualRowMove.on-moving--rows *,\n.handsontable .ht__manualRowMove.on-moving--rows tbody th.ht__highlight, .handsontable.ht__manualRowMove.on-moving--rows *,\n.handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight {\n cursor: move;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.handsontable .ht__manualRowMove.on-moving--rows .manualRowResizer, .handsontable.ht__manualRowMove.on-moving--rows .manualRowResizer {\n display: none;\n}\n.handsontable .ht__manualRowMove--guideline, .handsontable .ht__manualRowMove--backlight, .handsontable.ht__manualRowMove--guideline, .handsontable.ht__manualRowMove--backlight {\n position: absolute;\n width: 100%;\n display: none;\n}\n.handsontable .ht__manualRowMove--guideline, .handsontable.ht__manualRowMove--guideline {\n border-top: 1px solid var(--ht-move-indicator-color);\n left: 0;\n z-index: 205;\n}\n.handsontable .ht__manualRowMove--backlight, .handsontable.ht__manualRowMove--backlight {\n display: none;\n z-index: 205;\n pointer-events: none;\n background: color-mix(in srgb, var(--ht-move-backlight-color) var(--ht-move-backlight-opacity, 100%), transparent);\n}\n.handsontable .on-moving--rows.show-ui .ht__manualRowMove--guideline,\n.handsontable .on-moving--rows .ht__manualRowMove--backlight, .handsontable.on-moving--rows.show-ui .ht__manualRowMove--guideline,\n.handsontable.on-moving--rows .ht__manualRowMove--backlight {\n display: block;\n}\n\n.ht-dialog {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n letter-spacing: var(--ht-letter-spacing);\n width: 100%;\n height: 100%;\n z-index: 1060;\n opacity: 0;\n overflow-y: auto;\n border-radius: var(--ht-wrapper-border-radius);\n border: 1px solid var(--ht-border-color);\n box-sizing: border-box !important;\n}\n.ht-dialog[dir=rtl] {\n left: auto;\n right: 0;\n}\n.ht-dialog:focus {\n border: 1px solid var(--ht-accent-color);\n outline: none;\n}\n.ht-dialog:has(.htFocusCatcher:focus) {\n border: 1px solid var(--ht-accent-color);\n outline: none;\n}\n.ht-dialog * {\n box-sizing: border-box !important;\n}\n.ht-dialog--background-solid {\n background-color: var(--ht-dialog-solid-background-color);\n}\n.ht-dialog--background-semi-transparent {\n background-color: color-mix(in srgb, var(--ht-dialog-semi-transparent-background-color) var(--ht-dialog-semi-transparent-background-opacity, 100%), transparent);\n}\n.ht-dialog--animation {\n transition: opacity var(--ht-table-transition) ease-in-out;\n}\n.ht-dialog--show {\n opacity: 1;\n}\n.ht-dialog__content-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 100%;\n padding: calc(var(--ht-gap-size) * 4);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-dialog__content {\n position: relative;\n padding: var(--ht-dialog-content-padding-horizontal) var(--ht-dialog-content-padding-vertical);\n max-width: 480px;\n color: var(--ht-foreground-color);\n}\n.ht-dialog__content--background {\n box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) color-mix(in srgb, var(--ht-shadow-color, rgb(0, 0, 0)) var(--ht-shadow-opacity, 100%), transparent);\n border-radius: var(--ht-dialog-content-border-radius);\n background-color: var(--ht-dialog-content-background-color);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper {\n text-align: center;\n padding: calc(var(--ht-gap-size) * 2);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 480px;\n padding: calc(var(--ht-gap-size) * 2);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper-inner--background {\n box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) color-mix(in srgb, var(--ht-shadow-color, rgb(0, 0, 0)) var(--ht-shadow-opacity, 100%), transparent);\n border-radius: var(--ht-dialog-content-border-radius);\n background-color: var(--ht-dialog-content-background-color);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper-inner:focus {\n outline: none;\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n.ht-dialog--confirm .ht-dialog__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ht-gap-size);\n}\n.ht-dialog--confirm .ht-dialog__content:has(.ht-dialog__buttons) {\n gap: calc(var(--ht-gap-size) * 2);\n}\n.ht-dialog--confirm .ht-dialog__title {\n margin: 0;\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height);\n}\n.ht-dialog--confirm .ht-dialog__description {\n margin: 0;\n color: var(--ht-foreground-secondary-color);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n}\n.ht-dialog--confirm .ht-dialog__buttons {\n display: flex;\n justify-content: center;\n flex-direction: row;\n flex-wrap: wrap;\n gap: calc(var(--ht-gap-size) * 2);\n}\n\n.ht-notification {\n position: absolute;\n inset: 0;\n z-index: 1070;\n pointer-events: none;\n overflow: visible;\n}\n.ht-notification__stack {\n position: absolute;\n display: flex;\n flex-direction: column;\n gap: 10px;\n max-width: min(420px, 100% - 40px);\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n pointer-events: auto;\n -webkit-overflow-scrolling: touch;\n min-height: 0;\n padding: 10px;\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n}\n.ht-notification__stack--top-start {\n top: 10px;\n inset-inline-start: 10px;\n align-items: flex-start;\n max-height: calc(100% - 40px);\n}\n.ht-notification__stack--top-end {\n top: 10px;\n inset-inline-end: 10px;\n align-items: flex-end;\n max-height: calc(100% - 40px);\n}\n.ht-notification__stack--bottom-start {\n bottom: 10px;\n inset-inline-start: 10px;\n align-items: flex-start;\n max-height: calc(100% - 40px);\n}\n.ht-notification__stack--bottom-end {\n bottom: 10px;\n inset-inline-end: 10px;\n align-items: flex-end;\n max-height: calc(100% - 40px);\n}\n.ht-notification__toast {\n box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) color-mix(in srgb, var(--ht-shadow-color, rgb(0, 0, 0)) var(--ht-shadow-opacity, 100%), transparent);\n position: relative;\n display: flex;\n flex-shrink: 0;\n max-width: 100%;\n pointer-events: auto;\n color: var(--ht-notification-foreground-color, var(--ht-foreground-color));\n background-color: var(--ht-notification-background-color, var(--ht-background-color));\n border: 1px solid var(--ht-notification-border-color, var(--ht-border-color));\n border-radius: var(--ht-wrapper-border-radius, 4px);\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n letter-spacing: var(--ht-letter-spacing);\n outline: none;\n}\n.ht-notification__toast:focus-visible {\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n.ht-notification__toast--animate {\n opacity: 0;\n transition: opacity var(--ht-table-transition, 0.15s) ease-out, transform var(--ht-table-transition, 0.15s) ease-out;\n}\n.ht-notification__toast--animate.ht-notification__toast--stack-top:not(.ht-notification__toast--visible) {\n transform: translateY(-6px);\n}\n.ht-notification__toast--animate.ht-notification__toast--stack-bottom:not(.ht-notification__toast--visible) {\n transform: translateY(6px);\n}\n.ht-notification__toast--visible {\n opacity: 1;\n transform: translateY(0);\n}\n.ht-notification__toast--info .ht-notification__accent {\n display: none;\n}\n.ht-notification__toast--success .ht-notification__accent {\n background-color: var(--ht-notification-success-accent, #37bc6c);\n}\n.ht-notification__toast--warning .ht-notification__accent {\n background-color: var(--ht-notification-warning-accent, #fbe952);\n}\n.ht-notification__toast--error .ht-notification__accent {\n background-color: var(--ht-notification-error-accent, #fa4d32);\n}\n.ht-notification__toast-inner {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n padding: 10px;\n gap: 0;\n direction: inherit;\n}\n.ht-notification__accent {\n box-sizing: border-box;\n flex: 0 0 4px;\n align-self: stretch;\n border-radius: 4px;\n margin-inline-end: 10px;\n}\n.ht-notification__body {\n flex: 1 1 auto;\n min-width: 0;\n}\n.ht-notification__title {\n margin: 0 0 var(--ht-gap-size);\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight, 600);\n}\n.ht-notification__message {\n margin: 0;\n font-size: var(--ht-font-size-small);\n word-break: break-word;\n}\n.ht-notification__actions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--ht-gap-size);\n margin-top: var(--ht-gap-size);\n}\n.ht-notification__close {\n position: relative;\n box-sizing: border-box;\n flex: 0 0 auto;\n align-self: flex-start;\n margin-inline-start: 4px;\n width: var(--ht-icon-button-hit-area-size);\n height: var(--ht-icon-button-hit-area-size);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--ht-icon-button-icon-color, inherit);\n cursor: pointer;\n border-radius: var(--ht-icon-button-border-radius, var(--ht-wrapper-border-radius, 4px));\n flex-shrink: 0;\n overflow: visible;\n}\n.ht-notification__close::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n inset-inline-start: 50%;\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-inline-start: calc(-0.5 * var(--ht-icon-size));\n}\n.ht-notification__close:hover {\n color: var(--ht-icon-button-hover-icon-color, inherit);\n background-color: var(--ht-icon-button-hover-background-color, color-mix(in srgb, var(--ht-foreground-color) 8%, transparent));\n}\n.ht-notification__close:focus-visible {\n outline: 2px solid var(--ht-accent-color);\n outline-offset: 2px;\n}\n\n.handsontable.ht-pagination {\n color: var(--ht-pagination-bar-foreground-color);\n background: var(--ht-pagination-bar-background-color);\n border: 1px solid var(--ht-wrapper-border-color);\n border-top-color: transparent;\n border-radius: 0 0 var(--ht-wrapper-border-radius) var(--ht-wrapper-border-radius);\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n box-sizing: border-box;\n overflow-x: auto;\n}\n.handsontable.ht-pagination--bordered {\n border-top-color: var(--ht-wrapper-border-color);\n}\n.handsontable.ht-pagination .ht-pagination__inner {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: calc(var(--ht-gap-size) * 4);\n border-radius: 0 0 var(--ht-wrapper-border-radius) var(--ht-wrapper-border-radius);\n padding-inline: var(--ht-pagination-bar-horizontal-padding);\n padding-block: var(--ht-pagination-bar-vertical-padding);\n min-width: 230px;\n}\n.handsontable.ht-pagination .ht-page-size-section {\n display: flex;\n align-items: center;\n gap: calc(var(--ht-gap-size) * 2);\n}\n.handsontable.ht-pagination .ht-page-size-section__label {\n white-space: nowrap;\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper {\n position: relative;\n border-radius: var(--ht-input-border-radius);\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select {\n padding-inline-start: var(--ht-gap-size);\n padding-inline-end: calc(var(--ht-gap-size) + var(--ht-icon-size));\n padding-top: var(--ht-gap-size);\n padding-bottom: var(--ht-gap-size);\n border-radius: var(--ht-input-border-radius);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n border: 1px solid var(--ht-input-border-color);\n line-height: calc(var(--ht-line-height) - 4px);\n -webkit-appearance: none;\n font-size: inherit;\n cursor: pointer;\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:disabled {\n opacity: 0.4;\n cursor: default;\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n border-color: var(--ht-input-disabled-border-color);\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:hover:not(:disabled) {\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n border-color: var(--ht-input-hover-border-color);\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:focus {\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n border-color: var(--ht-input-focus-border-color);\n outline: none;\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper::after {\n content: \"\";\n display: block;\n position: absolute;\n inset-inline-end: var(--ht-gap-size);\n inset-block-end: 50%;\n transform: translateY(50%);\n background-color: var(--ht-foreground-color);\n pointer-events: none;\n}\n.handsontable.ht-pagination .ht-page-counter-section {\n margin-inline-end: auto;\n}\n.handsontable.ht-pagination .ht-page-navigation-section {\n display: flex;\n align-items: center;\n gap: 1px;\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button {\n font-size: inherit;\n border: 1px solid var(--ht-pagination-button-border-color);\n color: var(--ht-pagination-button-foreground-color);\n background-color: var(--ht-pagination-button-background-color);\n border-radius: var(--ht-icon-button-large-border-radius);\n padding: var(--ht-icon-button-large-padding);\n cursor: pointer;\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button::before {\n content: \"\";\n display: block;\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button--disabled {\n cursor: default;\n pointer-events: none;\n color: var(--ht-pagination-button-disabled-foreground-color);\n background-color: var(--ht-pagination-button-disabled-background-color);\n border-color: var(--ht-pagination-button-disabled-border-color);\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button:hover:not(:disabled) {\n border-color: var(--ht-pagination-button-hover-border-color);\n color: var(--ht-pagination-button-hover-foreground-color);\n background-color: var(--ht-pagination-button-hover-background-color);\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button:focus {\n outline: none;\n border-color: var(--ht-pagination-button-focus-border-color);\n color: var(--ht-pagination-button-focus-foreground-color);\n background-color: var(--ht-pagination-button-focus-background-color);\n}\n.handsontable.ht-pagination .ht-page-navigation-section__label {\n white-space: nowrap;\n min-width: 100px;\n text-align: center;\n}\n.handsontable.ht-wrapper.htPagination {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htPagination .htCore {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htPagination .htCore thead tr:last-child th:first-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child td:first-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child th:first-child {\n border-end-start-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htPagination .htCore thead tr:last-child th:last-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child td:last-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child th:last-child {\n border-end-end-radius: 0 !important;\n}\n\n.ht-loading__icon-svg {\n display: block;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n color: var(--ht-accent-color);\n animation: ht-loading-spin 1s linear infinite;\n transform-origin: 50% 50%;\n}\n.ht-loading__content {\n display: flex;\n align-items: center;\n gap: calc(var(--ht-gap-size) * 2);\n}\n.ht-loading__title {\n margin: 0;\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height);\n}\n.ht-loading__description {\n margin: 0;\n color: var(--ht-foreground-secondary-color);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n}\n\n@keyframes ht-loading-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.ht-empty-data-state {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n display: none;\n position: absolute;\n width: 100%;\n left: 0;\n z-index: 999;\n overflow-y: auto;\n border: 1px solid var(--ht-border-color);\n border-radius: var(--ht-wrapper-border-radius);\n box-sizing: border-box;\n background-color: var(--ht-background-color);\n}\n.ht-empty-data-state * {\n box-sizing: border-box !important;\n}\n.ht-empty-data-state__content-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n min-height: 100%;\n padding: calc(var(--ht-gap-size) * 2);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-empty-data-state__content-wrapper-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 480px;\n padding: calc(var(--ht-gap-size) * 2);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-empty-data-state__content-wrapper-inner:focus {\n outline: none;\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n.ht-empty-data-state__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ht-gap-size);\n}\n.ht-empty-data-state__title {\n margin: 0;\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height);\n}\n.ht-empty-data-state__description {\n margin: 0;\n color: var(--ht-foreground-secondary-color);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n}\n.ht-empty-data-state__buttons {\n display: flex;\n justify-content: center;\n flex-direction: row;\n flex-wrap: wrap;\n gap: calc(var(--ht-gap-size) * 2);\n}\n.ht-empty-data-state__buttons--has-buttons {\n margin-top: calc(var(--ht-gap-size) * 2);\n}\n.ht-empty-data-state__spinner {\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n margin-bottom: calc(var(--ht-gap-size) * 2);\n border: 2px solid var(--ht-border-color);\n border-top-color: var(--ht-accent-color);\n border-radius: 50%;\n animation: ht-empty-data-state-spin 0.75s linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .ht-empty-data-state__spinner {\n animation: none;\n border-top-color: var(--ht-border-color);\n }\n}\n.ht-empty-data-state--loading .ht-empty-data-state__content {\n gap: calc(var(--ht-gap-size) * 0.5);\n}\n.ht-empty-data-state--disable-top-border {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n border-top-width: 0;\n}\n.ht-empty-data-state--disable-inline-border {\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n border-inline-start-width: 0;\n}\n.ht-empty-data-state--disable-bottom-border, .ht-empty-data-state:has(~ .ht-pagination) {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n border-bottom-width: 0;\n}\n\n@keyframes ht-empty-data-state-spin {\n to {\n transform: rotate(360deg);\n }\n}\n");
|
|
120704
|
+
/* eslint-disable max-len, quotes */ /* This file is autogenerated. */ /* export default */ const __rspack_default_export = ("/*!\n * Copyright (c) HANDSONCODE sp. z o. o.\n *\n * HANDSONTABLE is a software distributed by HANDSONCODE sp. z o. o., a Polish corporation based in\n * Gdynia, Poland, at Aleja Zwyciestwa 96-98, registered by the District Court in Gdansk under number\n * 538651, EU tax ID number: PL5862294002, share capital: PLN 62,800.00.\n *\n * This software is protected by applicable copyright laws, including international treaties, and dual-\n * licensed - depending on whether your use for commercial purposes, meaning intended for or\n * resulting in commercial advantage or monetary compensation, or not.\n *\n * If your use is strictly personal or solely for evaluation purposes, meaning for the purposes of testing\n * the suitability, performance, and usefulness of this software outside the production environment,\n * you agree to be bound by the terms included in the \"handsontable-non-commercial-license.pdf\" file.\n *\n * Your use of this software for commercial purposes is subject to the terms included in an applicable\n * license agreement.\n *\n * In any case, you must not make any such use of this software as to develop software which may be\n * considered competitive with this software.\n *\n * UNLESS EXPRESSLY AGREED OTHERWISE, HANDSONCODE PROVIDES THIS SOFTWARE ON AN \"AS IS\"\n * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND IN NO EVENT AND UNDER NO\n * LEGAL THEORY, SHALL HANDSONCODE BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY DIRECT,\n * INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING FROM\n * USE OR INABILITY TO USE THIS SOFTWARE.\n *\n * Version: 17.1.0\n * Release date: 19/05/2026 (built at 19/05/2026 14:51:38)\n */\n.ht-root-wrapper {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n position: relative;\n display: flex;\n flex-direction: column;\n height: 100%;\n}\n\n.htFocusCatcher {\n display: block !important;\n position: absolute;\n width: 0;\n height: 0;\n margin: 0;\n padding: 0;\n border: 0;\n outline: 0;\n opacity: 0;\n z-index: -1;\n}\n\n.ht-grid {\n flex: 1 1 auto;\n min-height: 0;\n}\n\n.htScrollbarTest {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n}\n\n.htScrollbarSafariTest::-webkit-scrollbar {\n width: 9px;\n height: 9px;\n}\n\n.handsontable {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n position: relative;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n letter-spacing: var(--ht-letter-spacing);\n color: var(--ht-foreground-color);\n /* Miscellaneous */\n touch-action: manipulation;\n}\n.handsontable .wtHolder {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n}\n.handsontable .wtHolder::-webkit-scrollbar {\n width: 9px;\n height: 9px;\n}\n.handsontable .wtHolder::-webkit-scrollbar-track {\n background: var(--ht-scrollbar-track-color);\n border-radius: var(--ht-scrollbar-border-radius);\n}\n.handsontable .wtHolder::-webkit-scrollbar-thumb {\n background-color: var(--ht-scrollbar-thumb-color);\n border-radius: var(--ht-scrollbar-border-radius);\n}\n.handsontable .wtHolder::-webkit-scrollbar-corner {\n background: var(--ht-scrollbar-track-color);\n border-end-end-radius: var(--ht-scrollbar-border-radius);\n}\n.handsontable.ht-wrapper {\n border-radius: var(--ht-wrapper-border-radius, 0);\n height: 100%;\n width: 100%;\n}\n.handsontable.ht-wrapper:not(.htFirstDatasetColumnNotRendered) td:first-of-type {\n border-inline-start-width: 1px;\n}\n.handsontable.ht-wrapper::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n border: var(--ht-wrapper-border-width) solid var(--ht-wrapper-border-color);\n border-radius: var(--ht-wrapper-border-radius, 0);\n z-index: 999;\n pointer-events: none;\n overflow: hidden;\n}\n.handsontable.htGhostTable.htNestedHeaders table {\n border-spacing: 0;\n border-collapse: collapse;\n}\n.handsontable.htGhostTable table thead th {\n border-bottom-width: 0;\n}\n.handsontable.htGhostTable table tbody tr:first-of-type th:first-child,\n.handsontable.htGhostTable table tbody tr:first-of-type td:first-child {\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n}\n.handsontable.htGhostTable table tbody tr th,\n.handsontable.htGhostTable table tbody tr td {\n border-top-width: 0;\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n}\n.handsontable.htHasScrollX:not(.htHorizontallyScrollableByWindow):not(.htScrollbarHidden) .ht_master .wtHolder, .handsontable.htHasScrollY:not(.htVerticallyScrollableByWindow):not(.htScrollbarHidden) .ht_master .wtHolder {\n border-radius: var(--ht-wrapper-border-radius, 0);\n}\n.handsontable:not(.htHorizontallyScrollableByWindow).htPagination .ht_master .wtHolder, .handsontable:not(.htHorizontallyScrollableByWindow).htHasScrollX .ht_master .wtHolder, .handsontable:not(.htHorizontallyScrollableByWindow).htHasScrollY .ht_master .wtHolder, .handsontable:not(.htVerticallyScrollableByWindow).htPagination .ht_master .wtHolder, .handsontable:not(.htVerticallyScrollableByWindow).htHasScrollX .ht_master .wtHolder, .handsontable:not(.htVerticallyScrollableByWindow).htHasScrollY .ht_master .wtHolder {\n background-color: var(--ht-background-color);\n}\n.handsontable tr.ht__row_even th {\n background-color: var(--ht-row-header-even-background-color);\n}\n.handsontable tr.ht__row_even td {\n background-color: var(--ht-row-cell-even-background-color);\n}\n.handsontable tr.ht__row_odd th {\n background-color: var(--ht-row-header-odd-background-color);\n}\n.handsontable tr.ht__row_odd td {\n background-color: var(--ht-row-cell-odd-background-color);\n}\n.handsontable th,\n.handsontable td {\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n vertical-align: top;\n border-top-width: 0;\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n border-bottom-width: 1px;\n border-style: solid;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n white-space: pre-wrap;\n overflow: hidden;\n outline: none;\n outline-width: 0;\n empty-cells: show;\n box-sizing: border-box;\n color: var(--ht-foreground-color);\n border-top-color: var(--ht-cell-vertical-border-color);\n border-bottom-color: var(--ht-cell-vertical-border-color);\n border-inline-start-color: var(--ht-cell-horizontal-border-color);\n border-inline-end-color: var(--ht-cell-horizontal-border-color);\n}\n.handsontable th.invisibleSelection,\n.handsontable td.invisibleSelection {\n outline: none;\n}\n.handsontable th.invisibleSelection::selection,\n.handsontable td.invisibleSelection::selection {\n background: transparent;\n}\n.handsontable th {\n position: relative;\n overflow: visible;\n text-align: center;\n font-weight: var(--ht-header-font-weight);\n white-space: nowrap;\n color: var(--ht-header-foreground-color);\n background-color: var(--ht-header-background-color);\n}\n.handsontable th:last-child {\n /* Foundation framework fix */\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n border-bottom-width: 1px;\n border-inline-end-color: var(--ht-border-color);\n}\n.handsontable th:last-child.ht__active_highlight {\n border-inline-end-color: var(--ht-header-active-border-color);\n}\n.handsontable th:first-child {\n border-inline-start-color: var(--ht-border-color);\n}\n.handsontable th:first-child.ht__active_highlight {\n border-inline-start-color: var(--ht-header-active-border-color);\n}\n.handsontable th:first-child, .handsontable th:nth-child(2) {\n border-inline-start-width: 1px;\n}\n.handsontable th.current {\n box-shadow: inset 0 0 0 1px var(--ht-cell-selection-border-color);\n}\n.handsontable th.active {\n color: var(--ht-header-active-foreground-color);\n background-color: var(--ht-header-active-background-color);\n}\n.handsontable th.ht__highlight {\n color: var(--ht-header-highlighted-foreground-color);\n background-color: var(--ht-header-highlighted-background-color);\n}\n.handsontable th.ht__active_highlight {\n border-color: var(--ht-header-active-border-color);\n color: var(--ht-header-active-foreground-color);\n background-color: var(--ht-header-active-background-color);\n}\n.handsontable tbody tr.ht__row_odd th.ht__highlight, .handsontable tbody tr.ht__row_even th.ht__highlight {\n color: var(--ht-header-row-highlighted-foreground-color);\n background-color: var(--ht-header-row-highlighted-background-color);\n}\n.handsontable tbody tr.ht__row_odd th.ht__active_highlight, .handsontable tbody tr.ht__row_even th.ht__active_highlight {\n color: var(--ht-header-row-active-foreground-color);\n background-color: var(--ht-header-row-active-background-color);\n}\n.handsontable tbody tr:first-of-type th:first-child:empty::after,\n.handsontable tbody tr:first-of-type td:first-child:empty::after {\n content: \"\";\n display: block;\n min-height: var(--ht-line-height);\n}\n.handsontable tbody tr th {\n padding: 0;\n color: var(--ht-header-row-foreground-color);\n background-color: var(--ht-header-row-background-color);\n}\n.handsontable tbody tr th.ht__active_highlight {\n box-shadow: 0 -1px 0 0 var(--ht-header-active-border-color);\n}\n.handsontable tbody tr th .relative {\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n min-height: 100%;\n}\n.handsontable tbody tr td:first-child {\n border-inline-start-color: var(--ht-border-color);\n}\n.handsontable tbody tr td:last-child {\n border-inline-end-color: var(--ht-border-color);\n}\n.handsontable thead tr th {\n padding: 0;\n}\n.handsontable thead tr th.ht__active_highlight {\n box-shadow: -1px 0 0 0 var(--ht-header-active-border-color);\n}\n.handsontable thead tr th .relative {\n display: flex;\n flex-direction: row;\n align-items: center;\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n gap: 2px;\n}\n.handsontable thead tr th .relative .colHeader {\n flex: 1 1 auto;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n vertical-align: top;\n}\n.handsontable tr:first-child th,\n.handsontable tr:first-child td {\n border-top-color: var(--ht-border-color);\n border-top-width: 1px;\n}\n.handsontable tr:first-child th.ht__active_highlight,\n.handsontable tr:first-child td.ht__active_highlight {\n border-top-color: var(--ht-header-active-border-color);\n}\n.handsontable tr:last-child th,\n.handsontable tr:last-child td {\n border-bottom-color: var(--ht-border-color);\n}\n.handsontable tr:last-child th.ht__active_highlight,\n.handsontable tr:last-child td.ht__active_highlight {\n border-bottom-color: var(--ht-header-active-border-color);\n}\n.handsontable div[class^=ht_clone] thead .ht__highlight .relative::after {\n content: \"\";\n display: block;\n position: absolute;\n left: -1px;\n right: -1px;\n bottom: -1px;\n height: var(--ht-header-highlighted-shadow-size);\n background-color: var(--ht-accent-color);\n}\n.handsontable div[class^=ht_clone] thead tr:only-of-type .ht__highlight .relative::after {\n bottom: 0;\n}\n.handsontable div[class^=ht_clone] tbody .ht__highlight .relative::after {\n content: \"\";\n display: block;\n position: absolute;\n top: -1px;\n right: -1px;\n bottom: -1px;\n width: var(--ht-header-highlighted-shadow-size);\n background-color: var(--ht-accent-color);\n}\n.handsontable div[class^=ht_clone] td:first-of-type {\n border-inline-start-width: 1px;\n}\n.handsontable thead tr:not(:last-child) th {\n /* Fix for - nested columns with hidden column */\n overflow: hidden;\n}\n.handsontable .hide {\n display: none;\n}\n.handsontable .relative {\n position: relative;\n box-sizing: border-box;\n}\n.handsontable .wtHider {\n width: 0;\n}\n.handsontable .wtSpreader {\n position: relative;\n /* must be 0, otherwise blank space appears in scroll demo after scrolling max to the right */\n width: 0;\n height: auto;\n}\n.handsontable .htAutoSize {\n position: absolute;\n left: -99000px;\n top: -99000px;\n visibility: hidden;\n}\n.handsontable .htTextEllipsis {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n.handsontable table,\n.handsontable tbody,\n.handsontable thead,\n.handsontable input,\n.handsontable textarea,\n.handsontable div {\n box-sizing: content-box;\n}\n.handsontable input,\n.handsontable textarea {\n min-height: initial;\n}\n.handsontable .htCore {\n width: 0;\n margin: 0;\n border-width: 0;\n border-spacing: 0;\n border-collapse: separate;\n outline-width: 0;\n table-layout: fixed;\n cursor: default;\n background-color: var(--ht-background-color);\n}\n.handsontable col {\n width: 64px;\n}\n.handsontable col.rowHeader {\n width: 64px;\n}\n.handsontable col.hidden {\n width: 0 !important;\n}\n.handsontable span.colHeader, .handsontable span.rowHeader {\n display: inline-block;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n}\n.handsontable tr.hidden {\n display: none;\n}\n.handsontable tr.hidden td,\n.handsontable tr.hidden th {\n display: none;\n}\n.handsontable a {\n color: var(--ht-link-color);\n}\n.handsontable a:hover {\n color: var(--ht-link-hover-color);\n}\n.handsontable .ht_clone_top th:nth-child(2) {\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n}\n.handsontable .ht_clone_top_inline_start_corner th:nth-child(2) {\n border-inline-start-width: 0;\n border-inline-end-width: 1px;\n}\n.handsontable.htRowHeaders thead tr th:nth-child(2) {\n border-inline-start-width: 1px;\n}\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) tbody tr th,\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) thead tr th:first-child,\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) ~ .handsontable:not(.htGhostTable) tbody tr th,\n.handsontable .ht_master:not(.innerBorderInlineStart):not(.emptyColumns) ~ .handsontable:not(.ht_clone_top):not(.htGhostTable) thead tr th:first-child {\n border-inline-end-width: 0;\n border-inline-start-width: 1px;\n}\n.handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr:last-child th, .handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) ~ .handsontable thead tr:last-child th,\n.handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead tr.lastChild th, .handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) ~ .handsontable thead tr.lastChild th {\n border-bottom-width: 0;\n}\n.handsontable.htAutoRowSize .ht_master.innerBorderTop tbody tr:first-child th,\n.handsontable.htAutoRowSize .ht_master.innerBorderTop tbody tr:first-child td {\n border-top-width: 0;\n}\n.handsontable.htAutoRowSize .ht_master.innerBorderTop ~ .ht_clone_inline_start tbody tr:first-child th,\n.handsontable.htAutoRowSize .ht_master.innerBorderTop ~ .ht_clone_inline_start tbody tr:first-child td {\n border-top-width: 0;\n}\n.handsontable .ht_master table.htCore > thead,\n.handsontable .ht_master table.htCore > tbody > tr > th,\n.handsontable .ht_clone_inline_start table.htCore > thead {\n visibility: hidden;\n}\n\n.ht_master,\n.ht_clone_inline_start,\n.ht_clone_top,\n.ht_clone_bottom {\n overflow: hidden;\n}\n.ht_master .wtHolder,\n.ht_clone_inline_start .wtHolder,\n.ht_clone_top .wtHolder,\n.ht_clone_bottom .wtHolder {\n overflow: hidden;\n}\n\n.ht_master .wtHolder {\n overflow: auto;\n}\n\n[dir=rtl].handsontable td[dir=ltr] {\n border-inline-end-width: 0;\n border-inline-start-width: 1px;\n}\n[dir=rtl].handsontable tbody tr td[dir=ltr]:last-child {\n border-inline-start-color: var(--ht-border-color);\n}\n[dir=rtl].handsontable div[class^=ht_clone] tbody .ht__highlight .relative::after {\n right: auto;\n left: -1px;\n}\n\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_master .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_master .htCore tbody tr:first-child td:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top_inline_start_corner .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_top .htCore tbody tr:first-child td:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_inline_start .htCore tbody tr:first-child th:first-child,\n.handsontable.ht-wrapper:not(.htColumnHeaders) .ht_clone_inline_start .htCore tbody tr:first-child td:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore {\n border-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:first-child th:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:last-child th:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore thead tr:last-child th:last-child {\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore tbody tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_master .htCore tbody tr:last-child td:last-child {\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top_inline_start_corner .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top .htCore {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_top .htCore thead tr:first-child th:last-child {\n border-start-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore thead tr:first-child th:first-child {\n border-start-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child th:first-child,\n.handsontable.ht-wrapper .ht_clone_inline_start .htCore tbody tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tr:last-child th:first-child,\n.handsontable.ht-wrapper .ht_clone_bottom_inline_start_corner .htCore tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom .htCore {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child th:first-child,\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child td:first-child {\n border-end-start-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child th:last-child,\n.handsontable.ht-wrapper .ht_clone_bottom .htCore tr:last-child td:last-child {\n border-end-end-radius: var(--ht-wrapper-border-radius);\n}\n.handsontable.ht-wrapper.htHasScrollX .htCore {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htHasScrollX .htCore thead tr:last-child th:first-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child td:first-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child th:first-child {\n border-end-start-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htHasScrollX .htCore thead tr:last-child th:last-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child td:last-child,\n.handsontable.ht-wrapper.htHasScrollX .htCore tbody tr:last-child th:last-child {\n border-end-end-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore {\n border-start-end-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore thead tr:first-child th:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:first-child td:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:first-child th:last-child {\n border-start-end-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore thead tr:last-child th:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:last-child td:last-child,\n.handsontable.ht-wrapper.htHasScrollY:not(.htVerticallyScrollableByWindow) .htCore tbody tr:last-child th:last-child {\n border-end-end-radius: 0 !important;\n}\n\n.handsontable.mobile {\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n -webkit-overflow-scrolling: touch;\n}\n.handsontable.mobile .wtHolder {\n user-select: none;\n -webkit-tap-highlight-color: transparent;\n -webkit-overflow-scrolling: touch;\n}\n.handsontable.mobile .handsontableInput:focus {\n box-shadow: inset 0 0 0 2px var(--ht-accent-color);\n -webkit-appearance: none;\n}\n.handsontable .topSelectionHandle,\n.handsontable .topSelectionHandle-HitArea,\n.handsontable .bottomSelectionHandle,\n.handsontable .bottomSelectionHandle-HitArea {\n inset-inline-start: -10000px;\n inset-inline-end: unset;\n top: -10000px;\n z-index: 9999;\n}\n.handsontable.hide-tween {\n -webkit-animation: opacity-hide 0.2s;\n animation: opacity-hide 0.2s;\n animation-fill-mode: forwards;\n -webkit-animation-fill-mode: forwards;\n}\n.handsontable.show-tween {\n -webkit-animation: opacity-show 0.3s;\n animation: opacity-show 0.3s;\n animation-fill-mode: forwards;\n -webkit-animation-fill-mode: forwards;\n}\n\n.ht_clone_master {\n z-index: 100;\n}\n\n.ht_clone_inline_start {\n z-index: 120;\n}\n\n.ht_clone_bottom {\n z-index: 130;\n}\n\n.ht_clone_bottom_inline_start_corner {\n z-index: 150;\n}\n\n.ht_clone_top {\n z-index: 160;\n}\n\n.ht_clone_top_inline_start_corner {\n z-index: 180;\n}\n\n.ht_editor_hidden {\n z-index: -1;\n}\n\n.ht_editor_visible {\n z-index: 200;\n}\n\n.handsontable td.area {\n position: relative;\n}\n.handsontable td.area::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-1 {\n position: relative;\n}\n.handsontable td.area-1::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-2 {\n position: relative;\n}\n.handsontable td.area-2::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-3 {\n position: relative;\n}\n.handsontable td.area-3::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-4 {\n position: relative;\n}\n.handsontable td.area-4::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-5 {\n position: relative;\n}\n.handsontable td.area-5::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-6 {\n position: relative;\n}\n.handsontable td.area-6::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area-7 {\n position: relative;\n}\n.handsontable td.area-7::before {\n content: \"\";\n position: absolute;\n inset: 0;\n background: var(--ht-cell-selection-background-color, #1a42e8);\n}\n.handsontable td.area::before {\n opacity: 0.14;\n}\n.handsontable td.area-1::before {\n opacity: 0.21;\n}\n.handsontable td.area-2::before {\n opacity: 0.28;\n}\n.handsontable td.area-3::before {\n opacity: 0.35;\n}\n.handsontable td.area-4::before {\n opacity: 0.42;\n}\n.handsontable td.area-5::before {\n opacity: 0.49;\n}\n.handsontable td.area-6::before {\n opacity: 0.56;\n}\n.handsontable td.area-7::before {\n opacity: 0.63;\n}\n.handsontable td.area {\n border-color: color-mix(in srgb, var(--ht-border-color), var(--ht-foreground-color) 10%);\n}\n.handsontable .wtBorder {\n position: absolute;\n font-size: 0;\n}\n.handsontable .wtBorder:nth-child(1), .handsontable .wtBorder:nth-child(3) {\n z-index: 2;\n}\n.handsontable .wtBorder:nth-child(2), .handsontable .wtBorder:nth-child(4) {\n z-index: 1;\n}\n.handsontable .wtBorder.hidden {\n display: none !important;\n}\n.handsontable .wtBorder.current {\n z-index: 10;\n background-color: var(--ht-cell-selection-border-color) !important;\n}\n.handsontable .wtBorder.area {\n z-index: 8;\n background-color: var(--ht-cell-selection-border-color) !important;\n}\n.handsontable .wtBorder.fill {\n z-index: 6;\n background-color: var(--ht-cell-autofill-fill-border-color, #68696c) !important;\n}\n.handsontable .wtBorder.corner {\n border-radius: var(--ht-cell-autofill-border-radius) !important;\n background-color: var(--ht-cell-autofill-background-color, #1a42e8) !important;\n border-color: var(--ht-cell-autofill-border-color) !important;\n font-size: 0;\n cursor: crosshair;\n z-index: 10;\n}\n.handsontable .wtBorder.corner::after {\n content: \"\";\n position: absolute;\n border-radius: var(--ht-cell-autofill-border-radius);\n inset: min(0px, (var(--ht-cell-autofill-size) - var(--ht-cell-autofill-hit-area-size)) / 2);\n background: transparent;\n}\n.handsontable .wtBorder.corner.wtCornerInlineEndEdge::after {\n inset-inline-end: 0;\n}\n.handsontable .wtBorder.corner.wtCornerBlockEndEdge::after {\n inset-block-end: 0;\n}\n\n.hot-display-license-info {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n padding: var(--ht-license-vertical-padding, 16px) var(--ht-license-horizontal-padding, 16px);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n color: var(--ht-license-foreground-color);\n background-color: var(--ht-license-background-color, #f7f7f9);\n text-align: left;\n border: 1px solid var(--ht-border-color, #f7f7f9);\n margin-top: 10px;\n border-radius: var(--ht-wrapper-border-radius);\n}\n.hot-display-license-info a {\n font-size: var(--ht-license-font-size);\n color: var(--ht-link-color);\n}\n.hot-display-license-info a:hover {\n color: var(--ht-link-hover-color);\n}\n\n.handsontable .htAutocompleteArrow {\n position: relative;\n cursor: default;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n font-size: 0;\n float: right;\n top: calc((var(--ht-line-height) - var(--ht-icon-size)) / 2);\n margin-inline-start: calc(var(--ht-gap-size) * 2);\n margin-inline-end: 1px;\n}\n.handsontable .htAutocompleteArrow::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n opacity: 0.6;\n}\n\n[dir=rtl].handsontable .htAutocompleteArrow {\n float: left;\n}\n\n.handsontable .htCheckboxRendererInput {\n position: relative;\n display: inline-block;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n margin: 0;\n vertical-align: middle;\n cursor: pointer;\n margin-top: -2px;\n outline: none;\n}\n.handsontable .htCheckboxRendererInput:first-child {\n margin-inline-end: var(--ht-gap-size);\n}\n.handsontable .htCheckboxRendererInput:last-child {\n margin-inline-start: var(--ht-gap-size);\n}\n.handsontable .htCheckboxRendererInput::before {\n content: \"\";\n display: inline-block;\n position: absolute;\n top: 0;\n left: 0;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n border-radius: var(--ht-checkbox-border-radius);\n border: 1px solid var(--ht-checkbox-border-color);\n background-color: var(--ht-checkbox-background-color);\n box-sizing: border-box;\n pointer-events: none;\n transition: all var(--ht-table-transition) ease-in-out;\n}\n.handsontable .htCheckboxRendererInput::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n color: var(--ht-checkbox-icon-color);\n pointer-events: none;\n width: var(--ht-checkbox-size) !important;\n height: var(--ht-checkbox-size) !important;\n}\n.handsontable .htCheckboxRendererInput:checked::before {\n border-color: var(--ht-checkbox-checked-border-color);\n background-color: var(--ht-checkbox-checked-background-color);\n}\n.handsontable .htCheckboxRendererInput:checked::after {\n color: var(--ht-checkbox-checked-icon-color);\n}\n.handsontable .htCheckboxRendererInput:checked:disabled::before {\n border-color: var(--ht-checkbox-checked-disabled-border-color);\n background-color: var(--ht-checkbox-checked-disabled-background-color);\n}\n.handsontable .htCheckboxRendererInput:checked:disabled::after {\n color: var(--ht-checkbox-checked-disabled-icon-color);\n}\n.handsontable .htCheckboxRendererInput:checked:focus::before {\n border-color: var(--ht-checkbox-checked-focus-border-color);\n background-color: var(--ht-checkbox-checked-focus-background-color);\n}\n.handsontable .htCheckboxRendererInput:checked:focus::after {\n color: var(--ht-checkbox-checked-focus-icon-color);\n}\n.handsontable .htCheckboxRendererInput:focus::before {\n border-color: var(--ht-checkbox-focus-border-color);\n background-color: var(--ht-checkbox-focus-background-color);\n outline: 1px solid var(--ht-checkbox-focus-ring-color);\n}\n.handsontable .htCheckboxRendererInput:focus::after {\n color: var(--ht-checkbox-focus-icon-color);\n}\n.handsontable .htCheckboxRendererInput:disabled {\n cursor: initial;\n}\n.handsontable .htCheckboxRendererInput:disabled::before {\n border-color: var(--ht-checkbox-disabled-border-color);\n background-color: var(--ht-checkbox-disabled-background-color);\n}\n.handsontable .htCheckboxRendererInput:disabled::after {\n color: var(--ht-checkbox-disabled-icon-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate::before {\n border-color: var(--ht-checkbox-indeterminate-border-color);\n background-color: var(--ht-checkbox-indeterminate-background-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate::after {\n color: var(--ht-checkbox-indeterminate-icon-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:disabled::before {\n border-color: var(--ht-checkbox-indeterminate-disabled-border-color);\n background-color: var(--ht-checkbox-indeterminate-disabled-background-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:disabled::after {\n color: var(--ht-checkbox-indeterminate-disabled-icon-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:focus::before {\n border-color: var(--ht-checkbox-indeterminate-focus-border-color);\n background-color: var(--ht-checkbox-indeterminate-focus-background-color);\n}\n.handsontable .htCheckboxRendererInput:indeterminate:focus::after {\n color: var(--ht-checkbox-indeterminate-focus-icon-color);\n}\n.handsontable .htCheckboxRendererInput.noValue {\n opacity: 0.5;\n}\n.handsontable .htCheckboxRendererLabel {\n display: inline-block;\n position: relative;\n font-size: inherit;\n line-height: inherit;\n cursor: pointer;\n color: inherit;\n margin: 0;\n}\n.handsontable .htCheckboxRendererLabel.fullWidth {\n width: 100%;\n}\n\n.handsontable .htPlaceholder {\n color: var(--ht-placeholder-color);\n}\n.handsontable .htDimmed {\n color: var(--ht-read-only-color) !important;\n background-color: var(--ht-cell-read-only-background-color) !important;\n}\n.handsontable .htLeft {\n text-align: left;\n}\n.handsontable .htCenter {\n text-align: center;\n}\n.handsontable .htRight {\n text-align: right;\n}\n.handsontable .htJustify {\n text-align: justify;\n}\n.handsontable .htTop {\n vertical-align: top;\n}\n.handsontable .htMiddle {\n vertical-align: middle;\n}\n.handsontable .htBottom {\n vertical-align: bottom;\n}\n.handsontable .htInvalid {\n /* gives priority over td.area selection background */\n background-color: var(--ht-cell-error-background-color) !important;\n}\n.handsontable .htNoWrap {\n white-space: nowrap;\n}\n.handsontable .htSearchResult {\n background-color: var(--ht-cell-success-background-color) !important;\n}\n\n.handsontable .ht-multi-select-renderer {\n padding: var(--ht-cell-vertical-padding) var(--ht-cell-horizontal-padding);\n overflow: hidden;\n}\n.handsontable .ht-multi-select-chips-container {\n display: flex;\n flex-wrap: nowrap;\n align-items: center;\n gap: var(--ht-gap-size);\n overflow: hidden;\n max-width: 100%;\n}\n.handsontable .ht-multi-select-chip {\n display: inline-flex;\n align-items: center;\n gap: var(--ht-gap-size);\n padding: var(--ht-chip-vertical-padding) calc((var(--ht-line-height) - var(--ht-icon-size)) / 2) var(--ht-chip-vertical-padding) var(--ht-chip-horizontal-padding);\n border-radius: var(--ht-chip-border-radius);\n background: var(--ht-chip-background);\n white-space: nowrap;\n flex-shrink: 0;\n max-width: 100px;\n box-sizing: border-box;\n}\n.handsontable .ht-multi-select-chip-label {\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--ht-foreground-color);\n font-style: normal;\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height, 40px);\n letter-spacing: var(--ht-letter-spacing, 0);\n padding: 0 var(--ht-chip-gap);\n}\n.handsontable .ht-multi-select-chip-remove {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: var(--ht-icon-size) !important;\n height: var(--ht-icon-size) !important;\n padding: 0;\n cursor: pointer;\n flex-shrink: 0;\n color: var(--ht-icon-button-icon-color);\n background-size: contain;\n background-repeat: no-repeat;\n background-position: center;\n}\n.handsontable .ht-multi-select-chip-remove::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n}\n.handsontable .ht-multi-select-chip-remove:hover {\n background-color: var(--ht-icon-button-hover-background-color);\n}\n.handsontable .ht-multi-select-overflow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: var(--ht-chip-vertical-padding) var(--ht-chip-horizontal-padding);\n background: var(--ht-chip-background);\n border-radius: var(--ht-chip-border-radius);\n color: var(--ht-foreground-color);\n white-space: nowrap;\n flex-shrink: 0;\n}\n\n.handsontableInputHolder {\n position: absolute;\n top: 0;\n left: 0;\n}\n.handsontableInputHolder .handsontableInput {\n display: block;\n margin: 0;\n padding: calc(var(--ht-cell-vertical-padding, 4px) + 1px) calc(var(--ht-cell-horizontal-padding, 8px) + 1px);\n font-family: inherit !important;\n font-size: inherit !important;\n line-height: inherit !important;\n color: var(--ht-cell-editor-foreground-color);\n background-color: var(--ht-cell-editor-background-color, #ffffff);\n box-shadow: inset 0 0 0 var(--ht-cell-editor-border-width, 2px) var(--ht-cell-editor-border-color, #1a42e8), 0 0 var(--ht-cell-editor-shadow-blur-radius, 0) 0 var(--ht-cell-editor-shadow-color, transparent);\n border: none;\n border-radius: 0;\n -webkit-appearance: none !important;\n box-sizing: border-box;\n /* Miscellaneous */\n outline-width: 0;\n /* overwrite styles potentially made by a framework */\n}\n.handsontableInputHolder .handsontableInput:focus {\n outline: none;\n}\n\n.htSelectEditor {\n position: absolute;\n}\n.htSelectEditor select {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n padding: calc(var(--ht-cell-vertical-padding, 4px) + 1px) calc(var(--ht-cell-horizontal-padding, 8px) + 1px);\n padding-inline-end: 26px;\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n color: var(--ht-cell-editor-foreground-color);\n background-color: var(--ht-cell-editor-background-color, #ffffff);\n font-family: inherit !important;\n font-size: inherit !important;\n line-height: inherit !important;\n box-shadow: inset 0 0 0 var(--ht-cell-editor-border-width, 2px) var(--ht-cell-editor-border-color, #1a42e8), 0 0 var(--ht-cell-editor-shadow-blur-radius, 0) 0 var(--ht-cell-editor-shadow-color, transparent);\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n -webkit-appearance: none !important;\n}\n.htSelectEditor select:focus {\n outline: none;\n}\n.htSelectEditor .htAutocompleteArrow {\n top: 50%;\n transform: translateY(-50%);\n margin-inline-end: 4px;\n z-index: 1;\n pointer-events: none;\n}\n\n.handsontable.listbox {\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n margin: 0;\n border: var(--ht-menu-border-width, 1px) solid var(--ht-menu-border-color, #e5e5e9);\n}\n.handsontable.listbox .ht_master {\n overflow: hidden;\n background-color: var(--ht-background-color);\n}\n.handsontable.listbox .wtHolder {\n overflow: auto;\n border-radius: 0 !important;\n}\n.handsontable.listbox .wtHider, .handsontable.listbox .htCore {\n border-radius: 0 !important;\n}\n.handsontable.listbox table {\n overflow: hidden;\n}\n.handsontable.listbox table th,\n.handsontable.listbox table tr:first-child th,\n.handsontable.listbox table tr:last-child th,\n.handsontable.listbox table tr:first-child td,\n.handsontable.listbox table td {\n border-color: transparent !important;\n}\n.handsontable.listbox table th,\n.handsontable.listbox table td {\n white-space: nowrap;\n text-overflow: ellipsis;\n border-radius: 0 !important;\n}\n.handsontable.listbox table .wtBorder {\n visibility: hidden;\n}\n.handsontable.listbox table strong {\n font-weight: bold;\n color: inherit;\n}\n.handsontable.listbox table tr td:hover td {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent) !important;\n cursor: pointer;\n box-shadow: none !important;\n}\n.handsontable.listbox table td {\n transition: var(--ht-table-transition) background ease-in-out;\n}\n.handsontable.listbox table td:hover {\n background-color: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent) !important;\n cursor: pointer;\n}\n.handsontable.listbox table td.current:not([aria-expanded=true]) {\n box-shadow: inset 0 0 0 1px var(--ht-accent-color);\n}\n.handsontable.listbox table td.htDimmed {\n cursor: default;\n font-style: inherit;\n color: inherit !important;\n}\n.handsontable.listbox table td.htDimmed:not(.handsontable.listbox table td:hover) {\n background-color: inherit !important;\n}\n.handsontable.listbox table thead th {\n height: auto !important;\n text-align: left;\n}\n.handsontable.listbox table thead th .relative {\n padding-top: calc(var(--ht-cell-vertical-padding) + var(--ht-gap-size));\n padding-bottom: calc(var(--ht-cell-vertical-padding) + var(--ht-gap-size));\n}\n.handsontable.listbox .ht_clone_top .wtHider {\n overflow: hidden;\n}\n.handsontable.listbox .ht_clone_top table {\n border-radius: 0;\n}\n.handsontable.listbox .htBorders div {\n background: none !important;\n}\n.handsontable.autocompleteEditor tr.ht__row_even th,\n.handsontable.autocompleteEditor tr.ht__row_even td {\n background-color: var(--ht-background-color, #ffffff);\n}\n.handsontable.autocompleteEditor tr.ht__row_odd th,\n.handsontable.autocompleteEditor tr.ht__row_odd td {\n background-color: var(--ht-background-color, #ffffff);\n}\n\n[dir=rtl].handsontable.listbox table thead th {\n text-align: right;\n}\n\n.pika-single {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n position: relative;\n display: block;\n padding: 10px;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n color: var(--ht-foreground-color);\n background: var(--ht-background-color, #ffffff);\n border: var(--ht-menu-border-width, 1px) solid var(--ht-menu-border-color, #e5e5e9);\n border-radius: var(--ht-menu-border-radius);\n z-index: 9999;\n}\n.pika-single.is-hidden {\n display: none;\n}\n.pika-single .pika-row {\n background-color: transparent;\n}\n.pika-single .pika-title {\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.pika-single .pika-label {\n position: relative;\n order: 2;\n padding: 5px;\n color: var(--ht-accent-color);\n}\n.pika-single .pika-label .pika-select {\n position: absolute;\n inset: 0;\n opacity: 0;\n cursor: pointer;\n}\n.pika-single .pika-prev,\n.pika-single .pika-next {\n width: 20px;\n height: 20px;\n white-space: nowrap;\n text-indent: -9999px;\n cursor: pointer;\n color: var(--ht-accent-color);\n background: none;\n border: none;\n padding: 0;\n}\n.pika-single .pika-prev {\n order: 1;\n margin-right: auto;\n}\n.pika-single .pika-next {\n order: 3;\n margin-left: auto;\n}\n.pika-single .pika-table thead {\n height: 50px;\n}\n.pika-single .pika-table th {\n padding: 1px;\n vertical-align: middle;\n}\n.pika-single .pika-table th abbr {\n text-decoration: none;\n font-weight: normal;\n border: none;\n cursor: initial;\n}\n.pika-single .pika-table td {\n padding: 1px;\n vertical-align: middle;\n}\n.pika-single .pika-table td.is-disabled .pika-button {\n pointer-events: none;\n opacity: 0.5;\n}\n.pika-single .pika-table td.is-today .pika-button {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n.pika-single .pika-table td.is-selected .pika-button {\n background: var(--ht-accent-color, #1a42e8);\n color: var(--ht-primary-button-foreground-color, #ffffff);\n}\n.pika-single .pika-table td.pika-week {\n width: 12.5%;\n text-align: center;\n}\n.pika-single .pika-table .pika-button {\n width: 100%;\n aspect-ratio: 1/1;\n background: transparent;\n color: var(--ht-foreground-color);\n border: none;\n border-radius: var(--ht-button-border-radius);\n margin: 0;\n padding: 10px;\n cursor: pointer;\n font-size: inherit;\n}\n.pika-single .pika-table .pika-button:hover {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n\n[dir=rtl].htDatepickerHolder .pika-single .pika-next {\n transform: rotate(180deg);\n margin-left: 0;\n margin-right: auto;\n}\n[dir=rtl].htDatepickerHolder .pika-single .pika-prev {\n transform: rotate(180deg);\n margin-left: auto;\n margin-right: 0;\n}\n\n.handsontableEditor {\n position: absolute;\n}\n.handsontableEditor .ht-multi-select-editor {\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n overflow-y: auto;\n border-radius: 0 0 var(--ht-menu-border-radius) var(--ht-menu-border-radius);\n border: var(--ht-menu-border-width) solid var(--ht-menu-border-color);\n background: var(--ht-background-color);\n width: max-content;\n min-width: 120px;\n padding: var(--ht-menu-vertical-padding) var(--ht-menu-horizontal-padding);\n}\n.handsontableEditor .ht-multi-select-editor .ht-multi-select-editor-search-input-wrapper {\n display: flex;\n padding: var(--ht-menu-item-vertical-padding) var(--ht-menu-item-horizontal-padding);\n align-items: center;\n gap: var(--ht-gap-size);\n align-self: stretch;\n position: relative;\n}\n.handsontableEditor .ht-multi-select-editor .ht-multi-select-editor-search-icon {\n position: absolute;\n left: calc(var(--ht-menu-item-horizontal-padding) + 10px);\n top: 50%;\n transform: translateY(-50%);\n width: 16px;\n height: 16px;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n opacity: 0.5;\n pointer-events: none;\n z-index: 1;\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input {\n box-sizing: border-box;\n width: 100%;\n border-radius: var(--ht-input-border-radius);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n border: 1px solid var(--ht-input-border-color);\n transition: var(--ht-table-transition) all ease-in-out;\n line-height: var(--ht-line-height);\n font-size: var(--ht-font-size);\n padding: var(--ht-input-vertical-padding) var(--ht-menu-item-horizontal-padding) var(--ht-input-vertical-padding) 32px;\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input:hover {\n border-color: var(--ht-input-hover-border-color);\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input:disabled {\n border-color: var(--ht-input-disabled-border-color);\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input:focus {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n outline: none;\n outline-offset: 0;\n box-shadow: none;\n}\n.handsontableEditor .ht-multi-select-editor input.ht-multi-select-editor-search-input::placeholder {\n color: var(--ht-foreground-color);\n opacity: 0.6;\n}\n.handsontableEditor .ht-multi-select-editor .ht-multi-select-editor-separator {\n width: 100%;\n height: 1px;\n background-color: var(--ht-menu-border-color);\n margin: var(--ht-menu-vertical-padding) 0 var(--ht-menu-vertical-padding) 0;\n padding: 0;\n}\n.handsontableEditor .ht-multi-select-editor ul {\n list-style: none;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n width: 100%;\n margin: 0;\n padding: var(--ht-gap-size) var(--ht-menu-horizontal-padding);\n}\n.handsontableEditor .ht-multi-select-editor ul li {\n display: flex;\n align-items: center;\n align-self: stretch;\n background: var(--ht-background-color);\n padding: var(--ht-menu-item-vertical-padding) var(--ht-menu-item-horizontal-padding);\n user-select: none;\n cursor: pointer;\n}\n.handsontableEditor .ht-multi-select-editor ul li * {\n cursor: pointer;\n}\n.handsontableEditor .ht-multi-select-editor ul li.ht-multi-select-editor-item-selected {\n background: color-mix(in srgb, var(--ht-menu-item-active-color) var(--ht-menu-item-active-color-opacity, 100%), transparent);\n}\n.handsontableEditor .ht-multi-select-editor ul li div {\n display: flex;\n align-items: center;\n flex: 1 0 0;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input {\n position: relative;\n appearance: none;\n margin: 0;\n padding: 0;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n display: flex;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n box-sizing: border-box;\n width: var(--ht-checkbox-size);\n height: var(--ht-checkbox-size);\n border-radius: var(--ht-checkbox-border-radius);\n border: 1px solid var(--ht-checkbox-border-color);\n background: var(--ht-checkbox-background-color);\n background-repeat: no-repeat;\n background-position: center;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input:checked::before {\n border-color: var(--ht-checkbox-checked-border-color);\n background: var(--ht-checkbox-checked-background-color);\n}\n.handsontableEditor .ht-multi-select-editor ul li div input:checked::after {\n color: var(--ht-checkbox-checked-icon-color);\n background-color: currentColor;\n}\n.handsontableEditor .ht-multi-select-editor ul li div input:focus {\n outline: none;\n}\n.handsontableEditor .ht-multi-select-editor ul li div label {\n overflow: hidden;\n color: var(--ht-foreground-color);\n text-overflow: ellipsis;\n font-size: var(--ht-font-size);\n font-style: normal;\n font-weight: 400;\n line-height: var(--ht-line-height);\n letter-spacing: var(--ht-letter-spacing);\n width: 100%;\n padding: 0 0 0 calc(var(--ht-gap-size) * 2);\n}\n.handsontableEditor .ht-multi-select-editor ul li:hover {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n.handsontableEditor .ht-multi-select-editor ul li:has(input:focus) {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent);\n}\n\n.handsontable .htUISelectCaption {\n width: 100%;\n padding: var(--ht-input-vertical-padding) var(--ht-input-horizontal-padding);\n padding-inline-end: calc(var(--ht-input-horizontal-padding) + var(--ht-icon-size));\n margin: 0;\n font-family: inherit;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n border-radius: var(--ht-input-border-radius);\n box-sizing: border-box;\n cursor: pointer;\n outline: none !important;\n border: var(--ht-input-border-width) solid var(--ht-input-border-color);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n transition: var(--ht-table-transition) all ease-in-out;\n}\n.handsontable .htUISelectCaption::after {\n content: \"\";\n display: block;\n position: absolute;\n right: calc(var(--ht-input-horizontal-padding) - var(--ht-icon-size) / 4);\n top: 50%;\n transform: translateY(-50%);\n}\n.handsontable .htUISelectCaption:hover {\n border-color: var(--ht-input-hover-border-color);\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n}\n.handsontable .htUISelectCaption:disabled {\n border-color: var(--ht-input-disabled-border-color);\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n}\n.handsontable .htUISelectCaption:focus {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n}\n.handsontable .htUISelect {\n cursor: pointer;\n position: relative;\n outline: none !important;\n}\n.handsontable .htUISelect:focus .htUISelectCaption {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n}\n\n[dir=rtl].handsontable .htUISelectCaption::after {\n right: auto;\n left: calc(var(--ht-input-horizontal-padding) - var(--ht-icon-size) / 4);\n}\n\n.handsontable .htFiltersMenuCondition .htUIInput input,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input {\n width: 100%;\n padding: var(--ht-input-vertical-padding) var(--ht-input-horizontal-padding);\n font-family: inherit;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n border-radius: var(--ht-input-border-radius);\n box-sizing: border-box;\n cursor: pointer;\n outline: none !important;\n border: var(--ht-input-border-width) solid var(--ht-input-border-color);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n transition: var(--ht-table-transition) all ease-in-out;\n}\n.handsontable .htFiltersMenuCondition .htUIInput input:hover,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input:hover {\n border-color: var(--ht-input-hover-border-color);\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n}\n.handsontable .htFiltersMenuCondition .htUIInput input:disabled,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input:disabled {\n border-color: var(--ht-input-disabled-border-color);\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n}\n.handsontable .htFiltersMenuCondition .htUIInput input:focus,\n.handsontable .htFiltersMenuValue .htUIMultipleSelectSearch input:focus {\n border-color: var(--ht-input-focus-border-color);\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n}\n.handsontable .htUIInput {\n position: relative;\n padding: 0;\n outline: none !important;\n text-align: center;\n}\n.handsontable .htUIInputIcon {\n position: absolute;\n}\n\n.handsontable .htUIInput.htUIButton input, .handsontable .ht-button {\n min-width: 64px;\n padding: var(--ht-button-vertical-padding) var(--ht-button-horizontal-padding);\n font-family: inherit;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n border-radius: var(--ht-button-border-radius);\n border-width: 1px;\n border-style: solid;\n box-sizing: border-box;\n outline: none !important;\n cursor: pointer;\n transition: var(--ht-table-transition) all ease-in-out;\n}\n.handsontable .htUIInput.htUIButtonCancel input, .handsontable .ht-button--secondary {\n border-color: var(--ht-secondary-button-border-color);\n background-color: var(--ht-secondary-button-background-color);\n color: var(--ht-secondary-button-foreground-color);\n}\n.handsontable .htUIInput.htUIButtonCancel input:hover, .handsontable .ht-button--secondary:hover {\n border-color: var(--ht-secondary-button-hover-border-color);\n background-color: var(--ht-secondary-button-hover-background-color);\n color: var(--ht-secondary-button-hover-foreground-color);\n}\n.handsontable .htUIInput.htUIButtonCancel input:disabled, .handsontable .ht-button--secondary:disabled {\n border-color: var(--ht-secondary-button-disabled-border-color);\n background-color: var(--ht-secondary-button-disabled-background-color);\n color: var(--ht-secondary-button-disabled-foreground-color);\n}\n.handsontable .htUIInput.htUIButtonCancel input:focus, .handsontable .ht-button--secondary:focus {\n border-color: var(--ht-secondary-button-focus-border-color);\n background-color: var(--ht-secondary-button-focus-background-color);\n color: var(--ht-secondary-button-focus-foreground-color);\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n\n.htUIInput.htUIButtonOK input, .ht-button--primary {\n border-color: var(--ht-primary-button-border-color);\n background-color: var(--ht-primary-button-background-color);\n color: var(--ht-primary-button-foreground-color);\n}\n.htUIInput.htUIButtonOK input:hover, .ht-button--primary:hover {\n border-color: var(--ht-primary-button-hover-border-color);\n background-color: var(--ht-primary-button-hover-background-color);\n color: var(--ht-primary-button-hover-foreground-color);\n}\n.htUIInput.htUIButtonOK input:disabled, .ht-button--primary:disabled {\n border-color: var(--ht-primary-button-disabled-border-color);\n background-color: var(--ht-primary-button-disabled-background-color);\n color: var(--ht-primary-button-disabled-foreground-color);\n}\n.htUIInput.htUIButtonOK input:focus, .ht-button--primary:focus {\n border-color: var(--ht-primary-button-focus-border-color);\n background-color: var(--ht-primary-button-focus-background-color);\n color: var(--ht-primary-button-focus-foreground-color);\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n\n.handsontable .htUIRadio {\n position: relative;\n display: inline-flex;\n margin: 0;\n padding: var(--ht-gap-size) calc(2 * var(--ht-gap-size));\n padding-bottom: 0;\n align-items: center;\n gap: var(--ht-gap-size);\n cursor: pointer;\n}\n.handsontable .htUIRadio:first-child {\n padding-inline-start: 0;\n}\n.handsontable .htUIRadio > input[type=radio] {\n position: relative;\n width: var(--ht-radio-size);\n height: var(--ht-radio-size);\n margin: 0;\n appearance: none;\n cursor: pointer;\n border-radius: calc(0.5 * var(--ht-radio-size));\n outline: none;\n}\n.handsontable .htUIRadio > input[type=radio]::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n border-radius: calc(0.5 * var(--ht-radio-size));\n border: 1px solid var(--ht-radio-border-color);\n background-color: var(--ht-radio-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]::after {\n content: \"\";\n display: block;\n position: absolute;\n color: var(--ht-radio-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked::before {\n border-color: var(--ht-radio-checked-border-color);\n background-color: var(--ht-radio-checked-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked::after {\n color: var(--ht-radio-checked-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:disabled {\n cursor: initial;\n}\n.handsontable .htUIRadio > input[type=radio]:checked:disabled::before {\n border-color: var(--ht-radio-checked-disabled-border-color);\n background-color: var(--ht-radio-checked-disabled-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:disabled::after {\n color: var(--ht-radio-checked-disabled-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:focus::before {\n border-color: var(--ht-radio-checked-focus-border-color);\n background-color: var(--ht-radio-checked-focus-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:checked:focus::after {\n color: var(--ht-radio-checked-focus-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:disabled {\n cursor: initial;\n}\n.handsontable .htUIRadio > input[type=radio]:disabled::before {\n border-color: var(--ht-radio-disabled-border-color);\n background-color: var(--ht-radio-disabled-background-color);\n}\n.handsontable .htUIRadio > input[type=radio]:disabled::after {\n color: var(--ht-radio-disabled-icon-color);\n}\n.handsontable .htUIRadio > input[type=radio]:focus::before {\n border-color: var(--ht-radio-focus-border-color);\n background-color: var(--ht-radio-focus-background-color);\n outline: 1px solid var(--ht-radio-focus-ring-color);\n}\n.handsontable .htUIRadio > input[type=radio]:focus::after {\n color: var(--ht-radio-focus-icon-color);\n}\n.handsontable .htUIRadio label {\n vertical-align: middle;\n cursor: pointer;\n color: inherit;\n}\n.handsontable .htUIRadio label::before {\n content: \"\";\n display: block;\n position: absolute;\n inset: 0;\n}\n\n.handsontable .collapsibleIndicator,\n.handsontable .ht_nestingButton {\n position: relative;\n width: var(--ht-icon-button-hit-area-size);\n height: var(--ht-icon-button-hit-area-size);\n margin: calc(-1 * (var(--ht-icon-button-hit-area-size) - var(--ht-icon-size)) / 2 + 1px);\n box-sizing: border-box;\n overflow: visible;\n cursor: pointer;\n /* hide text */\n text-indent: -100px;\n font-size: 0;\n flex-shrink: 0;\n /* Icon: mask + currentColor from ht-icons-main.css; keep ::before for icon only */\n}\n.handsontable .collapsibleIndicator::before,\n.handsontable .ht_nestingButton::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n border-radius: var(--ht-collapse-button-border-radius);\n transition: var(--ht-table-transition) all ease-in-out;\n z-index: 1;\n}\n.handsontable .collapsibleIndicator,\n.handsontable .ht_nestingButton {\n /* Button background and border (behind icon so mask stays visible) */\n}\n.handsontable .collapsibleIndicator::after,\n.handsontable .ht_nestingButton::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n border-radius: var(--ht-collapse-button-border-radius);\n transition: var(--ht-table-transition) all ease-in-out;\n z-index: 0;\n}\n.handsontable .collapsibleIndicator.expanded::before, .handsontable .collapsibleIndicator.ht_nestingCollapse::before,\n.handsontable .ht_nestingButton.expanded::before,\n.handsontable .ht_nestingButton.ht_nestingCollapse::before {\n color: var(--ht-collapse-button-open-icon-color);\n}\n.handsontable .collapsibleIndicator.expanded::after, .handsontable .collapsibleIndicator.ht_nestingCollapse::after,\n.handsontable .ht_nestingButton.expanded::after,\n.handsontable .ht_nestingButton.ht_nestingCollapse::after {\n background-color: var(--ht-collapse-button-open-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-open-border-color);\n}\n.handsontable .collapsibleIndicator.expanded:hover::before, .handsontable .collapsibleIndicator.ht_nestingCollapse:hover::before,\n.handsontable .ht_nestingButton.expanded:hover::before,\n.handsontable .ht_nestingButton.ht_nestingCollapse:hover::before {\n color: var(--ht-collapse-button-open-hover-icon-color);\n}\n.handsontable .collapsibleIndicator.expanded:hover::after, .handsontable .collapsibleIndicator.ht_nestingCollapse:hover::after,\n.handsontable .ht_nestingButton.expanded:hover::after,\n.handsontable .ht_nestingButton.ht_nestingCollapse:hover::after {\n background-color: var(--ht-collapse-button-open-hover-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-open-hover-border-color);\n}\n.handsontable .collapsibleIndicator.collapsed::before, .handsontable .collapsibleIndicator.ht_nestingExpand::before,\n.handsontable .ht_nestingButton.collapsed::before,\n.handsontable .ht_nestingButton.ht_nestingExpand::before {\n color: var(--ht-collapse-button-close-icon-color);\n}\n.handsontable .collapsibleIndicator.collapsed::after, .handsontable .collapsibleIndicator.ht_nestingExpand::after,\n.handsontable .ht_nestingButton.collapsed::after,\n.handsontable .ht_nestingButton.ht_nestingExpand::after {\n background-color: var(--ht-collapse-button-close-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-close-border-color);\n}\n.handsontable .collapsibleIndicator.collapsed:hover::before, .handsontable .collapsibleIndicator.ht_nestingExpand:hover::before,\n.handsontable .ht_nestingButton.collapsed:hover::before,\n.handsontable .ht_nestingButton.ht_nestingExpand:hover::before {\n color: var(--ht-collapse-button-close-hover-icon-color);\n}\n.handsontable .collapsibleIndicator.collapsed:hover::after, .handsontable .collapsibleIndicator.ht_nestingExpand:hover::after,\n.handsontable .ht_nestingButton.collapsed:hover::after,\n.handsontable .ht_nestingButton.ht_nestingExpand:hover::after {\n background-color: var(--ht-collapse-button-close-hover-background-color);\n box-shadow: 0 0 0 1px var(--ht-collapse-button-close-hover-border-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.collapsed::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingExpand::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.collapsed::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingExpand::before {\n color: var(--ht-collapse-button-close-icon-active-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.collapsed:hover::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingExpand:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.collapsed:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingExpand:hover::before {\n color: var(--ht-collapse-button-close-hover-icon-active-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.expanded::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingCollapse::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.expanded::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingCollapse::before {\n color: var(--ht-collapse-button-open-icon-active-color);\n}\n.handsontable th.ht__active_highlight .collapsibleIndicator.expanded:hover::before, .handsontable th.ht__active_highlight .collapsibleIndicator.ht_nestingCollapse:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.expanded:hover::before,\n.handsontable th.ht__active_highlight .ht_nestingButton.ht_nestingCollapse:hover::before {\n color: var(--ht-collapse-button-open-hover-icon-active-color);\n}\n\n.handsontable thead th.htRowspanHeader + th {\n border-inline-start-width: 0;\n}\n.handsontable thead th.htRowspanHeader {\n height: auto;\n vertical-align: bottom;\n overflow: visible;\n}\n.handsontable thead th.htRowspanHeader.ht__active_highlight {\n border-inline-start-color: var(--ht-header-active-border-color);\n z-index: 1;\n}\n.handsontable.htRowHeaders.htHasRowspanHeaders thead tr:last-child th:first-child {\n border-end-start-radius: 0;\n}\n.handsontable.htHasRowspanHeaders .ht_clone_inline_start .htCore tbody tr:first-child th:first-child {\n border-start-start-radius: 0;\n}\n.handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) thead th.htRowspanBottomLevel, .handsontable .ht_master:not(.innerBorderTop):not(.innerBorderBottom) ~ .handsontable thead th.htRowspanBottomLevel {\n border-bottom-width: 0;\n}\n.handsontable thead th.hiddenHeader:not(:first-of-type) {\n display: none;\n}\n.handsontable thead th.hiddenHeaderText .colHeader {\n opacity: 0;\n}\n\n.handsontable th.ht_nestingLevels > .relative {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.handsontable th.ht_nestingLevels span:last-child {\n padding-left: calc(var(--ht-icon-size) + 5px);\n}\n.handsontable th.ht_nestingLevels span.ht_nestingLevel {\n display: inline-block;\n}\n.handsontable th.ht_nestingLevels span.ht_nestingLevel_empty {\n position: relative;\n display: inline-block;\n width: 5px;\n height: 1px;\n order: -2;\n}\n.handsontable th.ht_nestingLevels .ht_nestingButton {\n position: relative;\n cursor: pointer;\n order: -1;\n}\n\n.handsontable th.beforeHiddenColumn, .handsontable th.afterHiddenColumn {\n position: relative;\n}\n.handsontable th.beforeHiddenColumn::before, .handsontable th.beforeHiddenColumn::after, .handsontable th.afterHiddenColumn::before, .handsontable th.afterHiddenColumn::after {\n position: absolute;\n top: 50%;\n width: 10px !important;\n height: 10px !important;\n transform: translateY(-50%);\n color: var(--ht-hidden-indicator-color);\n}\n.handsontable th.beforeHiddenColumn::after {\n content: \"\";\n display: block;\n right: -2px;\n}\n.handsontable th.afterHiddenColumn::before {\n content: \"\";\n display: block;\n left: -2px;\n}\n.handsontable th.ht__active_highlight.beforeHiddenColumn::before, .handsontable th.ht__active_highlight.beforeHiddenColumn::after, .handsontable th.ht__active_highlight.afterHiddenColumn::before, .handsontable th.ht__active_highlight.afterHiddenColumn::after {\n color: var(--ht-icon-button-active-icon-color, var(--ht-icon-active-button-icon-color));\n}\n\n[dir=rtl].handsontable th.beforeHiddenColumn::after {\n right: initial;\n left: -2px;\n transform: translateY(-50%) rotate(180deg);\n}\n[dir=rtl].handsontable th.afterHiddenColumn::before {\n right: -2px;\n left: initial;\n transform: translateY(-50%) rotate(180deg);\n}\n\n.handsontable th.beforeHiddenRow, .handsontable th.afterHiddenRow {\n position: relative;\n}\n.handsontable th.beforeHiddenRow::before, .handsontable th.beforeHiddenRow::after, .handsontable th.afterHiddenRow::before, .handsontable th.afterHiddenRow::after {\n position: absolute;\n left: 50%;\n width: 10px !important;\n height: 10px !important;\n transform: translateX(-50%);\n color: var(--ht-hidden-indicator-color);\n}\n.handsontable th.beforeHiddenRow::after {\n content: \"\";\n display: block;\n bottom: -2px;\n}\n.handsontable th.afterHiddenRow::before {\n content: \"\";\n display: block;\n top: -2px;\n}\n.handsontable th.ht__active_highlight.beforeHiddenRow::before, .handsontable th.ht__active_highlight.beforeHiddenRow::after, .handsontable th.ht__active_highlight.afterHiddenRow::before, .handsontable th.ht__active_highlight.afterHiddenRow::after {\n color: var(--ht-icon-button-active-icon-color, var(--ht-icon-active-button-icon-color));\n}\n\n.handsontable .changeType {\n position: relative;\n box-sizing: border-box;\n width: var(--ht-icon-button-hit-area-size);\n height: var(--ht-icon-button-hit-area-size);\n margin: calc(-1 * (var(--ht-icon-button-hit-area-size) - var(--ht-icon-size)) / 2 + 1px);\n border: none;\n outline: none;\n box-shadow: none;\n background: none;\n background-color: transparent;\n color: inherit;\n padding: 0;\n z-index: 1;\n flex-shrink: 0;\n overflow: visible;\n /* Icon: mask + currentColor from ht-icons-main.css; keep ::before for icon only */\n}\n.handsontable .changeType::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n color: var(--ht-icon-button-icon-color);\n z-index: 1;\n}\n.handsontable .changeType {\n /* Button background and border (behind icon so mask stays visible) */\n}\n.handsontable .changeType::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 50%;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-left: calc(-0.5 * var(--ht-icon-size));\n border-radius: var(--ht-icon-button-border-radius);\n box-shadow: 0 0 0 1px var(--ht-icon-button-border-color);\n background-color: var(--ht-icon-button-background-color);\n z-index: 0;\n}\n.handsontable .changeType:hover {\n cursor: pointer;\n}\n.handsontable .changeType:hover::before {\n color: var(--ht-icon-button-hover-icon-color);\n}\n.handsontable .changeType:hover::after {\n box-shadow: 0 0 0 1px var(--ht-icon-button-hover-border-color);\n background-color: var(--ht-icon-button-hover-background-color);\n}\n.handsontable .ht__active_highlight .changeType::before {\n color: var(--ht-icon-button-active-icon-color, var(--ht-icon-active-button-icon-color));\n}\n.handsontable .ht__active_highlight .changeType::after {\n box-shadow: 0 0 0 1px var(--ht-icon-button-active-border-color, var(--ht-icon-active-button-border-color));\n background-color: var(--ht-icon-button-active-background-color, var(--ht-icon-active-button-background-color));\n}\n.handsontable .ht__active_highlight .changeType:hover::before {\n color: var(--ht-icon-button-active-hover-icon-color, var(--ht-icon-active-button-hover-icon-color));\n}\n.handsontable .ht__active_highlight .changeType:hover::after {\n box-shadow: 0 0 0 1px var(--ht-icon-button-active-hover-border-color, var(--ht-icon-active-button-hover-border-color));\n background-color: var(--ht-icon-button-active-hover-background-color, var(--ht-icon-active-button-hover-background-color));\n}\n.handsontable th.htFiltersActive {\n background-color: var(--ht-header-filter-background-color);\n}\n.handsontable th.htFiltersActive.ht__active_highlight {\n background-color: color-mix(in srgb, var(--ht-header-active-background-color), var(--ht-header-filter-background-color) 20%);\n}\n.handsontable.htDropdownMenu > .ht_master, .handsontable.htContextMenu > .ht_master, .handsontable.htFiltersConditionsMenu > .ht_master {\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n border: var(--ht-menu-border-width, 1px) solid var(--ht-menu-border-color, #e5e5e9);\n border-radius: var(--ht-menu-border-radius);\n overflow: hidden;\n padding: var(--ht-menu-vertical-padding, 8px) var(--ht-menu-horizontal-padding, 0);\n background-color: var(--ht-background-color, #ffffff);\n}\n.handsontable.htDropdownMenu:not(.htGhostTable), .handsontable.htContextMenu:not(.htGhostTable), .handsontable.htFiltersConditionsMenu:not(.htGhostTable) {\n display: none;\n position: absolute;\n /* needs to be higher than 1050 - z-index for Twitter Bootstrap modal (#1569) */\n z-index: 1060;\n}\n.handsontable.htDropdownMenu .ht_clone_top,\n.handsontable.htDropdownMenu .ht_clone_bottom,\n.handsontable.htDropdownMenu .ht_clone_inline_start,\n.handsontable.htDropdownMenu .ht_clone_top_inline_start_corner,\n.handsontable.htDropdownMenu .ht_clone_bottom_inline_start_corner, .handsontable.htContextMenu .ht_clone_top,\n.handsontable.htContextMenu .ht_clone_bottom,\n.handsontable.htContextMenu .ht_clone_inline_start,\n.handsontable.htContextMenu .ht_clone_top_inline_start_corner,\n.handsontable.htContextMenu .ht_clone_bottom_inline_start_corner, .handsontable.htFiltersConditionsMenu .ht_clone_top,\n.handsontable.htFiltersConditionsMenu .ht_clone_bottom,\n.handsontable.htFiltersConditionsMenu .ht_clone_inline_start,\n.handsontable.htFiltersConditionsMenu .ht_clone_top_inline_start_corner,\n.handsontable.htFiltersConditionsMenu .ht_clone_bottom_inline_start_corner {\n display: none;\n}\n.handsontable.htDropdownMenu table.htCore, .handsontable.htContextMenu table.htCore, .handsontable.htFiltersConditionsMenu table.htCore {\n overflow: hidden;\n}\n.handsontable.htDropdownMenu .htCustomMenuRenderer .table.htCore, .handsontable.htContextMenu .htCustomMenuRenderer .table.htCore, .handsontable.htFiltersConditionsMenu .htCustomMenuRenderer .table.htCore {\n box-shadow: none;\n}\n.handsontable.htDropdownMenu.handsontable:focus, .handsontable.htContextMenu.handsontable:focus, .handsontable.htFiltersConditionsMenu.handsontable:focus {\n outline: none;\n}\n.handsontable.htDropdownMenu .wtBorder, .handsontable.htContextMenu .wtBorder, .handsontable.htFiltersConditionsMenu .wtBorder {\n visibility: hidden;\n}\n.handsontable.htDropdownMenu tbody tr:first-of-type td:first-child, .handsontable.htDropdownMenu tbody tr:first-of-type th:first-child, .handsontable.htContextMenu tbody tr:first-of-type td:first-child, .handsontable.htContextMenu tbody tr:first-of-type th:first-child, .handsontable.htFiltersConditionsMenu tbody tr:first-of-type td:first-child, .handsontable.htFiltersConditionsMenu tbody tr:first-of-type th:first-child {\n height: calc(var(--ht-cell-vertical-padding) * 2 + var(--ht-line-height) + 1px);\n}\n.handsontable.htDropdownMenu table tbody tr td, .handsontable.htContextMenu table tbody tr td, .handsontable.htFiltersConditionsMenu table tbody tr td {\n position: relative;\n padding: var(--ht-menu-item-vertical-padding, 4px) var(--ht-menu-item-horizontal-padding, 8px);\n border-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n background: var(--ht-background-color, #ffffff);\n cursor: pointer;\n transition: var(--ht-table-transition) background ease-in-out;\n}\n.handsontable.htDropdownMenu table tbody tr td:first-child, .handsontable.htContextMenu table tbody tr td:first-child, .handsontable.htFiltersConditionsMenu table tbody tr td:first-child {\n border-top-width: 0;\n border-inline-end-width: 0;\n border-bottom-width: 0;\n border-inline-start-width: 0;\n}\n.handsontable.htDropdownMenu table tbody tr td.htDimmed, .handsontable.htContextMenu table tbody tr td.htDimmed, .handsontable.htFiltersConditionsMenu table tbody tr td.htDimmed {\n font-style: normal;\n color: inherit !important;\n background-color: inherit !important;\n}\n.handsontable.htDropdownMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled):hover, .handsontable.htContextMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled):hover, .handsontable.htFiltersConditionsMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled):hover {\n background: color-mix(in srgb, var(--ht-menu-item-hover-color) var(--ht-menu-item-hover-color-opacity, 100%), transparent) !important;\n cursor: pointer;\n}\n.handsontable.htDropdownMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled).current:not([aria-expanded=true]), .handsontable.htContextMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled).current:not([aria-expanded=true]), .handsontable.htFiltersConditionsMenu table tbody tr td:not(.handsontable.htDropdownMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htCustomMenuRenderer, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled).current:not([aria-expanded=true]) {\n box-shadow: inset 0 0 0 1px var(--ht-accent-color);\n}\n.handsontable.htDropdownMenu table tbody tr td.htSubmenu .htItemWrapper, .handsontable.htContextMenu table tbody tr td.htSubmenu .htItemWrapper, .handsontable.htFiltersConditionsMenu table tbody tr td.htSubmenu .htItemWrapper {\n margin-inline-end: calc(2 * var(--ht-gap-size, 4px) + var(--ht-icon-size));\n}\n.handsontable.htDropdownMenu table tbody tr td.htSubmenu .htItemWrapper::after, .handsontable.htContextMenu table tbody tr td.htSubmenu .htItemWrapper::after, .handsontable.htFiltersConditionsMenu table tbody tr td.htSubmenu .htItemWrapper::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n right: calc(var(--ht-menu-item-horizontal-padding) + var(--ht-gap-size) * 2);\n transform: translateY(-50%);\n}\n.handsontable.htDropdownMenu table tbody tr td.htSeparator, .handsontable.htContextMenu table tbody tr td.htSeparator, .handsontable.htFiltersConditionsMenu table tbody tr td.htSeparator {\n border-top: 1px solid var(--ht-border-color);\n height: 0;\n padding: 0;\n cursor: default;\n}\n.handsontable.htDropdownMenu table tbody tr td.htDisabled, .handsontable.htContextMenu table tbody tr td.htDisabled, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled {\n color: var(--ht-disabled-color);\n cursor: default;\n}\n.handsontable.htDropdownMenu table tbody tr td.htDisabled:hover, .handsontable.htContextMenu table tbody tr td.htDisabled:hover, .handsontable.htFiltersConditionsMenu table tbody tr td.htDisabled:hover {\n background: var(--ht-background-color);\n color: var(--ht-disabled-color);\n}\n.handsontable.htDropdownMenu table tbody tr td.htHidden, .handsontable.htContextMenu table tbody tr td.htHidden, .handsontable.htFiltersConditionsMenu table tbody tr td.htHidden {\n display: none;\n}\n.handsontable.htDropdownMenu table tbody tr td:has(.htItemWrapper .selected), .handsontable.htContextMenu table tbody tr td:has(.htItemWrapper .selected), .handsontable.htFiltersConditionsMenu table tbody tr td:has(.htItemWrapper .selected) {\n background-color: color-mix(in srgb, var(--ht-menu-item-active-color) var(--ht-menu-item-active-color-opacity, 100%), transparent);\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper, .handsontable.htContextMenu table tbody tr td .htItemWrapper, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper {\n margin-inline: calc(2 * var(--ht-gap-size, 4px));\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper::before, .handsontable.htContextMenu table tbody tr td .htItemWrapper::before, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper::before {\n vertical-align: text-bottom;\n margin-right: 12px;\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper span.selected, .handsontable.htContextMenu table tbody tr td .htItemWrapper span.selected, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper span.selected {\n font-size: 0;\n inset: 0;\n}\n.handsontable.htDropdownMenu table tbody tr td .htItemWrapper span.selected::after, .handsontable.htContextMenu table tbody tr td .htItemWrapper span.selected::after, .handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper span.selected::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n right: calc(var(--ht-menu-item-horizontal-padding) + var(--ht-gap-size) * 2);\n color: var(--ht-accent-color);\n transform: translateY(-50%);\n}\n.handsontable.htDropdownMenu table tbody tr td div span.selected, .handsontable.htContextMenu table tbody tr td div span.selected, .handsontable.htFiltersConditionsMenu table tbody tr td div span.selected {\n position: absolute;\n inset-inline-end: 0;\n}\n.handsontable.htDropdownMenu table tbody tr td .htUIButton, .handsontable.htContextMenu table tbody tr td .htUIButton, .handsontable.htFiltersConditionsMenu table tbody tr td .htUIButton {\n width: calc(50% - var(--ht-gap-size));\n}\n.handsontable.htDropdownMenu table tbody tr td .htUIButton input, .handsontable.htContextMenu table tbody tr td .htUIButton input, .handsontable.htFiltersConditionsMenu table tbody tr td .htUIButton input {\n width: 100%;\n}\n.handsontable .htUIClearAll a,\n.handsontable .htUISelectAll a {\n padding: var(--ht-gap-size);\n display: inline-block;\n text-decoration: none;\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder {\n overflow-y: scroll !important;\n background: transparent;\n border-radius: 0 !important;\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder .htCore {\n box-shadow: none;\n}\n\n[dir=rtl].handsontable.htDropdownMenu table tbody tr td.htSubmenu .htItemWrapper::after, [dir=rtl].handsontable.htContextMenu table tbody tr td.htSubmenu .htItemWrapper::after, [dir=rtl].handsontable.htFiltersConditionsMenu table tbody tr td.htSubmenu .htItemWrapper::after {\n left: calc(4 * var(--ht-gap-size));\n right: auto;\n transform: translateY(-50%) rotate(180deg);\n}\n[dir=rtl].handsontable.htDropdownMenu table tbody tr td .htItemWrapper span.selected::after, [dir=rtl].handsontable.htContextMenu table tbody tr td .htItemWrapper span.selected::after, [dir=rtl].handsontable.htFiltersConditionsMenu table tbody tr td .htItemWrapper span.selected::after {\n left: calc(4 * var(--ht-gap-size));\n right: auto;\n}\n\n.handsontable.htFiltersConditionsMenu:not(.htGhostTable) {\n z-index: 1070;\n}\n.handsontable .ht_master table td.htCustomMenuRenderer {\n cursor: auto;\n}\n.handsontable .ht_master table td.htCustomMenuRenderer.htFiltersMenuActionBar {\n padding-top: calc(var(--ht-menu-item-vertical-padding, 4px) * 2);\n}\n.handsontable .htFiltersMenuLabel {\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n margin-bottom: calc(var(--ht-gap-size, 2px) * 2);\n}\n.handsontable .htFiltersMenuLabel:empty {\n display: none;\n}\n.handsontable .htFiltersMenuCondition {\n padding-top: calc(var(--ht-gap-size, 2px) * 3) !important;\n padding-bottom: 0 !important;\n}\n.handsontable .htFiltersMenuCondition .border {\n border-bottom: 1px solid var(--ht-border-color) !important;\n}\n.handsontable .htFiltersMenuCondition .htUIInput {\n margin-top: calc(var(--ht-gap-size, 2px) * 2);\n}\n.handsontable .htFiltersMenuValue {\n padding-top: calc(var(--ht-gap-size, 2px) * 3) !important;\n padding-bottom: 0 !important;\n border-bottom: 1px solid var(--ht-border-color) !important;\n}\n.handsontable .htFiltersMenuOperators {\n padding-top: calc(var(--ht-gap-size, 2px) * 2) !important;\n padding-bottom: 0 !important;\n}\n.handsontable .htUISelectionControls {\n padding-top: calc(var(--ht-gap-size, 2px) * 2) !important;\n padding-bottom: var(--ht-gap-size, 2px) !important;\n margin: 0 calc(var(--ht-gap-size, 2px) * -1);\n}\n.handsontable .htUIMultipleSelectHot {\n --ht-cell-horizontal-padding: calc(\n var(--ht-menu-item-horizontal-padding, 2px) +\n var(--ht-gap-size, 2px) * 2);\n overflow: initial !important;\n width: calc(100% + var(--ht-menu-item-horizontal-padding, 2px) * 2 + var(--ht-gap-size, 2px) * 4);\n margin: 0 calc((var(--ht-menu-item-horizontal-padding, 2px) + var(--ht-gap-size, 2px) * 2) * -1);\n}\n.handsontable .htUIMultipleSelectHot::before {\n content: \"\";\n display: block;\n position: absolute;\n top: -1px;\n left: 0;\n width: 100%;\n height: 1px;\n background-color: var(--ht-border-color);\n}\n.handsontable .htUIMultipleSelectHot .wtHolder {\n padding: 0;\n overflow-x: hidden;\n box-sizing: border-box;\n}\n.handsontable .htUIMultipleSelectHot .wtHolder .wtSpreader {\n padding: calc(var(--ht-gap-size) * 2) 0;\n}\n.handsontable .htUIMultipleSelectHot .wtHolder td {\n height: auto !important;\n padding: 4px var(--ht-cell-horizontal-padding);\n}\n.handsontable .htUIClearAll,\n.handsontable .htUISelectAll {\n display: inline-block;\n margin-right: var(--ht-gap-size, 4px);\n margin-bottom: var(--ht-gap-size, 4px);\n}\n.handsontable .htUIClearAll a,\n.handsontable .htUISelectAll a {\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n color: var(--ht-link-color);\n border-radius: var(--ht-button-border-radius);\n}\n.handsontable .htUIClearAll a:hover,\n.handsontable .htUISelectAll a:hover {\n color: var(--ht-link-hover-color);\n}\n.handsontable .htUIClearAll a:focus,\n.handsontable .htUISelectAll a:focus {\n outline: 1px solid var(--ht-link-hover-color);\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder {\n overflow: auto;\n}\n.handsontable .htUIMultipleSelect .ht_master .wtHolder .wtHider,\n.handsontable .htUIMultipleSelect .ht_master .wtHolder .htCore,\n.handsontable .htUIMultipleSelect .ht_master .wtHolder tr,\n.handsontable .htUIMultipleSelect .ht_master .wtHolder td {\n background: none;\n}\n.handsontable .htUIInput.htUIButton {\n cursor: pointer;\n display: inline-block;\n}\n.handsontable .htUIInput.htUIButtonOK {\n margin-inline-start: 0;\n margin-inline-end: calc(2 * var(--ht-gap-size, 2px));\n}\n\n.handsontable .htCommentCell {\n position: relative;\n}\n.handsontable .htCommentCell::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 0;\n inset-inline-end: 0;\n inset-inline-start: unset;\n border-inline-start: var(--ht-comments-indicator-size, 4px) solid transparent;\n border-inline-end: none;\n border-top: var(--ht-comments-indicator-size, 4px) solid var(--ht-comments-indicator-color, #1a42e8);\n}\n\n.htCommentsContainer .htComments {\n display: none;\n z-index: 1059;\n position: absolute;\n}\n.htCommentsContainer .htCommentTextArea {\n font-family: var(--ht-font-family), -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n box-shadow: var(--ht-menu-shadow-x, 0) var(--ht-menu-shadow-y, 0) var(--ht-menu-shadow-blur, 8px) color-mix(in srgb, var(--ht-menu-shadow-color, rgb(0, 0, 0)) var(--ht-menu-shadow-opacity, 100%), transparent);\n width: 240px;\n height: 88px;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n font-weight: var(--ht-font-weight);\n margin: 0 -1px;\n padding: var(--ht-comments-textarea-vertical-padding) var(--ht-comments-textarea-horizontal-padding);\n border: var(--ht-comments-textarea-border-width, 1px) solid var(--ht-comments-textarea-border-color, transparent);\n border-inline-start: var(--ht-comments-textarea-border-width, 1px) solid var(--ht-comments-textarea-border-color, #1a42e8);\n color: var(--ht-comments-textarea-foreground-color);\n background-color: var(--ht-comments-textarea-background-color, #ffffff);\n outline: 0 !important;\n box-sizing: border-box;\n -webkit-appearance: none;\n}\n.htCommentsContainer .htCommentTextArea:focus {\n border: var(--ht-comments-textarea-focus-border-width, 1px) solid var(--ht-comments-textarea-focus-border-color, #1a42e8);\n color: var(--ht-comments-textarea-focus-foreground-color);\n background-color: var(--ht-comments-textarea-focus-background-color, #ffffff);\n}\n\n.htBorders .wtBorder.ht-border-style-dashed-vertical {\n background-image: repeating-linear-gradient(to bottom, var(--ht-custom-border-color) 0 5px, transparent 0 10px);\n}\n.htBorders .wtBorder.ht-border-style-dashed-horizontal {\n background-image: repeating-linear-gradient(to right, var(--ht-custom-border-color) 0 5px, transparent 0 10px);\n}\n.htBorders .wtBorder.ht-border-style-dotted-horizontal {\n background-image: radial-gradient(circle, var(--ht-custom-border-color) calc(var(--ht-custom-border-size) / 2), transparent 0);\n background-size: calc(var(--ht-custom-border-size) * 2) var(--ht-custom-border-size);\n background-repeat: repeat-x;\n}\n.htBorders .wtBorder.ht-border-style-dotted-vertical {\n background-image: radial-gradient(circle, var(--ht-custom-border-color) calc(var(--ht-custom-border-size) / 2), transparent 0);\n background-size: var(--ht-custom-border-size) calc(var(--ht-custom-border-size) * 2);\n background-repeat: repeat-y;\n}\n\n.handsontable .columnSorting:not(.indicatorDisabled) {\n position: relative;\n}\n.handsontable .columnSorting:not(.indicatorDisabled).sortAction.ascending, .handsontable .columnSorting:not(.indicatorDisabled).sortAction.descending {\n padding-inline-end: calc(var(--ht-icon-size, 16px) + 2px);\n}\n.handsontable .columnSorting:not(.indicatorDisabled).sortAction:hover {\n text-decoration: none;\n cursor: pointer;\n}\n.handsontable .columnSorting:not(.indicatorDisabled).sortAction::before {\n content: \"\";\n display: block;\n width: var(--ht-icon-size, 16px);\n position: absolute;\n top: 50%;\n right: 2px;\n transform: translateY(-50%);\n text-align: right;\n}\n.handsontable .htRight .columnSorting.sortAction.ascending, .handsontable .htRight .columnSorting.sortAction.descending {\n padding-inline-start: calc(var(--ht-icon-size, 16px) + 2px);\n padding-inline-end: 0;\n}\n.handsontable .htRight .columnSorting.sortAction::before {\n left: 2px;\n right: auto;\n text-align: left;\n}\n\n[dir=rtl] .handsontable .columnSorting.sortAction::before {\n left: 2px;\n right: auto;\n text-align: left;\n}\n[dir=rtl] .handsontable .htRight .columnSorting.sortAction.ascending, [dir=rtl] .handsontable .htRight .columnSorting.sortAction.descending {\n padding-inline-start: 0;\n padding-inline-end: calc(var(--ht-icon-size, 16px) + 2px);\n}\n[dir=rtl] .handsontable .htLeft .columnSorting.sortAction.ascending, [dir=rtl] .handsontable .htLeft .columnSorting.sortAction.descending {\n padding-inline-start: calc(var(--ht-icon-size, 16px) + 2px);\n padding-inline-end: 0;\n}\n[dir=rtl] .handsontable .htLeft .columnSorting.sortAction::before {\n left: auto;\n right: 2px;\n text-align: right;\n}\n\n.htGhostTable .htCore span.colHeader.columnSorting:not(.indicatorDisabled)::before {\n content: \"*\";\n display: inline-block;\n position: relative;\n /* The multi-line header and header with longer text need more padding to not hide arrow,\n we make header wider in `GhostTable` to make some space for arrow which is positioned absolutely in the main table */\n padding-inline-end: calc(var(--ht-icon-size, 16px) + 2px);\n}\n\n.handsontable .colHeader.columnSorting::after {\n content: \"\";\n display: block;\n width: 8px;\n position: absolute;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n margin-top: 4px;\n font-size: 8px;\n text-align: right;\n}\n.handsontable .colHeader.columnSorting[class^=sort-]::after, .handsontable .colHeader.columnSorting[class*=\" sort-\"]::after {\n content: \"+\";\n}\n.handsontable .colHeader.columnSorting.sort-1::after {\n content: \"1\";\n}\n.handsontable .colHeader.columnSorting.sort-2::after {\n content: \"2\";\n}\n.handsontable .colHeader.columnSorting.sort-3::after {\n content: \"3\";\n}\n.handsontable .colHeader.columnSorting.sort-4::after {\n content: \"4\";\n}\n.handsontable .colHeader.columnSorting.sort-5::after {\n content: \"5\";\n}\n.handsontable .colHeader.columnSorting.sort-6::after {\n content: \"6\";\n}\n.handsontable .colHeader.columnSorting.sort-7::after {\n content: \"7\";\n}\n.handsontable .htRight .colHeader.columnSorting::after {\n left: 0;\n right: auto;\n text-align: left;\n}\n\n[dir=rtl] .handsontable .colHeader.columnSorting::after {\n left: 0;\n right: auto;\n text-align: left;\n}\n[dir=rtl] .handsontable .htLeft .colHeader.columnSorting::after {\n left: auto;\n right: 0;\n text-align: right;\n}\n\n.htGhostTable th div:has(.changeType) span.colHeader.columnSorting:not(.indicatorDisabled) {\n padding-inline-end: var(--ht-gap-size);\n}\n\n.handsontable .htRowHeaders .ht_master.innerBorderInlineStart ~ .ht_clone_top_inline_start_corner th:nth-child(2), .handsontable .htRowHeaders .ht_master.innerBorderInlineStart ~ .ht_clone_inline_start td:first-of-type {\n border-left: 0 none;\n}\n.handsontable .ht_clone_top_inline_start_corner th.ht__active_highlight {\n box-shadow: none;\n}\n\n.handsontable .manualColumnResizer {\n position: absolute;\n top: 0;\n width: 10px;\n margin: 0;\n cursor: col-resize;\n background: none;\n opacity: 0;\n z-index: 210;\n}\n.handsontable .manualColumnResizer::before, .handsontable .manualColumnResizer::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n left: 1px;\n width: 2px;\n height: calc(100% - 12px);\n max-height: 16px;\n margin-top: 0.5px;\n background: var(--ht-resize-indicator-color);\n border-radius: 2px;\n transform: translateY(-50%);\n}\n.handsontable .manualColumnResizer::after {\n left: auto;\n right: 0;\n}\n.handsontable .manualColumnResizer:hover, .handsontable .manualColumnResizer.active {\n opacity: 1;\n}\n.handsontable .manualColumnResizerGuide {\n position: absolute;\n inset-inline-end: unset;\n top: 0;\n width: 0;\n margin-inline-start: 5px;\n margin-inline-end: unset;\n display: none;\n border-inline-end: 1px solid var(--ht-accent-color);\n border-inline-start: none;\n}\n.handsontable .manualColumnResizerGuide.active {\n display: block;\n z-index: 209;\n}\n\n.handsontable .manualRowResizer {\n position: absolute;\n left: 0;\n z-index: 210;\n height: 10px;\n margin: 0;\n cursor: row-resize;\n background: none;\n opacity: 0;\n}\n.handsontable .manualRowResizer::before, .handsontable .manualRowResizer::after {\n content: \"\";\n display: block;\n position: absolute;\n top: 1px;\n left: 50%;\n width: calc(100% - 12px);\n max-width: 16px;\n height: 2px;\n background: var(--ht-resize-indicator-color);\n border-radius: 2px;\n transform: translateX(-50%);\n}\n.handsontable .manualRowResizer::after {\n top: auto;\n bottom: 0;\n}\n.handsontable .manualRowResizer:hover, .handsontable .manualRowResizer.active {\n opacity: 1;\n}\n.handsontable .manualRowResizerGuide {\n position: absolute;\n left: 0;\n bottom: 0;\n height: 0;\n margin-top: 5px;\n display: none;\n border-bottom: 1px solid var(--ht-accent-color);\n border-top: none;\n}\n.handsontable .manualRowResizerGuide.active {\n display: block;\n z-index: 209;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight]:not([class*=fullySelectedMergedCell])::before {\n opacity: 0;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-multiple]::before {\n opacity: 0.14;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-0]:before {\n opacity: 0.14;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-1]:before {\n opacity: 0.21;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-2]:before {\n opacity: 0.28;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-3]:before {\n opacity: 0.35;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-4]:before {\n opacity: 0.42;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-5]:before {\n opacity: 0.49;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-6]:before {\n opacity: 0.56;\n}\n\n.handsontable tbody td[rowspan][class*=area][class*=highlight][class*=fullySelectedMergedCell-7]:before {\n opacity: 0.63;\n}\n\n.handsontable .wtHider {\n position: relative;\n}\n.handsontable .ht__manualColumnMove.after-selection--columns thead th.ht__highlight, .handsontable.ht__manualColumnMove.after-selection--columns thead th.ht__highlight {\n cursor: move;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.handsontable .ht__manualColumnMove.on-moving--columns *,\n.handsontable .ht__manualColumnMove.on-moving--columns thead th.ht__highlight, .handsontable.ht__manualColumnMove.on-moving--columns *,\n.handsontable.ht__manualColumnMove.on-moving--columns thead th.ht__highlight {\n cursor: move;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.handsontable .ht__manualColumnMove.on-moving--columns .manualColumnResizer, .handsontable.ht__manualColumnMove.on-moving--columns .manualColumnResizer {\n display: none;\n}\n.handsontable .ht__manualColumnMove--guideline, .handsontable .ht__manualColumnMove--backlight, .handsontable.ht__manualColumnMove--guideline, .handsontable.ht__manualColumnMove--backlight {\n position: absolute;\n height: 100%;\n display: none;\n}\n.handsontable .ht__manualColumnMove--guideline, .handsontable.ht__manualColumnMove--guideline {\n width: 1px;\n top: 0;\n margin-inline-start: -0.5px;\n margin-inline-end: 0;\n z-index: 205;\n background: var(--ht-move-indicator-color, #1a42e8);\n}\n.handsontable .ht__manualColumnMove--backlight, .handsontable.ht__manualColumnMove--backlight {\n display: none;\n z-index: 205;\n pointer-events: none;\n background: color-mix(in srgb, var(--ht-move-backlight-color) var(--ht-move-backlight-opacity, 100%), transparent);\n}\n.handsontable .on-moving--columns.show-ui .ht__manualColumnMove--guideline,\n.handsontable .on-moving--columns .ht__manualColumnMove--backlight, .handsontable.on-moving--columns.show-ui .ht__manualColumnMove--guideline,\n.handsontable.on-moving--columns .ht__manualColumnMove--backlight {\n display: block;\n}\n\n.handsontable .wtHider {\n position: relative;\n}\n.handsontable .ht__manualRowMove.after-selection--rows tbody th.ht__highlight, .handsontable.ht__manualRowMove.after-selection--rows tbody th.ht__highlight {\n cursor: move;\n cursor: -moz-grab;\n cursor: -webkit-grab;\n cursor: grab;\n}\n.handsontable .ht__manualRowMove.on-moving--rows *,\n.handsontable .ht__manualRowMove.on-moving--rows tbody th.ht__highlight, .handsontable.ht__manualRowMove.on-moving--rows *,\n.handsontable.ht__manualRowMove.on-moving--rows tbody th.ht__highlight {\n cursor: move;\n cursor: -moz-grabbing;\n cursor: -webkit-grabbing;\n cursor: grabbing;\n}\n.handsontable .ht__manualRowMove.on-moving--rows .manualRowResizer, .handsontable.ht__manualRowMove.on-moving--rows .manualRowResizer {\n display: none;\n}\n.handsontable .ht__manualRowMove--guideline, .handsontable .ht__manualRowMove--backlight, .handsontable.ht__manualRowMove--guideline, .handsontable.ht__manualRowMove--backlight {\n position: absolute;\n width: 100%;\n display: none;\n}\n.handsontable .ht__manualRowMove--guideline, .handsontable.ht__manualRowMove--guideline {\n border-top: 1px solid var(--ht-move-indicator-color);\n left: 0;\n z-index: 205;\n}\n.handsontable .ht__manualRowMove--backlight, .handsontable.ht__manualRowMove--backlight {\n display: none;\n z-index: 205;\n pointer-events: none;\n background: color-mix(in srgb, var(--ht-move-backlight-color) var(--ht-move-backlight-opacity, 100%), transparent);\n}\n.handsontable .on-moving--rows.show-ui .ht__manualRowMove--guideline,\n.handsontable .on-moving--rows .ht__manualRowMove--backlight, .handsontable.on-moving--rows.show-ui .ht__manualRowMove--guideline,\n.handsontable.on-moving--rows .ht__manualRowMove--backlight {\n display: block;\n}\n\n.ht-dialog {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n position: absolute;\n top: 0;\n left: 0;\n display: none;\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n letter-spacing: var(--ht-letter-spacing);\n width: 100%;\n height: 100%;\n z-index: 1060;\n opacity: 0;\n overflow-y: auto;\n border-radius: var(--ht-wrapper-border-radius);\n border: 1px solid var(--ht-border-color);\n box-sizing: border-box !important;\n}\n.ht-dialog[dir=rtl] {\n left: auto;\n right: 0;\n}\n.ht-dialog:focus {\n border: 1px solid var(--ht-accent-color);\n outline: none;\n}\n.ht-dialog:has(.htFocusCatcher:focus) {\n border: 1px solid var(--ht-accent-color);\n outline: none;\n}\n.ht-dialog * {\n box-sizing: border-box !important;\n}\n.ht-dialog--background-solid {\n background-color: var(--ht-dialog-solid-background-color);\n}\n.ht-dialog--background-semi-transparent {\n background-color: color-mix(in srgb, var(--ht-dialog-semi-transparent-background-color) var(--ht-dialog-semi-transparent-background-opacity, 100%), transparent);\n}\n.ht-dialog--animation {\n transition: opacity var(--ht-table-transition) ease-in-out;\n}\n.ht-dialog--show {\n opacity: 1;\n}\n.ht-dialog__content-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n min-height: 100%;\n padding: calc(var(--ht-gap-size) * 4);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-dialog__content {\n position: relative;\n padding: var(--ht-dialog-content-padding-horizontal) var(--ht-dialog-content-padding-vertical);\n max-width: 480px;\n color: var(--ht-foreground-color);\n}\n.ht-dialog__content--background {\n box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) color-mix(in srgb, var(--ht-shadow-color, rgb(0, 0, 0)) var(--ht-shadow-opacity, 100%), transparent);\n border-radius: var(--ht-dialog-content-border-radius);\n background-color: var(--ht-dialog-content-background-color);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper {\n text-align: center;\n padding: calc(var(--ht-gap-size) * 2);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 480px;\n padding: calc(var(--ht-gap-size) * 2);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper-inner--background {\n box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) color-mix(in srgb, var(--ht-shadow-color, rgb(0, 0, 0)) var(--ht-shadow-opacity, 100%), transparent);\n border-radius: var(--ht-dialog-content-border-radius);\n background-color: var(--ht-dialog-content-background-color);\n}\n.ht-dialog--confirm .ht-dialog__content-wrapper-inner:focus {\n outline: none;\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n.ht-dialog--confirm .ht-dialog__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ht-gap-size);\n}\n.ht-dialog--confirm .ht-dialog__content:has(.ht-dialog__buttons) {\n gap: calc(var(--ht-gap-size) * 2);\n}\n.ht-dialog--confirm .ht-dialog__title {\n margin: 0;\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height);\n}\n.ht-dialog--confirm .ht-dialog__description {\n margin: 0;\n color: var(--ht-foreground-secondary-color);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n}\n.ht-dialog--confirm .ht-dialog__buttons {\n display: flex;\n justify-content: center;\n flex-direction: row;\n flex-wrap: wrap;\n gap: calc(var(--ht-gap-size) * 2);\n}\n\n.ht-notification {\n position: absolute;\n inset: 0;\n z-index: 1070;\n pointer-events: none;\n overflow: visible;\n}\n.ht-notification__stack {\n position: absolute;\n display: flex;\n flex-direction: column;\n gap: 10px;\n max-width: min(420px, 100% - 40px);\n overflow-x: hidden;\n overflow-y: auto;\n overscroll-behavior: contain;\n pointer-events: auto;\n -webkit-overflow-scrolling: touch;\n min-height: 0;\n padding: 10px;\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n}\n.ht-notification__stack--top-start {\n top: 10px;\n inset-inline-start: 10px;\n align-items: flex-start;\n max-height: calc(100% - 40px);\n}\n.ht-notification__stack--top-end {\n top: 10px;\n inset-inline-end: 10px;\n align-items: flex-end;\n max-height: calc(100% - 40px);\n}\n.ht-notification__stack--bottom-start {\n bottom: 10px;\n inset-inline-start: 10px;\n align-items: flex-start;\n max-height: calc(100% - 40px);\n}\n.ht-notification__stack--bottom-end {\n bottom: 10px;\n inset-inline-end: 10px;\n align-items: flex-end;\n max-height: calc(100% - 40px);\n}\n.ht-notification__toast {\n box-shadow: var(--ht-shadow-x, 0) var(--ht-shadow-y, 0) var(--ht-shadow-blur, 8px) color-mix(in srgb, var(--ht-shadow-color, rgb(0, 0, 0)) var(--ht-shadow-opacity, 100%), transparent);\n position: relative;\n display: flex;\n flex-shrink: 0;\n max-width: 100%;\n pointer-events: auto;\n color: var(--ht-notification-foreground-color, var(--ht-foreground-color));\n background-color: var(--ht-notification-background-color, var(--ht-background-color));\n border: 1px solid var(--ht-notification-border-color, var(--ht-border-color));\n border-radius: var(--ht-wrapper-border-radius, 4px);\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n letter-spacing: var(--ht-letter-spacing);\n outline: none;\n}\n.ht-notification__toast:focus-visible {\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n.ht-notification__toast--animate {\n opacity: 0;\n transition: opacity var(--ht-table-transition, 0.15s) ease-out, transform var(--ht-table-transition, 0.15s) ease-out;\n}\n.ht-notification__toast--animate.ht-notification__toast--stack-top:not(.ht-notification__toast--visible) {\n transform: translateY(-6px);\n}\n.ht-notification__toast--animate.ht-notification__toast--stack-bottom:not(.ht-notification__toast--visible) {\n transform: translateY(6px);\n}\n.ht-notification__toast--visible {\n opacity: 1;\n transform: translateY(0);\n}\n.ht-notification__toast--info .ht-notification__accent {\n display: none;\n}\n.ht-notification__toast--success .ht-notification__accent {\n background-color: var(--ht-notification-success-accent, #37bc6c);\n}\n.ht-notification__toast--warning .ht-notification__accent {\n background-color: var(--ht-notification-warning-accent, #fbe952);\n}\n.ht-notification__toast--error .ht-notification__accent {\n background-color: var(--ht-notification-error-accent, #fa4d32);\n}\n.ht-notification__toast-inner {\n display: flex;\n flex-direction: row;\n align-items: stretch;\n width: 100%;\n min-width: 0;\n padding: 10px;\n gap: 0;\n direction: inherit;\n}\n.ht-notification__accent {\n box-sizing: border-box;\n flex: 0 0 4px;\n align-self: stretch;\n border-radius: 4px;\n margin-inline-end: 10px;\n}\n.ht-notification__body {\n flex: 1 1 auto;\n min-width: 0;\n}\n.ht-notification__title {\n margin: 0 0 var(--ht-gap-size);\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight, 600);\n}\n.ht-notification__message {\n margin: 0;\n font-size: var(--ht-font-size-small);\n word-break: break-word;\n}\n.ht-notification__actions {\n display: flex;\n flex-wrap: wrap;\n gap: var(--ht-gap-size);\n margin-top: var(--ht-gap-size);\n}\n.ht-notification__close {\n position: relative;\n box-sizing: border-box;\n flex: 0 0 auto;\n align-self: flex-start;\n margin-inline-start: 4px;\n width: var(--ht-icon-button-hit-area-size);\n height: var(--ht-icon-button-hit-area-size);\n padding: 0;\n border: none;\n background: transparent;\n color: var(--ht-icon-button-icon-color, inherit);\n cursor: pointer;\n border-radius: var(--ht-icon-button-border-radius, var(--ht-wrapper-border-radius, 4px));\n flex-shrink: 0;\n overflow: visible;\n}\n.ht-notification__close::before {\n content: \"\";\n display: block;\n position: absolute;\n top: 50%;\n inset-inline-start: 50%;\n margin-top: calc(-0.5 * var(--ht-icon-size));\n margin-inline-start: calc(-0.5 * var(--ht-icon-size));\n}\n.ht-notification__close:hover {\n color: var(--ht-icon-button-hover-icon-color, inherit);\n background-color: var(--ht-icon-button-hover-background-color, color-mix(in srgb, var(--ht-foreground-color) 8%, transparent));\n}\n.ht-notification__close:focus-visible {\n outline: 2px solid var(--ht-accent-color);\n outline-offset: 2px;\n}\n\n.handsontable.ht-pagination {\n color: var(--ht-pagination-bar-foreground-color);\n background: var(--ht-pagination-bar-background-color);\n border: 1px solid var(--ht-wrapper-border-color);\n border-top-color: transparent;\n border-radius: 0 0 var(--ht-wrapper-border-radius) var(--ht-wrapper-border-radius);\n font-size: var(--ht-font-size);\n line-height: var(--ht-line-height);\n box-sizing: border-box;\n overflow-x: auto;\n}\n.handsontable.ht-pagination--bordered {\n border-top-color: var(--ht-wrapper-border-color);\n}\n.handsontable.ht-pagination .ht-pagination__inner {\n display: flex;\n justify-content: space-between;\n align-items: center;\n flex-wrap: wrap;\n gap: calc(var(--ht-gap-size) * 4);\n border-radius: 0 0 var(--ht-wrapper-border-radius) var(--ht-wrapper-border-radius);\n padding-inline: var(--ht-pagination-bar-horizontal-padding);\n padding-block: var(--ht-pagination-bar-vertical-padding);\n min-width: 230px;\n}\n.handsontable.ht-pagination .ht-page-size-section {\n display: flex;\n align-items: center;\n gap: calc(var(--ht-gap-size) * 2);\n}\n.handsontable.ht-pagination .ht-page-size-section__label {\n white-space: nowrap;\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper {\n position: relative;\n border-radius: var(--ht-input-border-radius);\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select {\n padding-inline-start: var(--ht-gap-size);\n padding-inline-end: calc(var(--ht-gap-size) + var(--ht-icon-size));\n padding-top: var(--ht-gap-size);\n padding-bottom: var(--ht-gap-size);\n border-radius: var(--ht-input-border-radius);\n color: var(--ht-input-foreground-color);\n background-color: var(--ht-input-background-color);\n border: 1px solid var(--ht-input-border-color);\n line-height: calc(var(--ht-line-height) - 4px);\n -webkit-appearance: none;\n font-size: inherit;\n cursor: pointer;\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:disabled {\n opacity: 0.4;\n cursor: default;\n color: var(--ht-input-disabled-foreground-color);\n background-color: var(--ht-input-disabled-background-color);\n border-color: var(--ht-input-disabled-border-color);\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:hover:not(:disabled) {\n color: var(--ht-input-hover-foreground-color);\n background-color: var(--ht-input-hover-background-color);\n border-color: var(--ht-input-hover-border-color);\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper select:focus {\n color: var(--ht-input-focus-foreground-color);\n background-color: var(--ht-input-focus-background-color);\n border-color: var(--ht-input-focus-border-color);\n outline: none;\n}\n.handsontable.ht-pagination .ht-page-size-section__select-wrapper::after {\n content: \"\";\n display: block;\n position: absolute;\n inset-inline-end: var(--ht-gap-size);\n inset-block-end: 50%;\n transform: translateY(50%);\n background-color: var(--ht-foreground-color);\n pointer-events: none;\n}\n.handsontable.ht-pagination .ht-page-counter-section {\n margin-inline-end: auto;\n}\n.handsontable.ht-pagination .ht-page-navigation-section {\n display: flex;\n align-items: center;\n gap: 1px;\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button {\n font-size: inherit;\n border: 1px solid var(--ht-pagination-button-border-color);\n color: var(--ht-pagination-button-foreground-color);\n background-color: var(--ht-pagination-button-background-color);\n border-radius: var(--ht-icon-button-large-border-radius);\n padding: var(--ht-icon-button-large-padding);\n cursor: pointer;\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button::before {\n content: \"\";\n display: block;\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button--disabled {\n cursor: default;\n pointer-events: none;\n color: var(--ht-pagination-button-disabled-foreground-color);\n background-color: var(--ht-pagination-button-disabled-background-color);\n border-color: var(--ht-pagination-button-disabled-border-color);\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button:hover:not(:disabled) {\n border-color: var(--ht-pagination-button-hover-border-color);\n color: var(--ht-pagination-button-hover-foreground-color);\n background-color: var(--ht-pagination-button-hover-background-color);\n}\n.handsontable.ht-pagination .ht-page-navigation-section__button:focus {\n outline: none;\n border-color: var(--ht-pagination-button-focus-border-color);\n color: var(--ht-pagination-button-focus-foreground-color);\n background-color: var(--ht-pagination-button-focus-background-color);\n}\n.handsontable.ht-pagination .ht-page-navigation-section__label {\n white-space: nowrap;\n min-width: 100px;\n text-align: center;\n}\n.handsontable.ht-wrapper.htPagination {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htPagination .htCore {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n}\n.handsontable.ht-wrapper.htPagination .htCore thead tr:last-child th:first-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child td:first-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child th:first-child {\n border-end-start-radius: 0 !important;\n}\n.handsontable.ht-wrapper.htPagination .htCore thead tr:last-child th:last-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child td:last-child,\n.handsontable.ht-wrapper.htPagination .htCore tbody tr:last-child th:last-child {\n border-end-end-radius: 0 !important;\n}\n\n.ht-loading__icon-svg {\n display: block;\n width: var(--ht-icon-size);\n height: var(--ht-icon-size);\n color: var(--ht-accent-color);\n animation: ht-loading-spin 1s linear infinite;\n transform-origin: 50% 50%;\n}\n.ht-loading__content {\n display: flex;\n align-items: center;\n gap: calc(var(--ht-gap-size) * 2);\n}\n.ht-loading__title {\n margin: 0;\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height);\n}\n.ht-loading__description {\n margin: 0;\n color: var(--ht-foreground-secondary-color);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n}\n\n@keyframes ht-loading-spin {\n to {\n transform: rotate(360deg);\n }\n}\n.ht-empty-data-state {\n scrollbar-width: auto;\n scrollbar-color: var(--ht-scrollbar-thumb-color) var(--ht-scrollbar-track-color);\n display: none;\n position: absolute;\n width: 100%;\n left: 0;\n z-index: 999;\n overflow-y: auto;\n border: 1px solid var(--ht-border-color);\n border-radius: var(--ht-wrapper-border-radius);\n box-sizing: border-box;\n background-color: var(--ht-background-color);\n}\n.ht-empty-data-state * {\n box-sizing: border-box !important;\n}\n.ht-empty-data-state__content-wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n width: 100%;\n min-height: 100%;\n padding: calc(var(--ht-gap-size) * 2);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-empty-data-state__content-wrapper-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n max-width: 480px;\n padding: calc(var(--ht-gap-size) * 2);\n border-radius: var(--ht-wrapper-border-radius);\n}\n.ht-empty-data-state__content-wrapper-inner:focus {\n outline: none;\n box-shadow: 0 0 0 1px var(--ht-accent-color);\n}\n.ht-empty-data-state__content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--ht-gap-size);\n}\n.ht-empty-data-state__title {\n margin: 0;\n font-size: var(--ht-font-size);\n font-weight: var(--ht-font-weight);\n line-height: var(--ht-line-height);\n}\n.ht-empty-data-state__description {\n margin: 0;\n color: var(--ht-foreground-secondary-color);\n font-size: var(--ht-font-size-small);\n line-height: var(--ht-line-height-small);\n font-weight: var(--ht-font-weight);\n}\n.ht-empty-data-state__buttons {\n display: flex;\n justify-content: center;\n flex-direction: row;\n flex-wrap: wrap;\n gap: calc(var(--ht-gap-size) * 2);\n}\n.ht-empty-data-state__buttons--has-buttons {\n margin-top: calc(var(--ht-gap-size) * 2);\n}\n.ht-empty-data-state__spinner {\n flex-shrink: 0;\n width: 28px;\n height: 28px;\n margin-bottom: calc(var(--ht-gap-size) * 2);\n border: 2px solid var(--ht-border-color);\n border-top-color: var(--ht-accent-color);\n border-radius: 50%;\n animation: ht-empty-data-state-spin 0.75s linear infinite;\n}\n@media (prefers-reduced-motion: reduce) {\n .ht-empty-data-state__spinner {\n animation: none;\n border-top-color: var(--ht-border-color);\n }\n}\n.ht-empty-data-state--loading .ht-empty-data-state__content {\n gap: calc(var(--ht-gap-size) * 0.5);\n}\n.ht-empty-data-state--disable-top-border {\n border-start-start-radius: 0;\n border-start-end-radius: 0;\n border-top-width: 0;\n}\n.ht-empty-data-state--disable-inline-border {\n border-start-start-radius: 0;\n border-end-start-radius: 0;\n border-inline-start-width: 0;\n}\n.ht-empty-data-state--disable-bottom-border, .ht-empty-data-state:has(~ .ht-pagination) {\n border-end-start-radius: 0;\n border-end-end-radius: 0;\n border-bottom-width: 0;\n}\n\n@keyframes ht-empty-data-state-spin {\n to {\n transform: rotate(360deg);\n }\n}\n");
|
|
120671
120705
|
|
|
120672
120706
|
|
|
120673
120707
|
},
|
|
@@ -122588,6 +122622,11 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
122588
122622
|
* @type {object}
|
|
122589
122623
|
*/ themeConfig;
|
|
122590
122624
|
/**
|
|
122625
|
+
* Unsubscribes from the theme object's change notifications.
|
|
122626
|
+
*
|
|
122627
|
+
* @type {Function|null}
|
|
122628
|
+
*/ #unsubscribeTheme = null;
|
|
122629
|
+
/**
|
|
122591
122630
|
* The theme manager constructor.
|
|
122592
122631
|
*
|
|
122593
122632
|
* @param {object} options - The options object.
|
|
@@ -122657,7 +122696,8 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
122657
122696
|
this.themeConfig = themeObject.getThemeConfig();
|
|
122658
122697
|
this.themeClassName = `${THEME_PREFIX}${this.themeConfig.name}`;
|
|
122659
122698
|
if (typeof themeObject.subscribe === 'function') {
|
|
122660
|
-
|
|
122699
|
+
this.#unsubscribeTheme?.();
|
|
122700
|
+
this.#unsubscribeTheme = themeObject.subscribe((config)=>{
|
|
122661
122701
|
if (!this.hot?.stylesHandler) {
|
|
122662
122702
|
return;
|
|
122663
122703
|
}
|
|
@@ -122686,6 +122726,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
122686
122726
|
/**
|
|
122687
122727
|
* Destroys the theme manager.
|
|
122688
122728
|
*/ destroy() {
|
|
122729
|
+
this.#unsubscribeTheme?.();
|
|
122689
122730
|
this.unmount();
|
|
122690
122731
|
this.hot.themeManager = null;
|
|
122691
122732
|
}
|
|
@@ -162750,24 +162791,65 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
162750
162791
|
"default": () => (purify)
|
|
162751
162792
|
});
|
|
162752
162793
|
/* import */ var dompurify__rspack_import_0 = __webpack_require__(204);
|
|
162753
|
-
/*! @license DOMPurify 3.4.
|
|
162754
|
-
|
|
162755
|
-
|
|
162756
|
-
|
|
162757
|
-
|
|
162758
|
-
|
|
162759
|
-
|
|
162760
|
-
|
|
162761
|
-
|
|
162762
|
-
|
|
162763
|
-
|
|
162764
|
-
|
|
162765
|
-
|
|
162766
|
-
|
|
162767
|
-
|
|
162768
|
-
|
|
162769
|
-
|
|
162770
|
-
|
|
162794
|
+
/*! @license DOMPurify 3.4.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.5/LICENSE */
|
|
162795
|
+
|
|
162796
|
+
function _arrayLikeToArray(r, a) {
|
|
162797
|
+
(null == a || a > r.length) && (a = r.length);
|
|
162798
|
+
for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];
|
|
162799
|
+
return n;
|
|
162800
|
+
}
|
|
162801
|
+
function _arrayWithHoles(r) {
|
|
162802
|
+
if (Array.isArray(r)) return r;
|
|
162803
|
+
}
|
|
162804
|
+
function _iterableToArrayLimit(r, l) {
|
|
162805
|
+
var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"];
|
|
162806
|
+
if (null != t) {
|
|
162807
|
+
var e,
|
|
162808
|
+
n,
|
|
162809
|
+
i,
|
|
162810
|
+
u,
|
|
162811
|
+
a = [],
|
|
162812
|
+
f = true,
|
|
162813
|
+
o = false;
|
|
162814
|
+
try {
|
|
162815
|
+
if (i = (t = t.call(r)).next, 0 === l) ; else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);
|
|
162816
|
+
} catch (r) {
|
|
162817
|
+
o = true, n = r;
|
|
162818
|
+
} finally {
|
|
162819
|
+
try {
|
|
162820
|
+
if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return;
|
|
162821
|
+
} finally {
|
|
162822
|
+
if (o) throw n;
|
|
162823
|
+
}
|
|
162824
|
+
}
|
|
162825
|
+
return a;
|
|
162826
|
+
}
|
|
162827
|
+
}
|
|
162828
|
+
function _nonIterableRest() {
|
|
162829
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
162830
|
+
}
|
|
162831
|
+
function _slicedToArray(r, e) {
|
|
162832
|
+
return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
|
|
162833
|
+
}
|
|
162834
|
+
function _unsupportedIterableToArray(r, a) {
|
|
162835
|
+
if (r) {
|
|
162836
|
+
if ("string" == typeof r) return _arrayLikeToArray(r, a);
|
|
162837
|
+
var t = {}.toString.call(r).slice(8, -1);
|
|
162838
|
+
return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;
|
|
162839
|
+
}
|
|
162840
|
+
}
|
|
162841
|
+
|
|
162842
|
+
const entries = Object.entries,
|
|
162843
|
+
setPrototypeOf = Object.setPrototypeOf,
|
|
162844
|
+
isFrozen = Object.isFrozen,
|
|
162845
|
+
getPrototypeOf = Object.getPrototypeOf,
|
|
162846
|
+
getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
|
|
162847
|
+
let freeze = Object.freeze,
|
|
162848
|
+
seal = Object.seal,
|
|
162849
|
+
create = Object.create; // eslint-disable-line import/no-mutable-exports
|
|
162850
|
+
let _ref = typeof Reflect !== 'undefined' && Reflect,
|
|
162851
|
+
apply = _ref.apply,
|
|
162852
|
+
construct = _ref.construct;
|
|
162771
162853
|
if (!freeze) {
|
|
162772
162854
|
freeze = function freeze(x) {
|
|
162773
162855
|
return x;
|
|
@@ -162904,7 +162986,10 @@ function cleanArray(array) {
|
|
|
162904
162986
|
*/
|
|
162905
162987
|
function clone(object) {
|
|
162906
162988
|
const newObject = create(null);
|
|
162907
|
-
for (const
|
|
162989
|
+
for (const _ref2 of entries(object)) {
|
|
162990
|
+
var _ref3 = _slicedToArray(_ref2, 2);
|
|
162991
|
+
const property = _ref3[0];
|
|
162992
|
+
const value = _ref3[1];
|
|
162908
162993
|
const isPropertyExist = objectHasOwnProperty(object, property);
|
|
162909
162994
|
if (isPropertyExist) {
|
|
162910
162995
|
if (arrayIsArray(value)) {
|
|
@@ -163018,15 +163103,14 @@ const mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mgly
|
|
|
163018
163103
|
const mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);
|
|
163019
163104
|
const text = freeze(['#text']);
|
|
163020
163105
|
|
|
163021
|
-
const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns']);
|
|
163106
|
+
const html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'command', 'commandfor', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns']);
|
|
163022
163107
|
const svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
|
|
163023
163108
|
const mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnalign', 'columnlines', 'columnspacing', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lquote', 'lspace', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
|
|
163024
163109
|
const xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
|
|
163025
163110
|
|
|
163026
|
-
|
|
163027
|
-
const
|
|
163028
|
-
const
|
|
163029
|
-
const TMPLIT_EXPR = seal(/\$\{[\w\W]*/gm); // eslint-disable-line unicorn/better-regex
|
|
163111
|
+
const MUSTACHE_EXPR = seal(/{{[\w\W]*|^[\w\W]*}}/g);
|
|
163112
|
+
const ERB_EXPR = seal(/<%[\w\W]*|^[\w\W]*%>/g);
|
|
163113
|
+
const TMPLIT_EXPR = seal(/\${[\w\W]*/g);
|
|
163030
163114
|
const DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]+$/); // eslint-disable-line no-useless-escape
|
|
163031
163115
|
const ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape
|
|
163032
163116
|
const IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape
|
|
@@ -163037,20 +163121,6 @@ const ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205
|
|
|
163037
163121
|
const DOCTYPE_NAME = seal(/^html$/i);
|
|
163038
163122
|
const CUSTOM_ELEMENT = seal(/^[a-z][.\w]*(-[.\w]+)+$/i);
|
|
163039
163123
|
|
|
163040
|
-
var EXPRESSIONS = /*#__PURE__*/Object.freeze({
|
|
163041
|
-
__proto__: null,
|
|
163042
|
-
ARIA_ATTR: ARIA_ATTR,
|
|
163043
|
-
ATTR_WHITESPACE: ATTR_WHITESPACE,
|
|
163044
|
-
CUSTOM_ELEMENT: CUSTOM_ELEMENT,
|
|
163045
|
-
DATA_ATTR: DATA_ATTR,
|
|
163046
|
-
DOCTYPE_NAME: DOCTYPE_NAME,
|
|
163047
|
-
ERB_EXPR: ERB_EXPR,
|
|
163048
|
-
IS_ALLOWED_URI: IS_ALLOWED_URI,
|
|
163049
|
-
IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,
|
|
163050
|
-
MUSTACHE_EXPR: MUSTACHE_EXPR,
|
|
163051
|
-
TMPLIT_EXPR: TMPLIT_EXPR
|
|
163052
|
-
});
|
|
163053
|
-
|
|
163054
163124
|
/* eslint-disable @typescript-eslint/indent */
|
|
163055
163125
|
// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType
|
|
163056
163126
|
const NODE_TYPE = {
|
|
@@ -163117,7 +163187,7 @@ const _createHooksMap = function _createHooksMap() {
|
|
|
163117
163187
|
function createDOMPurify() {
|
|
163118
163188
|
let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
|
|
163119
163189
|
const DOMPurify = root => createDOMPurify(root);
|
|
163120
|
-
DOMPurify.version = '3.4.
|
|
163190
|
+
DOMPurify.version = '3.4.5';
|
|
163121
163191
|
DOMPurify.removed = [];
|
|
163122
163192
|
if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {
|
|
163123
163193
|
// Not running in a browser, provide a factory function
|
|
@@ -163125,28 +163195,26 @@ function createDOMPurify() {
|
|
|
163125
163195
|
DOMPurify.isSupported = false;
|
|
163126
163196
|
return DOMPurify;
|
|
163127
163197
|
}
|
|
163128
|
-
let
|
|
163129
|
-
document
|
|
163130
|
-
} = window;
|
|
163198
|
+
let document = window.document;
|
|
163131
163199
|
const originalDocument = document;
|
|
163132
163200
|
const currentScript = originalDocument.currentScript;
|
|
163133
|
-
const
|
|
163134
|
-
|
|
163135
|
-
|
|
163136
|
-
|
|
163137
|
-
|
|
163138
|
-
|
|
163139
|
-
NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,
|
|
163140
|
-
HTMLFormElement,
|
|
163141
|
-
DOMParser,
|
|
163142
|
-
trustedTypes
|
|
163143
|
-
} = window;
|
|
163201
|
+
const DocumentFragment = window.DocumentFragment,
|
|
163202
|
+
HTMLTemplateElement = window.HTMLTemplateElement,
|
|
163203
|
+
Node = window.Node,
|
|
163204
|
+
Element = window.Element,
|
|
163205
|
+
NodeFilter = window.NodeFilter,
|
|
163206
|
+
_window$NamedNodeMap = window.NamedNodeMap,
|
|
163207
|
+
NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,
|
|
163208
|
+
HTMLFormElement = window.HTMLFormElement,
|
|
163209
|
+
DOMParser = window.DOMParser,
|
|
163210
|
+
trustedTypes = window.trustedTypes;
|
|
163144
163211
|
const ElementPrototype = Element.prototype;
|
|
163145
163212
|
const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');
|
|
163146
163213
|
const remove = lookupGetter(ElementPrototype, 'remove');
|
|
163147
163214
|
const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');
|
|
163148
163215
|
const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');
|
|
163149
163216
|
const getParentNode = lookupGetter(ElementPrototype, 'parentNode');
|
|
163217
|
+
const getNodeType = Node && Node.prototype ? lookupGetter(Node.prototype, 'nodeType') : null;
|
|
163150
163218
|
// As per issue #47, the web-components registry is inherited by a
|
|
163151
163219
|
// new document created via createHTMLDocument. As per the spec
|
|
163152
163220
|
// (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
|
|
@@ -163161,33 +163229,26 @@ function createDOMPurify() {
|
|
|
163161
163229
|
}
|
|
163162
163230
|
let trustedTypesPolicy;
|
|
163163
163231
|
let emptyHTML = '';
|
|
163164
|
-
const
|
|
163165
|
-
implementation,
|
|
163166
|
-
createNodeIterator,
|
|
163167
|
-
createDocumentFragment,
|
|
163168
|
-
getElementsByTagName
|
|
163169
|
-
|
|
163170
|
-
const {
|
|
163171
|
-
importNode
|
|
163172
|
-
} = originalDocument;
|
|
163232
|
+
const _document = document,
|
|
163233
|
+
implementation = _document.implementation,
|
|
163234
|
+
createNodeIterator = _document.createNodeIterator,
|
|
163235
|
+
createDocumentFragment = _document.createDocumentFragment,
|
|
163236
|
+
getElementsByTagName = _document.getElementsByTagName;
|
|
163237
|
+
const importNode = originalDocument.importNode;
|
|
163173
163238
|
let hooks = _createHooksMap();
|
|
163174
163239
|
/**
|
|
163175
163240
|
* Expose whether this browser supports running the full DOMPurify.
|
|
163176
163241
|
*/
|
|
163177
163242
|
DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;
|
|
163178
|
-
const
|
|
163179
|
-
|
|
163180
|
-
|
|
163181
|
-
|
|
163182
|
-
|
|
163183
|
-
|
|
163184
|
-
|
|
163185
|
-
|
|
163186
|
-
|
|
163187
|
-
} = EXPRESSIONS;
|
|
163188
|
-
let {
|
|
163189
|
-
IS_ALLOWED_URI: IS_ALLOWED_URI$1
|
|
163190
|
-
} = EXPRESSIONS;
|
|
163243
|
+
const MUSTACHE_EXPR$1 = MUSTACHE_EXPR,
|
|
163244
|
+
ERB_EXPR$1 = ERB_EXPR,
|
|
163245
|
+
TMPLIT_EXPR$1 = TMPLIT_EXPR,
|
|
163246
|
+
DATA_ATTR$1 = DATA_ATTR,
|
|
163247
|
+
ARIA_ATTR$1 = ARIA_ATTR,
|
|
163248
|
+
IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,
|
|
163249
|
+
ATTR_WHITESPACE$1 = ATTR_WHITESPACE,
|
|
163250
|
+
CUSTOM_ELEMENT$1 = CUSTOM_ELEMENT;
|
|
163251
|
+
let IS_ALLOWED_URI$1 = IS_ALLOWED_URI;
|
|
163191
163252
|
/**
|
|
163192
163253
|
* We consider the elements and attributes below to be safe. Ideally
|
|
163193
163254
|
* don't add any new ones but feel free to remove unwanted ones.
|
|
@@ -163707,6 +163768,40 @@ function createDOMPurify() {
|
|
|
163707
163768
|
// eslint-disable-next-line no-bitwise
|
|
163708
163769
|
NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);
|
|
163709
163770
|
};
|
|
163771
|
+
/**
|
|
163772
|
+
* Strip template-engine expressions ({{...}}, ${...}, <%...%>) from the
|
|
163773
|
+
* character data of an element subtree. Used as the final safety net for
|
|
163774
|
+
* SAFE_FOR_TEMPLATES on every DOM-returning code path so that expressions
|
|
163775
|
+
* which only form after text-node normalization (e.g. fragments split across
|
|
163776
|
+
* stripped elements) cannot survive into a template-evaluating framework.
|
|
163777
|
+
*
|
|
163778
|
+
* Walks text/comment/CDATA/processing-instruction nodes and mutates `.data`
|
|
163779
|
+
* in place rather than round-tripping through innerHTML. This preserves
|
|
163780
|
+
* descendant node references (important for IN_PLACE callers), avoids a
|
|
163781
|
+
* serialize/reparse cycle, and reads literal character data — which means
|
|
163782
|
+
* `<%...%>` in text content matches the ERB regex against its real bytes
|
|
163783
|
+
* instead of the HTML-entity-escaped form innerHTML would produce.
|
|
163784
|
+
*
|
|
163785
|
+
* Attribute values are not visited here; SAFE_FOR_TEMPLATES handling for
|
|
163786
|
+
* attributes is performed during the per-node `_sanitizeAttributes` pass.
|
|
163787
|
+
*
|
|
163788
|
+
* @param node The root element whose character data should be scrubbed.
|
|
163789
|
+
*/
|
|
163790
|
+
const _scrubTemplateExpressions = function _scrubTemplateExpressions(node) {
|
|
163791
|
+
node.normalize();
|
|
163792
|
+
const walker = createNodeIterator.call(node.ownerDocument || node, node,
|
|
163793
|
+
// eslint-disable-next-line no-bitwise
|
|
163794
|
+
NodeFilter.SHOW_TEXT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_CDATA_SECTION | NodeFilter.SHOW_PROCESSING_INSTRUCTION, null);
|
|
163795
|
+
let currentNode = walker.nextNode();
|
|
163796
|
+
while (currentNode) {
|
|
163797
|
+
let data = currentNode.data;
|
|
163798
|
+
arrayForEach([MUSTACHE_EXPR$1, ERB_EXPR$1, TMPLIT_EXPR$1], expr => {
|
|
163799
|
+
data = stringReplace(data, expr, ' ');
|
|
163800
|
+
});
|
|
163801
|
+
currentNode.data = data;
|
|
163802
|
+
currentNode = walker.nextNode();
|
|
163803
|
+
}
|
|
163804
|
+
};
|
|
163710
163805
|
/**
|
|
163711
163806
|
* _isClobbered
|
|
163712
163807
|
*
|
|
@@ -163717,13 +163812,31 @@ function createDOMPurify() {
|
|
|
163717
163812
|
return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');
|
|
163718
163813
|
};
|
|
163719
163814
|
/**
|
|
163720
|
-
* Checks whether the given object is a DOM node
|
|
163815
|
+
* Checks whether the given object is a DOM node, including nodes that
|
|
163816
|
+
* originate from a different window/realm (e.g. an iframe's
|
|
163817
|
+
* contentDocument). The previous `value instanceof Node` check was
|
|
163818
|
+
* realm-bound: nodes from a different window failed it, causing
|
|
163819
|
+
* sanitize() to silently stringify them and reset IN_PLACE to false,
|
|
163820
|
+
* returning the original node unsanitized. See GHSA-4w3q-35jp-p934.
|
|
163821
|
+
*
|
|
163822
|
+
* Implementation: call the cached `nodeType` getter from Node.prototype
|
|
163823
|
+
* directly on the value. This bypasses any clobbered instance property
|
|
163824
|
+
* (e.g. a child element named "nodeType") and works across realms
|
|
163825
|
+
* because the WebIDL `nodeType` getter reads an internal slot that
|
|
163826
|
+
* every real Node has, regardless of which window minted it.
|
|
163721
163827
|
*
|
|
163722
163828
|
* @param value object to check whether it's a DOM node
|
|
163723
|
-
* @return true
|
|
163829
|
+
* @return true if value is a DOM node from any realm
|
|
163724
163830
|
*/
|
|
163725
163831
|
const _isNode = function _isNode(value) {
|
|
163726
|
-
|
|
163832
|
+
if (!getNodeType || typeof value !== 'object' || value === null) {
|
|
163833
|
+
return false;
|
|
163834
|
+
}
|
|
163835
|
+
try {
|
|
163836
|
+
return typeof getNodeType(value) === 'number';
|
|
163837
|
+
} catch (_) {
|
|
163838
|
+
return false;
|
|
163839
|
+
}
|
|
163727
163840
|
};
|
|
163728
163841
|
function _executeHooks(hooks, currentNode, data) {
|
|
163729
163842
|
arrayForEach(hooks, hook => {
|
|
@@ -163815,7 +163928,7 @@ function createDOMPurify() {
|
|
|
163815
163928
|
if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {
|
|
163816
163929
|
/* Get the element's text content */
|
|
163817
163930
|
content = currentNode.textContent;
|
|
163818
|
-
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
163931
|
+
arrayForEach([MUSTACHE_EXPR$1, ERB_EXPR$1, TMPLIT_EXPR$1], expr => {
|
|
163819
163932
|
content = stringReplace(content, expr, ' ');
|
|
163820
163933
|
});
|
|
163821
163934
|
if (currentNode.textContent !== content) {
|
|
@@ -163852,7 +163965,7 @@ function createDOMPurify() {
|
|
|
163852
163965
|
(https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
|
|
163853
163966
|
XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
|
|
163854
163967
|
We don't need to check the value; it's always URI safe. */
|
|
163855
|
-
if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (!nameIsPermitted || FORBID_ATTR[lcName]) {
|
|
163968
|
+
if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!nameIsPermitted || FORBID_ATTR[lcName]) {
|
|
163856
163969
|
if (
|
|
163857
163970
|
// First condition does a very basic check if a) it's basically a valid custom element tagname AND
|
|
163858
163971
|
// b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
|
|
@@ -163864,7 +163977,7 @@ function createDOMPurify() {
|
|
|
163864
163977
|
return false;
|
|
163865
163978
|
}
|
|
163866
163979
|
/* Check value is safe. First, is attr inert? If so, is safe */
|
|
163867
|
-
} else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {
|
|
163980
|
+
} else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (value) {
|
|
163868
163981
|
return false;
|
|
163869
163982
|
} else ;
|
|
163870
163983
|
return true;
|
|
@@ -163882,7 +163995,7 @@ function createDOMPurify() {
|
|
|
163882
163995
|
* @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.
|
|
163883
163996
|
*/
|
|
163884
163997
|
const _isBasicCustomElement = function _isBasicCustomElement(tagName) {
|
|
163885
|
-
return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT, tagName);
|
|
163998
|
+
return !RESERVED_CUSTOM_ELEMENT_NAMES[stringToLowerCase(tagName)] && regExpTest(CUSTOM_ELEMENT$1, tagName);
|
|
163886
163999
|
};
|
|
163887
164000
|
/**
|
|
163888
164001
|
* _sanitizeAttributes
|
|
@@ -163897,9 +164010,7 @@ function createDOMPurify() {
|
|
|
163897
164010
|
const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
|
|
163898
164011
|
/* Execute a hook if present */
|
|
163899
164012
|
_executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);
|
|
163900
|
-
const
|
|
163901
|
-
attributes
|
|
163902
|
-
} = currentNode;
|
|
164013
|
+
const attributes = currentNode.attributes;
|
|
163903
164014
|
/* Check if we have attributes; if not we might have a text node */
|
|
163904
164015
|
if (!attributes || _isClobbered(currentNode)) {
|
|
163905
164016
|
return;
|
|
@@ -163915,11 +164026,9 @@ function createDOMPurify() {
|
|
|
163915
164026
|
/* Go backwards over all attributes; safely remove bad ones */
|
|
163916
164027
|
while (l--) {
|
|
163917
164028
|
const attr = attributes[l];
|
|
163918
|
-
const
|
|
163919
|
-
|
|
163920
|
-
|
|
163921
|
-
value: attrValue
|
|
163922
|
-
} = attr;
|
|
164029
|
+
const name = attr.name,
|
|
164030
|
+
namespaceURI = attr.namespaceURI,
|
|
164031
|
+
attrValue = attr.value;
|
|
163923
164032
|
const lcName = transformCaseFunc(name);
|
|
163924
164033
|
const initValue = attrValue;
|
|
163925
164034
|
let value = name === 'value' ? initValue : stringTrim(initValue);
|
|
@@ -163967,7 +164076,7 @@ function createDOMPurify() {
|
|
|
163967
164076
|
}
|
|
163968
164077
|
/* Sanitize attribute content to be template-safe */
|
|
163969
164078
|
if (SAFE_FOR_TEMPLATES) {
|
|
163970
|
-
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
164079
|
+
arrayForEach([MUSTACHE_EXPR$1, ERB_EXPR$1, TMPLIT_EXPR$1], expr => {
|
|
163971
164080
|
value = stringReplace(value, expr, ' ');
|
|
163972
164081
|
});
|
|
163973
164082
|
}
|
|
@@ -164041,6 +164150,49 @@ function createDOMPurify() {
|
|
|
164041
164150
|
/* Execute a hook if present */
|
|
164042
164151
|
_executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);
|
|
164043
164152
|
};
|
|
164153
|
+
/**
|
|
164154
|
+
* _sanitizeAttachedShadowRoots
|
|
164155
|
+
*
|
|
164156
|
+
* Walks `root` and feeds every attached shadow root we encounter into
|
|
164157
|
+
* the existing _sanitizeShadowDOM pipeline. The default node iterator
|
|
164158
|
+
* does not descend into shadow trees, so nodes inside an attached
|
|
164159
|
+
* shadow root would otherwise be skipped entirely.
|
|
164160
|
+
*
|
|
164161
|
+
* Two real input paths put attached shadow roots in front of us:
|
|
164162
|
+
* 1. IN_PLACE on a DOM node that already has shadow roots attached.
|
|
164163
|
+
* 2. DOM-node input where importNode(dirty, true) deep-clones the
|
|
164164
|
+
* shadow root because it was created with `clonable: true`.
|
|
164165
|
+
*
|
|
164166
|
+
* This pass runs once, up front, so the main iteration loop (and the
|
|
164167
|
+
* existing _sanitizeShadowDOM template-content recursion) stay
|
|
164168
|
+
* untouched — string-input paths are not affected.
|
|
164169
|
+
*
|
|
164170
|
+
* @param root the subtree root to walk for attached shadow roots
|
|
164171
|
+
*/
|
|
164172
|
+
const _sanitizeAttachedShadowRoots2 = function _sanitizeAttachedShadowRoots(root) {
|
|
164173
|
+
if (root.nodeType === NODE_TYPE.element && root.shadowRoot instanceof DocumentFragment) {
|
|
164174
|
+
const sr = root.shadowRoot;
|
|
164175
|
+
// Recurse first so that nested shadow roots are reached even if
|
|
164176
|
+
// _sanitizeShadowDOM removes hosts at this level.
|
|
164177
|
+
_sanitizeAttachedShadowRoots2(sr);
|
|
164178
|
+
_sanitizeShadowDOM2(sr);
|
|
164179
|
+
}
|
|
164180
|
+
// Snapshot children before recursing. Sanitization of one subtree
|
|
164181
|
+
// (e.g. via an uponSanitizeShadowNode hook) may detach siblings,
|
|
164182
|
+
// and naive nextSibling traversal would silently skip the rest of
|
|
164183
|
+
// the list once a node is detached.
|
|
164184
|
+
const childNodes = root.childNodes;
|
|
164185
|
+
if (!childNodes) {
|
|
164186
|
+
return;
|
|
164187
|
+
}
|
|
164188
|
+
const snapshot = [];
|
|
164189
|
+
arrayForEach(childNodes, child => {
|
|
164190
|
+
arrayPush(snapshot, child);
|
|
164191
|
+
});
|
|
164192
|
+
for (const child of snapshot) {
|
|
164193
|
+
_sanitizeAttachedShadowRoots2(child);
|
|
164194
|
+
}
|
|
164195
|
+
};
|
|
164044
164196
|
// eslint-disable-next-line complexity
|
|
164045
164197
|
DOMPurify.sanitize = function (dirty) {
|
|
164046
164198
|
let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
@@ -164085,7 +164237,10 @@ function createDOMPurify() {
|
|
|
164085
164237
|
throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');
|
|
164086
164238
|
}
|
|
164087
164239
|
}
|
|
164088
|
-
|
|
164240
|
+
/* Sanitize attached shadow roots before the main iterator runs.
|
|
164241
|
+
The iterator does not descend into shadow trees. */
|
|
164242
|
+
_sanitizeAttachedShadowRoots2(dirty);
|
|
164243
|
+
} else if (_isNode(dirty)) {
|
|
164089
164244
|
/* If dirty is a DOM element, append to an empty document to avoid
|
|
164090
164245
|
elements being stripped by the parser */
|
|
164091
164246
|
body = _initDocument('<!---->');
|
|
@@ -164099,6 +164254,10 @@ function createDOMPurify() {
|
|
|
164099
164254
|
// eslint-disable-next-line unicorn/prefer-dom-node-append
|
|
164100
164255
|
body.appendChild(importedNode);
|
|
164101
164256
|
}
|
|
164257
|
+
/* Clonable shadow roots are deep-cloned by importNode(); sanitize
|
|
164258
|
+
them before the main iterator runs, since the iterator does not
|
|
164259
|
+
descend into shadow trees. */
|
|
164260
|
+
_sanitizeAttachedShadowRoots2(importedNode);
|
|
164102
164261
|
} else {
|
|
164103
164262
|
/* Exit directly if we have nothing to do */
|
|
164104
164263
|
if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&
|
|
@@ -164132,17 +164291,15 @@ function createDOMPurify() {
|
|
|
164132
164291
|
}
|
|
164133
164292
|
/* If we sanitized `dirty` in-place, return it. */
|
|
164134
164293
|
if (IN_PLACE) {
|
|
164294
|
+
if (SAFE_FOR_TEMPLATES) {
|
|
164295
|
+
_scrubTemplateExpressions(dirty);
|
|
164296
|
+
}
|
|
164135
164297
|
return dirty;
|
|
164136
164298
|
}
|
|
164137
164299
|
/* Return sanitized string or DOM */
|
|
164138
164300
|
if (RETURN_DOM) {
|
|
164139
164301
|
if (SAFE_FOR_TEMPLATES) {
|
|
164140
|
-
body
|
|
164141
|
-
let html = body.innerHTML;
|
|
164142
|
-
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
164143
|
-
html = stringReplace(html, expr, ' ');
|
|
164144
|
-
});
|
|
164145
|
-
body.innerHTML = html;
|
|
164302
|
+
_scrubTemplateExpressions(body);
|
|
164146
164303
|
}
|
|
164147
164304
|
if (RETURN_DOM_FRAGMENT) {
|
|
164148
164305
|
returnNode = createDocumentFragment.call(body.ownerDocument);
|
|
@@ -164172,7 +164329,7 @@ function createDOMPurify() {
|
|
|
164172
164329
|
}
|
|
164173
164330
|
/* Sanitize final string template-safe */
|
|
164174
164331
|
if (SAFE_FOR_TEMPLATES) {
|
|
164175
|
-
arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {
|
|
164332
|
+
arrayForEach([MUSTACHE_EXPR$1, ERB_EXPR$1, TMPLIT_EXPR$1], expr => {
|
|
164176
164333
|
serializedHTML = stringReplace(serializedHTML, expr, ' ');
|
|
164177
164334
|
});
|
|
164178
164335
|
}
|