@xlcalc/vue 0.21.2 → 0.23.1
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 +31 -0
- package/README.md +7 -2
- package/dist/components/CfDialogs.vue.d.ts +3 -0
- package/dist/components/CfManager.vue.d.ts +3 -0
- package/dist/components/CfPreview.vue.d.ts +9 -0
- package/dist/components/CfQuickDialog.vue.d.ts +3 -0
- package/dist/components/CfRuleDialog.vue.d.ts +3 -0
- package/dist/components/CfStyleDialog.vue.d.ts +15 -0
- package/dist/components/CfValuesFields.vue.d.ts +9 -0
- package/dist/components/DialogShell.vue.d.ts +1 -1
- package/dist/components/FunctionList.vue.d.ts +2 -1
- package/dist/components/GoToDialog.vue.d.ts +3 -0
- package/dist/components/LinkDialog.vue.d.ts +3 -0
- package/dist/components/NameBox.vue.d.ts +3 -0
- package/dist/components/NameDialogs.vue.d.ts +3 -0
- package/dist/components/NoteBox.vue.d.ts +3 -0
- package/dist/components/SheetToolbar.vue.d.ts +7 -4
- package/dist/components/SheetView.vue.d.ts +11 -4
- package/dist/components/SpellingDialog.vue.d.ts +3 -0
- package/dist/components/SymbolDialog.vue.d.ts +3 -0
- package/dist/components/TableDialog.vue.d.ts +3 -0
- package/dist/components/ToolbarBox.vue.d.ts +31 -0
- package/dist/components/TraceArrows.vue.d.ts +3 -0
- package/dist/components/ValidationDialog.vue.d.ts +3 -0
- package/dist/components/WatchWindow.vue.d.ts +3 -0
- package/dist/components/ZoomBar.vue.d.ts +3 -0
- package/dist/components/ZoomDialog.vue.d.ts +3 -0
- package/dist/components/icons.d.ts +1 -0
- package/dist/components/name-icons.d.ts +1 -0
- package/dist/components/toolbar-icons.d.ts +16 -0
- package/dist/contract/conditional.d.ts +16 -0
- package/dist/contract/memory.d.ts +5 -0
- package/dist/contract/messages.d.ts +260 -1
- package/dist/contract/source.d.ts +41 -0
- package/dist/contract/view.d.ts +117 -2
- package/dist/contract/workbook.d.ts +73 -0
- package/dist/contract.d.ts +4 -2
- package/dist/core/autocomplete.d.ts +9 -1
- package/dist/core/autosum.d.ts +11 -0
- package/dist/core/cell-style.d.ts +5 -0
- package/dist/core/cell-view.d.ts +2 -0
- package/dist/core/cf-commands.d.ts +70 -0
- package/dist/core/cf-describe.d.ts +4 -0
- package/dist/core/cf-draft.d.ts +114 -0
- package/dist/core/cf-formula.d.ts +30 -0
- package/dist/core/cf-presets.d.ts +33 -0
- package/dist/core/cf-ranges.d.ts +22 -0
- package/dist/core/commands.d.ts +4 -2
- package/dist/core/editing.d.ts +6 -1
- package/dist/core/extras.d.ts +22 -0
- package/dist/core/fill.d.ts +3 -0
- package/dist/core/formula-view.d.ts +10 -0
- package/dist/core/geometry.d.ts +6 -0
- package/dist/core/goto.d.ts +24 -0
- package/dist/core/links.d.ts +105 -0
- package/dist/core/menu.d.ts +8 -0
- package/dist/core/name-dialogs.d.ts +63 -0
- package/dist/core/names.d.ts +33 -0
- package/dist/core/navigation.d.ts +6 -0
- package/dist/core/notes.d.ts +44 -0
- package/dist/core/place.d.ts +10 -0
- package/dist/core/range-read.d.ts +11 -0
- package/dist/core/sheet.d.ts +337 -4
- package/dist/core/spell-check.d.ts +54 -0
- package/dist/core/state.d.ts +9 -0
- package/dist/core/tables.d.ts +63 -0
- package/dist/core/trace.d.ts +26 -0
- package/dist/core/validation-dialog.d.ts +33 -0
- package/dist/core/validation.d.ts +17 -3
- package/dist/core/viewport.d.ts +12 -0
- package/dist/core/watch.d.ts +35 -0
- package/dist/core/windows.d.ts +2 -0
- package/dist/core/zoom.d.ts +44 -0
- package/dist/format-cells.d.ts +0 -6
- package/dist/formula-shift.d.ts +3 -0
- package/dist/index.js +12033 -4565
- package/dist/local/types.d.ts +4 -1
- package/dist/local/workbook.d.ts +25 -0
- package/dist/local.js +556 -277
- package/dist/memory-workbook.d.ts +21 -0
- package/dist/messages-conditional.d.ts +3 -0
- package/dist/rect.d.ts +2 -0
- package/dist/{ru-RU-BVeg6JGM.js → ru-RU-CzebvM-s.js} +19 -2
- package/dist/spelling.d.ts +6 -0
- package/dist/style.css +1 -1
- package/dist/symbols.d.ts +23 -0
- package/dist/toolbar.d.ts +53 -1
- package/dist/{typed-entry-2l9Ay-hV.js → typed-entry-3r1pEbc9.js} +4546 -4453
- package/dist/validation-rules.d.ts +95 -0
- package/docs/api.md +91 -10
- package/docs/autocomplete.md +3 -3
- package/docs/checks.md +1 -1
- package/docs/clipboard.md +1 -1
- package/docs/conditional-formatting.md +135 -0
- package/docs/editing.md +50 -1
- package/docs/go-to-and-symbol.md +37 -0
- package/docs/links-notes.md +36 -0
- package/docs/local.md +1 -1
- package/docs/names.md +62 -0
- package/docs/tables.md +40 -0
- package/docs/toolbar.md +6 -2
- package/docs/validation.md +47 -0
- package/docs/view.md +104 -1
- package/package.json +2 -2
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EditOutcome } from './contract/source.js';
|
|
2
|
+
import type { MemoryCell } from './contract/memory.js';
|
|
3
|
+
import type { ClearKind, SheetLink, SheetName, SheetNote, SpellChecker, SpellingHit, SpellingRequest } from './contract/workbook.js';
|
|
4
|
+
/** A sheet of the in-memory workbook as these methods change it. */
|
|
5
|
+
export interface MemoryCells {
|
|
6
|
+
cells: Map<string, MemoryCell>;
|
|
7
|
+
}
|
|
8
|
+
/** The in-memory workbook's methods; `measure` updates a sheet's extent after cells are removed. */
|
|
9
|
+
export declare function memoryWorkbook(storeOf: (sheet: string) => MemoryCells | undefined, measure: (store: MemoryCells) => void, initialNames: SheetName[], checker?: SpellChecker): {
|
|
10
|
+
clear: (sheet: string, ranges: string[], what: ClearKind) => EditOutcome;
|
|
11
|
+
link: (sheet: string, range: string, link: SheetLink | null) => EditOutcome;
|
|
12
|
+
note: (sheet: string, cell: string, note: SheetNote | null) => EditOutcome;
|
|
13
|
+
names: () => {
|
|
14
|
+
name: string;
|
|
15
|
+
ref: string;
|
|
16
|
+
scope?: string;
|
|
17
|
+
}[];
|
|
18
|
+
setNames: (list: SheetName[]) => EditOutcome;
|
|
19
|
+
spelling: (req: SpellingRequest) => SpellingHit | null;
|
|
20
|
+
learnWord: (word: string) => void | undefined;
|
|
21
|
+
};
|
package/dist/rect.d.ts
CHANGED
|
@@ -7,3 +7,5 @@ export declare const rectOf: (a: CellPosition, b: CellPosition) => CellRect;
|
|
|
7
7
|
export declare const unionRect: (a: CellRect, b: CellRect) => CellRect;
|
|
8
8
|
/** `v` clamped to `lo`..`hi`. */
|
|
9
9
|
export declare const clamp: (v: number, lo: number, hi: number) => number;
|
|
10
|
+
/** What remains of `a` outside `b`: up to four ranges, the bands above and below `b` and the parts left and right of it between them. */
|
|
11
|
+
export declare function rectMinus(a: CellRect, b: CellRect): CellRect[];
|
|
@@ -609,6 +609,7 @@ var p = {
|
|
|
609
609
|
}, _ = {
|
|
610
610
|
rowOutOfRange: (e) => `Строки ${e.row} нет на листе`,
|
|
611
611
|
columnOutOfRange: (e) => `Столбца ${e.column} нет на листе`,
|
|
612
|
+
numberOutOfRange: (e) => `Число ${e.number} вне допустимого диапазона`,
|
|
612
613
|
spillAfterRange: () => "Знак # ставится только после ссылки на одну ячейку",
|
|
613
614
|
spillAcrossSheets: () => "Знак # ставится только после ссылки на одну ячейку одного листа",
|
|
614
615
|
unterminatedString: () => "Текст не закрыт кавычкой",
|
|
@@ -691,6 +692,7 @@ var p = {
|
|
|
691
692
|
tableOverTable: (e) => `Диапазон ${e.range} пересекается с таблицей ${r(e.table)}`,
|
|
692
693
|
tableOverMerge: (e) => `Диапазон ${e.range} пересекается с объединёнными ячейками ${e.area}`,
|
|
693
694
|
mergeInTable: (e) => `Диапазон ${e.range} пересекается с таблицей ${r(e.table)}, её ячейки нельзя объединить`,
|
|
695
|
+
arrayInTable: (e) => `Формула массива на ${e.area} пересекается с таблицей ${r(e.table)}: в таблицах Excel не допускает формулы массива из нескольких ячеек`,
|
|
694
696
|
headerFormula: (e) => `Ячейка ${e.sheet}!${e.cell} в строке заголовков таблицы ${r(e.table)}: в ней имя столбца, а не формула`,
|
|
695
697
|
validationError: () => "Это значение не соответствует ограничениям по проверке данных, установленным для этой ячейки.",
|
|
696
698
|
explainCells: (e) => `${e.count} ${n(e.count, "ячейка", "ячейки", "ячеек")}`,
|
|
@@ -715,9 +717,11 @@ var p = {
|
|
|
715
717
|
pivotTables: () => "Сводные таблицы не поддерживаются: их ячейки прочитаны с сохранёнными значениями",
|
|
716
718
|
macros: () => "Макросы (проект VBA) не поддерживаются",
|
|
717
719
|
connections: () => "Подключения к данным и запросы не поддерживаются",
|
|
718
|
-
defaultFont: (e, t) => `Шрифт по умолчанию ${e.name ?? "(без названия)"} ${e.size === void 0 ? "(без размера)" : t.num(e.size)}
|
|
720
|
+
defaultFont: (e, t) => `Шрифт по умолчанию ${e.name ?? "(без названия)"} ${e.size === void 0 ? "(без размера)" : t.num(e.size)} сохранён, а измеряется как Calibri 11`,
|
|
719
721
|
sheetKind: () => "Лист диаграммы, диалога или макросов не прочитан",
|
|
720
722
|
sheetPartMissing: () => "Лист не прочитан: его части нет в файле",
|
|
723
|
+
sheetNameRepaired: (e) => `Имя листа ${r(e.name)} Excel не принимает: лист прочитан как ${r(e.sheet)}`,
|
|
724
|
+
stringsOpen: () => "Общие строки без закрывающего тега </si> прочитаны как пустой текст или как часть следующей строки",
|
|
721
725
|
allSheetsHidden: () => "Все листы файла скрыты: первый прочитан как видимый",
|
|
722
726
|
tableNameTwice: (e) => `Таблица ${r(e.table)} не прочитана: её имя занято другой таблицей или именем`,
|
|
723
727
|
sharedWithoutMaster: () => "Общая формула без главной ячейки не прочитана",
|
|
@@ -734,12 +738,21 @@ var p = {
|
|
|
734
738
|
printSettings: () => "Параметры печати (колонтитулы, разрывы страниц, параметры страницы) не поддерживаются",
|
|
735
739
|
defaultWidth: (e, t) => `Стандартная ширина столбцов листа (${t.num(e.width)} в единицах xlsx) не поддерживается: модель берёт стандартную ширину Excel в 8 цифр`,
|
|
736
740
|
errorTyped: () => "Ошибка, введённая в ячейку как значение, прочитана как формула этой ошибки",
|
|
741
|
+
sheetDataOpen: () => "У ячеек листа нет закрывающего тега </sheetData>: они прочитаны до конца части",
|
|
737
742
|
userFunction: () => "Пользовательская функция (макрос или надстройка) не поддерживается",
|
|
738
743
|
tableRefWithoutTable: () => "Ссылка на таблицу без имени таблицы недопустима в файле: формула прочитана как есть, её результатом будет ошибка",
|
|
739
744
|
formulaExternal: () => "Ссылка на другую книгу не из связей файла или такая, которую движок не разбирает: формула прочитана как есть, её результатом будет ошибка",
|
|
740
745
|
letPrefix: (e, t) => `Имя ${t.fn("LET")} без префикса _xlpm. читается как ссылка или логическое значение: формула меняет смысл`,
|
|
741
746
|
formulaUnparsed: () => "Формула, которая не разбирается, прочитана как есть (её результатом будет ошибка)",
|
|
742
747
|
cellOutside: () => "Ячейка за пределами листа (после его последней строки или последнего столбца) не прочитана",
|
|
748
|
+
widthBad: () => "Ширина столбца, которая не является числом от 0, не прочитана",
|
|
749
|
+
heightBad: () => "Высота строки, которая не является числом от 0, не прочитана",
|
|
750
|
+
rowNumberBad: () => "Строка, номер которой не является целым числом, прочитана как следующая за предыдущей",
|
|
751
|
+
styleIndexBad: () => "Индекс стиля, которому нет формата ячейки в файле, прочитан как отсутствие стиля",
|
|
752
|
+
stringIndexBad: () => "Значение, ссылающееся на общую строку, которой нет в файле, не прочитано",
|
|
753
|
+
valueBad: () => "Значение, которое не является числом, или логическое значение не 0 и не 1, не прочитано",
|
|
754
|
+
dateInvalid: () => "Дата файла Strict (ячейка типа d), которая не является правильной датой ISO, не прочитана",
|
|
755
|
+
cellOpen: () => "Элемент ячейки без закрывающего тега: его содержимое и ячейки, которые он захватил, не прочитаны",
|
|
743
756
|
valueMetadata: () => "Метаданные значения ячейки (тип данных, изображение в ячейке) не поддерживаются",
|
|
744
757
|
richText: () => "Форматированный текст прочитан как простой",
|
|
745
758
|
errorUnknown: () => "Сохранённая ошибка, для которой в модели нет кода, прочитана как #ERROR!",
|
|
@@ -750,6 +763,7 @@ var p = {
|
|
|
750
763
|
unknownFormat: () => "Неизвестный встроенный формат числа не прочитан",
|
|
751
764
|
tablePartBad: () => "Таблица без имени или диапазона не прочитана",
|
|
752
765
|
tableLeftOut: (e) => `Таблица ${r(e.table)} не прочитана, модель не может её хранить (${e.reason})`,
|
|
766
|
+
tableStyleCustom: (e) => `Собственный стиль ${r(e.name)} таблицы ${e.table} не поддерживается: таблица прочитана со стилем Excel по умолчанию`,
|
|
753
767
|
headerGiven: (e) => `Ячейка заголовка, в которой нет имени её столбца как текста, прочитана с именем ${r(e.name)}`,
|
|
754
768
|
condRangeOutside: () => "Диапазон условного форматирования за пределами листа не прочитан",
|
|
755
769
|
condStyleLost: (e) => `${o(h(e.part))} в условном форматировании не поддерживается`,
|
|
@@ -787,8 +801,10 @@ var p = {
|
|
|
787
801
|
formulaNoValue: () => "Формула без значения в результате записана без него: Excel вычислит её при открытии файла",
|
|
788
802
|
formulaEmpty: () => "Формула без значения в результате записана как пустая ячейка",
|
|
789
803
|
formulaAsValue: () => "Формула, которую файл не может хранить (она не разбирается или называет лист, таблицу, столбец или связь с другой книгой, которых нет в книге), записана как её значение",
|
|
804
|
+
formulaLeftOut: () => "Формула, которую файл не может хранить (она не разбирается или называет лист, таблицу, столбец или связь с другой книгой, которых нет в книге), без значения, которое можно записать вместо неё, не записана: её ячейка записана пустой",
|
|
790
805
|
tableFormulaOut: (e) => `Формула таблицы ${r(e.table)}, которую файл не может хранить, не записана`,
|
|
791
806
|
cycleZero: () => "Циклическая ссылка (#CYCLE!) записана как 0, как её хранит Excel",
|
|
807
|
+
errorNull: (e, t) => `#ERROR!, ошибка формулы, которая не вычисляется, записана как ${t.value({ error: "NULL" })}: в Excel нет #ERROR!`,
|
|
792
808
|
cellMeta: () => "Поле meta ячейки не записывается в файл",
|
|
793
809
|
textCut: () => "Текст длиннее 32 767 знаков, предела Excel, обрезан",
|
|
794
810
|
noteCut: () => "Примечание длиннее 32 767 знаков, предела Excel, обрезано",
|
|
@@ -796,7 +812,8 @@ var p = {
|
|
|
796
812
|
ruleTextCut: (e) => `${g[e.field][0]} правила проверки данных длиннее ${e.max} ${n(e.max, "знака", "знаков", "знаков")}, предела Excel, ${g[e.field][1]}`,
|
|
797
813
|
ruleFormulaOut: () => "Правило проверки данных с формулой, которую файл не может хранить (она не разбирается или называет лист, таблицу или столбец, которых нет в книге), не записано",
|
|
798
814
|
condFormulaOut: () => "Условное форматирование с формулой, которую файл не может хранить (она не разбирается или называет лист, таблицу или столбец, которых нет в книге), не записано в файл",
|
|
799
|
-
filterModeOut: () => "Режим фильтра листа, у таблиц которого нет строки заголовков, не записан: автофильтр по ячейкам листа задел бы эти таблицы"
|
|
815
|
+
filterModeOut: () => "Режим фильтра листа, у таблиц которого нет строки заголовков, не записан: автофильтр по ячейкам листа задел бы эти таблицы",
|
|
816
|
+
keptCells: (e) => `На листе сдвинулись строки или столбцы, а в ${e.count} ${n(e.count, "ячейке", "ячейках", "ячейках")} листа есть форматированные фрагменты текста или расширенные значения, которых нет в книге, больше, чем отслеживает writeKept: сдвинутые ячейки записаны из книги, без них`
|
|
800
817
|
}, v = {
|
|
801
818
|
tag: "ru-RU",
|
|
802
819
|
...t,
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SpellChecker } from './contract/workbook.js';
|
|
2
|
+
/** The first misspelt word of `text` starting at or after position `from`, skipping the lowercased words in `ignore`; null when there is none. */
|
|
3
|
+
export declare function misspelt(text: string, from: number, checker: SpellChecker, ignore: ReadonlySet<string>): {
|
|
4
|
+
word: string;
|
|
5
|
+
at: number;
|
|
6
|
+
} | null;
|
package/dist/style.css
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
.xs-icon{flex-shrink:0;width:14px;height:14px}.xs-tool{width:24px;height:22px;color:var(--xs-muted);cursor:pointer;background:0 0;border:0;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.xs-tool:hover:not(:disabled),.xs-tool-on{background:var(--xs-head-bg);color:var(--xs-fg)}.xs-tool:disabled{opacity:.4;cursor:default}.xs-button{border:1px solid var(--xs-grid);background:var(--xs-bg);color:var(--xs-fg);font:inherit;cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:5px 12px;display:inline-flex}.xs-button:hover:not(:disabled){background:var(--xs-head-bg)}.xs-button-main{border-color:var(--xs-accent);background:var(--xs-accent);color:var(--xs-on-accent)}.xs-button-main:hover:not(:disabled){background:color-mix(in srgb, var(--xs-accent) 88%, #000)}.xs-button:disabled{opacity:.5;cursor:default}.xs-button:focus-visible{outline:2px solid var(--xs-accent);outline-offset:2px}.xs-field,.xs-address{border:1px solid var(--xs-grid);background:var(--xs-bg);height:26px;color:var(--xs-fg);font:inherit;border-radius:4px;outline:none;padding:0 8px}.xs-field:focus,.xs-address:focus{border-color:var(--xs-accent)}.xs-field-s{height:22px;padding:0 4px}.xs-field-m{height:24px}.xs-field-l{height:28px}.xs-swatches{--xs-swatch:20px;grid-template-columns:repeat(10, var(--xs-swatch));gap:4px;display:grid}.xs-swatch{width:var(--xs-swatch);height:var(--xs-swatch);cursor:pointer;border:1px solid #0000002e;border-radius:3px;padding:0}.xs-swatch[aria-pressed=true]{outline:2px solid var(--xs-accent);outline-offset:1px}.xs-touch .xs-swatches{--xs-swatch:var(--xs-touch-target);grid-template-columns:repeat(5, var(--xs-swatch));gap:6px}.xs-touch .xs-tool{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-touch .xs-tool .xs-icon{width:18px;height:18px}.xs-touch .xs-button{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target);font-size:14px}.xs-touch .xs-field,.xs-touch .xs-address{height:var(--xs-touch-target);font-size:16px}.xs-main{flex:auto;min-height:0;display:flex}.xs-main>.xs-body{min-width:0}.xs-narrow .xs-main{flex-direction:column}.xs-explain{flex:0 0 var(--xs-explain-w,340px);border-left:1px solid var(--xs-grid);background:var(--xs-bg);flex-direction:column;min-width:0;max-width:50%;min-height:0;display:flex}.xs-narrow .xs-explain{flex-basis:var(--xs-explain-h,45%);border-top:1px solid var(--xs-grid);border-left:0;max-width:none}.xs-explain-head{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);flex-shrink:0;align-items:center;gap:6px;padding:3px 4px 3px 10px;display:flex}.xs-explain-title{flex-shrink:0;font-weight:600}.xs-explain-place{min-width:0;color:var(--xs-muted);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.xs-explain-busy{color:var(--xs-muted)}.xs-explain-body{overscroll-behavior:contain;-webkit-user-select:text;user-select:text;flex:auto;min-height:0;padding:6px 0;overflow:auto}.xs-explain-note{color:var(--xs-muted);margin:0;padding:4px 10px}.xs-explain-line{padding:2px 10px 2px calc(10px + var(--xs-explain-depth,0) * 14px);background:repeating-linear-gradient(to right, var(--xs-grid) 0 1px, transparent 1px 14px) no-repeat 14px 0 / calc(var(--xs-explain-depth,0) * 14px) 100%;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.45}.xs-explain-ref{color:var(--xs-link);font:inherit;text-align:left;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xs-explain-ref:hover,.xs-explain-ref:focus-visible{outline:none;text-decoration-style:solid}.xs-explain-from{color:var(--xs-muted)}.xs-touch .xs-explain-line{min-height:var(--xs-touch-target);flex-wrap:wrap;align-items:center;display:flex}.xs-touch .xs-explain-ref{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target);text-align:center}.xs-popover{z-index:var(--xs-z-menu);border:1px solid var(--xs-grid);background:var(--xs-bg);width:280px;color:var(--xs-fg);font-size:var(--xs-font-size);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;gap:6px;padding:8px;display:flex;position:fixed}.xs-popover-full{border:0;border-radius:0;width:auto;padding:12px;font-size:15px;inset:0}.xs-popover-head{align-items:center;gap:4px;display:flex}.xs-popover-title{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:600;overflow:hidden}.xs-popover-input{width:100%}.xs-popover-search{background:var(--xs-head-bg)}.xs-values{border:1px solid var(--xs-grid);border-radius:4px;max-height:320px;overflow-y:auto}.xs-popover-full .xs-values{flex:auto;max-height:none}.xs-values-note{margin:0;padding:6px 8px}.xs-value{cursor:pointer;align-items:center;gap:6px;padding:3px 8px;display:flex}.xs-popover-full .xs-value{padding:8px 10px}.xs-value:hover{background:var(--xs-head-bg)}.xs-value-all{border-bottom:1px solid var(--xs-grid);font-weight:600}.xs-value-text{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.xs-popover-foot{gap:6px;display:flex}.xs-popover-full .xs-popover-foot .xs-button{flex:1 1 0;padding:10px;font-size:15px}.xs-touch .xs-value{min-height:var(--xs-touch-target)}.xs-modal-back{z-index:var(--xs-z-modal);background:var(--xs-backdrop);-webkit-tap-highlight-color:transparent;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.xs-modal-back.xs-modal-alert{z-index:var(--xs-z-alert)}.xs-modal-back *,.xs-modal-back :before,.xs-modal-back :after{box-sizing:border-box}.xs-modal{background:var(--xs-bg);max-height:calc(100vh - 32px);color:var(--xs-fg);font:var(--xs-font-size) var(--xs-font);box-shadow:var(--xs-shadow-modal);border-radius:8px;flex-direction:column;display:flex}.xs-modal:focus{outline:none}.xs-modal p{margin:0}.xs-modal-title{font-weight:600}.xs-narrow .xs-modal-full{padding:0}.xs-narrow .xs-modal-full>.xs-modal{border-radius:0;width:100%;height:100%;max-height:none}.xs-fmt{width:min(600px,100%)}.xs-fmt-head{justify-content:space-between;align-items:center;padding:8px 8px 4px 14px;display:flex}.xs-fmt-title{font-size:14px}.xs-tool.xs-fmt-x{width:26px;height:26px}.xs-fmt-tabs{border-bottom:1px solid var(--xs-grid);flex-wrap:wrap;padding:0 10px;display:flex}.xs-fmt-tab{color:var(--xs-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 10px}.xs-fmt-tab[aria-selected=true]{border-bottom-color:var(--xs-accent);color:var(--xs-fg)}.xs-fmt-body{flex:auto;min-height:320px;padding:12px 14px;overflow:auto}.xs-fmt-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start;gap:12px;display:grid}.xs-fmt-stack{flex-direction:column;gap:12px;min-width:0;display:flex}.xs-fmt-wide{grid-column:1/-1}.xs-fmt-field{flex-direction:column;gap:4px;min-width:0;display:flex}.xs-fmt-label{color:var(--xs-muted)}.xs-fmt-category{color:var(--xs-muted);margin:0}.xs-fmt-category b{color:var(--xs-fg);font-weight:600}.xs-field.xs-fmt-input,.xs-field.xs-fmt-select{width:100%;min-width:0;padding:0 6px}.xs-fmt-input[readonly],.xs-fmt-input:disabled{background:var(--xs-head-bg);color:var(--xs-muted)}.xs-fmt-input[aria-invalid=true]{border-color:var(--xs-error)}.xs-fmt-check,.xs-fmt-choice{cursor:pointer;align-items:center;gap:6px;display:flex}.xs-fmt-choice{border-radius:4px;padding:3px 4px}.xs-fmt-choice:hover{background:var(--xs-head-bg)}.xs-fmt-box{border:1px solid var(--xs-grid);border-radius:6px;flex-direction:column;gap:8px;min-width:0;margin:0;padding:8px 10px 10px;display:flex}.xs-fmt-box legend{color:var(--xs-muted);padding:0 4px}.xs-fmt-list{flex-direction:column;max-height:240px;display:flex;overflow:auto}.xs-fmt-error{color:var(--xs-error);grid-column:1/-1;margin:0;font-size:12px}.xs-fmt-foot{border-top:1px solid var(--xs-grid);justify-content:flex-end;gap:8px;padding:10px 14px;display:flex}.xs-button.xs-fmt-btn{min-width:84px;font-size:inherit;padding:5px 14px}.xs-fmt-colour{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.xs-fmt-none{border:1px solid var(--xs-grid);background:var(--xs-bg);color:var(--xs-fg);font:inherit;cursor:pointer;border-radius:4px;padding:3px 10px}.xs-fmt-none[aria-pressed=true]{outline:2px solid var(--xs-accent);outline-offset:1px}.xs-field.xs-fmt-hex{width:110px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.xs-fmt-lines{grid-template-columns:1fr 1fr;gap:2px;display:grid}.xs-fmt-line{height:22px;color:var(--xs-fg);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;padding:0 6px}.xs-fmt-line svg{width:100%;height:8px;display:block}.xs-fmt-line[aria-checked=true]{border-color:var(--xs-accent);background:var(--xs-sel-tint)}.xs-fmt-presets{flex-wrap:wrap;gap:8px;display:flex}.xs-fmt-preset,.xs-fmt-edge{border:1px solid var(--xs-grid);background:var(--xs-bg);color:var(--xs-fg);font:inherit;cursor:pointer;border-radius:4px;justify-content:center;align-items:center;gap:4px;display:inline-flex}.xs-fmt-preset{flex-direction:column;padding:4px 10px}.xs-fmt-preset .xs-icon,.xs-fmt-edge .xs-icon{width:22px;height:22px}.xs-fmt-edge{width:30px;height:30px;padding:0}.xs-fmt-edge[aria-pressed=true]{border-color:var(--xs-accent);background:var(--xs-sel-tint)}.xs-fmt-preset:disabled,.xs-fmt-edge:disabled{opacity:.35;cursor:default}.xs-fmt-edges{grid-template-columns:auto 1fr;gap:6px;display:grid}.xs-fmt-edge-col{flex-direction:column;grid-area:1/1;justify-content:space-between;gap:4px;display:flex}.xs-fmt-edge-row{grid-area:2/2;justify-content:space-between;gap:4px;display:flex}.xs-fmt-preview{border:1px solid var(--xs-grid);background:var(--xs-bg);border-radius:4px;grid-area:1/2;min-height:110px;padding:10px;display:grid}.xs-fmt-pcell{color:var(--xs-muted);justify-content:center;align-items:center;font-size:11px;display:flex}@media (width<=599px){.xs-modal-back.xs-fmt-back{padding:0}.xs-modal.xs-fmt{border-radius:0;width:100%;height:100%;max-height:none}.xs-fmt-body{min-height:0}}@media (width<=599px),(pointer:coarse){.xs-modal.xs-fmt{font-size:15px}.xs-tool.xs-fmt-x{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fmt-tab{min-height:var(--xs-touch-target);flex:auto}.xs-field.xs-fmt-input,.xs-field.xs-fmt-select{height:var(--xs-touch-target);font-size:16px}.xs-fmt-check,.xs-fmt-choice,.xs-fmt-none,.xs-fmt-line,.xs-fmt-preset,.xs-button.xs-fmt-btn{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target)}.xs-fmt-check input,.xs-fmt-choice input{width:20px;height:20px}.xs-fmt-line svg{height:10px}.xs-fmt-edge{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fmt .xs-swatches{--xs-swatch:var(--xs-touch-target);grid-template-columns:repeat(5, var(--xs-swatch));gap:6px}.xs-fmt-edges .xs-fmt-preview{min-height:150px}}.xs-sheet{--xs-prompt-bg:#ffffe1;--xs-prompt-fg:#1f2328;--xs-prompt-line:#767676;--xs-alert-stop:#d13438;--xs-alert-warning:#ffb900;--xs-alert-information:#0f6cbd}.xs-vd{width:0;height:0;position:absolute;top:0;left:0}.xs-vd-anchor{z-index:3;align-items:flex-end;display:flex;position:absolute}.xs-vd-arrow{border:1px solid var(--xs-freeze-line);background:var(--xs-head-bg);width:17px;height:min(18px,100%);min-height:12px;color:var(--xs-fg);cursor:default;border-radius:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.xs-vd-arrow:hover,.xs-vd-arrow[aria-expanded=true]{border-color:var(--xs-accent);background:var(--xs-head-on-bg)}.xs-vd-arrow svg{width:10px;height:10px}.xs-vd-list{z-index:8}.xs-vd-item{padding:0 4px}.xs-vd-touch .xs-vd-anchor{align-items:center}.xs-vd-touch .xs-vd-arrow{width:var(--xs-touch-target);height:var(--xs-touch-target);flex-shrink:0}.xs-vd-touch .xs-vd-arrow svg{width:16px;height:16px}.xs-vd-touch .xs-vd-list{font-size:15px}.xs-vp{z-index:7;box-sizing:border-box;border:1px solid var(--xs-prompt-line);background:var(--xs-prompt-bg);width:max-content;max-width:260px;color:var(--xs-prompt-fg);font:var(--xs-font-size) / 1.35 var(--xs-font);white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:var(--xs-shadow-pop);pointer-events:none;flex-direction:column;gap:2px;padding:4px 7px 5px;display:flex;position:absolute}.xs-va{width:min(420px,100%)}.xs-modal.xs-va{font:13px / 1.4 var(--xs-font)}.xs-va-title{padding:10px 16px 0;font-size:13px}.xs-va-body{align-items:flex-start;gap:14px;padding:14px 16px 6px;display:flex;overflow:auto}.xs-va-icon{flex-shrink:0;width:32px;height:32px}.xs-va-text{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0;padding-top:6px}.xs-modal .xs-va-text p{margin:0 0 10px}.xs-va-foot{flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:10px 16px 14px;display:flex}.xs-button.xs-va-btn{border-radius:4px;min-width:80px;height:28px;padding:0 14px}.xs-touch .xs-modal.xs-va{font-size:15px}.xs-touch .xs-button.xs-va-btn{height:auto;font-size:inherit;flex:1 1 0}.xs-sheet{--xs-fl-line:#7a7a7a}.xs-popup-list{box-sizing:border-box;border:1px solid var(--xs-fl-line);background:var(--xs-bg);color:var(--xs-fg);font:var(--xs-font-size) / 18px var(--xs-font);text-align:left;box-shadow:var(--xs-shadow-pop);cursor:default;margin:0;padding:0;list-style:none;position:absolute;overflow-y:auto}.xs-popup-item{text-overflow:ellipsis;white-space:nowrap;height:18px;overflow:hidden}.xs-popup-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-popup-list.xs-popup-touch{line-height:var(--xs-touch-target)}.xs-popup-touch .xs-popup-item{height:var(--xs-touch-target);padding:0 12px}.xs-fl{z-index:15}.xs-fl-item{padding:0 6px}.xs-ft{z-index:15;box-sizing:border-box;border:1px solid var(--xs-fl-line);background:var(--xs-bg);width:max-content;color:var(--xs-fg);font:calc(var(--xs-font-size) - 1px) / 18px var(--xs-font);text-align:left;white-space:normal;overflow-wrap:anywhere;box-shadow:var(--xs-shadow-pop);cursor:default;padding:1px 6px;position:absolute}.xs-ft-on{font-weight:700}.xs-ifn{gap:8px;width:min(420px,100%);padding:14px}.xs-ifn>*{flex-shrink:0}.xs-ifn-field{flex-direction:column;gap:4px;display:flex}.xs-ifn .xs-ifn-list{border:1px solid var(--xs-grid);border-radius:4px;flex:0 auto;height:194px;min-height:0;position:relative;overflow-y:auto}.xs-ifn-item{cursor:default;-webkit-user-select:none;user-select:none;align-items:center;height:24px;padding:0 8px;display:flex}.xs-ifn-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-ifn-syntax{overflow-wrap:anywhere;min-height:1.35em;font-weight:600}.xs-ifn-about{min-height:2.7em;color:var(--xs-muted)}.xs-narrow .xs-ifn .xs-ifn-list{flex:1 1 0;height:auto}.xs-touch .xs-ifn{font-size:15px}.xs-touch .xs-ifn-item{height:var(--xs-touch-target);padding:0 12px}.xs-sheet{--xs-outline-w:0px;--xs-outline-h:0px;--xs-outline-bg:var(--xs-bar-bg);--xs-outline-line:#8c8c8c;--xs-outline-tick:5px;--xs-outline-button:13px;--xs-outline-button-bg:var(--xs-bg);--xs-outline-button-fg:#3c4043;--xs-outline-button-border:#9aa0a6}.xs-table th.xs-ol,.xs-table th.xs-ol-levels,.xs-table th.xs-ol-corner{background:var(--xs-outline-bg);border-bottom:0;padding:0}.xs-ol-rows{z-index:2;position:sticky;left:0}.xs-table th.xs-ol-columns{z-index:4;border-right:0;border-bottom:1px solid var(--xs-grid);position:sticky;top:0}.xs-ol-rows.xs-ol-fz,.xs-ol-columns.xs-ol-fz{z-index:5}.xs-table th.xs-ol-corner,.xs-table th.xs-ol-levels{z-index:6;border-bottom:1px solid var(--xs-grid);position:sticky;top:0;left:0}.xs-table th.xs-ol-levels-rows{top:var(--xs-outline-h)}.xs-table th.xs-ol-over-nums{left:var(--xs-outline-w)}.xs-ol-mark{pointer-events:none;position:absolute;inset:0}.xs-ol-mark>span{border:0 solid var(--xs-outline-line);position:absolute}.xs-ol-rows .xs-ol-line{top:0;bottom:0;left:var(--xs-ol-at);border-left-width:1px}.xs-ol-rows .xs-ol-tick{top:0;left:var(--xs-ol-at);width:var(--xs-outline-tick);border-top-width:1px}.xs-ol-rows.xs-ol-before .xs-ol-tick{border-top-width:0;border-bottom-width:1px;top:auto;bottom:0}.xs-ol-rows .xs-ol-end{top:0;left:var(--xs-ol-at);height:calc(50% - (var(--xs-outline-button) + 1px) / 2);border-left-width:1px}.xs-ol-rows.xs-ol-before .xs-ol-end{top:auto;bottom:0}.xs-ol-columns .xs-ol-line{left:0;right:0;top:var(--xs-ol-at);border-top-width:1px}.xs-ol-columns .xs-ol-tick{left:0;top:var(--xs-ol-at);height:var(--xs-outline-tick);border-left-width:1px}.xs-ol-columns.xs-ol-before .xs-ol-tick{border-left-width:0;border-right-width:1px;left:auto;right:0}.xs-ol-columns .xs-ol-end{left:0;top:var(--xs-ol-at);width:calc(50% - (var(--xs-outline-button) + 1px) / 2);border-top-width:1px}.xs-ol-columns.xs-ol-before .xs-ol-end{left:auto;right:0}.xs-ol-btn{width:var(--xs-outline-button);height:var(--xs-outline-button);border:1px solid var(--xs-outline-button-border);background-color:var(--xs-outline-button-bg);color:var(--xs-outline-button-fg);font:600 9px / 1 var(--xs-font);cursor:pointer;pointer-events:auto;background-position:50%;background-repeat:no-repeat;border-radius:2px;justify-content:center;align-items:center;padding:0;display:flex;position:absolute}.xs-ol-btn:hover:not(:disabled){background-color:var(--xs-head-on-bg)}.xs-ol-btn:disabled{cursor:default}.xs-ol-minus{background-image:linear-gradient(var(--xs-outline-button-fg), var(--xs-outline-button-fg));background-size:7px 1px}.xs-ol-plus{background-image:linear-gradient(var(--xs-outline-button-fg), var(--xs-outline-button-fg)), linear-gradient(var(--xs-outline-button-fg), var(--xs-outline-button-fg));background-size:7px 1px,1px 7px}.xs-ol-rows .xs-ol-btn,.xs-ol-levels-rows .xs-ol-btn{top:calc(50% - (var(--xs-outline-button) + 1px) / 2);left:calc(var(--xs-ol-at) - (var(--xs-outline-button) - 1px) / 2)}.xs-ol-columns .xs-ol-btn,.xs-ol-levels-columns .xs-ol-btn{top:calc(var(--xs-ol-at) - (var(--xs-outline-button) - 1px) / 2);left:calc(50% - (var(--xs-outline-button) + 1px) / 2)}.xs-menu{z-index:var(--xs-z-menu);border:1px solid var(--xs-grid);background:var(--xs-bg);min-width:180px;max-width:calc(100vw - 8px);color:var(--xs-fg);font:var(--xs-font-size) var(--xs-font);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;padding:4px 0;display:flex;position:fixed}.xs-menu-caption{color:var(--xs-muted);text-overflow:ellipsis;white-space:nowrap;padding:2px 12px 4px;font-size:11.5px;overflow:hidden}.xs-menu-sep{border-top:1px solid var(--xs-grid);margin:4px 0}.xs-menu-item{min-height:26px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;padding:0 12px;display:flex}.xs-menu>.xs-menu-item{white-space:nowrap}.xs-menu-item:hover:not(:disabled),.xs-menu-item:focus-visible{background:var(--xs-head-on-bg);outline:none}.xs-menu-item:disabled{color:var(--xs-muted);opacity:.6;cursor:default}.xs-dialog{gap:10px;width:min(320px,100%);padding:14px}.xs-dialog-field{flex-direction:column;gap:6px;display:flex}.xs-dialog-error{color:var(--xs-error)}.xs-dialog-list{border:1px solid var(--xs-grid);border-radius:4px;flex-direction:column;max-height:50vh;display:flex;overflow-y:auto}.xs-dialog-choices{flex-direction:column;gap:2px;display:flex}.xs-dialog-choice{cursor:pointer;align-items:center;gap:8px;min-height:26px;display:flex}.xs-dialog-foot{justify-content:flex-end;gap:6px;display:flex}.xs-touch .xs-menu{font-size:15px}.xs-touch .xs-menu-item{min-height:var(--xs-touch-target);padding:0 16px}.xs-touch .xs-dialog{font-size:15px}.xs-touch .xs-dialog-choice{min-height:var(--xs-touch-target)}.xs-sheet,.xs-toolbar,.xs-fmt-back{--xs-bg:#fff;--xs-fg:#1f2328;--xs-muted:#6b7280;--xs-grid:#e1e3e6;--xs-head-bg:#f3f4f6;--xs-head-fg:#5f6368;--xs-head-on-bg:#d3e3fd;--xs-head-on-fg:#0b57d0;--xs-accent:#1a73e8;--xs-sel-tint:#1a73e81f;--xs-link:#1558d6;--xs-note:#dc2626;--xs-flash:#facc15d9;--xs-hit:#facc1573;--xs-freeze-line:#9aa0a6;--xs-border-auto:#000;--xs-table-head-bg:#e8eef8;--xs-table-line:#8faadc;--xs-locked:#8b8f96;--xs-pending:#8b8f96;--xs-error:#b42318;--xs-bar-bg:#fafafa;--xs-message-bg:#1f2328;--xs-message-fg:#fff;--xs-copy-line:#1a73e8;--xs-fill-frame:#5f6368;--xs-on-accent:#fff;--xs-font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--xs-font-size:12.5px;--xs-shadow-pop:0 2px 6px #0003;--xs-shadow-menu:0 6px 20px #0000002e;--xs-shadow-modal:0 10px 30px #00000040;--xs-backdrop:#00000040;--xs-z-menu:40;--xs-z-modal:50;--xs-z-alert:55;--xs-touch-target:44px}.xs-sheet{background:var(--xs-bg);height:100%;min-height:0;color:var(--xs-fg);font-family:var(--xs-font);font-size:var(--xs-font-size);flex-direction:column;display:flex;position:relative}.xs-sheet *,.xs-sheet :before,.xs-sheet :after{box-sizing:border-box}.xs-muted{color:var(--xs-muted)}.xs-bar{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);flex-shrink:0;align-items:flex-start;gap:6px;padding:4px 8px;display:flex}.xs-bar .xs-address{text-align:center;flex-shrink:0;width:96px;height:22px;padding:0 6px;font-size:11.5px;font-weight:500}.xs-fx-line{flex:auto;align-items:flex-start;gap:2px;min-width:0;display:flex}.xs-fx{--xs-fx-lines:1;min-width:0;min-height:22px;font-size:var(--xs-font-size);flex:auto;line-height:1.35;position:relative}.xs-fx-open{--xs-fx-lines:5}.xs-fx-input,.xs-fx-layer{width:100%;height:calc(var(--xs-fx-lines) * 1.35em + 5px);min-height:22px;font:inherit;letter-spacing:normal;text-align:start;white-space:pre-wrap;overflow-wrap:break-word;word-break:normal;border:1px solid #0000;border-radius:3px;margin:0;padding:2px 4px 1px;display:block;overflow:hidden auto}.xs-fx-input{border-color:var(--xs-grid);background:var(--xs-bg);color:#0000;caret-color:var(--xs-fg);resize:none;outline:none}.xs-fx-input::selection{color:#0000}.xs-fx-input:focus{border-color:var(--xs-accent)}.xs-fx-layer{color:var(--xs-fg);pointer-events:none;scrollbar-color:transparent transparent;position:absolute;top:0;left:0}.xs-fx-go{cursor:pointer}.xs-ref-go{text-decoration:underline}.xs-bar-link{max-width:40%;color:var(--xs-link);text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;padding-top:3px;font-size:11.5px;overflow:hidden}.xs-tools{flex-shrink:0;align-items:center;gap:4px;display:flex}.xs-notice{border-bottom:1px solid var(--xs-grid);background:var(--xs-head-bg);color:var(--xs-muted);flex-shrink:0;padding:2px 8px;font-size:11.5px}.xs-find{border-bottom:1px solid var(--xs-grid);background:var(--xs-head-bg);flex-direction:column;flex-shrink:0;gap:4px;padding:4px 8px;display:flex}.xs-find-row{flex-wrap:wrap;align-items:center;gap:4px 6px;display:flex}.xs-find-nav{align-items:center;gap:2px;margin-left:auto;display:inline-flex}.xs-find-toggle:not([aria-expanded=true]) .xs-icon{transform:rotate(-90deg)}.xs-find-more{gap:4px 14px;font-size:12px}.xs-find-opt{white-space:nowrap;cursor:pointer;align-items:center;gap:5px;display:inline-flex}.xs-find-scope{background:var(--xs-sel-tint);white-space:nowrap;border-radius:11px;align-items:center;padding-left:8px;display:inline-flex}.xs-find-input{flex:140px;min-width:0}.xs-find-status{color:var(--xs-muted);white-space:nowrap;flex-shrink:0;font-size:11.5px}.xs-body{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.xs-scroller{overscroll-behavior:contain;outline:none;flex:auto;min-height:0;position:relative;overflow:auto}.xs-empty{color:var(--xs-muted);margin:0;padding:24px}.xs-table{border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:var(--xs-font-size);-webkit-user-select:none;user-select:none;line-height:1.3}.xs-table th,.xs-table td{border-right:1px solid var(--xs-grid);border-bottom:1px solid var(--xs-grid);white-space:nowrap;vertical-align:top;padding:1px 5px}.xs-table th{overflow:hidden}.xs-table .xs-spacer td{border:0;padding:0}.xs-table th.xs-head,.xs-table th.xs-corner{padding:0 5px;line-height:23px}.xs-head,.xs-num,.xs-corner{background:var(--xs-head-bg);color:var(--xs-head-fg);text-align:center;cursor:pointer;font-size:11.5px;font-weight:500}.xs-head.xs-on,.xs-num.xs-on{background:var(--xs-head-on-bg);color:var(--xs-head-on-fg)}.xs-head{top:var(--xs-outline-h);z-index:4;position:sticky}.xs-table th.xs-head{overflow:visible}.xs-head-label{text-overflow:ellipsis;display:block;overflow:hidden}.xs-num{left:var(--xs-outline-w);z-index:2;position:sticky}.xs-corner{top:var(--xs-outline-h);left:var(--xs-outline-w);z-index:6;position:sticky}.xs-fz-row{z-index:3;background-color:var(--xs-bg);position:sticky}.xs-fz-col{z-index:2;background-color:var(--xs-bg);position:sticky}.xs-fz-corner{z-index:5;background-color:var(--xs-bg);position:sticky}.xs-head.xs-fz-col{z-index:5;background-color:var(--xs-head-bg)}.xs-num.xs-fz-corner{left:var(--xs-outline-w);z-index:5;background-color:var(--xs-head-bg)}.xs-head.xs-fz-col.xs-on,.xs-num.xs-fz-corner.xs-on{background-color:var(--xs-head-on-bg)}.xs-table .xs-fz-edge-b{border-bottom-color:var(--xs-freeze-line)}.xs-table .xs-fz-edge-r{border-right-color:var(--xs-freeze-line)}.xs-in{align-items:flex-end;display:flex;overflow:hidden}.xs-in>*{white-space:nowrap;flex:auto;min-width:0}.xs-in.xs-wrap>*{white-space:pre-wrap;overflow-wrap:anywhere}.xs-in.xs-top{align-items:flex-start}.xs-in.xs-mid{align-items:center}.xs-num .xs-in{justify-content:center}.xs-in.xs-iconic{margin-left:-3px}.xs-in>.xs-cf-icon{flex:none;width:1.28em;height:1.28em;margin-right:3px}.xs-cell{background-color:var(--xs-bg)}.xs-thead{background-color:var(--xs-table-head-bg);font-weight:700}.xs-spill .xs-in{position:relative;overflow:visible}.xs-in>.xs-ov{align-items:inherit;pointer-events:none;display:flex;position:absolute;top:0;bottom:0;overflow:hidden}.xs-ov>span{white-space:nowrap}.xs-cell .xs-link{color:var(--xs-link);font:inherit;text-align:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.xs-cell .xs-deadlink{text-decoration-style:dotted;-webkit-text-decoration-color:var(--xs-muted);text-decoration-color:var(--xs-muted);cursor:help}.xs-cell.xs-active{outline:2px solid var(--xs-accent);outline-offset:-2px}.xs-cell.xs-active.xs-locked{outline-color:var(--xs-locked);outline-style:dashed}.xs-cell.xs-pending .xs-in>*{color:var(--xs-pending);font-style:italic}.xs-cell.xs-flash:not(.xs-fz-row,.xs-fz-col,.xs-fz-corner),.xs-cell.xs-hit-now:not(.xs-fz-row,.xs-fz-col,.xs-fz-corner){position:relative}.xs-cell.xs-hit-now:before,.xs-cell.xs-flash:before{content:"";pointer-events:none;background:var(--xs-flash);position:absolute;inset:0}.xs-cell.xs-hit-now:before{animation:.5s ease-in-out infinite alternate xs-pulse}.xs-cell.xs-flash:before{opacity:0;animation:.5s ease-in-out 4 alternate xs-pulse}@keyframes xs-pulse{0%{opacity:.1}to{opacity:1}}.xs-funnel{width:17px;height:17px;color:var(--xs-head-fg);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:3px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.xs-funnel .xs-icon{width:12px;height:12px}.xs-head:hover .xs-funnel,.xs-funnel.xs-on,.xs-funnel.xs-open{opacity:1}.xs-funnel.xs-on{color:var(--xs-accent)}.xs-funnel:hover,.xs-funnel.xs-open{background:var(--xs-head-on-bg)}.xs-head.xs-filtered{color:var(--xs-fg)}.xs-sortmark{margin-left:2px;font-size:10px}.xs-head.xs-sortable{cursor:pointer}.xs-head.xs-sortable:hover{color:var(--xs-fg)}.xs-list-sort{color:var(--xs-accent)}.xs-sorthint{opacity:0}.xs-head.xs-sortable:hover .xs-sorthint{opacity:.6}.xs-drill .xs-in span,.xs-rowlink .xs-in span{color:var(--xs-link);cursor:pointer}.xs-drill .xs-in span{text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xs-drill:hover .xs-in span,.xs-rowlink:hover .xs-in span{text-decoration:underline}.xs-table .xs-total{z-index:4;border-top:1px solid var(--xs-freeze-line);background:var(--xs-head-bg);height:24px;color:var(--xs-fg);text-overflow:ellipsis;padding:0 5px;font-weight:600;line-height:23px;position:sticky;bottom:0;overflow:hidden}.xs-table .xs-total.xs-fz-col,.xs-table .xs-total-bar,.xs-table .xs-total-num{z-index:5}.xs-table .xs-total-bar{left:0}.xs-table .xs-total-num{left:var(--xs-outline-w)}@media (hover:none){.xs-funnel{opacity:.7}}.xs-grip{cursor:col-resize;touch-action:none;width:7px;height:100%;position:absolute;top:0;right:-3px}.xs-grip-row{cursor:row-resize;width:100%;height:7px;top:auto;bottom:-3px;right:0}.xs-grip:hover{background:var(--xs-accent);opacity:.35}.xs-editor{border:2px solid var(--xs-accent);background:var(--xs-bg);color:var(--xs-fg);font:var(--xs-font-size) / 1.3 var(--xs-font);white-space:pre;resize:none;box-shadow:var(--xs-shadow-pop);outline:none;margin:0;padding:1px 5px;position:absolute;overflow:hidden}.xs-editor-idle{opacity:0;pointer-events:none;border:0;width:1px;height:1px;padding:0;top:0;left:0}.xs-ants{pointer-events:none;background-image:linear-gradient(90deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%), linear-gradient(90deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%), linear-gradient(0deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%), linear-gradient(0deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%);background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:8px 2px,8px 2px,2px 8px,2px 8px;animation:.5s linear infinite xs-ants;position:absolute}@keyframes xs-ants{to{background-position:8px 0,-8px 100%,0 -8px,100% 8px}}@media (prefers-reduced-motion:reduce){.xs-ants{animation:none}}.xs-fill-handle{cursor:crosshair;touch-action:none;width:13px;height:13px;position:absolute;transform:translate(-50%,-50%)}.xs-fill-handle:after{content:"";border:1px solid var(--xs-bg);background:var(--xs-accent);width:7px;height:7px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.xs-fill-handle.xs-fill-touch{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fill-handle.xs-fill-touch:after{width:10px;height:10px}.xs-fill-handle.xs-fill-dragging:after{visibility:hidden}.xs-fill-frame{border:2px dashed var(--xs-fill-frame);pointer-events:none;position:absolute}.xs-loading{border:1px solid var(--xs-grid);background:color-mix(in srgb, var(--xs-bg) 92%, transparent);color:var(--xs-muted);pointer-events:none;z-index:8;border-radius:6px;align-items:center;gap:6px;padding:4px 8px;font-size:11.5px;display:inline-flex;position:sticky;bottom:8px;left:8px}.xs-spin{animation:.9s linear infinite xs-spin}@keyframes xs-spin{to{transform:rotate(360deg)}}.xs-wait{z-index:12;background:color-mix(in srgb, var(--xs-bg) 92%, transparent);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:24px;display:flex;position:absolute;inset:0}.xs-wait p{margin:0}.xs-wait-icon{width:22px;height:22px;color:var(--xs-muted)}.xs-wait-title{font-weight:600}.xs-wait-seconds{color:var(--xs-muted);font-variant-numeric:tabular-nums}.xs-bottom{border-top:1px solid var(--xs-grid);background:var(--xs-bar-bg);flex-shrink:0;align-items:center;gap:8px;padding:3px 8px;display:flex}.xs-tabs{scrollbar-width:thin;flex:auto;gap:2px;min-width:0;display:flex;overflow-x:auto}.xs-tab{color:var(--xs-muted);font:12px var(--xs-font);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:5px;flex-shrink:0;padding:4px 10px}.xs-tab:hover{background:var(--xs-head-bg)}.xs-tab-on{background:var(--xs-bg);box-shadow:inset 0 -2px 0 var(--xs-accent);color:var(--xs-fg);font-weight:600}.xs-tab-input{border:1px solid var(--xs-accent);outline:none;min-width:0}.xs-tab,.xs-table th,.xs-fx-held{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.xs-tab-add{align-self:center;margin-left:2px}.xs-filter-status{min-width:0;color:var(--xs-muted);flex-shrink:1;align-items:center;gap:2px;font-size:11.5px;display:flex}.xs-filter-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.xs-stats{min-width:0;color:var(--xs-muted);text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;margin-left:auto;font-size:11.5px;overflow:hidden}.xs-message{z-index:20;background:var(--xs-message-bg);max-width:calc(100% - 24px);color:var(--xs-message-fg);font-size:var(--xs-font-size);box-shadow:var(--xs-shadow-menu);border-radius:6px;align-items:center;gap:8px;padding:6px 6px 6px 12px;display:flex;position:absolute;bottom:40px;left:50%;transform:translate(-50%)}.xs-message .xs-tool{color:inherit}.xs-message .xs-tool:hover{color:inherit;background:#ffffff26}.xs-fallback{color:var(--xs-muted);text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:12px;padding:24px;display:flex}.xs-fallback p{margin:0}.xs-narrow .xs-bar{flex-wrap:wrap;gap:4px;padding:4px 6px}.xs-narrow .xs-bar .xs-address{width:64px}.xs-narrow .xs-fx-line{flex-basis:100%;order:3}.xs-narrow .xs-tools{margin-left:auto}.xs-narrow .xs-bar-link{display:none}.xs-narrow .xs-bottom{flex-wrap:wrap;row-gap:2px}.xs-narrow .xs-tabs{flex:100%}.xs-narrow .xs-stats{max-width:55%}.xs-touch .xs-bar .xs-address{height:var(--xs-touch-target);font-size:16px}.xs-touch .xs-fx{min-height:var(--xs-touch-target);font-size:16px}.xs-touch .xs-fx-input,.xs-touch .xs-fx-layer{height:calc(var(--xs-fx-lines) * 1.35em + 24px);min-height:var(--xs-touch-target);padding:11px 6px}.xs-touch .xs-fx:not(.xs-fx-open) .xs-fx-input,.xs-touch .xs-fx:not(.xs-fx-open) .xs-fx-layer{height:var(--xs-touch-target);padding-block:0;line-height:42px}.xs-touch .xs-bar-link{line-height:var(--xs-touch-target);padding-top:0}.xs-touch .xs-tab{min-height:var(--xs-touch-target);padding:0 14px;font-size:14px}.xs-touch .xs-find-more{font-size:14px}.xs-touch .xs-find-opt{min-height:var(--xs-touch-target)}.xs-touch .xs-find-opt input{width:20px;height:20px}.xs-touch .xs-funnel-tool.xs-tool-on{color:var(--xs-accent)}.xs-toolbar{z-index:30;border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);min-width:0;color:var(--xs-fg);font-family:var(--xs-font);font-size:var(--xs-font-size);-webkit-tap-highlight-color:transparent;flex-shrink:0;align-items:center;padding:3px 8px;display:flex;position:relative}.xs-toolbar *,.xs-toolbar :before,.xs-toolbar :after{box-sizing:border-box}.xs-tb-row{flex-wrap:wrap;align-items:center;gap:2px 0;min-width:0;display:flex}.xs-tb-group{flex-wrap:wrap;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.xs-tb-group+.xs-tb-group,.xs-tb-row+.xs-tb-row>.xs-tb-group:first-child{border-left:1px solid var(--xs-grid)}.xs-tb-row:first-child>.xs-tb-group:first-child{padding-left:0}.xs-tb-split{align-items:center;display:inline-flex;position:relative}.xs-toolbar:not(.xs-touch) .xs-tb-caret{width:14px}.xs-toolbar:not(.xs-touch) .xs-tb-caret .xs-icon{width:10px;height:10px}.xs-tool.xs-tb-wide{gap:1px;width:auto;padding:0 3px}.xs-tb-down{width:10px;height:10px}.xs-tb-select{max-width:140px;font-size:12px}.xs-tb-pop{z-index:1;border:1px solid var(--xs-grid);background:var(--xs-bg);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;gap:4px;padding:6px;display:flex;position:absolute;top:calc(100% + 3px);left:0}.xs-tb-item{min-height:26px;color:var(--xs-fg);font:var(--xs-font-size) var(--xs-font);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:center;gap:8px;padding:3px 8px;display:flex}.xs-tb-item:hover,.xs-tb-item[aria-pressed=true]{background:var(--xs-head-bg)}.xs-toolbar:not(.xs-touch) .xs-swatches{--xs-swatch:18px;gap:3px}.xs-tb-narrow .xs-tb-row{flex-wrap:nowrap;flex:auto}.xs-tb-more{margin-left:auto}.xs-tb-menu{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);box-shadow:var(--xs-shadow-menu);flex-wrap:wrap;gap:6px 0;padding:6px 8px;display:flex;position:absolute;top:100%;left:0;right:0}.xs-tb-menu>.xs-tb-group{border-left:0;padding:0 12px 0 0}.xs-tb-narrow .xs-tb-split{position:static}.xs-tb-narrow .xs-tb-pop{top:calc(100% + 2px);left:8px;right:8px}.xs-touch .xs-tb-select{max-width:none}.xs-touch .xs-tb-item{min-height:var(--xs-touch-target);font-size:15px}.xs-touch .xs-tool.xs-tb-wide{min-width:56px}
|
|
1
|
+
.xs-modal-back{z-index:var(--xs-z-modal);background:var(--xs-backdrop);-webkit-tap-highlight-color:transparent;justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.xs-modal-back.xs-modal-alert{z-index:var(--xs-z-alert)}.xs-modal-back *,.xs-modal-back :before,.xs-modal-back :after{box-sizing:border-box}.xs-modal{background:var(--xs-bg);max-height:calc(100vh - 32px);color:var(--xs-fg);font:var(--xs-font-size) var(--xs-font);box-shadow:var(--xs-shadow-modal);border-radius:8px;flex-direction:column;display:flex}.xs-modal:focus{outline:none}.xs-modal p{margin:0}.xs-modal-title{font-weight:600}.xs-narrow .xs-modal-full{padding:0}.xs-narrow .xs-modal-full>.xs-modal{border-radius:0;width:100%;height:100%;max-height:none}.xs-icon{flex-shrink:0;width:14px;height:14px}.xs-tool{width:24px;height:22px;color:var(--xs-muted);cursor:pointer;background:0 0;border:0;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.xs-tool:hover:not(:disabled),.xs-tool-on{background:var(--xs-head-bg);color:var(--xs-fg)}.xs-tool:disabled{opacity:.4;cursor:default}.xs-button{border:1px solid var(--xs-grid);background:var(--xs-bg);color:var(--xs-fg);font:inherit;cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:5px 12px;display:inline-flex}.xs-button:hover:not(:disabled){background:var(--xs-head-bg)}.xs-button-main{border-color:var(--xs-accent);background:var(--xs-accent);color:var(--xs-on-accent)}.xs-button-main:hover:not(:disabled){background:color-mix(in srgb, var(--xs-accent) 88%, #000)}.xs-button:disabled{opacity:.5;cursor:default}.xs-button:focus-visible{outline:2px solid var(--xs-accent);outline-offset:2px}.xs-field,.xs-address{border:1px solid var(--xs-grid);background:var(--xs-bg);height:26px;color:var(--xs-fg);font:inherit;border-radius:4px;outline:none;padding:0 8px}.xs-field:focus,.xs-address:focus{border-color:var(--xs-accent)}.xs-field-s{height:22px;padding:0 4px}.xs-field-m{height:24px}.xs-field-l{height:28px}.xs-swatches{--xs-swatch:20px;grid-template-columns:repeat(10, var(--xs-swatch));gap:4px;display:grid}.xs-swatch{width:var(--xs-swatch);height:var(--xs-swatch);cursor:pointer;border:1px solid #0000002e;border-radius:3px;padding:0}.xs-swatch[aria-pressed=true]{outline:2px solid var(--xs-accent);outline-offset:1px}.xs-touch .xs-swatches{--xs-swatch:var(--xs-touch-target);grid-template-columns:repeat(5, var(--xs-swatch));gap:6px}.xs-touch .xs-tool{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-touch .xs-tool .xs-icon{width:18px;height:18px}.xs-touch .xs-button{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target);font-size:14px}.xs-touch .xs-field,.xs-touch .xs-address{height:var(--xs-touch-target);font-size:16px}@media (width<=599px){.xs-modal-back.xs-fmt-back{padding:0}.xs-modal.xs-fmt{border-radius:0;width:100%;height:100%;max-height:none}.xs-fmt-body{min-height:0}}@media (width<=599px),(pointer:coarse){.xs-modal.xs-fmt{font-size:15px}.xs-tool.xs-fmt-x{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fmt-tab{min-height:var(--xs-touch-target);flex:auto}.xs-field.xs-fmt-input,.xs-field.xs-fmt-select{height:var(--xs-touch-target);font-size:16px}.xs-fmt-check,.xs-fmt-choice,.xs-fmt-none,.xs-fmt-line,.xs-fmt-preset,.xs-button.xs-fmt-btn{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target)}.xs-fmt-check input,.xs-fmt-choice input{width:20px;height:20px}.xs-fmt-line svg{height:10px}.xs-fmt-edge{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fmt .xs-swatches{--xs-swatch:var(--xs-touch-target);grid-template-columns:repeat(5, var(--xs-swatch));gap:6px}.xs-fmt-edges .xs-fmt-preview{min-height:150px}}.xs-cf-quick{width:min(560px,100%)}.xs-cf-rule{width:min(640px,100%)}.xs-cf-manager{width:min(820px,100%)}.xs-cf-head{padding:10px 14px 4px;font-size:14px}.xs-cf-body{flex-direction:column;flex:auto;gap:8px;min-height:0;padding:8px 14px 12px;display:flex;overflow:auto}.xs-cf-row,.xs-cf-line,.xs-cf-tools,.xs-cf-grid,.xs-cf-icon-row{flex-wrap:wrap;align-items:center;gap:6px 8px;display:flex}.xs-cf-line>span{color:var(--xs-muted)}.xs-field.xs-cf-box,.xs-field.xs-cf-formula{flex:140px;min-width:0}.xs-field.xs-cf-formula{width:100%}.xs-field.xs-cf-rank{width:80px}.xs-field.xs-cf-with{flex:220px;min-width:0}.xs-cf-error{color:var(--xs-error);margin:0;font-size:12px}.xs-cf-foot{border-top:1px solid var(--xs-grid);justify-content:flex-end;gap:8px;padding:10px 14px;display:flex}.xs-button.xs-cf-btn{min-width:84px}.xs-button.xs-cf-clear{margin-right:auto}.xs-cf-types{border:1px solid var(--xs-grid);border-radius:6px;flex-direction:column;flex-shrink:0;display:flex;overflow:hidden}.xs-cf-type{color:var(--xs-fg);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:5px 10px}.xs-cf-type:hover{background:var(--xs-head-bg)}.xs-cf-type[aria-selected=true]{background:var(--xs-head-on-bg);color:var(--xs-head-on-fg)}.xs-cf-desc,.xs-cf-values{border:1px solid var(--xs-grid);border-radius:6px;flex-direction:column;flex-shrink:0;gap:8px;padding:10px;display:flex}.xs-cf-values{border:0;padding:0}.xs-cf-points{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;display:grid}.xs-cf-point{flex-direction:column;gap:6px;min-width:0;display:flex}.xs-cf-point .xs-field{width:100%}.xs-cf-colour{border:1px solid var(--xs-grid);background:var(--xs-bg);cursor:pointer;border-radius:4px;width:48px;height:26px;padding:1px}.xs-cf-caption{color:var(--xs-muted)}.xs-field.xs-cf-icon-value{width:90px}.xs-cf-preview-row{padding-top:4px}.xs-cf-table{border:1px solid var(--xs-grid);border-radius:6px;flex-direction:column;min-height:180px;max-height:340px;display:flex;overflow:auto}.xs-cf-tr{border-bottom:1px solid var(--xs-grid);cursor:default;grid-template-columns:minmax(160px,2fr) minmax(120px,1fr) minmax(140px,1.4fr) 90px;align-items:center;gap:8px;padding:4px 8px;display:grid}.xs-cf-th{background:var(--xs-head-bg);color:var(--xs-head-fg);position:sticky;top:0}.xs-cf-tr[aria-selected=true]{background:var(--xs-head-on-bg)}.xs-cf-desc-text{overflow-wrap:anywhere}.xs-field.xs-cf-applies{width:100%;min-width:0}.xs-field.xs-cf-applies[aria-invalid=true]{border-color:var(--xs-error)}.xs-cf-empty{padding:8px}.xs-narrow .xs-cf-tr{grid-template-columns:1fr 1fr}.xs-narrow .xs-cf-table{flex:auto;max-height:none}.xs-cf-preview{min-width:110px;display:inline-flex}.xs-cf-sample{border:1px solid #0000;align-items:center;gap:2px;min-height:20px;padding:1px 6px;display:inline-flex}.xs-cf-icons .xs-cf-icon,.xs-cf-icon-row .xs-cf-icon{width:16px;height:16px}.xs-cf-band{width:100px;padding:0}.xs-cf-band>span{width:100%;height:16px;display:block}.xs-cf-band>.xs-cf-bar{width:70%}.xs-main{flex:auto;min-height:0;display:flex}.xs-main>.xs-body{min-width:0}.xs-narrow .xs-main{flex-direction:column}.xs-explain{flex:0 0 var(--xs-explain-w,340px);border-left:1px solid var(--xs-grid);background:var(--xs-bg);flex-direction:column;min-width:0;max-width:50%;min-height:0;display:flex}.xs-narrow .xs-explain{flex-basis:var(--xs-explain-h,45%);border-top:1px solid var(--xs-grid);border-left:0;max-width:none}.xs-explain-head{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);flex-shrink:0;align-items:center;gap:6px;padding:3px 4px 3px 10px;display:flex}.xs-explain-title{flex-shrink:0;font-weight:600}.xs-explain-place{min-width:0;color:var(--xs-muted);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.xs-explain-busy{color:var(--xs-muted)}.xs-explain-body{overscroll-behavior:contain;-webkit-user-select:text;user-select:text;flex:auto;min-height:0;padding:6px 0;overflow:auto}.xs-explain-note{color:var(--xs-muted);margin:0;padding:4px 10px}.xs-explain-line{padding:2px 10px 2px calc(10px + var(--xs-explain-depth,0) * 14px);background:repeating-linear-gradient(to right, var(--xs-grid) 0 1px, transparent 1px 14px) no-repeat 14px 0 / calc(var(--xs-explain-depth,0) * 14px) 100%;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.45}.xs-explain-ref{color:var(--xs-link);font:inherit;text-align:left;text-underline-offset:2px;cursor:pointer;background:0 0;border:0;padding:0;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xs-explain-ref:hover,.xs-explain-ref:focus-visible{outline:none;text-decoration-style:solid}.xs-explain-from{color:var(--xs-muted)}.xs-touch .xs-explain-line{min-height:var(--xs-touch-target);flex-wrap:wrap;align-items:center;display:flex}.xs-touch .xs-explain-ref{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target);text-align:center}.xs-popover{z-index:var(--xs-z-menu);border:1px solid var(--xs-grid);background:var(--xs-bg);width:280px;color:var(--xs-fg);font-size:var(--xs-font-size);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;gap:6px;padding:8px;display:flex;position:fixed}.xs-popover-full{border:0;border-radius:0;width:auto;padding:12px;font-size:15px;inset:0}.xs-popover-head{align-items:center;gap:4px;display:flex}.xs-popover-title{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:600;overflow:hidden}.xs-popover-input{width:100%}.xs-popover-search{background:var(--xs-head-bg)}.xs-values{border:1px solid var(--xs-grid);border-radius:4px;max-height:320px;overflow-y:auto}.xs-popover-full .xs-values{flex:auto;max-height:none}.xs-values-note{margin:0;padding:6px 8px}.xs-value{cursor:pointer;align-items:center;gap:6px;padding:3px 8px;display:flex}.xs-popover-full .xs-value{padding:8px 10px}.xs-value:hover{background:var(--xs-head-bg)}.xs-value-all{border-bottom:1px solid var(--xs-grid);font-weight:600}.xs-value-text{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.xs-popover-foot{gap:6px;display:flex}.xs-popover-full .xs-popover-foot .xs-button{flex:1 1 0;padding:10px;font-size:15px}.xs-touch .xs-value{min-height:var(--xs-touch-target)}.xs-goto,.xs-sym{gap:8px;padding:14px}.xs-goto>*,.xs-sym>*,.xs-sym-panel>*{flex-shrink:0}.xs-goto{width:min(320px,100%)}.xs-goto .xs-goto-list{border:1px solid var(--xs-grid);border-radius:4px;flex:0 auto;height:194px;min-height:0;overflow-y:auto}.xs-goto-item{white-space:nowrap;cursor:default;-webkit-user-select:none;user-select:none;align-items:center;height:24px;padding:0 8px;display:flex}.xs-goto-on,.xs-sym-item.xs-sym-on,.xs-sym-cell.xs-sym-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-goto-field,.xs-sym-field{flex-direction:column;gap:4px;display:flex}.xs-sym{width:min(560px,100%)}.xs-sym-tabs{border-bottom:1px solid var(--xs-grid);display:flex}.xs-sym-tab{color:var(--xs-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 10px}.xs-sym-tab[aria-selected=true]{border-bottom-color:var(--xs-accent);color:var(--xs-fg)}.xs-sym-panel{flex-direction:column;flex:0 auto;gap:8px;min-height:0;display:flex}.xs-sym .xs-sym-grid{border:1px solid var(--xs-grid);border-radius:4px;flex:0 auto;height:242px;min-height:0;overflow-y:auto}.xs-sym-grid:focus-visible,.xs-sym-special:focus-visible{outline:2px solid var(--xs-accent);outline-offset:1px}.xs-sym-rows{position:relative}.xs-sym-row{display:grid;position:absolute;left:0;right:0}.xs-sym-cell{border:0;border-right:1px solid var(--xs-grid);border-bottom:1px solid var(--xs-grid);min-width:0;color:inherit;cursor:default;-webkit-user-select:none;user-select:none;background:0 0;justify-content:center;align-items:center;font-family:inherit;font-size:16px;line-height:1;display:flex}.xs-sym-recent{border-top:1px solid var(--xs-grid);border-left:1px solid var(--xs-grid);flex-wrap:wrap;display:flex}.xs-sym-recent .xs-sym-cell{width:30px;height:30px}.xs-sym-recent .xs-sym-cell[aria-pressed=true]{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-sym-code{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.xs-sym-from,.xs-sym-head{color:var(--xs-muted)}.xs-sym .xs-sym-special{border:1px solid var(--xs-grid);border-radius:4px;flex:0 auto;height:262px;min-height:0;overflow-y:auto}.xs-sym-item{cursor:default;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;height:26px;padding:0 8px;display:flex}.xs-sym-char{text-align:center;width:24px;font-size:15px}.xs-narrow .xs-goto .xs-goto-list,.xs-narrow .xs-sym .xs-sym-panel,.xs-narrow .xs-sym .xs-sym-grid,.xs-narrow .xs-sym .xs-sym-special{flex:1 1 0;height:auto}.xs-touch .xs-goto,.xs-touch .xs-sym{font-size:15px}.xs-touch .xs-goto-item,.xs-touch .xs-sym-item{height:var(--xs-touch-target);padding:0 12px}.xs-touch .xs-sym-tab{min-height:var(--xs-touch-target);flex:auto}.xs-touch .xs-sym .xs-sym-grid{height:222px}.xs-touch .xs-sym-cell{font-size:20px}.xs-touch .xs-sym-recent .xs-sym-cell{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-link{gap:10px;width:min(480px,100%);padding:14px}.xs-link-field{flex-direction:column;gap:4px;display:flex}.xs-link-field input:disabled{color:var(--xs-muted)}.xs-link-to{flex-wrap:wrap;align-items:center;gap:4px 14px;display:flex}.xs-link-choice{cursor:pointer;align-items:center;gap:6px;min-height:26px;display:flex}.xs-link-places{border:1px solid var(--xs-grid);border-radius:4px;flex-direction:column;height:150px;display:flex;overflow-y:auto}.xs-link-group{color:var(--xs-muted);padding:4px 8px 2px;font-weight:600}.xs-link-place{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:3px 8px 3px 20px}.xs-link-place:hover{background:var(--xs-sel-tint)}.xs-link-place.xs-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-link-error{color:var(--xs-error)}.xs-link-foot{justify-content:flex-end;gap:6px;display:flex}.xs-link-remove{margin-right:auto}.xs-narrow .xs-link-places{flex:1;min-height:120px}.xs-touch .xs-link{font-size:15px}.xs-touch .xs-link-choice,.xs-touch .xs-link-place{min-height:var(--xs-touch-target)}.xs-note-box{z-index:8;border:1px solid var(--xs-prompt-line);background:var(--xs-prompt-bg);width:180px;min-width:100px;height:100px;min-height:60px;color:var(--xs-prompt-fg);box-shadow:var(--xs-shadow-pop);resize:both;font:var(--xs-font-size) / 1.3 var(--xs-font);flex-direction:column;padding:3px 5px;display:flex;position:absolute;overflow:hidden}.xs-note-author{white-space:nowrap;text-overflow:ellipsis;font-weight:700;overflow:hidden}.xs-note-text{min-height:0;color:inherit;font:inherit;resize:none;background:0 0;border:0;outline:none;flex:1;margin:0;padding:0}.xs-sheet{--xs-prompt-bg:#ffffe1;--xs-prompt-fg:#1f2328;--xs-prompt-line:#767676;--xs-alert-stop:#d13438;--xs-alert-warning:#ffb900;--xs-alert-information:#0f6cbd}.xs-vd{width:0;height:0;position:absolute;top:0;left:0}.xs-vd-anchor{z-index:3;align-items:flex-end;display:flex;position:absolute}.xs-vd-arrow{border:1px solid var(--xs-freeze-line);background:var(--xs-head-bg);width:17px;height:min(18px,100%);min-height:12px;color:var(--xs-fg);cursor:default;border-radius:0;justify-content:center;align-items:center;padding:0;display:inline-flex}.xs-vd-arrow:hover,.xs-vd-arrow[aria-expanded=true]{border-color:var(--xs-accent);background:var(--xs-head-on-bg)}.xs-vd-arrow svg{width:10px;height:10px}.xs-vd-list{z-index:8}.xs-vd-item{padding:0 4px}.xs-vd-touch .xs-vd-anchor{align-items:center}.xs-vd-touch .xs-vd-arrow{width:var(--xs-touch-target);height:var(--xs-touch-target);flex-shrink:0}.xs-vd-touch .xs-vd-arrow svg{width:16px;height:16px}.xs-vd-touch .xs-vd-list{font-size:15px}.xs-vp{z-index:7;box-sizing:border-box;border:1px solid var(--xs-prompt-line);background:var(--xs-prompt-bg);width:max-content;max-width:260px;color:var(--xs-prompt-fg);font:var(--xs-font-size) / 1.35 var(--xs-font);white-space:pre-wrap;overflow-wrap:anywhere;box-shadow:var(--xs-shadow-pop);pointer-events:none;flex-direction:column;gap:2px;padding:4px 7px 5px;display:flex;position:absolute}.xs-va{width:min(420px,100%)}.xs-modal.xs-va{font:13px / 1.4 var(--xs-font)}.xs-va-title{padding:10px 16px 0;font-size:13px}.xs-va-body{align-items:flex-start;gap:14px;padding:14px 16px 6px;display:flex;overflow:auto}.xs-va-icon{flex-shrink:0;width:32px;height:32px}.xs-va-text{white-space:pre-wrap;overflow-wrap:anywhere;min-width:0;padding-top:6px}.xs-modal .xs-va-text p{margin:0 0 10px}.xs-va-foot{flex-wrap:wrap;justify-content:flex-end;gap:8px;padding:10px 16px 14px;display:flex}.xs-button.xs-va-btn{border-radius:4px;min-width:80px;height:28px;padding:0 14px}.xs-touch .xs-modal.xs-va{font-size:15px}.xs-touch .xs-button.xs-va-btn{height:auto;font-size:inherit;flex:1 1 0}.xs-zoom-bar{flex-shrink:0;align-items:center;gap:2px;margin-left:auto;display:inline-flex}.xs-stats+.xs-zoom-bar{margin-left:8px}.xs-zoom-slider{width:100px;accent-color:var(--xs-muted);cursor:pointer;margin:0 2px}.xs-zoom-level{min-width:42px;color:var(--xs-muted);font:11.5px var(--xs-font);font-variant-numeric:tabular-nums;text-align:right;cursor:pointer;background:0 0;border:0;border-radius:4px;padding:2px 4px}.xs-zoom-level:hover{background:var(--xs-head-bg);color:var(--xs-fg)}.xs-watch{z-index:15;width:min(var(--xs-watch-w,560px), calc(100% - 16px));height:min(var(--xs-watch-h,200px), calc(100% - 44px));resize:both;border:1px solid var(--xs-grid);background:var(--xs-bg);min-width:240px;max-width:calc(100% - 8px);min-height:120px;max-height:calc(100% - 8px);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;display:flex;position:absolute;top:36px;right:16px;overflow:hidden}.xs-narrow .xs-watch{width:calc(100% - 16px);height:min(var(--xs-watch-h,200px), 45%);top:auto;bottom:56px;right:8px}.xs-watch-head{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);cursor:move;touch-action:none;-webkit-user-select:none;user-select:none;flex-shrink:0;align-items:center;gap:6px;padding:3px 4px 3px 10px;display:flex}.xs-watch-title{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;font-weight:600;overflow:hidden}.xs-watch-tools{flex-wrap:wrap;flex-shrink:0;gap:6px;padding:6px 8px;display:flex}.xs-watch-body{overscroll-behavior:contain;border-top:1px solid var(--xs-grid);outline:none;flex:auto;min-height:0;overflow:auto}.xs-watch-body:focus-visible{box-shadow:inset 0 0 0 2px var(--xs-accent)}.xs-watch-table{border-collapse:collapse;table-layout:auto;width:100%;font-size:var(--xs-font-size)}.xs-watch-table th,.xs-watch-table td{border-right:1px solid var(--xs-grid);text-align:left;text-overflow:ellipsis;white-space:nowrap;max-width:220px;padding:2px 8px;overflow:hidden}.xs-watch-table th{background:var(--xs-head-bg);color:var(--xs-head-fg);font-weight:500;position:sticky;top:0}.xs-watch-table tbody tr{cursor:default;-webkit-user-select:none;user-select:none}.xs-watch-table tbody tr:hover{background:var(--xs-head-bg)}.xs-watch-table tbody tr.xs-on{background:var(--xs-head-on-bg);color:var(--xs-head-on-fg)}.xs-touch .xs-watch-table td{padding-block:10px}.xs-fmt{width:min(600px,100%)}.xs-fmt-head{justify-content:space-between;align-items:center;padding:8px 8px 4px 14px;display:flex}.xs-fmt-title{font-size:14px}.xs-tool.xs-fmt-x{width:26px;height:26px}.xs-fmt-tabs{border-bottom:1px solid var(--xs-grid);flex-wrap:wrap;padding:0 10px;display:flex}.xs-fmt-tab{color:var(--xs-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;padding:6px 10px}.xs-fmt-tab[aria-selected=true]{border-bottom-color:var(--xs-accent);color:var(--xs-fg)}.xs-fmt-body{flex:auto;min-height:320px;padding:12px 14px;overflow:auto}.xs-fmt-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));align-items:start;gap:12px;display:grid}.xs-fmt-stack{flex-direction:column;gap:12px;min-width:0;display:flex}.xs-fmt-wide{grid-column:1/-1}.xs-fmt-field{flex-direction:column;gap:4px;min-width:0;display:flex}.xs-fmt-label{color:var(--xs-muted)}.xs-fmt-category{color:var(--xs-muted);margin:0}.xs-fmt-category b{color:var(--xs-fg);font-weight:600}.xs-field.xs-fmt-input,.xs-field.xs-fmt-select{width:100%;min-width:0;padding:0 6px}.xs-fmt-input[readonly],.xs-fmt-input:disabled{background:var(--xs-head-bg);color:var(--xs-muted)}.xs-fmt-input[aria-invalid=true]{border-color:var(--xs-error)}.xs-fmt-check,.xs-fmt-choice{cursor:pointer;align-items:center;gap:6px;display:flex}.xs-fmt-choice{border-radius:4px;padding:3px 4px}.xs-fmt-choice:hover{background:var(--xs-head-bg)}.xs-fmt-box{border:1px solid var(--xs-grid);border-radius:6px;flex-direction:column;gap:8px;min-width:0;margin:0;padding:8px 10px 10px;display:flex}.xs-fmt-box legend{color:var(--xs-muted);padding:0 4px}.xs-fmt-list{flex-direction:column;max-height:240px;display:flex;overflow:auto}.xs-fmt-error{color:var(--xs-error);grid-column:1/-1;margin:0;font-size:12px}.xs-fmt-foot{border-top:1px solid var(--xs-grid);justify-content:flex-end;gap:8px;padding:10px 14px;display:flex}.xs-button.xs-fmt-btn{min-width:84px;font-size:inherit;padding:5px 14px}.xs-fmt-colour{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.xs-fmt-none{border:1px solid var(--xs-grid);background:var(--xs-bg);color:var(--xs-fg);font:inherit;cursor:pointer;border-radius:4px;padding:3px 10px}.xs-fmt-none[aria-pressed=true]{outline:2px solid var(--xs-accent);outline-offset:1px}.xs-field.xs-fmt-hex{width:110px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.xs-fmt-lines{grid-template-columns:1fr 1fr;gap:2px;display:grid}.xs-fmt-line{height:22px;color:var(--xs-fg);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;padding:0 6px}.xs-fmt-line svg{width:100%;height:8px;display:block}.xs-fmt-line[aria-checked=true]{border-color:var(--xs-accent);background:var(--xs-sel-tint)}.xs-fmt-presets{flex-wrap:wrap;gap:8px;display:flex}.xs-fmt-preset,.xs-fmt-edge{border:1px solid var(--xs-grid);background:var(--xs-bg);color:var(--xs-fg);font:inherit;cursor:pointer;border-radius:4px;justify-content:center;align-items:center;gap:4px;display:inline-flex}.xs-fmt-preset{flex-direction:column;padding:4px 10px}.xs-fmt-preset .xs-icon,.xs-fmt-edge .xs-icon{width:22px;height:22px}.xs-fmt-edge{width:30px;height:30px;padding:0}.xs-fmt-edge[aria-pressed=true]{border-color:var(--xs-accent);background:var(--xs-sel-tint)}.xs-fmt-preset:disabled,.xs-fmt-edge:disabled{opacity:.35;cursor:default}.xs-fmt-edges{grid-template-columns:auto 1fr;gap:6px;display:grid}.xs-fmt-edge-col{flex-direction:column;grid-area:1/1;justify-content:space-between;gap:4px;display:flex}.xs-fmt-edge-row{grid-area:2/2;justify-content:space-between;gap:4px;display:flex}.xs-fmt-preview{border:1px solid var(--xs-grid);background:var(--xs-bg);border-radius:4px;grid-area:1/2;min-height:110px;padding:10px;display:grid}.xs-fmt-pcell{color:var(--xs-muted);justify-content:center;align-items:center;font-size:11px;display:flex}@media (width<=599px){.xs-modal-back.xs-fmt-back{padding:0}.xs-modal.xs-fmt{border-radius:0;width:100%;height:100%;max-height:none}.xs-fmt-body{min-height:0}}@media (width<=599px),(pointer:coarse){.xs-modal.xs-fmt{font-size:15px}.xs-tool.xs-fmt-x{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fmt-tab{min-height:var(--xs-touch-target);flex:auto}.xs-field.xs-fmt-input,.xs-field.xs-fmt-select{height:var(--xs-touch-target);font-size:16px}.xs-fmt-check,.xs-fmt-choice,.xs-fmt-none,.xs-fmt-line,.xs-fmt-preset,.xs-button.xs-fmt-btn{min-width:var(--xs-touch-target);min-height:var(--xs-touch-target)}.xs-fmt-check input,.xs-fmt-choice input{width:20px;height:20px}.xs-fmt-line svg{height:10px}.xs-fmt-edge{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fmt .xs-swatches{--xs-swatch:var(--xs-touch-target);grid-template-columns:repeat(5, var(--xs-swatch));gap:6px}.xs-fmt-edges .xs-fmt-preview{min-height:150px}}.xs-dv-check{align-self:end;min-height:26px}.xs-dv-lead{color:var(--xs-muted)}.xs-field.xs-dv-text{resize:vertical;width:100%;height:auto;min-height:96px;padding:4px 6px}.xs-dv-error{margin-top:12px}.xs-button.xs-dv-clear{margin-right:auto}.xs-touch .xs-dv-check{min-height:44px}.xs-sheet{--xs-fl-line:#7a7a7a}.xs-popup-list{box-sizing:border-box;border:1px solid var(--xs-fl-line);background:var(--xs-bg);color:var(--xs-fg);font:var(--xs-font-size) / 18px var(--xs-font);text-align:left;box-shadow:var(--xs-shadow-pop);cursor:default;margin:0;padding:0;list-style:none;position:absolute;overflow-y:auto}.xs-popup-item{text-overflow:ellipsis;white-space:nowrap;height:18px;overflow:hidden}.xs-popup-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-popup-list.xs-popup-touch{line-height:var(--xs-touch-target)}.xs-popup-touch .xs-popup-item{height:var(--xs-touch-target);padding:0 12px}.xs-fl{z-index:15}.xs-fl-item{padding:0 6px}.xs-fl-icon{vertical-align:-2px;opacity:.7;width:12px;height:12px;margin-right:4px}.xs-ft{z-index:15;box-sizing:border-box;border:1px solid var(--xs-fl-line);background:var(--xs-bg);width:max-content;color:var(--xs-fg);font:calc(var(--xs-font-size) - 1px) / 18px var(--xs-font);text-align:left;white-space:normal;overflow-wrap:anywhere;box-shadow:var(--xs-shadow-pop);cursor:default;padding:1px 6px;position:absolute}.xs-ft-on{font-weight:700}.xs-ifn{gap:8px;width:min(420px,100%);padding:14px}.xs-ifn>*{flex-shrink:0}.xs-ifn-field{flex-direction:column;gap:4px;display:flex}.xs-ifn .xs-ifn-list{border:1px solid var(--xs-grid);border-radius:4px;flex:0 auto;height:194px;min-height:0;position:relative;overflow-y:auto}.xs-ifn-item{cursor:default;-webkit-user-select:none;user-select:none;align-items:center;height:24px;padding:0 8px;display:flex}.xs-ifn-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-ifn-syntax{overflow-wrap:anywhere;min-height:1.35em;font-weight:600}.xs-ifn-about{min-height:2.7em;color:var(--xs-muted)}.xs-narrow .xs-ifn .xs-ifn-list{flex:1 1 0;height:auto}.xs-touch .xs-ifn{font-size:15px}.xs-touch .xs-ifn-item{height:var(--xs-touch-target);padding:0 12px}.xs-namebox{flex-shrink:0;align-items:flex-start;display:flex;position:relative}.xs-namebox-arrow{width:16px}.xs-namebox-list{z-index:var(--xs-z-menu);width:max-content;min-width:100%;max-width:320px;top:calc(100% + 1px);left:0}.xs-namebox-item{padding:0 6px}.xs-nd{width:min(400px,100%)}.xs-nd .xs-dialog-field>.xs-field{width:100%}.xs-nm{width:min(640px,100%)}.xs-nm-tools{gap:6px;display:flex}.xs-nm-list{border:1px solid var(--xs-grid);border-radius:4px;outline:none;flex-direction:column;min-height:160px;max-height:50vh;display:flex;overflow:auto}.xs-nm-list:focus-visible{border-color:var(--xs-accent)}.xs-nm-row{cursor:default;flex-shrink:0;grid-template-columns:minmax(0,1fr) minmax(0,1.6fr) minmax(0,.8fr);gap:8px;padding:2px 8px;display:grid}.xs-nm-row>span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.xs-nm-head{border-bottom:1px solid var(--xs-grid);background:var(--xs-head-bg);font-weight:600;position:sticky;top:0}.xs-nm-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-nm-ref{align-items:center;gap:4px;display:flex}.xs-nm-ref>.xs-field{flex:auto;min-width:0}.xs-touch .xs-nm-row{min-height:var(--xs-touch-target);align-items:center}.xs-sheet{--xs-outline-w:0px;--xs-outline-h:0px;--xs-outline-bg:var(--xs-bar-bg);--xs-outline-line:#8c8c8c;--xs-outline-tick:5px;--xs-outline-button:13px;--xs-outline-button-bg:var(--xs-bg);--xs-outline-button-fg:#3c4043;--xs-outline-button-border:#9aa0a6}.xs-table th.xs-ol,.xs-table th.xs-ol-levels,.xs-table th.xs-ol-corner{background:var(--xs-outline-bg);border-bottom:0;padding:0}.xs-ol-rows{z-index:2;position:sticky;left:0}.xs-table th.xs-ol-columns{z-index:4;border-right:0;border-bottom:var(--xs-line,1px) solid var(--xs-grid);position:sticky;top:0}.xs-ol-rows.xs-ol-fz,.xs-ol-columns.xs-ol-fz{z-index:5}.xs-table th.xs-ol-corner,.xs-table th.xs-ol-levels{z-index:6;border-bottom:var(--xs-line,1px) solid var(--xs-grid);position:sticky;top:0;left:0}.xs-table th.xs-ol-levels-rows{top:var(--xs-outline-h)}.xs-table th.xs-ol-over-nums{left:var(--xs-outline-w)}.xs-ol-mark{pointer-events:none;position:absolute;inset:0}.xs-ol-mark>span{border:0 solid var(--xs-outline-line);position:absolute}.xs-ol-rows .xs-ol-line{top:0;bottom:0;left:var(--xs-ol-at);border-left-width:1px}.xs-ol-rows .xs-ol-tick{top:0;left:var(--xs-ol-at);width:var(--xs-outline-tick);border-top-width:1px}.xs-ol-rows.xs-ol-before .xs-ol-tick{border-top-width:0;border-bottom-width:1px;top:auto;bottom:0}.xs-ol-rows .xs-ol-end{top:0;left:var(--xs-ol-at);height:calc(50% - (var(--xs-outline-button) + 1px) / 2);border-left-width:1px}.xs-ol-rows.xs-ol-before .xs-ol-end{top:auto;bottom:0}.xs-ol-columns .xs-ol-line{left:0;right:0;top:var(--xs-ol-at);border-top-width:1px}.xs-ol-columns .xs-ol-tick{left:0;top:var(--xs-ol-at);height:var(--xs-outline-tick);border-left-width:1px}.xs-ol-columns.xs-ol-before .xs-ol-tick{border-left-width:0;border-right-width:1px;left:auto;right:0}.xs-ol-columns .xs-ol-end{left:0;top:var(--xs-ol-at);width:calc(50% - (var(--xs-outline-button) + 1px) / 2);border-top-width:1px}.xs-ol-columns.xs-ol-before .xs-ol-end{left:auto;right:0}.xs-ol-btn{width:var(--xs-outline-button);height:var(--xs-outline-button);border:1px solid var(--xs-outline-button-border);background-color:var(--xs-outline-button-bg);color:var(--xs-outline-button-fg);font:600 9px / 1 var(--xs-font);cursor:pointer;pointer-events:auto;background-position:50%;background-repeat:no-repeat;border-radius:2px;justify-content:center;align-items:center;padding:0;display:flex;position:absolute}.xs-ol-btn:hover:not(:disabled){background-color:var(--xs-head-on-bg)}.xs-ol-btn:disabled{cursor:default}.xs-ol-minus{background-image:linear-gradient(var(--xs-outline-button-fg), var(--xs-outline-button-fg));background-size:7px 1px}.xs-ol-plus{background-image:linear-gradient(var(--xs-outline-button-fg), var(--xs-outline-button-fg)), linear-gradient(var(--xs-outline-button-fg), var(--xs-outline-button-fg));background-size:7px 1px,1px 7px}.xs-ol-rows .xs-ol-btn,.xs-ol-levels-rows .xs-ol-btn{top:calc(50% - (var(--xs-outline-button) + 1px) / 2);left:calc(var(--xs-ol-at) - (var(--xs-outline-button) - 1px) / 2)}.xs-ol-columns .xs-ol-btn,.xs-ol-levels-columns .xs-ol-btn{top:calc(var(--xs-ol-at) - (var(--xs-outline-button) - 1px) / 2);left:calc(50% - (var(--xs-outline-button) + 1px) / 2)}.xs-trace{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.xs-trace line{stroke-width:1.5px}.xs-trace-cell{stroke:var(--xs-trace);fill:var(--xs-trace)}.xs-trace-error{stroke:var(--xs-trace-error);fill:var(--xs-trace-error)}.xs-trace-sheet{stroke:var(--xs-trace-sheet);fill:var(--xs-trace-sheet)}.xs-trace-sheet line{stroke-dasharray:4 3}.xs-trace-icon rect{fill:var(--xs-bg)}.xs-trace-icon path{fill:none;stroke-width:1px}.xs-menu{z-index:var(--xs-z-menu);border:1px solid var(--xs-grid);background:var(--xs-bg);min-width:180px;max-width:calc(100vw - 8px);color:var(--xs-fg);font:var(--xs-font-size) var(--xs-font);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;padding:4px 0;display:flex;position:fixed}.xs-menu-caption{color:var(--xs-muted);text-overflow:ellipsis;white-space:nowrap;padding:2px 12px 4px;font-size:11.5px;overflow:hidden}.xs-menu-sep{border-top:1px solid var(--xs-grid);margin:4px 0}.xs-menu-item{min-height:26px;color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;padding:0 12px;display:flex}.xs-menu>.xs-menu-item{white-space:nowrap}.xs-menu-item:hover:not(:disabled),.xs-menu-item:focus-visible{background:var(--xs-head-on-bg);outline:none}.xs-menu-item:disabled{color:var(--xs-muted);opacity:.6;cursor:default}.xs-dialog{gap:10px;width:min(320px,100%);padding:14px}.xs-dialog-field{flex-direction:column;gap:6px;display:flex}.xs-dialog-error{color:var(--xs-error)}.xs-dialog-list{border:1px solid var(--xs-grid);border-radius:4px;flex-direction:column;max-height:50vh;display:flex;overflow-y:auto}.xs-dialog-choices{flex-direction:column;gap:2px;display:flex}.xs-dialog-choice{cursor:pointer;align-items:center;gap:8px;min-height:26px;display:flex}.xs-dialog-foot{justify-content:flex-end;gap:6px;display:flex}.xs-touch .xs-menu{font-size:15px}.xs-touch .xs-menu-item{min-height:var(--xs-touch-target);padding:0 16px}.xs-touch .xs-dialog{font-size:15px}.xs-touch .xs-dialog-choice{min-height:var(--xs-touch-target)}.xs-spell{gap:10px;width:min(520px,100vw - 32px);padding:14px}.xs-spell-body{gap:12px;display:flex}.xs-spell-boxes{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.xs-spell-label{color:var(--xs-muted);font-size:12px}.xs-spell-text{border:1px solid var(--xs-grid);white-space:pre-wrap;overflow-wrap:anywhere;border-radius:4px;min-height:48px;max-height:96px;margin:0 0 6px;padding:6px 8px;overflow:auto}.xs-spell-word{color:var(--xs-note);-webkit-text-decoration:underline wavy var(--xs-note);text-decoration:underline wavy var(--xs-note);background:0 0;font-weight:600}.xs-spell-list{border:1px solid var(--xs-grid);border-radius:4px;height:120px;margin:0;overflow:auto}.xs-spell-list:focus-visible{outline:2px solid var(--xs-accent);outline-offset:-1px}.xs-spell-option{cursor:pointer;padding:3px 8px}.xs-spell-option.xs-on{background:var(--xs-accent);color:var(--xs-on-accent)}.xs-spell-none{color:var(--xs-muted);padding:3px 8px}.xs-spell-buttons{flex-direction:column;gap:6px;padding-top:20px;display:flex}.xs-spell-gap{margin-top:10px}.xs-narrow .xs-spell-body,.xs-touch .xs-spell-body{flex-direction:column}.xs-narrow .xs-spell-buttons,.xs-touch .xs-spell-buttons{flex-flow:wrap;padding-top:0}.xs-narrow .xs-spell-gap,.xs-touch .xs-spell-gap{margin-top:0}.xs-sheet,.xs-toolbar,.xs-fmt-back{--xs-bg:#fff;--xs-fg:#1f2328;--xs-muted:#6b7280;--xs-grid:#e1e3e6;--xs-head-bg:#f3f4f6;--xs-head-fg:#5f6368;--xs-head-on-bg:#d3e3fd;--xs-head-on-fg:#0b57d0;--xs-accent:#1a73e8;--xs-sel-tint:#1a73e81f;--xs-link:#1558d6;--xs-note:#dc2626;--xs-flash:#facc15d9;--xs-hit:#facc1573;--xs-freeze-line:#9aa0a6;--xs-border-auto:#000;--xs-table-head-bg:#e8eef8;--xs-table-line:#8faadc;--xs-locked:#8b8f96;--xs-pending:#8b8f96;--xs-error:#b42318;--xs-bar-bg:#fafafa;--xs-message-bg:#1f2328;--xs-message-fg:#fff;--xs-copy-line:#1a73e8;--xs-fill-frame:#5f6368;--xs-trace:#1d4ed8;--xs-trace-error:#d92d20;--xs-trace-sheet:#1f2328;--xs-on-accent:#fff;--xs-font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--xs-font-size:12.5px;--xs-shadow-pop:0 2px 6px #0003;--xs-shadow-menu:0 6px 20px #0000002e;--xs-shadow-modal:0 10px 30px #00000040;--xs-backdrop:#00000040;--xs-z-menu:40;--xs-z-modal:50;--xs-z-alert:55;--xs-touch-target:44px}.xs-sheet{background:var(--xs-bg);height:100%;min-height:0;color:var(--xs-fg);font-family:var(--xs-font);font-size:var(--xs-font-size);flex-direction:column;display:flex;position:relative}.xs-sheet *,.xs-sheet :before,.xs-sheet :after{box-sizing:border-box}.xs-muted{color:var(--xs-muted)}.xs-bar{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);flex-shrink:0;align-items:flex-start;gap:6px;padding:4px 8px;display:flex}.xs-bar .xs-address{text-align:center;flex-shrink:0;width:96px;height:22px;padding:0 6px;font-size:11.5px;font-weight:500}.xs-fx-line{flex:auto;align-items:flex-start;gap:2px;min-width:0;display:flex}.xs-fx{--xs-fx-lines:1;min-width:0;min-height:22px;font-size:var(--xs-font-size);flex:auto;line-height:1.35;position:relative}.xs-fx-open{--xs-fx-lines:5}.xs-fx-input,.xs-fx-layer{width:100%;height:calc(var(--xs-fx-lines) * 1.35em + 5px);min-height:22px;font:inherit;letter-spacing:normal;text-align:start;white-space:pre-wrap;overflow-wrap:break-word;word-break:normal;border:1px solid #0000;border-radius:3px;margin:0;padding:2px 4px 1px;display:block;overflow:hidden auto}.xs-fx-input{border-color:var(--xs-grid);background:var(--xs-bg);color:#0000;caret-color:var(--xs-fg);resize:none;outline:none}.xs-fx-input::selection{color:#0000}.xs-fx-input:focus{border-color:var(--xs-accent)}.xs-fx-layer{color:var(--xs-fg);pointer-events:none;scrollbar-color:transparent transparent;position:absolute;top:0;left:0}.xs-fx-go{cursor:pointer}.xs-ref-go{text-decoration:underline}.xs-bar-link{max-width:40%;color:var(--xs-link);text-overflow:ellipsis;white-space:nowrap;flex-shrink:0;padding-top:3px;font-size:11.5px;overflow:hidden}.xs-tools{flex-shrink:0;align-items:center;gap:4px;display:flex}.xs-notice{border-bottom:1px solid var(--xs-grid);background:var(--xs-head-bg);color:var(--xs-muted);flex-shrink:0;padding:2px 8px;font-size:11.5px}.xs-find{border-bottom:1px solid var(--xs-grid);background:var(--xs-head-bg);flex-direction:column;flex-shrink:0;gap:4px;padding:4px 8px;display:flex}.xs-find-row{flex-wrap:wrap;align-items:center;gap:4px 6px;display:flex}.xs-find-nav{align-items:center;gap:2px;margin-left:auto;display:inline-flex}.xs-find-toggle:not([aria-expanded=true]) .xs-icon{transform:rotate(-90deg)}.xs-find-more{gap:4px 14px;font-size:12px}.xs-find-opt{white-space:nowrap;cursor:pointer;align-items:center;gap:5px;display:inline-flex}.xs-find-scope{background:var(--xs-sel-tint);white-space:nowrap;border-radius:11px;align-items:center;padding-left:8px;display:inline-flex}.xs-find-input{flex:140px;min-width:0}.xs-find-status{color:var(--xs-muted);white-space:nowrap;flex-shrink:0;font-size:11.5px}.xs-body{flex-direction:column;flex:auto;min-height:0;display:flex;position:relative}.xs-scroller{overscroll-behavior:contain;touch-action:pan-x pan-y;outline:none;flex:auto;min-height:0;position:relative;overflow:auto}.xs-empty{color:var(--xs-muted);margin:0;padding:24px}.xs-table{border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:var(--xs-font-size);-webkit-user-select:none;user-select:none;line-height:1.3}.xs-table th,.xs-table td{border-right:var(--xs-line,1px) solid var(--xs-grid);border-bottom:var(--xs-line,1px) solid var(--xs-grid);white-space:nowrap;vertical-align:top;padding:1px 5px}.xs-table th{overflow:hidden}.xs-table .xs-spacer td{border:0;padding:0}.xs-table th.xs-head,.xs-table th.xs-corner{line-height:calc(24px - var(--xs-line,1px));padding:0 5px}.xs-head,.xs-num,.xs-corner{background:var(--xs-head-bg);color:var(--xs-head-fg);font-family:var(--xs-font);text-align:center;cursor:pointer;font-size:11.5px;font-weight:500}.xs-head.xs-on,.xs-num.xs-on{background:var(--xs-head-on-bg);color:var(--xs-head-on-fg)}.xs-head{top:var(--xs-outline-h);z-index:4;position:sticky}.xs-table th.xs-head{overflow:visible}.xs-head-label{text-overflow:ellipsis;display:block;overflow:hidden}.xs-num{left:var(--xs-outline-w);z-index:2;position:sticky}.xs-corner{top:var(--xs-outline-h);left:var(--xs-outline-w);z-index:6;position:sticky}.xs-fz-row{z-index:3;background-color:var(--xs-bg);position:sticky}.xs-fz-col{z-index:2;background-color:var(--xs-bg);position:sticky}.xs-fz-corner{z-index:5;background-color:var(--xs-bg);position:sticky}.xs-head.xs-fz-col{z-index:5;background-color:var(--xs-head-bg)}.xs-num.xs-fz-corner{left:var(--xs-outline-w);z-index:5;background-color:var(--xs-head-bg)}.xs-head.xs-fz-col.xs-on,.xs-num.xs-fz-corner.xs-on{background-color:var(--xs-head-on-bg)}.xs-table .xs-fz-edge-b{border-bottom-color:var(--xs-freeze-line)}.xs-table .xs-fz-edge-r{border-right-color:var(--xs-freeze-line)}.xs-in{align-items:flex-end;display:flex;overflow:hidden}.xs-in>*{white-space:nowrap;flex:auto;min-width:0}.xs-in.xs-wrap>*{white-space:pre-wrap;overflow-wrap:anywhere}.xs-in.xs-top{align-items:flex-start}.xs-in.xs-mid{align-items:center}.xs-num .xs-in{justify-content:center}.xs-in.xs-iconic{margin-left:-3px}.xs-in>.xs-cf-icon{flex:none;width:1.28em;height:1.28em;margin-right:3px}.xs-cell{background-color:var(--xs-bg)}.xs-thead{background-color:var(--xs-table-head-bg);font-weight:700}.xs-spill .xs-in{position:relative;overflow:visible}.xs-in>.xs-ov{align-items:inherit;pointer-events:none;display:flex;position:absolute;top:0;bottom:0;overflow:hidden}.xs-ov>span{white-space:nowrap}.xs-cell .xs-link{color:var(--xs-link);font:inherit;text-align:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.xs-cell .xs-deadlink{text-decoration-style:dotted;-webkit-text-decoration-color:var(--xs-muted);text-decoration-color:var(--xs-muted);cursor:help}.xs-cell.xs-active{outline:2px solid var(--xs-accent);outline-offset:-2px}.xs-cell.xs-active.xs-locked{outline-color:var(--xs-locked);outline-style:dashed}.xs-cell.xs-pending .xs-in>*{color:var(--xs-pending);font-style:italic}.xs-cell.xs-flash:not(.xs-fz-row,.xs-fz-col,.xs-fz-corner),.xs-cell.xs-hit-now:not(.xs-fz-row,.xs-fz-col,.xs-fz-corner){position:relative}.xs-cell.xs-hit-now:before,.xs-cell.xs-flash:before{content:"";pointer-events:none;background:var(--xs-flash);position:absolute;inset:0}.xs-cell.xs-hit-now:before{animation:.5s ease-in-out infinite alternate xs-pulse}.xs-cell.xs-flash:before{opacity:0;animation:.5s ease-in-out 4 alternate xs-pulse}@keyframes xs-pulse{0%{opacity:.1}to{opacity:1}}.xs-funnel{width:17px;height:17px;color:var(--xs-head-fg);cursor:pointer;opacity:0;background:0 0;border:0;border-radius:3px;justify-content:center;align-items:center;padding:0;display:inline-flex;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.xs-funnel .xs-icon{width:12px;height:12px}.xs-head:hover .xs-funnel,.xs-funnel.xs-on,.xs-funnel.xs-open{opacity:1}.xs-funnel.xs-on{color:var(--xs-accent)}.xs-funnel:hover,.xs-funnel.xs-open{background:var(--xs-head-on-bg)}.xs-head.xs-filtered{color:var(--xs-fg)}.xs-sortmark{margin-left:2px;font-size:10px}.xs-head.xs-sortable{cursor:pointer}.xs-head.xs-sortable:hover{color:var(--xs-fg)}.xs-list-sort{color:var(--xs-accent)}.xs-sorthint{opacity:0}.xs-head.xs-sortable:hover .xs-sorthint{opacity:.6}.xs-drill .xs-in span,.xs-rowlink .xs-in span{color:var(--xs-link);cursor:pointer}.xs-drill .xs-in span{text-underline-offset:3px;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xs-drill:hover .xs-in span,.xs-rowlink:hover .xs-in span{text-decoration:underline}.xs-table .xs-total{z-index:4;height:24px;line-height:calc(24px - var(--xs-line,1px));border-top:var(--xs-line,1px) solid var(--xs-freeze-line);background:var(--xs-head-bg);color:var(--xs-fg);text-overflow:ellipsis;padding:0 5px;font-weight:600;position:sticky;bottom:0;overflow:hidden}.xs-table .xs-total.xs-fz-col,.xs-table .xs-total-bar,.xs-table .xs-total-num{z-index:5}.xs-table .xs-total-bar{left:0}.xs-table .xs-total-num{left:var(--xs-outline-w)}@media (hover:none){.xs-funnel{opacity:.7}}.xs-grip{cursor:col-resize;touch-action:none;width:7px;height:100%;position:absolute;top:0;right:-3px}.xs-grip-row{cursor:row-resize;width:100%;height:7px;top:auto;bottom:-3px;right:0}.xs-grip:hover{background:var(--xs-accent);opacity:.35}.xs-editor{border:2px solid var(--xs-accent);background:var(--xs-bg);color:var(--xs-fg);font:var(--xs-font-size) / 1.3 var(--xs-font);white-space:pre;resize:none;box-shadow:var(--xs-shadow-pop);outline:none;margin:0;padding:1px 5px;position:absolute;overflow:hidden}.xs-editor-idle{opacity:0;pointer-events:none;border:0;width:1px;height:1px;padding:0;top:0;left:0}.xs-ants{pointer-events:none;background-image:linear-gradient(90deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%), linear-gradient(90deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%), linear-gradient(0deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%), linear-gradient(0deg, var(--xs-copy-line) 50%, var(--xs-bg) 50%);background-position:0 0,0 100%,0 0,100% 0;background-repeat:repeat-x,repeat-x,repeat-y,repeat-y;background-size:8px 2px,8px 2px,2px 8px,2px 8px;animation:.5s linear infinite xs-ants;position:absolute}@keyframes xs-ants{to{background-position:8px 0,-8px 100%,0 -8px,100% 8px}}@media (prefers-reduced-motion:reduce){.xs-ants{animation:none}}.xs-fill-handle{cursor:crosshair;touch-action:none;width:13px;height:13px;position:absolute;transform:translate(-50%,-50%)}.xs-fill-handle:after{content:"";border:1px solid var(--xs-bg);background:var(--xs-accent);width:7px;height:7px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.xs-fill-handle.xs-fill-touch{width:var(--xs-touch-target);height:var(--xs-touch-target)}.xs-fill-handle.xs-fill-touch:after{width:10px;height:10px}.xs-fill-handle.xs-fill-dragging:after{visibility:hidden}.xs-fill-frame{border:2px dashed var(--xs-fill-frame);pointer-events:none;position:absolute}.xs-loading{border:1px solid var(--xs-grid);background:color-mix(in srgb, var(--xs-bg) 92%, transparent);color:var(--xs-muted);pointer-events:none;z-index:8;border-radius:6px;align-items:center;gap:6px;padding:4px 8px;font-size:11.5px;display:inline-flex;position:sticky;bottom:8px;left:8px}.xs-spin{animation:.9s linear infinite xs-spin}@keyframes xs-spin{to{transform:rotate(360deg)}}.xs-wait{z-index:12;background:color-mix(in srgb, var(--xs-bg) 92%, transparent);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:4px;padding:24px;display:flex;position:absolute;inset:0}.xs-wait p{margin:0}.xs-wait-icon{width:22px;height:22px;color:var(--xs-muted)}.xs-wait-title{font-weight:600}.xs-wait-seconds{color:var(--xs-muted);font-variant-numeric:tabular-nums}.xs-bottom{border-top:1px solid var(--xs-grid);background:var(--xs-bar-bg);flex-shrink:0;align-items:center;gap:8px;padding:3px 8px;display:flex}.xs-tabs{scrollbar-width:thin;flex:auto;gap:2px;min-width:0;display:flex;overflow-x:auto}.xs-tab{color:var(--xs-muted);font:12px var(--xs-font);cursor:pointer;white-space:nowrap;background:0 0;border:0;border-radius:5px;flex-shrink:0;padding:4px 10px}.xs-tab:hover{background:var(--xs-head-bg)}.xs-tab-on{background:var(--xs-bg);box-shadow:inset 0 -2px 0 var(--xs-accent);color:var(--xs-fg);font-weight:600}.xs-tab-input{border:1px solid var(--xs-accent);outline:none;min-width:0}.xs-tab,.xs-table th,.xs-fx-held{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.xs-tab-add{align-self:center;margin-left:2px}.xs-filter-status{min-width:0;color:var(--xs-muted);flex-shrink:1;align-items:center;gap:2px;font-size:11.5px;display:flex}.xs-filter-text{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.xs-stats{min-width:0;color:var(--xs-muted);text-overflow:ellipsis;white-space:nowrap;flex-shrink:1;margin-left:auto;font-size:11.5px;overflow:hidden}.xs-message{z-index:20;background:var(--xs-message-bg);max-width:calc(100% - 24px);color:var(--xs-message-fg);font-size:var(--xs-font-size);box-shadow:var(--xs-shadow-menu);border-radius:6px;align-items:center;gap:8px;padding:6px 6px 6px 12px;display:flex;position:absolute;bottom:40px;left:50%;transform:translate(-50%)}.xs-message .xs-tool{color:inherit}.xs-message .xs-tool:hover{color:inherit;background:#ffffff26}.xs-fallback{color:var(--xs-muted);text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:12px;padding:24px;display:flex}.xs-fallback p{margin:0}.xs-narrow .xs-bar{flex-wrap:wrap;gap:4px;padding:4px 6px}.xs-narrow .xs-bar .xs-address{width:64px}.xs-narrow .xs-fx-line{flex-basis:100%;order:3}.xs-narrow .xs-tools{margin-left:auto}.xs-narrow .xs-bar-link{display:none}.xs-narrow .xs-bottom{flex-wrap:wrap;row-gap:2px}.xs-narrow .xs-tabs{flex:100%}.xs-narrow .xs-stats{max-width:55%}.xs-touch .xs-bar .xs-address{height:var(--xs-touch-target);font-size:16px}.xs-touch .xs-fx{min-height:var(--xs-touch-target);font-size:16px}.xs-touch .xs-fx-input,.xs-touch .xs-fx-layer{height:calc(var(--xs-fx-lines) * 1.35em + 24px);min-height:var(--xs-touch-target);padding:11px 6px}.xs-touch .xs-fx:not(.xs-fx-open) .xs-fx-input,.xs-touch .xs-fx:not(.xs-fx-open) .xs-fx-layer{height:var(--xs-touch-target);padding-block:0;line-height:42px}.xs-touch .xs-bar-link{line-height:var(--xs-touch-target);padding-top:0}.xs-touch .xs-tab{min-height:var(--xs-touch-target);padding:0 14px;font-size:14px}.xs-touch .xs-find-more{font-size:14px}.xs-touch .xs-find-opt{min-height:var(--xs-touch-target)}.xs-touch .xs-find-opt input{width:20px;height:20px}.xs-touch .xs-funnel-tool.xs-tool-on{color:var(--xs-accent)}.xs-toolbar{z-index:30;border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);min-width:0;color:var(--xs-fg);font-family:var(--xs-font);font-size:var(--xs-font-size);-webkit-tap-highlight-color:transparent;flex-shrink:0;align-items:center;padding:3px 8px;display:flex;position:relative}.xs-toolbar *,.xs-toolbar :before,.xs-toolbar :after{box-sizing:border-box}.xs-tb-row{flex-wrap:wrap;align-items:center;gap:2px 0;min-width:0;display:flex}.xs-tb-group{flex-wrap:wrap;align-items:center;gap:2px;padding:0 6px;display:inline-flex}.xs-tb-group+.xs-tb-group,.xs-tb-row+.xs-tb-row>.xs-tb-group:first-child{border-left:1px solid var(--xs-grid)}.xs-tb-row:first-child>.xs-tb-group:first-child{padding-left:0}.xs-tb-split{align-items:center;display:inline-flex;position:relative}.xs-toolbar:not(.xs-touch) .xs-tb-caret{width:14px}.xs-toolbar:not(.xs-touch) .xs-tb-caret .xs-icon{width:10px;height:10px}.xs-tool.xs-tb-wide{gap:1px;width:auto;padding:0 3px}.xs-tb-down{width:10px;height:10px}.xs-tb-select{max-width:140px;font-size:12px}.xs-tb-input{border-radius:4px 0 0 4px;font-size:12px}.xs-tb-font{width:120px}.xs-tb-size{width:40px}.xs-tb-box>.xs-tb-caret{border:1px solid var(--xs-grid);border-left:0;border-radius:0 4px 4px 0;height:22px}.xs-tb-pair{align-items:center;gap:2px;display:inline-flex}.xs-tb-list{overscroll-behavior:contain;gap:0;min-width:100%;max-height:280px;overflow-y:auto}.xs-tb-list>.xs-tb-item[aria-selected=true]{background:var(--xs-head-bg)}.xs-tb-pop{z-index:1;border:1px solid var(--xs-grid);background:var(--xs-bg);box-shadow:var(--xs-shadow-menu);border-radius:6px;flex-direction:column;gap:4px;padding:6px;display:flex;position:absolute;top:calc(100% + 3px);left:0}.xs-tb-item{min-height:26px;color:var(--xs-fg);font:var(--xs-font-size) var(--xs-font);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:0;border-radius:4px;align-items:center;gap:8px;padding:3px 8px;display:flex}.xs-tb-item:hover,.xs-tb-item[aria-pressed=true]{background:var(--xs-head-bg)}.xs-toolbar:not(.xs-touch) .xs-swatches{--xs-swatch:18px;gap:3px}.xs-tb-narrow .xs-tb-row{flex-wrap:nowrap;flex:auto}.xs-tb-more{margin-left:auto}.xs-tb-menu{border-bottom:1px solid var(--xs-grid);background:var(--xs-bar-bg);box-shadow:var(--xs-shadow-menu);flex-wrap:wrap;gap:6px 0;padding:6px 8px;display:flex;position:absolute;top:100%;left:0;right:0}.xs-tb-menu>.xs-tb-group{border-left:0;padding:0 12px 0 0}.xs-tb-narrow .xs-tb-split{position:static}.xs-tb-narrow .xs-tb-pop{top:calc(100% + 2px);left:8px;right:8px}.xs-tb-narrow .xs-tb-list{min-width:0}.xs-touch .xs-tb-select{max-width:none}.xs-touch .xs-tb-font{width:150px}.xs-touch .xs-tb-size{width:64px}.xs-touch .xs-tb-box>.xs-tb-caret{height:var(--xs-touch-target)}.xs-touch .xs-tb-list{max-height:60vh}.xs-touch .xs-tb-item{min-height:var(--xs-touch-target);font-size:15px}.xs-touch .xs-tool.xs-tb-wide{min-width:56px}
|
|
2
2
|
/*$vite$:1*/
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SymbolSpecial, SymbolSubset } from './contract/messages.js';
|
|
2
|
+
/** The Subset list: Unicode blocks a text font usually covers, in code order, by Excel's names (the messages' `symbolSubset`). */
|
|
3
|
+
export declare const SYMBOL_SUBSETS: readonly {
|
|
4
|
+
key: SymbolSubset;
|
|
5
|
+
from: number;
|
|
6
|
+
to: number;
|
|
7
|
+
}[];
|
|
8
|
+
/** The grid's characters: every shown code point of the subsets, in code order, as Excel's grid runs through the font; built on first use. */
|
|
9
|
+
export declare function symbolCodes(): readonly number[];
|
|
10
|
+
/** The subset a code point belongs to, or null outside them. */
|
|
11
|
+
export declare function subsetOf(code: number): SymbolSubset | null;
|
|
12
|
+
/** A code point as Excel's Character code box shows it: hex, four digits at least (`00A9`). */
|
|
13
|
+
export declare const codeHex: (code: number) => string;
|
|
14
|
+
/** The code point a Character code box's text names (hex, an optional `U+`), when it is a character one can insert; otherwise null. */
|
|
15
|
+
export declare function parseCode(text: string): number | null;
|
|
16
|
+
/** Excel's Special Characters tab, in its order. */
|
|
17
|
+
export declare const SYMBOL_SPECIALS: readonly {
|
|
18
|
+
key: SymbolSpecial;
|
|
19
|
+
code: number;
|
|
20
|
+
}[];
|
|
21
|
+
/** How many recently used symbols the dialog shows, and the row of a new install, as Office's. */
|
|
22
|
+
export declare const RECENT_SYMBOLS = 16;
|
|
23
|
+
export declare const DEFAULT_RECENT_SYMBOLS: readonly number[];
|
package/dist/toolbar.d.ts
CHANGED
|
@@ -1,8 +1,60 @@
|
|
|
1
|
-
import type { BorderLine, CellRect, CellStyle, StylePatch } from 'xlcalc/contract';
|
|
1
|
+
import type { BorderLine, CellRect, CellStyle, NumberFormat, StylePatch } from 'xlcalc/contract';
|
|
2
2
|
import type { FormatPatch } from './contract/source.js';
|
|
3
|
+
import type { SheetViewState } from './contract/view.js';
|
|
3
4
|
export type FontToggle = 'bold' | 'italic' | 'underline';
|
|
4
5
|
export type HorizontalAlign = 'left' | 'center' | 'right';
|
|
6
|
+
export type VerticalAlign = 'top' | 'center' | 'bottom';
|
|
5
7
|
export type BorderKind = 'all' | 'outside' | 'bottom' | 'none';
|
|
8
|
+
/** Excel's font sizes in its list; any size from 1 to 409 may be typed. */
|
|
9
|
+
export declare const FONT_SIZES: readonly number[];
|
|
10
|
+
/** Fonts offered in the lists of the font inputs, Excel's common ones (a browser does not tell which are installed); any name may be typed. */
|
|
11
|
+
export declare const FONT_NAMES: readonly string[];
|
|
12
|
+
/** Excel's indent applies with the left, right and distributed alignments; its levels go up to 250. */
|
|
13
|
+
export declare const INDENTED: ReadonlySet<string>;
|
|
14
|
+
/** Excel's Percent Style and its Ctrl+Shift+%: the built-in format 9, `0%`. */
|
|
15
|
+
export declare const PERCENT_STYLE = 9;
|
|
16
|
+
/** Excel's Accounting Number Format and Comma Style: the built-in formats 44 and 43, displayed in the workbook's locale (its currency for 44). */
|
|
17
|
+
export declare const ACCOUNTING_STYLE = 44;
|
|
18
|
+
export declare const COMMA_STYLE = 43;
|
|
19
|
+
/**
|
|
20
|
+
* Excel's Increase Decimal and Decrease Decimal from the active cell, as xlcalc's `stepDecimals` gives them (its format,
|
|
21
|
+
* value and column width; Excel puts the result on the whole selection); null when the step changes nothing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function decimalStep(state: Pick<SheetViewState, 'numberFormat' | 'cellValue' | 'columnWidth'>, up: boolean, locale: string | undefined): NumberFormat | null;
|
|
24
|
+
/** The workbook's default font, which a cell without its own font name or size displays. */
|
|
25
|
+
export interface BookFont {
|
|
26
|
+
name?: string;
|
|
27
|
+
size?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The font the Font and Font Size boxes show for the active cell: its own, otherwise the workbook's (`book`, the sheet
|
|
31
|
+
* state's `font`); without either the boxes are empty.
|
|
32
|
+
*/
|
|
33
|
+
export declare function shownFont(style: CellStyle | undefined, book?: BookFont): {
|
|
34
|
+
name: string;
|
|
35
|
+
size: number | undefined;
|
|
36
|
+
};
|
|
37
|
+
/** A typed font size, with a decimal point or comma: undefined for an empty input, NaN for anything that is not a number. */
|
|
38
|
+
export declare function parseFontSize(text: string): number | undefined;
|
|
39
|
+
/** A typed font size as Excel takes it: rounded to half points, null outside 1 to 409 or for anything that is not a number. */
|
|
40
|
+
export declare function fontSizeOf(text: string): number | null;
|
|
41
|
+
/**
|
|
42
|
+
* Excel's Increase and Decrease Font Size from a size: the next size of its list, beyond 72 in steps of 10 up to 409, and
|
|
43
|
+
* below 8 a point at a time down to 1, as Office's Grow Font and Shrink Font step; the same size at either limit.
|
|
44
|
+
*/
|
|
45
|
+
export declare function stepFontSize(size: number, up: boolean): number;
|
|
46
|
+
/** The size buttons over the selection: one step from the active cell's size; nothing at the limit. */
|
|
47
|
+
export declare function fontSizeStep(style: CellStyle | undefined, up: boolean, book?: BookFont): StylePatch | null;
|
|
48
|
+
/** Whether the active cell is aligned so vertically, as Excel shows Top, Middle and Bottom Align pressed: bottom without an alignment of its own. */
|
|
49
|
+
export declare function verticalOn(style: CellStyle | undefined, v: VerticalAlign): boolean;
|
|
50
|
+
/** A vertical alignment over the selection; clicked again on a cell already aligned so, it returns to Bottom, Excel's default, which a cell does not store. */
|
|
51
|
+
export declare function verticalToggle(style: CellStyle | undefined, v: VerticalAlign): StylePatch;
|
|
52
|
+
/**
|
|
53
|
+
* Excel's Increase and Decrease Indent over the selection, a level from the active cell's: Increase keeps the left, right
|
|
54
|
+
* and distributed alignments and turns any other into Left, which has an indent; Decrease takes a level off without changing
|
|
55
|
+
* the alignment and does nothing at 0 or with an alignment that has no indent. Nothing at either limit.
|
|
56
|
+
*/
|
|
57
|
+
export declare function indentStep(style: CellStyle | undefined, up: boolean): StylePatch | null;
|
|
6
58
|
/** Excel's palette: the Office theme colors, then the standard ones. */
|
|
7
59
|
export declare const PALETTE: string[];
|
|
8
60
|
/** The colors Excel's split buttons apply before one is picked. */
|