@topvisor/ui 1.5.9-pnpm.5 → 1.5.9

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.
Files changed (41) hide show
  1. package/.chunks/formsExt-DtFeVRvE.es.amd.js +2 -0
  2. package/.chunks/formsExt-DtFeVRvE.es.amd.js.map +1 -0
  3. package/.chunks/{formsExt-BD8Sap5u.es.js → formsExt-DtFeVRvE.es.js} +155 -155
  4. package/.chunks/formsExt-DtFeVRvE.es.js.map +1 -0
  5. package/assets/schedule.css +1 -1
  6. package/assets/themes/dark-th.css +1 -1
  7. package/assets/themes/dark.css +1 -1
  8. package/assets/themes/light.css +1 -1
  9. package/autoload-css-manifest.amd.json +1 -1
  10. package/autoload-css-manifest.json +1 -1
  11. package/formsExt/formsExt.amd.js +1 -1
  12. package/formsExt/formsExt.amd.js.map +1 -1
  13. package/formsExt/formsExt.js +1 -1
  14. package/package.json +2 -1
  15. package/project/project.amd.js +1 -1
  16. package/project/project.amd.js.map +1 -1
  17. package/project/project.js +349 -348
  18. package/project/project.js.map +1 -1
  19. package/schedule/schedule.amd.js +1 -1
  20. package/schedule/schedule.amd.js.map +1 -1
  21. package/schedule/schedule.js +159 -154
  22. package/schedule/schedule.js.map +1 -1
  23. package/src/components/project/groupSelector/groups/utils.d.ts +0 -1
  24. package/src/components/project/projectSelector/utils.d.ts +8 -2
  25. package/src/components/project/regionSelector/types.d.ts +17 -10
  26. package/src/components/project/regionSelector/utils/utils.d.ts +14 -14
  27. package/src/components/schedule/schedule/{compoents → components}/calendar/types.d.ts +1 -3
  28. package/src/components/schedule/schedule/{compoents → components}/emails/selector/types.d.ts +6 -2
  29. package/src/components/schedule/schedule/composables/useModeOptions.d.ts +7 -0
  30. package/src/components/schedule/schedule/composables/useModelByModeCache.d.ts +9 -0
  31. package/src/components/schedule/schedule/stories/play/play.d.ts +5 -0
  32. package/src/components/schedule/schedule/types.d.ts +9 -9
  33. package/src/components/schedule/schedule/utils.d.ts +1 -6
  34. package/src/components/schedule/schedule.d.ts +2 -2
  35. package/.chunks/formsExt-BD8Sap5u.es.amd.js +0 -2
  36. package/.chunks/formsExt-BD8Sap5u.es.amd.js.map +0 -1
  37. package/.chunks/formsExt-BD8Sap5u.es.js.map +0 -1
  38. /package/src/components/schedule/schedule/{compoents → components}/calendar/composables/useDaysByCalendarMode.d.ts +0 -0
  39. /package/src/components/schedule/schedule/{compoents → components}/emails/types.d.ts +0 -0
  40. /package/src/components/schedule/schedule/{compoents → components}/socials/types.d.ts +0 -0
  41. /package/src/components/schedule/schedule/{compoents → components}/timeSelector/types.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formsExt-DtFeVRvE.es.js","names":[],"sources":["../../src/components/formsExt/menu/menu.vue","../../src/components/formsExt/menu/menu.vue","../../src/components/formsExt/selector2/itemMulti.vue","../../src/components/formsExt/selector2/itemMulti.vue","../../src/components/formsExt/selector2/cache.ts","../../src/components/formsExt/selector2/composables/useAPI.ts","../../src/components/formsExt/selector2/utils.ts","../../src/components/formsExt/selector2/composables/useMenu.ts","../../src/components/formsExt/selector2/selector2.vue","../../src/components/formsExt/selector2/selector2.vue","../../src/components/formsExt/editArea/editArea.vue","../../src/components/formsExt/editArea/editArea.vue","../../src/components/formsExt/editInput/editInput.vue","../../src/components/formsExt/editInput/editInput.vue","../../src/components/formsExt/libs/optionGroup/optionGroup.vue","../../src/components/formsExt/libs/optionGroup/optionGroup.vue","../../src/components/formsExt/radioGroup/radioGroup.vue","../../src/components/formsExt/radioGroup/radioGroup.vue","../../src/components/formsExt/checkboxGroup/checkboxGroup.vue","../../src/components/formsExt/checkboxGroup/checkboxGroup.vue","../../src/components/formsExt/info/info.vue","../../src/components/formsExt/info/info.vue","../../src/components/formsExt/policy/policy.vue","../../src/components/formsExt/policy/policy.vue","../../src/components/formsExt/banner/banner.vue","../../src/components/formsExt/banner/banner.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './types';\nimport Core from '@/core/core/core';\nimport { isSafari } from '@/core/utils/device';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n});\n\nconst model = defineModel({\n\trequired: true,\n});\n\nconst el = ref();\n\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка или число)\nif (!props.isMultiple && typeof (model.value) !== 'string' && typeof (model.value) !== 'number') {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\n}\n\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\nif (props.isMultiple && !Array.isArray(model.value)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\n}\n\n/**\n * Для множественного выбора без пустого множества\n *\n * Если ничего не выбрано, присваиваем 1-ое значение\n */\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length && props.items[0]) {\n\tmodel.value = [props.items[0]?.href ?? props.items[0]?.value];\n}\n\nconst itemIsActive = (item: Item) => {\n\tif (!Array.isArray(model.value)) {\n\t\treturn item.value === model.value;\n\t}\n\n\treturn model.value.includes(item.value);\n};\n\n/**\n * Выбрать элемент\n * @param item\n * @param toggle - добавить или исключить элемент, для isMultiple\n */\nconst select = (item: Item, toggle = false) => {\n\tif (Array.isArray(model.value)) {\n\t\tlet modelNew = model.value.slice();\n\n\t\tif (toggle) {\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\n\n\t\t\tconst index = modelNew.indexOf(item.value);\n\t\t\tif (index === -1) {\n\t\t\t\tmodelNew.push(item.value);\n\t\t\t} else {\n\t\t\t\tmodelNew.splice(index, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\n\t\t\t\tmodelNew = [];\n\t\t\t} else {\n\t\t\t\tmodelNew = [item.value];\n\t\t\t}\n\t\t}\n\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\n\n\t\tmodel.value = modelNew;\n\n\t\treturn;\n\t}\n\n\tmodel.value = item.value;\n};\n\n// вертикальный скролл в горизонтальный скролл\nconst onWheel = (event: WheelEvent) => {\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\n\tif (event.shiftKey) return;\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\n\n\tevent.preventDefault();\n\n\tconst delta = event.deltaY > 0 ? 30 : -30;\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\n};\n\n/**\n * Замена стандартному scrollIntoView, который меняет скролл документа\n *\n * Выравнивание по ближнему краю элемента\n *\n * Выравнивается таким образом, чтобы был виден соседний элемент\n */\nconst scrollIntoView = (isSmooth = true) => {\n\tconst elBtn = el.value.querySelector('.top-active');\n\tif (!elBtn) return;\n\n\tconst gap = 24;\n\n\t// левая и правая координаты элемента\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\n\n\t// левая и правая границы видимой части меню\n\tconst leftMarginParent = el.value.scrollLeft;\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\n\n\tlet scrollLeft: number | undefined = undefined;\n\n\t// левую границу элемента к левой границе меню\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\n\n\t// правую границу элемента к правой границе меню\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\n\n\tif (scrollLeft !== undefined) {\n\t\tif (isSafari()) {\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\n\t\t} else {\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\n\t\t}\n\t}\n};\n\n/**\n * Выбрать все элементы в меню\n */\nconst selectAll = () => {\n\tif (!Array.isArray(model.value)) return;\n\n\tif (model.value.length === props.items.length) {\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\n\t\treturn;\n\t}\n\n\tmodel.value = props.items.map(item => item.href ?? item.value);\n};\n\nonMounted(() => scrollIntoView(false));\nonUpdated(() => scrollIntoView(true));\n\n</script>\n\n<template>\n\t<div\n\t\tref=\"el\"\n\t\t:class=\"{\n\t\t\t'top-menu': true,\n\t\t\t['top-style_' + styling]: true,\n\t\t\t// ['top-unwrap-x']: styling === 'default',\n\t\t}\"\n\t\t@wheel=\"onWheel\"\n\t>\n\t\t<TopButton\n\t\t\tv-for=\"item in items\"\n\t\t\t:=\"item\"\n\t\t\tclass=\"top-menu_item\"\n\t\t\tcolor=\"theme\"\n\t\t\t@click=\"select(item, $event.ctrlKey || $event.metaKey)\"\n\t\t\t:isActive=\"itemIsActive(item)\"\n\t\t>\n\t\t\t<template #default v-if=\"item.content\">\n\t\t\t\t{{ item.content }}\n\t\t\t</template>\n\t\t</TopButton>\n\n\t\t<div\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\n\t\t\tclass=\"top-menu_selectAll\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\t:=\"selectAllItem\"\n\t\t\t\tclass=\"top-menu_item\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\tstyling=\"\"\n\t\t\t\t@click=\"selectAll()\"\n\t\t\t\t:isActive=\"model.length === items.length\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\n\t\t\t\t\t{{ selectAllItem.content }}\n\t\t\t\t</template>\n\t\t\t</TopButton>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-menu {\n\t--scroll-thumb-color: var(--color-line-1);\n\t--scroll-thumb-color-hover: var(--color-line-2);\n\t--scroll-thumb-color-active: var(--color-line-3);\n\n\tmax-width: 100%;\n\tbackground: var(--content-background-color);\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: var(--top-gap-2);\n\toverflow-x: auto;\n\tscrollbar-width: none; /* firefox */\n\n\t/* предотвратить натинвые события браузера (назад / вперед) */\n\toverscroll-behavior-x: contain;\n}\n\n.top-menu::-webkit-scrollbar { display: none; }\n\n.top-menu .top-menu_item {\n\t--top-button-color: var(--color-text-2);\n\n\toutline-offset: -2px !important;\n\tmin-width: 0;\n\tmax-width: 200px;\n\tmargin: 0;\n\tflex-shrink: 0;\n}\n\n.top-menu .top-menu_item[data-top-icon] {\n\t--top-icon-color: var(--color-text-2);\n}\n\n.top-menu_selectAll {\n\tposition: sticky;\n\tright: 0;\n\tbackground: var(--color-layout-front-1);\n\tborder-left: 1px solid var(--color-line-1);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--color-layout-front-1) var(--top-padding-2) 0px;\n}\n\n/* style default */\n.top-menu.top-style_default .top-menu_item {\n\t--top-forms-radius: 0;\n\t--top-forms-border-color: transparent;\n\t--top-forms-border-width: 2px;\n\n\tfilter: none;\n\tbox-shadow: none;\n\tborder: none;\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\n\tbackground: none;\n}\n\n.top-style_default > .top-menu_item > [data-top-badge] {\n\tmargin-top: 0;\n}\n\n.top-menu.top-style_default .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-2);\n}\n\n.top-menu.top-style_default .top-menu_item:active,\n.top-menu.top-style_default .top-menu_item.top-active {\n\t--top-icon-color: var(--color-text-primary);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-primary-1);\n}\n\n.top-menu.top-style_default .top-menu_selectAll {\n\tpadding-left: var(--top-padding-2);\n}\n\n/* style bar */\n.top-menu.top-style_bar {\n\tborder-radius: var(--top-radius-3);\n\tborder: 1px solid var(--color-line-2);\n\tpadding: var(--top-padding-1);\n\tgap: 3px;\n}\n.top-menu.top-style_bar .top-menu_item {\n\t--top-button-background-color-hover: var(--color-layer-1);\n\t--top-button-background-color-active: var(--color-layer-2);\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\n\n\tposition: relative;\n}\n\n.top-menu.top-style_bar .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n}\n\n.top-menu.top-style_bar .top-menu_item.top-active {\n\t--top-icon-color: var(--color-text-primary);\n\t--top-button-color: var(--color-text-primary);\n}\n\n/* разделители кнопок в баре */\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\n\tcontent: \"\";\n\tbackground: var(--color-line-1-opacity);\n\twidth: 1px;\n\theight: 60%;\n\tdisplay: block;\n\tposition: absolute;\n\tleft: -2px;\n}\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\n\tcontent: none !important;\n}\n\n/*\n.top-style_bar > .top-menu_item > [data-top-badge] {\n\tmargin-top: -3px;\n}\n*/\n\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\n/*\n.top-menu.top-unwrap-x {\n\tpadding-right: var(--top-unwrap-x);\n\tpadding-left: var(--top-unwrap-x);\n\tmargin-right: calc(0px - var(--top-unwrap-x));\n\tmargin-left: calc(0px - var(--top-unwrap-x));\n}\n*/\n</style>\n","<script setup lang=\"ts\">\nimport { onMounted, onUpdated, ref } from 'vue';\nimport type { Item, Props } from './types';\nimport Core from '@/core/core/core';\nimport { isSafari } from '@/core/utils/device';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n});\n\nconst model = defineModel({\n\trequired: true,\n});\n\nconst el = ref();\n\n// валидация типа modelValue без возможности выбора нескольких значений (ожидается строка или число)\nif (!props.isMultiple && typeof (model.value) !== 'string' && typeof (model.value) !== 'number') {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected String: ' + typeof (model.value));\n}\n\n// валидация типа modelValue с возможностью выбора нескольких значений (ожидается массив)\nif (props.isMultiple && !Array.isArray(model.value)) {\n\tconsole.warn('Type check failed for prop \"modelValue\". Expected Array: ' + typeof (model.value));\n}\n\n/**\n * Для множественного выбора без пустого множества\n *\n * Если ничего не выбрано, присваиваем 1-ое значение\n */\nif (props.isMultiple && !props.canBeEmptyMultiple && Array.isArray(model.value) && !model.value.length && props.items[0]) {\n\tmodel.value = [props.items[0]?.href ?? props.items[0]?.value];\n}\n\nconst itemIsActive = (item: Item) => {\n\tif (!Array.isArray(model.value)) {\n\t\treturn item.value === model.value;\n\t}\n\n\treturn model.value.includes(item.value);\n};\n\n/**\n * Выбрать элемент\n * @param item\n * @param toggle - добавить или исключить элемент, для isMultiple\n */\nconst select = (item: Item, toggle = false) => {\n\tif (Array.isArray(model.value)) {\n\t\tlet modelNew = model.value.slice();\n\n\t\tif (toggle) {\n\t\t\tif (!modelNew.length) modelNew = props.items.map(item => item.value);\n\n\t\t\tconst index = modelNew.indexOf(item.value);\n\t\t\tif (index === -1) {\n\t\t\t\tmodelNew.push(item.value);\n\t\t\t} else {\n\t\t\t\tmodelNew.splice(index, 1);\n\t\t\t}\n\t\t} else {\n\t\t\tif (modelNew.length === 1 && modelNew[0] === item.value) {\n\t\t\t\tmodelNew = [];\n\t\t\t} else {\n\t\t\t\tmodelNew = [item.value];\n\t\t\t}\n\t\t}\n\n\t\tif (!props.canBeEmptyMultiple && !modelNew.length) modelNew = [item.value];\n\n\t\tmodel.value = modelNew;\n\n\t\treturn;\n\t}\n\n\tmodel.value = item.value;\n};\n\n// вертикальный скролл в горизонтальный скролл\nconst onWheel = (event: WheelEvent) => {\n\tif (el.value.scrollWidth <= el.value.offsetWidth) return;\n\tif (event.shiftKey) return;\n\tif (Math.abs(event.deltaY) < 50) return; // устройство с высокой точностью, например тачпад\n\n\tevent.preventDefault();\n\n\tconst delta = event.deltaY > 0 ? 30 : -30;\n\tel.value.scrollLeft = el.value.scrollLeft + delta;\n};\n\n/**\n * Замена стандартному scrollIntoView, который меняет скролл документа\n *\n * Выравнивание по ближнему краю элемента\n *\n * Выравнивается таким образом, чтобы был виден соседний элемент\n */\nconst scrollIntoView = (isSmooth = true) => {\n\tconst elBtn = el.value.querySelector('.top-active');\n\tif (!elBtn) return;\n\n\tconst gap = 24;\n\n\t// левая и правая координаты элемента\n\tconst leftMargin = elBtn.offsetLeft - el.value.offsetLeft - gap;\n\tconst rightMargin = elBtn.offsetLeft - el.value.offsetLeft + elBtn.clientWidth + gap;\n\n\t// левая и правая границы видимой части меню\n\tconst leftMarginParent = el.value.scrollLeft;\n\tconst rightMarginParent = el.value.clientWidth + el.value.scrollLeft;\n\n\tlet scrollLeft: number | undefined = undefined;\n\n\t// левую границу элемента к левой границе меню\n\tif (leftMargin < leftMarginParent) scrollLeft = leftMargin;\n\n\t// правую границу элемента к правой границе меню\n\tif (rightMargin > rightMarginParent) scrollLeft = rightMargin - el.value.clientWidth;\n\n\tif (scrollLeft !== undefined) {\n\t\tif (isSafari()) {\n\t\t\tCore.$?.(el.value).animate({ scrollLeft: scrollLeft }, isSmooth ? 200 : 0);\n\t\t} else {\n\t\t\tel.value.scrollTo({ left: scrollLeft, behavior: isSmooth ? 'smooth' : 'auto' });\n\t\t}\n\t}\n};\n\n/**\n * Выбрать все элементы в меню\n */\nconst selectAll = () => {\n\tif (!Array.isArray(model.value)) return;\n\n\tif (model.value.length === props.items.length) {\n\t\tmodel.value = [props.items[0].href ?? props.items[0].value];\n\t\treturn;\n\t}\n\n\tmodel.value = props.items.map(item => item.href ?? item.value);\n};\n\nonMounted(() => scrollIntoView(false));\nonUpdated(() => scrollIntoView(true));\n\n</script>\n\n<template>\n\t<div\n\t\tref=\"el\"\n\t\t:class=\"{\n\t\t\t'top-menu': true,\n\t\t\t['top-style_' + styling]: true,\n\t\t\t// ['top-unwrap-x']: styling === 'default',\n\t\t}\"\n\t\t@wheel=\"onWheel\"\n\t>\n\t\t<TopButton\n\t\t\tv-for=\"item in items\"\n\t\t\t:=\"item\"\n\t\t\tclass=\"top-menu_item\"\n\t\t\tcolor=\"theme\"\n\t\t\t@click=\"select(item, $event.ctrlKey || $event.metaKey)\"\n\t\t\t:isActive=\"itemIsActive(item)\"\n\t\t>\n\t\t\t<template #default v-if=\"item.content\">\n\t\t\t\t{{ item.content }}\n\t\t\t</template>\n\t\t</TopButton>\n\n\t\t<div\n\t\t\tv-if=\"Array.isArray(model) && selectAllItem\"\n\t\t\tclass=\"top-menu_selectAll\"\n\t\t>\n\t\t\t<TopButton\n\t\t\t\t:=\"selectAllItem\"\n\t\t\t\tclass=\"top-menu_item\"\n\t\t\t\tcolor=\"theme\"\n\t\t\t\tstyling=\"\"\n\t\t\t\t@click=\"selectAll()\"\n\t\t\t\t:isActive=\"model.length === items.length\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"selectAllItem.content\">\n\t\t\t\t\t{{ selectAllItem.content }}\n\t\t\t\t</template>\n\t\t\t</TopButton>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-menu {\n\t--scroll-thumb-color: var(--color-line-1);\n\t--scroll-thumb-color-hover: var(--color-line-2);\n\t--scroll-thumb-color-active: var(--color-line-3);\n\n\tmax-width: 100%;\n\tbackground: var(--content-background-color);\n\tdisplay: flex;\n\talign-items: flex-start;\n\tgap: var(--top-gap-2);\n\toverflow-x: auto;\n\tscrollbar-width: none; /* firefox */\n\n\t/* предотвратить натинвые события браузера (назад / вперед) */\n\toverscroll-behavior-x: contain;\n}\n\n.top-menu::-webkit-scrollbar { display: none; }\n\n.top-menu .top-menu_item {\n\t--top-button-color: var(--color-text-2);\n\n\toutline-offset: -2px !important;\n\tmin-width: 0;\n\tmax-width: 200px;\n\tmargin: 0;\n\tflex-shrink: 0;\n}\n\n.top-menu .top-menu_item[data-top-icon] {\n\t--top-icon-color: var(--color-text-2);\n}\n\n.top-menu_selectAll {\n\tposition: sticky;\n\tright: 0;\n\tbackground: var(--color-layout-front-1);\n\tborder-left: 1px solid var(--color-line-1);\n\tpadding-left: var(--top-padding-1);\n\tbox-shadow: var(--color-layout-front-1) var(--top-padding-2) 0px;\n}\n\n/* style default */\n.top-menu.top-style_default .top-menu_item {\n\t--top-forms-radius: 0;\n\t--top-forms-border-color: transparent;\n\t--top-forms-border-width: 2px;\n\n\tfilter: none;\n\tbox-shadow: none;\n\tborder: none;\n\tborder-bottom: var(--top-forms-border-width) solid var(--top-forms-border-color);\n\tbackground: none;\n}\n\n.top-style_default > .top-menu_item > [data-top-badge] {\n\tmargin-top: 0;\n}\n\n.top-menu.top-style_default .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-2);\n}\n\n.top-menu.top-style_default .top-menu_item:active,\n.top-menu.top-style_default .top-menu_item.top-active {\n\t--top-icon-color: var(--color-text-primary);\n\t--top-button-color: var(--color-text-1);\n\t--top-forms-border-color: var(--color-line-primary-1);\n}\n\n.top-menu.top-style_default .top-menu_selectAll {\n\tpadding-left: var(--top-padding-2);\n}\n\n/* style bar */\n.top-menu.top-style_bar {\n\tborder-radius: var(--top-radius-3);\n\tborder: 1px solid var(--color-line-2);\n\tpadding: var(--top-padding-1);\n\tgap: 3px;\n}\n.top-menu.top-style_bar .top-menu_item {\n\t--top-button-background-color-hover: var(--color-layer-1);\n\t--top-button-background-color-active: var(--color-layer-2);\n\t--top-button-background-color-selected: var(--color-layer-primary-1);\n\n\tposition: relative;\n}\n\n.top-menu.top-style_bar .top-menu_item:hover {\n\t--top-icon-color: var(--color-text-1);\n\t--top-button-color: var(--color-text-1);\n}\n\n.top-menu.top-style_bar .top-menu_item.top-active {\n\t--top-icon-color: var(--color-text-primary);\n\t--top-button-color: var(--color-text-primary);\n}\n\n/* разделители кнопок в баре */\n.top-menu.top-style_bar .top-menu_item:not(:first-child):not(.top-active):not(:hover):after {\n\tcontent: \"\";\n\tbackground: var(--color-line-1-opacity);\n\twidth: 1px;\n\theight: 60%;\n\tdisplay: block;\n\tposition: absolute;\n\tleft: -2px;\n}\n.top-menu.top-style_bar .top-menu_item.top-active + .top-menu_item:after,\n.top-menu.top-style_bar .top-menu_item:hover + .top-menu_item:after {\n\tcontent: none !important;\n}\n\n/*\n.top-style_bar > .top-menu_item > [data-top-badge] {\n\tmargin-top: -3px;\n}\n*/\n\n/** TODO: .top-unwrap-x надо вынести глобально в UI или добавить в стили для storybook */\n/*\n.top-menu.top-unwrap-x {\n\tpadding-right: var(--top-unwrap-x);\n\tpadding-left: var(--top-unwrap-x);\n\tmargin-right: calc(0px - var(--top-unwrap-x));\n\tmargin-left: calc(0px - var(--top-unwrap-x));\n}\n*/\n</style>\n","<script setup lang=\"ts\">\nimport type { EmitsItemMulti, PropsItemMulti } from './types';\n\ndefineProps<PropsItemMulti>();\ndefineEmits<EmitsItemMulti>();\n</script>\n\n<template>\n\t<div class=\"top-selector2_itemMulti top-ellipsis\">\n\t\t{{ name }}\n\n\t\t<span\n\t\t\tclass=\"top-selector2_itemMultiDelete\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click=\"$emit('delete', {id, name})\"\n\t\t\t@mousedown.stop\n\t\t></span>\n\t</div>\n</template>\n\n<style>\n.top-selector2_itemMulti {\n\tbox-sizing: border-box;\n\tpadding-left: var(--top-padding-2);\n\tborder-radius: var(--top-radius-1, 4px);\n\tborder: 1px solid var(--color-line-primary-1);\n\tbackground: var(--color-layer-primary-2);\n\tmin-height: 22px;\n\tmax-width: 100%;\n\tcolor: var(--color-text-1);\n\tflex-grow: 0;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-selector2_itemMultiDelete {\n\t--top-icon-size: 14px;\n\t--top-icon-width: 18px;\n\t--top-icon-color: var(--color-text-1);\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tcursor: pointer;\n}\n\n.top-selector2_itemMultiDelete:hover {\n\tbackground: var(--color-layer-primary-2);\n}\n\n@media screen and (min-width: 900px) {\n\t.top-selector2.top-active .top-selector2_itemMultiDelete {\n\t\tz-index: calc(var(--top-popup-z-index) + 1);\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { EmitsItemMulti, PropsItemMulti } from './types';\n\ndefineProps<PropsItemMulti>();\ndefineEmits<EmitsItemMulti>();\n</script>\n\n<template>\n\t<div class=\"top-selector2_itemMulti top-ellipsis\">\n\t\t{{ name }}\n\n\t\t<span\n\t\t\tclass=\"top-selector2_itemMultiDelete\"\n\t\t\tdata-top-icon=\"\"\n\t\t\t@click=\"$emit('delete', {id, name})\"\n\t\t\t@mousedown.stop\n\t\t></span>\n\t</div>\n</template>\n\n<style>\n.top-selector2_itemMulti {\n\tbox-sizing: border-box;\n\tpadding-left: var(--top-padding-2);\n\tborder-radius: var(--top-radius-1, 4px);\n\tborder: 1px solid var(--color-line-primary-1);\n\tbackground: var(--color-layer-primary-2);\n\tmin-height: 22px;\n\tmax-width: 100%;\n\tcolor: var(--color-text-1);\n\tflex-grow: 0;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tgap: var(--top-gap-1);\n}\n\n.top-selector2_itemMultiDelete {\n\t--top-icon-size: 14px;\n\t--top-icon-width: 18px;\n\t--top-icon-color: var(--color-text-1);\n\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\theight: 100%;\n\tcursor: pointer;\n}\n\n.top-selector2_itemMultiDelete:hover {\n\tbackground: var(--color-layer-primary-2);\n}\n\n@media screen and (min-width: 900px) {\n\t.top-selector2.top-active .top-selector2_itemMultiDelete {\n\t\tz-index: calc(var(--top-popup-z-index) + 1);\n\t}\n}\n</style>\n","import { type ModelRef, onUnmounted, ref, type Ref, triggerRef } from 'vue';\nimport type { Item, Props } from './types';\n\n/**\n * Кеш результата\n */\ntype Cache = Api.ResponseSuccess<Item[], 'get'>;\n\n/**\n * Кешируемый реактивный элемент\n */\ntype CachedRef = Ref<Item | Item[]> | ModelRef<Item | Item[]>\n\n/**\n * Список кешей для конкретного API метода\n */\nexport const cacheByMethod = new Map<Api.PathAbstract, Map<string, Cache>>();\n\n/**\n * Список кешированных сущностей для конкретного API метода\n *\n * Имеет ленивое заполнение и используется по мере необходимости\n */\nexport const cachedRefsByMethod = new Map<Api.PathAbstract, Set<CachedRef>>();\n\n/**\n * Счетчик изменений кеша для конкретного API метода\n */\nconst cacheVersionByMethod = new Map<Api.PathAbstract, Ref<number>>();\n\n/**\n * Получить счетчик изменений кеша\n */\nexport const getCacheVersion = (apiPath: Api.PathAbstract) => {\n\tif (!cacheVersionByMethod.has(apiPath)) {\n\t\tcacheVersionByMethod.set(apiPath, ref(0));\n\t}\n\n\treturn cacheVersionByMethod.get(apiPath)!;\n};\n\n/**\n * Увеличить счетчик изменений кеша\n */\nconst invalidateCache = (apiPath: Api.PathAbstract) => {\n\tgetCacheVersion(apiPath).value++;\n};\n\n/**\n * Сброс кеша конкретного API метода\n */\nexport const clearCache = (apiPath: Api.PathAbstract) => {\n\tcacheByMethod.get(apiPath)?.clear();\n\n\tinvalidateCache(apiPath);\n};\n\n/**\n * Обойти все кеши конкретного API метода\n */\nconst eachCacheItem = (apiPath: Api.PathAbstract, cb: (resCache: Cache) => void) => {\n\tconst caches = cacheByMethod.get(apiPath);\n\tcaches?.forEach((res) => cb(res));\n};\n\n/**\n * Обойти все кешируемые сущности конкретного API метода\n */\nconst eachCachedRef = (apiPath: Api.PathAbstract, cb: (cachedRef: CachedRef) => void) => {\n\tconst cachedRefs = cachedRefsByMethod.get(apiPath);\n\tcachedRefs?.forEach((cachedRef) => cb(cachedRef));\n};\n\nconst changeCachedRefById = (apiPath: Api.PathAbstract, id: Item['id'], patch: Partial<Item>) => {\n\teachCachedRef(apiPath, (cachedRef) => {\n\t\tlet changed = false;\n\n\t\tif (Array.isArray(cachedRef.value)) {\n\t\t\tcachedRef.value.filter((item) => item.id === id).forEach((cachedItem) => {\n\t\t\t\tObject.assign(cachedItem, patch);\n\n\t\t\t\tchanged = true;\n\t\t\t});\n\t\t} else {\n\t\t\tif (cachedRef.value.id !== id) return;\n\n\t\t\tObject.assign(cachedRef.value, patch);\n\n\t\t\tchanged = true;\n\t\t}\n\n\t\tif (changed) triggerRef(cachedRef);\n\t});\n};\n\nexport const genCacheKey = (api: NonNullable<Props['api']>) => {\n\tconst userId = window['mo']?.user?.id;\n\n\tconst cacheKey = JSON.stringify(api.params) + ':' + api.url + ':' + userId;\n\n\treturn cacheKey;\n};\n\nexport const getCache = (cacheKey: string, apiPath: Api.PathAbstract) => {\n\tconst res = cacheByMethod.get(apiPath)?.get(cacheKey);\n\tif (!res) return;\n\n\t/**\n\t * Кеш не должен создавать сайд эффекты ссылок двух объектов на одно и то же значение\n\t *\n\t * Даже если в одном случае кеш может быть полезным, в другом он не будет работать, что сильно усложнит проектировку реактивной связности\n\t *\n\t * Основной принцип:\n\t * - Кеш всегда возвращает разные объекты подобно тому, как это делает само API\n\t * - Реактивная связность должна настраиваться в бизнес логике приложения\n\t */\n\tres.result = res.result.map(item => ({ ...item }));\n\n\treturn res;\n};\n\nexport const setCache = (cacheKey: string, apiPath: Api.PathAbstract, data: Cache) => {\n\tif (!cacheByMethod.has(apiPath)) {\n\t\tcacheByMethod.set(apiPath, new Map());\n\t}\n\n\tcacheByMethod.get(apiPath)?.set(cacheKey, data);\n};\n\nexport const useCachedRef = (apiPath: Api.PathAbstract, ref: CachedRef) => {\n\tif (!cachedRefsByMethod.has(apiPath)) {\n\t\tcachedRefsByMethod.set(apiPath, new Set());\n\t}\n\n\tcachedRefsByMethod.get(apiPath)?.add(ref);\n\n\tonUnmounted(() => cachedRefsByMethod.get(apiPath)?.delete(ref));\n};\n\n/**\n * Обновить элемент во всех кешах API метода\n */\nexport const updateCacheItemById = (\n\tapiPath: Api.PathAbstract,\n\tid: Item['id'],\n\tpatch: Partial<Item>,\n) => {\n\teachCacheItem(apiPath, (res) => {\n\t\tconst item = res.result.find((item) => item.id === id);\n\t\tif (!item) return;\n\n\t\tObject.assign(item, patch);\n\t});\n\n\tchangeCachedRefById(apiPath, id, patch);\n\n\tinvalidateCache(apiPath);\n};\n\n/**\n * Удалить элемент из всех кешей API метода\n */\nexport const deleteCacheItemById = (\n\tapiPath: Api.PathAbstract,\n\tid: Item['id'],\n) => {\n\teachCacheItem(apiPath, (res) => {\n\t\tconst itemIndex = res.result.findIndex((item) => item.id === id);\n\t\tif (itemIndex === -1) return;\n\n\t\tres.result.splice(itemIndex, 1);\n\n\t\tif (res.nextOffset) {\n\t\t\tres.nextOffset--;\n\t\t}\n\t});\n\n\t/**\n\t * Model не сбрасываем, только меняем подпись, чтобы не вызывать ненужных эмитов и загрузок там, где они не нужны\n\t *\n\t * UX: не менять Model в компонентах, работа с которыми в данный момент не ведется\n\t */\n\tchangeCachedRefById(apiPath, id, { name: '--' });\n\n\tinvalidateCache(apiPath);\n};\n","import { type ModelRef, ref, watch } from 'vue';\nimport { debounce } from '../../../../core/utils/lodash';\nimport type { Item, Props } from '../types';\nimport { genCacheKey, getCache, getCacheVersion, setCache, useCachedRef } from '../cache';\n\nexport type API = ReturnType<typeof useAPI>;\n\nexport const useAPI = (\n\tapi: Props['api'],\n\tapiSetSearchParams: Props['apiSetSearchParams'],\n\tminLength: number,\n\tuseCache: Props['useCache'],\n\tmodel: ModelRef<Props['modelValue']>,\n) => {\n\t/**\n\t * Список, полученный через API\n\t */\n\tconst items = ref<Item[]>([]);\n\n\t/**\n\t * Флаг - идет загрузка\n\t */\n\tconst isLoading = ref(false);\n\n\tconst countLoading = ref(0);\n\n\tlet searchText = '';\n\tlet nextOffset: number | null | undefined;\n\n\tif (api && !api.params.limit) {\n\t\tapi.params.limit = 100;\n\t}\n\n\tif (api){\n\t\tuseCachedRef(api.path, model);\n\t}\n\n\t/**\n\t * Синхронизировать данные компонента с данными в кеше\n\t */\n\tconst syncItemsFromCache = () => {\n\t\tif (!api) return;\n\n\t\tapi.params.offset = 0;\n\n\t\tconst cacheKey = genCacheKey(api);\n\t\tconst cache = getCache(cacheKey, api.path);\n\t\tif (!cache) {\n\t\t\titems.value = [];\n\t\t\tnextOffset = undefined;\n\n\t\t\treturn;\n\t\t}\n\n\t\titems.value = cache.result;\n\n\t\tnextOffset = cache.nextOffset;\n\t};\n\n\tif (api && useCache) {\n\t\twatch(getCacheVersion(api.path), () => {\n\t\t\tsyncItemsFromCache();\n\t\t});\n\t}\n\n\t/**\n\t * Выполнить обращение к API\n\t *\n\t * При ошибке вернет undefined\n\t */\n\tconst callAPI = async (): Promise<Api.ResponseSuccess<any, 'get'> | undefined> => {\n\t\tif (!api) return;\n\n\t\tconst cacheKey = useCache ? genCacheKey(api) : undefined;\n\n\t\tif (cacheKey) {\n\t\t\tconst cache = getCache(cacheKey, api.path);\n\t\t\tif (cache) {\n\t\t\t\t// остановить запущенные api запросы\n\t\t\t\tapi.abortByFingerprint();\n\n\t\t\t\treturn cache;\n\t\t\t}\n\t\t}\n\n\t\tconst res = await api.call();\n\n\t\tif (res.errors) return;\n\n\t\tif (!Array.isArray(res.result)) {\n\t\t\tconsole.warn('Array expected in `res.result`');\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst indexWithError = (res.result as Array<Item | any>).findIndex(item => item.id === undefined || item.name === undefined);\n\t\tif (indexWithError !== -1) {\n\t\t\tconsole.warn(`В result[${indexWithError}] нет id или name`);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (cacheKey) {\n\t\t\tsetCache(cacheKey, api.path, res);\n\t\t}\n\n\t\treturn res as Api.ResponseSuccess<any, 'get'>;\n\t};\n\n\t/**\n\t * Загрузить items\n\t */\n\tconst load = async (append: boolean) => {\n\t\tif (!api) return;\n\n\t\tif (append) {\n\t\t\t// данных о следующих страницах не обнаружено\n\t\t\tif (!nextOffset) return;\n\n\t\t\t// дозагружать нельзя, если не завершена предыдущая загрузка\n\t\t\tif (isLoading.value) return;\n\n\t\t\tapi.params.offset = nextOffset;\n\t\t} else {\n\t\t\tapi.params.offset = 0;\n\t\t}\n\n\t\tapiSetSearchParams?.(api, searchText);\n\n\t\tisLoading.value = true;\n\t\tconst res = await callAPI();\n\t\tisLoading.value = false;\n\n\t\tcountLoading.value++;\n\n\t\tif (!res) return;\n\n\t\tnextOffset = res.nextOffset;\n\n\t\tif (append) {\n\t\t\titems.value = items.value.concat(res.result);\n\t\t} else {\n\t\t\titems.value = res.result;\n\t\t}\n\t};\n\n\tconst loadDebounce = debounce(() => load(false), 200);\n\n\t/**\n\t * Выполнить поиск по указанному тексту\n\t *\n\t * Если длина текста меньше minLength, поиск не будет произведен\n\t *\n\t * Если текст не изменился, поиск не будет произведен\n\t *\n\t * @param newSearchText - текст поиска\n\t * @param useDebounce - дедупликация загрузки списка\n\t */\n\tconst setSearchTextAndLoad = (newSearchText: string, useDebounce = true) => {\n\t\tif (!api) return;\n\n\t\t// остановить начатый поиск и сбросить результаты\n\t\tif (newSearchText.length < minLength) {\n\t\t\tapi.abortByFingerprint();\n\n\t\t\titems.value = [];\n\n\t\t\treturn;\n\t\t}\n\n\t\t// условия поиска не поменялись, данные загружены\n\t\tif (newSearchText === searchText && items.value.length) return;\n\n\t\tsearchText = newSearchText;\n\n\t\tif (useDebounce) {\n\t\t\tvoid loadDebounce();\n\t\t} else {\n\t\t\tvoid load(false);\n\t\t}\n\t};\n\n\treturn {\n\t\tapiRequest: api,\n\t\titems,\n\t\tisLoading,\n\t\tcountLoading,\n\t\tload,\n\t\tsetSearchTextAndLoad,\n\t};\n};\n","import type { Item, Props } from './types';\nimport { genFieldFilter } from '@/api/api';\n\n/**\n * Универсальный id для всех элементов \"Все элементы\" / \"Без фильтра\" в `TopSelector`\n */\nexport const ITEM_ID_ALL = 0;\n\n/**\n * Универсальный id для всех добавляемых элементов через `TopSelector`\n */\nexport const ITEM_ID_NEW = null;\n\n/**\n * Выбран ли элемент\n */\nexport const isSelected = (modelValue: Props['modelValue'], item: Item, checkNameForNullId = true) => {\n\tif (checkNameForNullId && item.id === ITEM_ID_NEW) {\n\t\tif (Array.isArray(modelValue)) {\n\t\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id && itemSelected.name === item.name);\n\t\t} else {\n\t\t\treturn item.name === modelValue.name;\n\t\t}\n\t}\n\n\tif (Array.isArray(modelValue)) {\n\t\treturn modelValue.some(itemSelected => itemSelected.id === item.id);\n\t} else {\n\t\treturn item.id === modelValue.id;\n\t}\n};\n\n/**\n * Вспомогательная утилита для создания `callback` функции на добавление фильтра по полю в api запрос\n *\n * Другие фильтры по указанному полю будут удалены\n *\n * @param api - api, которое используется в `TopSelector`\n * @param search - введенная строка поиска\n * @param fieldName - имя поля, по которому надо добавить фильтр на поиск по нестрогому соответствию\n *\n * @todo Объединить с apiSetSearchParamsFilter() из @/components/project/projectSelector/utils.ts\n */\nexport const apiSetSearchParamsFilter = (api: NonNullable<Props['api']>, search: string, fieldName: string) => {\n\tlet filters = api.params.filters ?? [];\n\n\t// удаление других фильтров по этому полю\n\tfilters = filters.filter((filter) => filter.name !== fieldName);\n\n\tif (search) {\n\t\tfilters.push(genFieldFilter(fieldName, 'CONTAINS', [search]));\n\t}\n\n\tapi.changeParams({ filters });\n};\n","import { computed, type ComputedRef, nextTick, ref, type Ref, watch } from 'vue';\nimport { invertKeyboardLayout } from '@/core/utils/keyboard';\nimport type { Item, Props } from '../types';\nimport { type API } from './useAPI';\nimport { isSelected, ITEM_ID_ALL, ITEM_ID_NEW } from '../utils';\nimport { useI18n } from '@/core/plugins/i18n';\n\n/**\n * Функционал поиска\n */\nexport const useMenu = <T extends Item = Item>(\n\tmodel: Ref<Props<T>['modelValue']>,\n\tprops: Readonly<Props<T>> & { minLength: number },\n\temits: ReturnType<typeof defineEmits>,\n\tapi: API,\n) => {\n\t/**\n\t * Текст поиска по результатам\n\t */\n\tconst searchText = ref('');\n\n\t/**\n\t * Объект, представляющий опцию \"Все\"\n\t */\n\tconst itemAll = {\n\t\tid: ITEM_ID_ALL,\n\t\tname: useI18n().Common.All as string,\n\t};\n\n\t/**\n\t * Сброс поиска\n\t */\n\tconst resetSearch = () => {\n\t\tsearchText.value = '';\n\t};\n\n\t/**\n\t * Является ли строка поиска достаточной длины для отображения меню\n\t */\n\tconst genIsShort = () => {\n\t\tif (!api.apiRequest) return false;\n\t\tif (searchText.value.length >= props.minLength) return false;\n\n\t\treturn true;\n\t};\n\n\t/**\n\t * Варианты выбора: props.items + \"Выбрать все\"\n\t */\n\tconst localItems: ComputedRef<Item[]> = computed(() => {\n\t\tconst localItems: Item[] = [];\n\n\t\tif (!props.multiselect && props.useAllItem) {\n\t\t\tif (typeof props.useAllItem === 'string') {\n\t\t\t\titemAll.name = props.useAllItem;\n\t\t\t}\n\n\t\t\tlocalItems.push(itemAll);\n\t\t}\n\n\t\t/**\n\t\t * Сохранить исходные ссылки, чтобы внешние изменения вложенных полей оставались реактивными\n\t\t *\n\t\t * Важно следить, чтобы после этого `item` локально не изменялись\n\t\t */\n\t\tprops.items?.forEach(item => localItems.push(item));\n\n\t\treturn localItems;\n\t});\n\n\t/**\n\t * Не используем `computed` в пользу ручного порядка пересчета значения\n\t */\n\tconst itemsForShow = ref<Item[]>([]);\n\tconst itemsForShowCount = ref(props.itemsChunkSize);\n\n\tconst recalcItemsForShow = () => {\n\t\titemsForShow.value = genItemsForShow();\n\t};\n\n\t/**\n\t * Показать следующую порцию локальных элементов\n\t */\n\tconst revelItemsForShow = () => {\n\t\tif (!props.itemsChunkSize || itemsForShowCount.value === undefined) return;\n\n\t\titemsForShowCount.value += props.itemsChunkSize;\n\t};\n\n\t/**\n\t * При новом открытии и новом поиске начать вывод локального списка сначала\n\t */\n\tconst resetItemsForShow = () => {\n\t\tif (props.itemsChunkSize) {\n\t\t\titemsForShowCount.value = props.itemsChunkSize;\n\t\t}\n\t};\n\n\t/**\n\t * Подготовленный список меню, который содержит в сумме:\n\t * - prop.items: указанный список с учетом фильтра и опций компонента\n\t * - api.items: результаты api запроса, если используется api\n\t *\n\t * @returns Отфильтрованный массив элементов для отображения\n\t */\n\tconst genItemsForShow = () => {\n\t\tconst searchString = searchText.value.toLowerCase();\n\t\tconst searchStringInvertKeyboard = invertKeyboardLayout(searchString);\n\n\t\tlet items: Item[] = [];\n\n\t\t/**\n\t\t * Элемент текущего разделителя в цикле\n\t\t *\n\t\t * Для скрытия / отображения только нужных заголовков и разделителей при поиске\n\t\t *\n\t\t * Логика для `api.items` должна реализовываться в api или api клиенте при генерации элементов\n\t\t */\n\t\tlet itemTitleCategory: Item | undefined;\n\t\tconst itemsCategory: Item[] = [];\n\n\t\t/**\n\t\t * Добавить элементы в результирующий список\n\t\t */\n\t\tconst flushCategory = () => {\n\t\t\t// крайний разделитель не выводить\n\t\t\tif (itemsCategory.at(-1)?.listItemProps?.type === 'delimiter') {\n\t\t\t\titemsCategory.pop();\n\t\t\t}\n\n\t\t\tif (itemsCategory.length) {\n\t\t\t\tif (itemTitleCategory) {\n\t\t\t\t\titems.push(itemTitleCategory);\n\t\t\t\t}\n\n\t\t\t\titems.push(...itemsCategory);\n\n\t\t\t\titemsCategory.length = 0;\n\t\t\t}\n\t\t};\n\n\t\tconst pushMatchedItemToCategory = (item: Item) => {\n\t\t\tconst hasIdSearch = props.searchFields?.includes('id');\n\t\t\tconst name = item.name.toLowerCase();\n\n\t\t\tconst searchFieldsText = props.searchFields\n\t\t\t\t?.filter(field => field !== 'id')\n\t\t\t\t.map(field => typeof item[field] === 'string' || typeof item[field] === 'number' ? item[field] : '')\n\t\t\t\t.join('☼')\n\t\t\t\t.toLowerCase();\n\n\t\t\tif (\n\t\t\t\t(hasIdSearch && item.id === Number(searchString)) ||\n\t\t\t\tsearchFieldsText?.includes(searchString) ||\n\t\t\t\tsearchFieldsText?.includes(searchStringInvertKeyboard)\n\t\t\t) {\n\t\t\t\tif (name === searchString || name === searchStringInvertKeyboard) {\n\t\t\t\t\t// точные совпадения в начало\n\t\t\t\t\titemsCategory.unshift(item);\n\t\t\t\t} else {\n\t\t\t\t\titemsCategory.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfor (const item of localItems.value) {\n\t\t\tswitch (item.listItemProps?.type) {\n\t\t\t\tcase 'title':\n\t\t\t\t\tflushCategory();\n\n\t\t\t\t\titemTitleCategory = item;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'delimiter':\n\t\t\t\t\t// вставить разделитель один раз и только если категория не пуста\n\t\t\t\t\tif (itemsCategory.length) {\n\t\t\t\t\t\tlet index = itemsCategory.length;\n\t\t\t\t\t\tif (itemsCategory.at(-1)?.listItemProps?.type === 'delimiter') index--;\n\n\t\t\t\t\t\titemsCategory[index] = item;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tpushMatchedItemToCategory(item);\n\t\t\t}\n\t\t}\n\n\t\tflushCategory();\n\n\t\titems.push(...api.items.value);\n\n\t\tif (props.itemsChunkSize && !api.apiRequest) {\n\t\t\titems = items.slice(0, itemsForShowCount.value);\n\t\t}\n\n\t\t// ввод произвольного значения\n\t\tif (\n\t\t\tprops.appendSearchToResult &&\n\t\t\t!!searchText.value &&\n\t\t\t(!props.appendSearchToResultCond || props.appendSearchToResultCond(searchString)) &&\n\n\t\t\t// предложить добавить элемент, если нет точного совпадения или разрешены дубликаты\n\t\t\t(\n\t\t\t\tprops.appendSearchAllowDuplicate ||\n\t\t\t\t!items.find((item) => item.name.toLowerCase() === searchString)\n\t\t\t)\n\t\t) {\n\t\t\tconst itemNew: Item = {\n\t\t\t\tid: ITEM_ID_NEW,\n\t\t\t\tname: searchText.value,\n\t\t\t};\n\n\t\t\tif (props.appendWithoutSelect) {\n\t\t\t\titemNew.listItemProps = { closeByClick: false };\n\t\t\t}\n\n\t\t\t// предложение всегда отображается внизу, чтобы не мешать результатам поиска\n\t\t\titems.push(itemNew);\n\t\t}\n\n\t\tif (props.multiselect) {\n\t\t\titems = items.filter(item => !isSelected(model.value, item));\n\t\t}\n\n\t\tif (props.prepareItemsBeforeRender) {\n\t\t\titems = props.prepareItemsBeforeRender(items);\n\t\t}\n\n\t\treturn items;\n\t};\n\n\t/**\n\t * Выбрать элемент\n\t *\n\t * @param item Элемент для выбора\n\t */\n\tconst selectItem = (item: Item) => {\n\t\t/**\n\t\t * Ссылку важно сохранять, так как переданные items могут быть реактивными\n\t\t */\n\t\t// item = { ...item };\n\n\t\t// это невыбираемый элемент\n\t\tif (item.listItemProps?.type === 'title' || item.listItemProps?.type === 'delimiter') {\n\t\t\treturn;\n\t\t}\n\n\t\tif (item.id === ITEM_ID_NEW) {\n\t\t\temits('appendItem', item);\n\n\t\t\tif (props.appendWithoutSelect) return;\n\t\t}\n\n\t\tif (props.multiselect && Array.isArray(model.value)) {\n\t\t\tif (!isSelected(model.value, item)) {\n\t\t\t\tmodel.value = [...model.value, item];\n\t\t\t}\n\t\t} else {\n\t\t\tmodel.value = item;\n\t\t}\n\n\t\t/**\n\t\t * Отложить перерисовку\n\t\t *\n\t\t * fix: Перерисовка меню выполняется раньше, чем срабатывает `click`.\n\t\t * Из-за этого обработчик кликов думает, что клик был вне меню и не закрывает окно\n\t\t *\n\t\t * Файл: @/components/popup/lib/popup.globalEvents.ts\n\t\t *\n\t\t * Функция: onclick()\n\t\t *\n\t\t * ```\n\t\t * const elPopup = e.target.closest<HTMLElement>('.top-popup-wrapper');\n\t\t * ```\n\t\t */\n\t\tsetTimeout(() => {\n\t\t\t/**\n\t\t\t * Завершить поиск после выбора\n\t\t\t */\n\t\t\tresetSearch();\n\t\t});\n\n\t\t// /**\n\t\t// * При изменении значения модели в режиме inline необходимо очистить поле поиска,\n\t\t// * так как поиск больше не актуален после выбора значения\n\t\t// */\n\t\t// if (searchType.value === 'inline') {\n\t\t// \tresetSearch();\n\t\t// }\n\t};\n\n\tif (api.apiRequest) {\n\t\t// загрузка только при открытии popup\n\t\tconst fieldsForWatch: any = [() => props.items, api.items];\n\n\t\t// model нужен только для multiselect, без необходимости не использовать для улучшения UX при работе с API\n\t\tif (props.multiselect) {\n\t\t\tfieldsForWatch.push(model);\n\t\t}\n\n\t\twatch(fieldsForWatch, () => {\n\t\t\trecalcItemsForShow();\n\t\t}, {\n\t\t\tdeep: 2,\n\t\t});\n\t} else {\n\t\twatch(searchText, () => {\n\t\t\tresetItemsForShow();\n\t\t});\n\n\t\twatch([model, () => props.items, searchText, itemsForShowCount], () => {\n\t\t\trecalcItemsForShow();\n\t\t}, {\n\t\t\timmediate: true,\n\n\t\t\t// слежение за изменениями `items`\n\t\t\tdeep: 2,\n\t\t});\n\n\t\t/**\n\t\t * Обновить значение `model` для удаляемых элементов, указанных через `props.items`\n\t\t *\n\t\t * Перехватываются события:\n\t\t * - из списка удален элемент\n\t\t * - список массив полностью перезагружен\n\t\t *\n\t\t * Есть гипотетическая погрешность, что элемент может быть удален и сразу добавлен новый, или элемент списка будут заменен на другой без уменьшения длины массива.\n\t\t * Это редкий и наверняка невероятный случай, который мы игнорируем в пользу производительности\n\t\t */\n\t\twatch(\n\t\t\t[\n\t\t\t\t() => props.items?.length ?? 0,\n\t\t\t\t() => props.items,\n\t\t\t],\n\t\t\tasync (newValues, oldValues) => {\n\t\t\t\tif (newValues[0] < oldValues[0] || newValues[1] !== oldValues[1]) {\n\t\t\t\t\t/**\n\t\t\t\t\t * Ожидаем стандартную обработку компонента, например сброс выбранной группы при смене папки\n\t\t\t\t\t *\n\t\t\t\t\t * Если это не сделать, то код ниже может решить, что произошло удаление группы, так как старое значение `model.value`\n\t\t\t\t\t * указывает на несуществующий элемент, и поменяет элемент, который реально существует\n\t\t\t\t\t */\n\t\t\t\t\tawait nextTick();\n\n\t\t\t\t\tconst selectedItems = Array.isArray(model.value) ? model.value : [model.value];\n\t\t\t\t\tselectedItems.forEach((selectedItem) => {\n\t\t\t\t\t\tif (selectedItem.id === itemAll.id) return;\n\n\t\t\t\t\t\tconst exists = !!props.items?.find((item) => item.id === selectedItem.id);\n\t\t\t\t\t\tif (!exists) {\n\t\t\t\t\t\t\t/**\n\t\t\t\t\t\t\t * @see import('cache.ts').deleteCacheItemById() - См. описание, почему не удаляем выбранное значение\n\t\t\t\t\t\t\t */\n\t\t\t\t\t\t\tselectedItem.name = '--';\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\t\t);\n\t}\n\n\t/**\n\t * Выбрать следующее значение\n\t */\n\tconst selectNextItem = () => {\n\t\tif (Array.isArray(model.value)) return;\n\n\t\tconst selectableItems = itemsForShow.value.filter((item) => !['title', 'delimiter'].includes(item.listItemProps?.type ?? ''));\n\n\t\tconst currentIndex = selectableItems.findIndex(item => item.id === (model.value as Item).id);\n\t\tconst nextIndex = (currentIndex + 1) % selectableItems.length;\n\t\tmodel.value = { ...selectableItems[nextIndex] };\n\t};\n\n\t/**\n\t * Удалить элемент, `id` и `name` которого равны указанному `item`\n\t */\n\tconst deleteItemByItem = async (item: Item) => {\n\t\tif (Array.isArray(model.value)) {\n\t\t\tmodel.value = model.value.filter((itemI) => itemI.id !== item.id || itemI.name !== item.name);\n\t\t}\n\t};\n\n\treturn {\n\t\tsearchText,\n\t\tresetSearch,\n\t\tgenIsShort,\n\t\titemsForShow,\n\t\trevelItemsForShow,\n\t\tresetItemsForShow,\n\t\tselectItem,\n\t\tselectNextItem,\n\t\tdeleteItemByItem,\n\t};\n};\n","<script setup lang=\"ts\" generic=\"T extends Item = Item\">\nimport { computed, ref, watch } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport Core from '@/core/core/core';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport { TopButton, TopInput, TopPreloader } from '@/components/forms/forms';\nimport type { Emits, Item, Props, Slots } from './types';\nimport Selector2ItemMulti from './itemMulti.vue';\nimport { useAPI } from './composables/useAPI';\nimport { useMenu } from './composables/useMenu';\nimport type { TopLibPopup } from '../../popup/lib/popup';\nimport { clearCache, deleteCacheItemById, updateCacheItemById } from './cache';\nimport { ITEM_ID_ALL, ITEM_ID_NEW } from './utils';\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n\titems: () => [],\n\tsize: 's',\n\tminLength: 0,\n\tsearchType: 'popup',\n\topenByFocusInput: undefined,\n\tsearchFields: () => ['id', 'name'],\n});\n\nconst model = defineModel<Props<T>['modelValue']>({ required: true });\n\ndefineSlots<Slots<T>>();\n\nconst emits = defineEmits<Emits>();\n\nconst searchTypeLocal = computed(() => {\n\t// multiselect не поддерживает inline ввода\n\tif (props.searchType === 'inline' && props.multiselect) return 'popup';\n\n\t// В мобильной версии popup работает в полноэкранном режиме\n\tif (props.searchType === 'inline' && Core.state.isMobile) return 'popup';\n\n\treturn props.searchType;\n});\n\n/**\n * Объект для работы с API\n */\nconst api = useAPI(props.api, props.apiSetSearchParams, props.minLength, props.useCache, model);\n\n/**\n * Объект для работы с меню\n */\nconst menu = useMenu<T>(model, props, emits, api);\n\nconst component = computed(() => {\n\tif (props.buttonProps) return 'TopButton';\n\tif (searchTypeLocal.value === 'inline') return 'TopInput';\n\n\treturn 'div';\n});\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef = ref<any>(null);\n\nconst popupOpenerRef = ref<HTMLElement | ComponentExposed<typeof TopButton> | ComponentExposed<typeof TopInput> | null>(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): TopLibPopup | undefined => {\n\treturn popupRef.value?.popup;\n};\n\nif (api.apiRequest) {\n\t// отложенный поиск при вводе текста\n\twatch(menu.searchText, () => {\n\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\t});\n}\n\nconst placeholder = computed(() => {\n\tif (Array.isArray(model.value) || props.multiselect || !props.selectedAsPlaceholder && searchTypeLocal.value !== 'inline') {\n\t\treturn props.placeholder;\n\t}\n\n\treturn model.value?.name || props.placeholder;\n});\n\n/**\n * Обработчик ввода клавиш на кнопке или поле ввода\n */\nconst onOpenerKeydown = (e: KeyboardEvent) => {\n\tlet needOpen = false;\n\n\tswitch (e.key) {\n\t\tcase 'Delete':\n\t\tcase 'Backspace':\n\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tmodel.value.pop();\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'ArrowUp':\n\t\tcase 'ArrowRight':\n\t\tcase 'ArrowDown':\n\t\tcase 'ArrowLeft':\n\t\tcase 'Enter':\n\t\tcase ' ':\n\t\t\tneedOpen = true;\n\n\t\t\tbreak;\n\t\tcase 'Escape':\n\t\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\t\t// очистка введенного текста\n\t\t\t\tmenu.resetSearch();\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\t// введен символ\n\tconst symbolPressed = e.key.length === 1 && !e.ctrlKey && !e.metaKey;\n\n\t// введен символ\n\tif (searchTypeLocal.value === 'popup' || searchTypeLocal.value === 'inline') {\n\t\tif (symbolPressed) {\n\t\t\tneedOpen = true;\n\t\t}\n\t}\n\n\t// popup уже открыт\n\tif (getPopup()?.elPopup) {\n\t\tneedOpen = false;\n\t}\n\n\tif (needOpen) {\n\t\tif (searchTypeLocal.value === 'popup') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\t// введен символ\n\t\t\tif (symbolPressed) {\n\t\t\t\t// начало ввода, сразу ввести первый символ вместе с открытием popup\n\t\t\t\tif (!menu.searchText.value) {\n\t\t\t\t\tmenu.searchText.value = e.key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t(e.currentTarget as HTMLElement)?.click();\n\t}\n};\n\nconst onClickChanger = (e: MouseEvent) => {\n\te.preventDefault();\n\n\tmenu.selectNextItem();\n};\n\n/**\n * Обработчик открытия попапа\n */\nconst onOpen = () => {\n\tif (api.apiRequest) {\n\t\t// при открытии сразу выполнить поиск\n\t\tapi.setSearchTextAndLoad(menu.searchText.value, false);\n\t}\n\n\temits('open');\n};\n\n/**\n * Обработчик закрытия попапа\n */\nconst onClose = () => {\n\tmenu.resetItemsForShow();\n\n\t// очистка введенного текста, в режиме `inline` input вызывается при `blur`\n\tif (searchTypeLocal.value === 'popup') {\n\t\tif (menu.searchText.value) menu.resetSearch();\n\t}\n};\n\n/**\n * Обработчик прокрутки списка контента\n *\n * Для дозагрузки элеменов\n *\n * @param {Event} e - Событие прокрутки\n */\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tif (props.api) {\n\t\t\tapi.load(true);\n\t\t} else {\n\t\t\tmenu.revelItemsForShow();\n\t\t}\n\t}\n};\n\ndefineExpose({\n\t/**\n\t * Получить объект компонента TopPopup\n\t */\n\tgetPopup,\n\n\t/**\n\t * Компонент кнопки открытия TopPopup\n\t *\n\t * Это `HTMLElement`, `TopButton` или `TopInput` в зависимости от `props.buttonProps` и `props.searchType`\n\t */\n\tpopupOpenerRef,\n\n\t/**\n\t * Сброс локального кеша и кеша API\n\t *\n\t * При сбросе кеша API влияет на все компоненты TopSelector с этим кешем\n\t *\n\t * @param resetAPICache - Сбросить API кеш, по умолчанию не сбрасывается. Для случаев, когда загруженные данные становятся неактуальными\n\t */\n\tresetCache: (resetAPICache: boolean = false) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// сброс кеша api\n\t\tif (resetAPICache) {\n\t\t\tclearCache(api.apiRequest.path);\n\t\t}\n\n\t\t// сброс кеша списка\n\t\tapi.items.value = [];\n\n\t\t// сброс флага первичной загрузки\n\t\tapi.countLoading.value = 0;\n\n\t\t// сброс параметров дозагрузки\n\t\tapi.apiRequest.params.offset = 0;\n\n\t\t// сброс кеша локального списка с дополнительными элементами, например `useAllItem`\n\t\trequestAnimationFrame(() => {\n\t\t\tmenu.itemsForShow.value = [];\n\t\t});\n\n\t\t// сразу загрузить данные после сброса, если popup уже открыт\n\t\tif (getPopup()?.elPopup) {\n\t\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\t\t}\n\t},\n\n\t/**\n\t * Локально обновить элемент списка по `id`, без перезагрузки через API\n\t */\n\tupdateCacheItemById: (id: T['id'], patch: Partial<T>) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// Так как кеш API синхронизирован с api.items, то менять элемент в `api.items` нет смысла\n\t\t// const item = api.items.value.find((item) => item.id === id);\n\t\t// if (item) {\n\t\t// \tObject.assign(item, patch);\n\t\t// }\n\n\t\tupdateCacheItemById(api.apiRequest.path, id, patch);\n\t},\n\n\t/**\n\t * Удалить элемент списка по `id` во всех связанных инстансах без перезагрузки через API\n\t */\n\tdeleteCacheItemById: (id: T['id']) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// Так как кеш API синхронизирован с api.items, то удалять элемент из `api.items` нет смысла\n\t\t// const itemIndex = api.items.value.findIndex((item) => item.id === id);\n\t\t//\n\t\t// if (itemIndex !== -1) {\n\t\t// \tapi.items.value.splice(itemIndex, 1);\n\t\t// }\n\n\t\tdeleteCacheItemById(api.apiRequest.path, id);\n\t},\n});\n\nif (import.meta.env.STORYBOOK) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tif (props.multiselect) {\n\t\t\t\tif (!Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tname: 'Выбери меня',\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = {\n\t\t\t\t\t\tid: null,\n\t\t\t\t\t\tname: '',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ immediate: true },\n\t);\n\n\twatch(\n\t\t() => props.searchType,\n\t\t() => {\n\t\t\t// пауза для установки props в адресной строке\n\t\t\tsetTimeout(() => {\n\t\t\t\tlocation.reload();\n\t\t\t}, 500);\n\t\t},\n\t);\n}\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"onOpen()\"\n\t\t@close=\"onClose()\"\n\t\t@scrollContentList=\"onScrollContentList($event)\"\n\t\t:notch=\"false\"\n\t\t:transitionDuration=\"0\"\n\t\t:openByFocusInput=\"searchTypeLocal === 'inline' && (openByFocusInput ?? true)\"\n\t\t:disabled=\"searchTypeLocal === 'inline' && menu.genIsShort()\"\n\t>\n\t\t<template #opener>\n\t\t\t<component\n\t\t\t\tref=\"popupOpenerRef\"\n\n\t\t\t\t:is=\"component\"\n\n\t\t\t\t:=\"buttonProps\"\n\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2': true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-selector2-' + modificator]: !!modificator,\n\t\t\t\t\t'top-as-input': !buttonProps && searchTypeLocal !== 'inline',\n\t\t\t\t\t'top-as-selector': true,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t\t:icon\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@keydown=\"onOpenerKeydown\"\n\t\t\t\t@blur=\"searchTypeLocal === 'inline' && menu.resetSearch()\"\n\t\t\t\tv-top-focus.onupdate=\"isError\"\n\t\t\t\tv-top-shortcut=\"openerShortcut\"\n\n\t\t\t\t:placeholder\n\t\t\t\t:title\n\t\t\t\t:captionType=\"searchTypeLocal === 'inline' && title !== undefined ? 'top' : undefined\"\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Item[]\"\n\t\t\t\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"menu.deleteItemByItem\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"searchTypeLocal !== 'inline' && !multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"multiselect && !model.length\" class=\"top-selector2_placeholder top-ellipsis\">\n\t\t\t\t\t{{ placeholder }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !buttonProps && !multiselect && menu.itemsForShow.value.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector\"\n\t\t\t\t\tdata-top-popup-disabled=\"true\"\n\t\t\t\t\t@click=\"onClickChanger\"\n\t\t\t\t></span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<template #widget v-if=\"searchTypeLocal === 'popup'\">\n\t\t\t<div class=\"top-selector2_searchWidget\">\n\t\t\t\t<TopPopupWidgetInput\n\t\t\t\t\ttitle=\"Поиск\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t\t\tv-top-focus.onupdate=\"model\"\n\t\t\t\t\t:isLoading=\"!!api.countLoading.value && api.isLoading.value\"\n\t\t\t\t\t:placeholder\n\t\t\t\t/>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"hasCloserBtn && !$core.state.isMobile\"\n\t\t\t\t\tclass=\"closer\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t>\n\t\t\t\t\t{{ $i18n.Common.Cancel }}\n\t\t\t\t</TopButton>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of menu.itemsForShow.value\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.id === item.id && model.name === item.name,\n\t\t\t\t\t'top-selector2_item-all': item.id === ITEM_ID_ALL,\n\t\t\t\t\t'top-selector2_item-new': item.id === ITEM_ID_NEW,\n\t\t\t\t}\"\n\t\t\t\t:closeByClick=\"!multiselect || Core.state.isMobile\"\n\t\t\t\t:=\"item.listItemProps\"\n\t\t\t\t@click=\"menu.selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\n\t\t\t\t<template v-if=\"$slots.actions\" #actions>\n\t\t\t\t\t<slot name=\"actions\" :item></slot>\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<!-- Элементов для отображения нет -->\n\t\t\t<template v-if=\"!menu.itemsForShow.value.length && !menu.genIsShort()\">\n\t\t\t\t<TopPopupListItem type=\"regular\">\n\t\t\t\t\t<!-- Индикатор первичной загрузки -->\n\t\t\t\t\t<TopPreloader\n\t\t\t\t\t\tv-if=\"api.isLoading.value && !api.countLoading.value || itemsIsLoading\"\n\t\t\t\t\t\ttype=\"circles\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t\t\t</template>\n\t\t\t\t</TopPopupListItem>\n\t\t\t</template>\n\n\t\t\t<!-- Индикатор повторной загрузки -->\n\t\t\t<TopLoadbar v-if=\"!!api.countLoading.value && api.isLoading.value && searchTypeLocal === 'inline'\"/>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n}\n\n.top-selector2::placeholder,\n.top-selector2_placeholder {\n\tcolor: var(--color-text-2);\n}\n\n.top-selector2_placeholder {\n\tpadding-left: var(--top-padding-1);\n}\n\n.top-selector2.top-as-input {\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n}\n\n.top-selector2.top-selector2-multiselect {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tflex-grow: 1;\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n}\n\n.top-selector2_searchWidget {\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\tfont-size: var(--top-font-size);\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tmargin: calc(0px - var(--top-padding-1));\n\ttransform: translateX(0);\n}\n\n.top-selector2.top-button {\n\tjustify-content: start;\n}\n\n.top-selector2.top-input_input ~ .top-changer-selector {\n\ttransform: translateX(-52px);\n}\n\n.top-selector2.top-as-selector {\n\tpadding-right: calc(var(--top-selector-arrow-width) + var(--top-padding-2));\n}\n</style>\n","<script setup lang=\"ts\" generic=\"T extends Item = Item\">\nimport { computed, ref, watch } from 'vue';\nimport type { ComponentExposed } from 'vue-component-type-helpers';\nimport Core from '@/core/core/core';\nimport { TopPopup, TopPopupListItem, TopPopupWidgetInput } from '@/components/popup/popup';\nimport { TopButton, TopInput, TopPreloader } from '@/components/forms/forms';\nimport type { Emits, Item, Props, Slots } from './types';\nimport Selector2ItemMulti from './itemMulti.vue';\nimport { useAPI } from './composables/useAPI';\nimport { useMenu } from './composables/useMenu';\nimport type { TopLibPopup } from '../../popup/lib/popup';\nimport { clearCache, deleteCacheItemById, updateCacheItemById } from './cache';\nimport { ITEM_ID_ALL, ITEM_ID_NEW } from './utils';\n\nconst props = withDefaults(defineProps<Props<T>>(), {\n\titems: () => [],\n\tsize: 's',\n\tminLength: 0,\n\tsearchType: 'popup',\n\topenByFocusInput: undefined,\n\tsearchFields: () => ['id', 'name'],\n});\n\nconst model = defineModel<Props<T>['modelValue']>({ required: true });\n\ndefineSlots<Slots<T>>();\n\nconst emits = defineEmits<Emits>();\n\nconst searchTypeLocal = computed(() => {\n\t// multiselect не поддерживает inline ввода\n\tif (props.searchType === 'inline' && props.multiselect) return 'popup';\n\n\t// В мобильной версии popup работает в полноэкранном режиме\n\tif (props.searchType === 'inline' && Core.state.isMobile) return 'popup';\n\n\treturn props.searchType;\n});\n\n/**\n * Объект для работы с API\n */\nconst api = useAPI(props.api, props.apiSetSearchParams, props.minLength, props.useCache, model);\n\n/**\n * Объект для работы с меню\n */\nconst menu = useMenu<T>(model, props, emits, api);\n\nconst component = computed(() => {\n\tif (props.buttonProps) return 'TopButton';\n\tif (searchTypeLocal.value === 'inline') return 'TopInput';\n\n\treturn 'div';\n});\n\n/**\n * Экземпляр компонента Popup\n */\nconst popupRef = ref<any>(null);\n\nconst popupOpenerRef = ref<HTMLElement | ComponentExposed<typeof TopButton> | ComponentExposed<typeof TopInput> | null>(null);\n\n/**\n * Получить доступ к объекту popup\n */\nconst getPopup = (): TopLibPopup | undefined => {\n\treturn popupRef.value?.popup;\n};\n\nif (api.apiRequest) {\n\t// отложенный поиск при вводе текста\n\twatch(menu.searchText, () => {\n\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\t});\n}\n\nconst placeholder = computed(() => {\n\tif (Array.isArray(model.value) || props.multiselect || !props.selectedAsPlaceholder && searchTypeLocal.value !== 'inline') {\n\t\treturn props.placeholder;\n\t}\n\n\treturn model.value?.name || props.placeholder;\n});\n\n/**\n * Обработчик ввода клавиш на кнопке или поле ввода\n */\nconst onOpenerKeydown = (e: KeyboardEvent) => {\n\tlet needOpen = false;\n\n\tswitch (e.key) {\n\t\tcase 'Delete':\n\t\tcase 'Backspace':\n\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\n\t\t\t\tmodel.value.pop();\n\t\t\t}\n\n\t\t\tbreak;\n\t\tcase 'ArrowUp':\n\t\tcase 'ArrowRight':\n\t\tcase 'ArrowDown':\n\t\tcase 'ArrowLeft':\n\t\tcase 'Enter':\n\t\tcase ' ':\n\t\t\tneedOpen = true;\n\n\t\t\tbreak;\n\t\tcase 'Escape':\n\t\t\tif (searchTypeLocal.value === 'inline') {\n\t\t\t\t// очистка введенного текста\n\t\t\t\tmenu.resetSearch();\n\t\t\t}\n\n\t\t\tbreak;\n\t}\n\n\t// введен символ\n\tconst symbolPressed = e.key.length === 1 && !e.ctrlKey && !e.metaKey;\n\n\t// введен символ\n\tif (searchTypeLocal.value === 'popup' || searchTypeLocal.value === 'inline') {\n\t\tif (symbolPressed) {\n\t\t\tneedOpen = true;\n\t\t}\n\t}\n\n\t// popup уже открыт\n\tif (getPopup()?.elPopup) {\n\t\tneedOpen = false;\n\t}\n\n\tif (needOpen) {\n\t\tif (searchTypeLocal.value === 'popup') {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\n\t\t\t// введен символ\n\t\t\tif (symbolPressed) {\n\t\t\t\t// начало ввода, сразу ввести первый символ вместе с открытием popup\n\t\t\t\tif (!menu.searchText.value) {\n\t\t\t\t\tmenu.searchText.value = e.key;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t(e.currentTarget as HTMLElement)?.click();\n\t}\n};\n\nconst onClickChanger = (e: MouseEvent) => {\n\te.preventDefault();\n\n\tmenu.selectNextItem();\n};\n\n/**\n * Обработчик открытия попапа\n */\nconst onOpen = () => {\n\tif (api.apiRequest) {\n\t\t// при открытии сразу выполнить поиск\n\t\tapi.setSearchTextAndLoad(menu.searchText.value, false);\n\t}\n\n\temits('open');\n};\n\n/**\n * Обработчик закрытия попапа\n */\nconst onClose = () => {\n\tmenu.resetItemsForShow();\n\n\t// очистка введенного текста, в режиме `inline` input вызывается при `blur`\n\tif (searchTypeLocal.value === 'popup') {\n\t\tif (menu.searchText.value) menu.resetSearch();\n\t}\n};\n\n/**\n * Обработчик прокрутки списка контента\n *\n * Для дозагрузки элеменов\n *\n * @param {Event} e - Событие прокрутки\n */\nconst onScrollContentList = (e: Event) => {\n\tconst el = e.target as HTMLElement;\n\n\tif (el.scrollTop / (el.scrollHeight - el.offsetHeight) > 0.8) {\n\t\tif (props.api) {\n\t\t\tapi.load(true);\n\t\t} else {\n\t\t\tmenu.revelItemsForShow();\n\t\t}\n\t}\n};\n\ndefineExpose({\n\t/**\n\t * Получить объект компонента TopPopup\n\t */\n\tgetPopup,\n\n\t/**\n\t * Компонент кнопки открытия TopPopup\n\t *\n\t * Это `HTMLElement`, `TopButton` или `TopInput` в зависимости от `props.buttonProps` и `props.searchType`\n\t */\n\tpopupOpenerRef,\n\n\t/**\n\t * Сброс локального кеша и кеша API\n\t *\n\t * При сбросе кеша API влияет на все компоненты TopSelector с этим кешем\n\t *\n\t * @param resetAPICache - Сбросить API кеш, по умолчанию не сбрасывается. Для случаев, когда загруженные данные становятся неактуальными\n\t */\n\tresetCache: (resetAPICache: boolean = false) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// сброс кеша api\n\t\tif (resetAPICache) {\n\t\t\tclearCache(api.apiRequest.path);\n\t\t}\n\n\t\t// сброс кеша списка\n\t\tapi.items.value = [];\n\n\t\t// сброс флага первичной загрузки\n\t\tapi.countLoading.value = 0;\n\n\t\t// сброс параметров дозагрузки\n\t\tapi.apiRequest.params.offset = 0;\n\n\t\t// сброс кеша локального списка с дополнительными элементами, например `useAllItem`\n\t\trequestAnimationFrame(() => {\n\t\t\tmenu.itemsForShow.value = [];\n\t\t});\n\n\t\t// сразу загрузить данные после сброса, если popup уже открыт\n\t\tif (getPopup()?.elPopup) {\n\t\t\tapi.setSearchTextAndLoad(menu.searchText.value);\n\t\t}\n\t},\n\n\t/**\n\t * Локально обновить элемент списка по `id`, без перезагрузки через API\n\t */\n\tupdateCacheItemById: (id: T['id'], patch: Partial<T>) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// Так как кеш API синхронизирован с api.items, то менять элемент в `api.items` нет смысла\n\t\t// const item = api.items.value.find((item) => item.id === id);\n\t\t// if (item) {\n\t\t// \tObject.assign(item, patch);\n\t\t// }\n\n\t\tupdateCacheItemById(api.apiRequest.path, id, patch);\n\t},\n\n\t/**\n\t * Удалить элемент списка по `id` во всех связанных инстансах без перезагрузки через API\n\t */\n\tdeleteCacheItemById: (id: T['id']) => {\n\t\tif (!api.apiRequest) return;\n\n\t\t// Так как кеш API синхронизирован с api.items, то удалять элемент из `api.items` нет смысла\n\t\t// const itemIndex = api.items.value.findIndex((item) => item.id === id);\n\t\t//\n\t\t// if (itemIndex !== -1) {\n\t\t// \tapi.items.value.splice(itemIndex, 1);\n\t\t// }\n\n\t\tdeleteCacheItemById(api.apiRequest.path, id);\n\t},\n});\n\nif (import.meta.env.STORYBOOK) {\n\twatch(\n\t\t() => props.multiselect,\n\t\t() => {\n\t\t\tif (props.multiselect) {\n\t\t\t\tif (!Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: 1,\n\t\t\t\t\t\t\tname: 'Выбери меня',\n\t\t\t\t\t\t},\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (Array.isArray(model.value)) {\n\t\t\t\t\tmodel.value = {\n\t\t\t\t\t\tid: null,\n\t\t\t\t\t\tname: '',\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{ immediate: true },\n\t);\n\n\twatch(\n\t\t() => props.searchType,\n\t\t() => {\n\t\t\t// пауза для установки props в адресной строке\n\t\t\tsetTimeout(() => {\n\t\t\t\tlocation.reload();\n\t\t\t}, 500);\n\t\t},\n\t);\n}\n</script>\n\n<template>\n\t<TopPopup\n\t\tref=\"popupRef\"\n\t\t@open=\"onOpen()\"\n\t\t@close=\"onClose()\"\n\t\t@scrollContentList=\"onScrollContentList($event)\"\n\t\t:notch=\"false\"\n\t\t:transitionDuration=\"0\"\n\t\t:openByFocusInput=\"searchTypeLocal === 'inline' && (openByFocusInput ?? true)\"\n\t\t:disabled=\"searchTypeLocal === 'inline' && menu.genIsShort()\"\n\t>\n\t\t<template #opener>\n\t\t\t<component\n\t\t\t\tref=\"popupOpenerRef\"\n\n\t\t\t\t:is=\"component\"\n\n\t\t\t\t:=\"buttonProps\"\n\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-selector2': true,\n\t\t\t\t\t'top-selector2-multiselect': multiselect,\n\t\t\t\t\t['top-selector2-' + modificator]: !!modificator,\n\t\t\t\t\t'top-as-input': !buttonProps && searchTypeLocal !== 'inline',\n\t\t\t\t\t'top-as-selector': true,\n\t\t\t\t\t['top-size_' + size]: true,\n\t\t\t\t\t['top-disabled']: disabled,\n\t\t\t\t\t['top-forms-focusable']: !disabled,\n\t\t\t\t\t['top-error']: isError,\n\t\t\t\t}\"\n\t\t\t\t:icon\n\t\t\t\ttabindex=\"0\"\n\t\t\t\t@keydown=\"onOpenerKeydown\"\n\t\t\t\t@blur=\"searchTypeLocal === 'inline' && menu.resetSearch()\"\n\t\t\t\tv-top-focus.onupdate=\"isError\"\n\t\t\t\tv-top-shortcut=\"openerShortcut\"\n\n\t\t\t\t:placeholder\n\t\t\t\t:title\n\t\t\t\t:captionType=\"searchTypeLocal === 'inline' && title !== undefined ? 'top' : undefined\"\n\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t>\n\t\t\t\t<template v-if=\"multiselect\">\n\t\t\t\t\t<div class=\"top-selector2_activeItems\">\n\t\t\t\t\t\t<Selector2ItemMulti\n\t\t\t\t\t\t\tv-for=\"item of model as Item[]\"\n\t\t\t\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t\t\t\t:id=\"item.id\"\n\t\t\t\t\t\t\t:name=\"item.name\"\n\t\t\t\t\t\t\t@delete=\"menu.deleteItemByItem\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</template>\n\n\t\t\t\t<span v-if=\"searchTypeLocal !== 'inline' && !multiselect\" class=\"top-selector2_activeName top-ellipsis\">\n\t\t\t\t\t{{ !Array.isArray(model) ? model.name : '' }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"multiselect && !model.length\" class=\"top-selector2_placeholder top-ellipsis\">\n\t\t\t\t\t{{ placeholder }}\n\t\t\t\t</span>\n\n\t\t\t\t<span\n\t\t\t\t\tv-if=\"addChanger && !buttonProps && !multiselect && menu.itemsForShow.value.length > 1 && !disabled\"\n\t\t\t\t\tclass=\"top-changer top-changer-selector\"\n\t\t\t\t\tdata-top-popup-disabled=\"true\"\n\t\t\t\t\t@click=\"onClickChanger\"\n\t\t\t\t></span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<template #widget v-if=\"searchTypeLocal === 'popup'\">\n\t\t\t<div class=\"top-selector2_searchWidget\">\n\t\t\t\t<TopPopupWidgetInput\n\t\t\t\t\ttitle=\"Поиск\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\tv-model=\"menu.searchText.value\"\n\t\t\t\t\tv-top-focus.onupdate=\"model\"\n\t\t\t\t\t:isLoading=\"!!api.countLoading.value && api.isLoading.value\"\n\t\t\t\t\t:placeholder\n\t\t\t\t/>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"hasCloserBtn && !$core.state.isMobile\"\n\t\t\t\t\tclass=\"closer\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t>\n\t\t\t\t\t{{ $i18n.Common.Cancel }}\n\t\t\t\t</TopButton>\n\t\t\t</div>\n\t\t</template>\n\n\t\t<template #contentList>\n\t\t\t<TopPopupListItem\n\t\t\t\tv-for=\"item of menu.itemsForShow.value\"\n\t\t\t\t:key=\"item.id ?? undefined\"\n\t\t\t\t:class=\"{\n\t\t\t\t\t'top-active': !Array.isArray(model) && !multiselect && model.id === item.id && model.name === item.name,\n\t\t\t\t\t'top-selector2_item-all': item.id === ITEM_ID_ALL,\n\t\t\t\t\t'top-selector2_item-new': item.id === ITEM_ID_NEW,\n\t\t\t\t}\"\n\t\t\t\t:closeByClick=\"!multiselect || Core.state.isMobile\"\n\t\t\t\t:=\"item.listItemProps\"\n\t\t\t\t@click=\"menu.selectItem(item)\"\n\t\t\t>\n\t\t\t\t<slot\n\t\t\t\t\tv-if=\"$slots.item\"\n\t\t\t\t\tname=\"item\"\n\t\t\t\t\t:item\n\t\t\t\t></slot>\n\n\t\t\t\t<template\n\t\t\t\t\tv-else\n\t\t\t\t>\n\t\t\t\t\t{{ item.name }}\n\t\t\t\t</template>\n\n\t\t\t\t<template v-if=\"$slots.actions\" #actions>\n\t\t\t\t\t<slot name=\"actions\" :item></slot>\n\t\t\t\t</template>\n\t\t\t</TopPopupListItem>\n\n\t\t\t<!-- Элементов для отображения нет -->\n\t\t\t<template v-if=\"!menu.itemsForShow.value.length && !menu.genIsShort()\">\n\t\t\t\t<TopPopupListItem type=\"regular\">\n\t\t\t\t\t<!-- Индикатор первичной загрузки -->\n\t\t\t\t\t<TopPreloader\n\t\t\t\t\t\tv-if=\"api.isLoading.value && !api.countLoading.value || itemsIsLoading\"\n\t\t\t\t\t\ttype=\"circles\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<template v-else>\n\t\t\t\t\t\t{{ $i18n.Common.No_results }}\n\t\t\t\t\t</template>\n\t\t\t\t</TopPopupListItem>\n\t\t\t</template>\n\n\t\t\t<!-- Индикатор повторной загрузки -->\n\t\t\t<TopLoadbar v-if=\"!!api.countLoading.value && api.isLoading.value && searchTypeLocal === 'inline'\"/>\n\t\t</template>\n\t</TopPopup>\n</template>\n\n<style>\n.top-selector2 {\n\twidth: 180px;\n}\n\n.top-selector2::placeholder,\n.top-selector2_placeholder {\n\tcolor: var(--color-text-2);\n}\n\n.top-selector2_placeholder {\n\tpadding-left: var(--top-padding-1);\n}\n\n.top-selector2.top-as-input {\n\tpadding: var(--top-padding-1) var(--top-forms-padding);\n}\n\n.top-selector2.top-selector2-multiselect {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tflex-grow: 1;\n}\n\n.top-selector2.top-active {\n\t--top-forms-border-color: var(--top-forms-border-color-hover);\n}\n\n.top-selector2_searchWidget {\n\tdisplay: flex;\n\tgap: var(--top-gap-2);\n}\n\n.top-selector2_activeItems {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tgap: var(--top-padding-1);\n\tmax-width: 100%;\n}\n\n.top-selector2_activeName {\n\tfont-size: var(--top-font-size);\n\twhite-space: nowrap;\n}\n\n.top-changer-selector {\n\twidth: auto;\n\tpadding: var(--top-padding-1);\n\tmargin: calc(0px - var(--top-padding-1));\n\ttransform: translateX(0);\n}\n\n.top-selector2.top-button {\n\tjustify-content: start;\n}\n\n.top-selector2.top-input_input ~ .top-changer-selector {\n\ttransform: translateX(-52px);\n}\n\n.top-selector2.top-as-selector {\n\tpadding-right: calc(var(--top-selector-arrow-width) + var(--top-padding-2));\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Emits, Props, Slots } from './types';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdefaultValue: '',\n\tcancelText: 'Cancel',\n\tsubmitText: 'Send',\n\tcloseText: 'Close',\n\texpandable: true,\n});\n\ndefineSlots<Slots>();\nconst emit = defineEmits<Emits>();\n\nconst localValue = ref(props.defaultValue);\n\nconst isFocused = ref(props.isFocused);\n\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\n\nconst submit = (value: string) => {\n\temit('submit', value);\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst cancel = () => {\n\tif (props.forceShowCloseBtn && !isChanged.value) {\n\t\temit('close');\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst clickOnTitle = () => {\n\tif (props.attachToKeyboard) emit('clickOnTitle');\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title || $slots.caption\"\n\t\t\tclass=\"top-editArea_caption\"\n\t\t\t@click=\"clickOnTitle()\"\n\t\t>\n\t\t\t<slot name=\"caption\">\n\t\t\t\t{{ title }}\n\t\t\t</slot>\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-forms-focusable': true,\n\t\t\t\t'top-as-input': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': isFocused,\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"() => isFocused = true\"\n\t\t\t\t@blur=\"() => isFocused = false\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"isChanged || forceShowCloseBtn\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\tstyling=\"soft\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ cancelText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tv-if=\"isChanged\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ submitText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-editArea {\n\t--top-editArea-bottom: env(keyboard-inset-height, 0px);\n\t--top-editArea-offset-bottom: 0px;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_caption {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tflex-direction: column;\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\t--top-forms-border-width: 0px;\n\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tmin-height: 32px;\n\talign-self: flex-end;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tposition: fixed;\n\tbottom: calc(var(--top-editArea-offset-bottom) + var(--top-editArea-bottom));\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n\ttransition: bottom var(--transition-fast);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tcursor: pointer;\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-editArea_form {\n\t\tflex-direction: row;\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\nimport Button from '@/components/forms/button/button.vue';\nimport type { Emits, Props, Slots } from './types';\nimport Textarea from '@/components/forms/textarea/textarea.vue';\n\nconst props = withDefaults(defineProps<Props>(), {\n\tdefaultValue: '',\n\tcancelText: 'Cancel',\n\tsubmitText: 'Send',\n\tcloseText: 'Close',\n\texpandable: true,\n});\n\ndefineSlots<Slots>();\nconst emit = defineEmits<Emits>();\n\nconst localValue = ref(props.defaultValue);\n\nconst isFocused = ref(props.isFocused);\n\nconst isChanged = computed(() => localValue.value !== props.defaultValue);\n\nconst submit = (value: string) => {\n\temit('submit', value);\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst cancel = () => {\n\tif (props.forceShowCloseBtn && !isChanged.value) {\n\t\temit('close');\n\n\t\treturn;\n\t}\n\n\tlocalValue.value = props.defaultValue;\n};\n\nconst clickOnTitle = () => {\n\tif (props.attachToKeyboard) emit('clickOnTitle');\n};\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t'top-editArea': true,\n\t\t\t'top-editArea-attachedToKeyboard': attachToKeyboard,\n\t\t}\"\n\t>\n\t\t<div\n\t\t\tv-if=\"title || $slots.caption\"\n\t\t\tclass=\"top-editArea_caption\"\n\t\t\t@click=\"clickOnTitle()\"\n\t\t>\n\t\t\t<slot name=\"caption\">\n\t\t\t\t{{ title }}\n\t\t\t</slot>\n\t\t</div>\n\n\t\t<div\n\t\t\t:class=\"{\n\t\t\t\t'top-editArea_form': true,\n\t\t\t\t'top-forms-focusable': true,\n\t\t\t\t'top-as-input': true,\n\t\t\t\t'top-error': isError,\n\t\t\t\t'top-focus': isFocused,\n\t\t\t}\"\n\t\t>\n\t\t\t<Textarea\n\t\t\t\tv-model=\"localValue\"\n\t\t\t\t:name=\"name\"\n\t\t\t\t:placeholder=\"placeholder\"\n\t\t\t\t:rows=\"rows\"\n\t\t\t\t:minHeight=\"minHeight\"\n\t\t\t\t:expandable=\"expandable\"\n\t\t\t\t:disabled=\"disabled\"\n\t\t\t\t:readonly=\"readonly\"\n\t\t\t\t:isError=\"isError\"\n\t\t\t\t:hint=\"hint\"\n\t\t\t\tclass=\"top-editArea_element\"\n\t\t\t\t@focus=\"() => isFocused = true\"\n\t\t\t\t@blur=\"() => isFocused = false\"\n\t\t\t\t@keyup.esc=\"cancel\"\n\t\t\t\t@keyup.ctrl.enter=\"submit(localValue)\"\n\t\t\t/>\n\n\t\t\t<div class=\"top-editArea_footer\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"isChanged || forceShowCloseBtn\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\tstyling=\"soft\"\n\t\t\t\t\t@click=\"cancel\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ cancelText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"top-editArea_button\"\n\t\t\t\t\tv-if=\"isChanged\"\n\t\t\t\t\t:icon=\"$core.state.isMobile ? '': ''\"\n\t\t\t\t\t@click=\"submit(localValue)\"\n\t\t\t\t>\n\t\t\t\t\t<template\n\t\t\t\t\t\t#default\n\t\t\t\t\t\tv-if=\"!$core.state.isMobile\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{{ submitText }}\n\t\t\t\t\t</template>\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<style>\n.top-editArea {\n\t--top-editArea-bottom: env(keyboard-inset-height, 0px);\n\t--top-editArea-offset-bottom: 0px;\n\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 6px;\n}\n\n.top-editArea_caption {\n\tfont-size: 12px;\n}\n\n.top-editArea_form {\n\tflex-direction: column;\n}\n\n/* textarea в EditArea */\n.top-textarea {\n\twidth: 100%;\n}\n\n.top-editArea_element.top-textarea_textarea {\n\t--top-forms-border-width: 0px;\n\n\toutline: none;\n\tanimation: none;\n}\n\n/* footer */\n.top-editArea_footer {\n\tpadding: var(--top-forms-padding);\n\tdisplay: flex;\n\tmin-height: 32px;\n\talign-self: flex-end;\n\tjustify-content: flex-end;\n\tgap: var(--top-forms-padding);\n}\n\n/* attachedToKeyboard */\n.top-editArea-attachedToKeyboard {\n\tbackground: var(--top-forms-background-color);\n\tposition: fixed;\n\tbottom: calc(var(--top-editArea-offset-bottom) + var(--top-editArea-bottom));\n\tright: 0;\n\tleft: 0;\n\tz-index: 2;\n\tgap: 0;\n\ttransition: bottom var(--transition-fast);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_form {\n\tborder-radius: 0;\n\tborder: none;\n\tborder-top: 1px solid var(--top-forms-border-color);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_title {\n\tcursor: pointer;\n\tborder-top: 1px solid var(--color-line-2-opacity);\n\tpadding: var(--top-forms-padding);\n}\n\n.top-editArea-attachedToKeyboard .top-editArea_footer > [data-top-icon] {\n\tborder-radius: 100%;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-editArea_form {\n\t\tflex-direction: row;\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { Emits, Props } from './types';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(() => props.modelValue, () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<TopInput\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t>\n\t\t\t<template #caption v-if=\"$slots.caption\">\n\t\t\t\t<slot name=\"caption\"></slot>\n\t\t\t</template>\n\t\t</TopInput>\n\n\t\t<TopButton\n\t\t\tv-if=\"intermediateValue !== modelValue || alwaysShowSubmitBtn\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { Emits, Props } from './types';\nimport TopInput from '@/components/forms/input/input.vue';\nimport TopButton from '@/components/forms/button/button.vue';\n\nconst props = defineProps<Props>();\n\nconst intermediateValue = ref(props.modelValue);\n\nwatch(() => props.modelValue, () => {\n\tintermediateValue.value = props.modelValue;\n});\n\nconst emit = defineEmits<Emits>();\n\nconst submit = () => {\n\temit('update:modelValue', intermediateValue.value);\n};\n</script>\n\n<template>\n\t<div class=\"top-editInput\">\n\t\t<TopInput\n\t\t\t:=\"input\"\n\t\t\t@keydown.esc.capture.stop=\"intermediateValue = modelValue\"\n\t\t\t@keydown.enter.stop=\"submit\"\n\t\t\tv-model=\"intermediateValue\"\n\t\t>\n\t\t\t<template #caption v-if=\"$slots.caption\">\n\t\t\t\t<slot name=\"caption\"></slot>\n\t\t\t</template>\n\t\t</TopInput>\n\n\t\t<TopButton\n\t\t\tv-if=\"intermediateValue !== modelValue || alwaysShowSubmitBtn\"\n\t\t\ticon=\"\"\n\t\t\tstyling=\"soft\"\n\t\t\t:=\"button\"\n\t\t\t@click=\"submit\"\n\t\t/>\n\t</div>\n</template>\n\n<style>\n.top-editInput {\n\twidth: 220px;\n\tflex-grow: 1;\n\tdisplay: flex;\n\talign-items: flex-end;\n\tgap: var(--top-gap-1);\n}\n\n.top-editInput .top-input {\n\twidth: unset;\n\tflex-grow: 1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { Props } from './types';\nimport TopCheckbox from '@/components/forms/checkbox/checkbox.vue';\nimport TopRadio from '@/components/forms/radio/radio.vue';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst elRef = ref<HTMLElement | null>(null);\n\nwatch(model, () => {\n\tconst valuesAvailable = props.items.map(item => item.value);\n\n\tif (Array.isArray(model.value)) {\n\t\t// есть ли неподдерживаемые значения\n\t\tconst valueIsWrong = model.value.find((value) => {\n\t\t\treturn !valuesAvailable.includes(value);\n\t\t});\n\n\t\tif (valueIsWrong) {\n\t\t\t// оставить только поддерживаемые значения\n\t\t\tmodel.value = model.value.filter((value) => {\n\t\t\t\treturn valuesAvailable.includes(value);\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif (!valuesAvailable.includes(model.value)) {\n\t\t\tmodel.value = valuesAvailable[0] ?? '';\n\t\t}\n\t}\n\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\n}, { immediate: true });\n\nconst name = 'optionGroup-' + Math.random();\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t['top-optionGroup']: true,\n\t\t\t['top-optionGroup-showIndicator_' + Number(showIndicator)]: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<template v-if=\"Array.isArray(model)\">\n\t\t\t<TopCheckbox\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: model.includes(item.value),\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"item.label\">\n\t\t\t\t\t{{ item.label }}\n\t\t\t\t</template>\n\t\t\t</TopCheckbox>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<TopRadio\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: item.value === model,\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:name\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"item.label\">\n\t\t\t\t\t{{ item.label }}\n\t\t\t\t</template>\n\t\t\t</TopRadio>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n.top-optionGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-layout-middle);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-optionGroup_item {\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 1px var(--top-padding-2);\n\tcolor: var(--color-text-2);\n\tfont-weight: 400;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: var(--top-gap-1);\n}\n\n.top-optionGroup_item:hover {\n\tbackground-color: var(--color-layout-front-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item-selected {\n\tcolor: var(--color-text-1);\n\tbackground-color: var(--color-bg-lightning-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item > .top-forms-optionLabel {\n\tflex-grow: 0;\n}\n\n/* indicator */\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item {\n\tjustify-content: center;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item:has(:focus-visible) {\n\toutline: 2px solid var(--color-bg-primary-2);\n\toutline-offset: -1px;\n}\n\n.top-optionGroup-showIndicator_1 > .top-optionGroup_item {\n\tpadding: 1px 3px;\n\tjustify-content: flex-start;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item > .top-forms-option {\n\topacity: 0;\n\twidth: 0;\n\theight: 0;\n\tposition: absolute;\n}\n\n.top-optionGroup_item > .top-forms-option {\n\torder: -1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref, watch } from 'vue';\nimport type { Props } from './types';\nimport TopCheckbox from '@/components/forms/checkbox/checkbox.vue';\nimport TopRadio from '@/components/forms/radio/radio.vue';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\nconst props = withDefaults(defineProps<Props>(), {\n\tsize: 's',\n});\n\nconst elRef = ref<HTMLElement | null>(null);\n\nwatch(model, () => {\n\tconst valuesAvailable = props.items.map(item => item.value);\n\n\tif (Array.isArray(model.value)) {\n\t\t// есть ли неподдерживаемые значения\n\t\tconst valueIsWrong = model.value.find((value) => {\n\t\t\treturn !valuesAvailable.includes(value);\n\t\t});\n\n\t\tif (valueIsWrong) {\n\t\t\t// оставить только поддерживаемые значения\n\t\t\tmodel.value = model.value.filter((value) => {\n\t\t\t\treturn valuesAvailable.includes(value);\n\t\t\t});\n\t\t}\n\t} else {\n\t\tif (!valuesAvailable.includes(model.value)) {\n\t\t\tmodel.value = valuesAvailable[0] ?? '';\n\t\t}\n\t}\n\n\telRef.value?.querySelector('.radioGroup_item-selected')?.scrollIntoView();\n}, { immediate: true });\n\nconst name = 'optionGroup-' + Math.random();\n</script>\n\n<template>\n\t<div\n\t\tref=\"elRef\"\n\t\t:class=\"{\n\t\t\t['top-optionGroup']: true,\n\t\t\t['top-optionGroup-showIndicator_' + Number(showIndicator)]: true,\n\t\t\t['top-scrollBarXHidding']: true,\n\t\t\t['top-size_' + size]: !!size,\n\t\t\t['top-error']: isError,\n\t\t}\"\n\t>\n\t\t<template v-if=\"Array.isArray(model)\">\n\t\t\t<TopCheckbox\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: model.includes(item.value),\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"item.label\">\n\t\t\t\t\t{{ item.label }}\n\t\t\t\t</template>\n\t\t\t</TopCheckbox>\n\t\t</template>\n\n\t\t<template v-else>\n\t\t\t<TopRadio\n\t\t\t\t:class=\"{\n\t\t\t\t\t['top-optionGroup_item-selected']: item.value === model,\n\t\t\t\t\t['top-optionGroup_item']: true,\n\t\t\t\t}\"\n\t\t\t\tv-for=\"item of items\"\n\t\t\t\tv-model=\"model\"\n\t\t\t\t:name\n\t\t\t\t:value=\"item.value\"\n\t\t\t\t:title=\"item.title\"\n\t\t\t\t:disabled=\"item.disabled\"\n\t\t\t\t:isError\n\t\t\t\t:data-top-icon=\"item.icon\"\n\t\t\t>\n\t\t\t\t<template #default v-if=\"item.label\">\n\t\t\t\t\t{{ item.label }}\n\t\t\t\t</template>\n\t\t\t</TopRadio>\n\t\t</template>\n\t</div>\n</template>\n\n<style>\n.top-optionGroup {\n\tuser-select: none;\n\tbox-sizing: border-box;\n\tborder-radius: 8px;\n\tbackground-color: var(--color-layout-middle);\n\theight: var(--top-forms-base-height);\n\tpadding: 2px;\n\tgap: 2px;\n\tdisplay: flex;\n\talign-items: flex-start;\n}\n\n.top-optionGroup_item {\n\tcursor: pointer;\n\tbox-sizing: border-box;\n\tborder-radius: 6px;\n\theight: calc(var(--top-forms-base-height) - 4px);\n\tpadding: 1px var(--top-padding-2);\n\tcolor: var(--color-text-2);\n\tfont-weight: 400;\n\twhite-space: nowrap;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-grow: 1;\n\tgap: var(--top-gap-1);\n}\n\n.top-optionGroup_item:hover {\n\tbackground-color: var(--color-layout-front-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item-selected {\n\tcolor: var(--color-text-1);\n\tbackground-color: var(--color-bg-lightning-1);\n\tbox-shadow: 0px 4px 32px 0px rgba(4, 9, 84, 0.10), 0px 0px 4px 0px rgba(4, 9, 84, 0.08);\n}\n\n.top-optionGroup_item > .top-forms-optionLabel {\n\tflex-grow: 0;\n}\n\n/* indicator */\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item {\n\tjustify-content: center;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item:has(:focus-visible) {\n\toutline: 2px solid var(--color-bg-primary-2);\n\toutline-offset: -1px;\n}\n\n.top-optionGroup-showIndicator_1 > .top-optionGroup_item {\n\tpadding: 1px 3px;\n\tjustify-content: flex-start;\n}\n\n.top-optionGroup-showIndicator_0 > .top-optionGroup_item > .top-forms-option {\n\topacity: 0;\n\twidth: 0;\n\theight: 0;\n\tposition: absolute;\n}\n\n.top-optionGroup_item > .top-forms-option {\n\torder: -1;\n}\n</style>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-radioGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-radioGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-checkboxGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script setup lang=\"ts\">\nimport OptionGroup from '../libs/optionGroup/optionGroup.vue';\n\nimport type { Props } from './types';\n\nconst model = defineModel<Props['modelValue']>({\n\trequired: true,\n});\n\ndefineProps<Props>();\n</script>\n\n<template>\n\t<OptionGroup\n\t\tclass=\"top-checkboxGroup\"\n\t\tv-model=\"model\"\n\t\t:items=\"$props.items\"\n\t\t:size=\"$props.size\"\n\t\t:showIndicator=\"$props.showIndicator\"\n\t\t:isError=\"$props.isError\"\n\t>\n\t\t<slot/>\n\t</OptionGroup>\n</template>\n","<script lang=\"ts\" setup>\nimport type { Props, Slots } from './types';\n\nwithDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n\tsize: 'default',\n});\n\ndefineSlots<Slots>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['top-info']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-info-styling_' + styling]: true,\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t>\n\t\t<div class=\"top-info_text\">\n\t\t\t<slot></slot>\n\t\t</div>\n\n\t\t<span v-if=\"$slots.additional\" class=\"top-info_value\">\n\t\t\t<slot name=\"additional\"></slot>\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n.top-info {\n\t--top-icon-width: var(--top-icon-size);\n\n\tborder-radius: var(--top-forms-radius);\n\tbox-sizing: border-box;\n\tmin-height: var(--top-forms-base-height);\n\tpadding: var(--top-padding-1) var(--top-padding-2);\n\tflex-grow: 5;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: var(--top-gap-2);\n}\n\n.top-info_text {\n\tflex-grow: 1;\n}\n\n.top-info_value {\n\tfont-weight: bold;\n}\n\n/* size */\n.top-info.top-size_default {\n\tborder-radius: var(--top-radius-3);\n\tpadding: var(--top-padding-4);\n}\n\n/* styling */\n.top-info-styling_default {\n\t--top-icon-color: var(--color-text-2);\n\n\tbackground: var(--color-layer-1);\n}\n\n.top-info-styling_info {\n\t--top-icon-color: var(--color-text-primary);\n\n\tbackground: var(--color-layer-primary-1);\n}\n\n.top-info-styling_warning {\n\t--top-icon-color: var(--color-text-warning);\n\n\tbackground: var(--color-layer-warning-1);\n}\n\n.top-info-styling_negative {\n\t--top-icon-color: var(--color-text-negative);\n\n\tbackground: var(--color-layer-negative-1);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Props, Slots } from './types';\n\nwithDefaults(defineProps<Props>(), {\n\tstyling: 'default',\n\tsize: 'default',\n});\n\ndefineSlots<Slots>();\n</script>\n\n<template>\n\t<div\n\t\t:class=\"{\n\t\t\t['top-info']: true,\n\t\t\t['top-size_' + size]: true,\n\t\t\t['top-info-styling_' + styling]: true,\n\t\t}\"\n\t\t:data-top-icon=\"icon\"\n\t>\n\t\t<div class=\"top-info_text\">\n\t\t\t<slot></slot>\n\t\t</div>\n\n\t\t<span v-if=\"$slots.additional\" class=\"top-info_value\">\n\t\t\t<slot name=\"additional\"></slot>\n\t\t</span>\n\t</div>\n</template>\n\n<style>\n.top-info {\n\t--top-icon-width: var(--top-icon-size);\n\n\tborder-radius: var(--top-forms-radius);\n\tbox-sizing: border-box;\n\tmin-height: var(--top-forms-base-height);\n\tpadding: var(--top-padding-1) var(--top-padding-2);\n\tflex-grow: 5;\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\tgap: var(--top-gap-2);\n}\n\n.top-info_text {\n\tflex-grow: 1;\n}\n\n.top-info_value {\n\tfont-weight: bold;\n}\n\n/* size */\n.top-info.top-size_default {\n\tborder-radius: var(--top-radius-3);\n\tpadding: var(--top-padding-4);\n}\n\n/* styling */\n.top-info-styling_default {\n\t--top-icon-color: var(--color-text-2);\n\n\tbackground: var(--color-layer-1);\n}\n\n.top-info-styling_info {\n\t--top-icon-color: var(--color-text-primary);\n\n\tbackground: var(--color-layer-primary-1);\n}\n\n.top-info-styling_warning {\n\t--top-icon-color: var(--color-text-warning);\n\n\tbackground: var(--color-layer-warning-1);\n}\n\n.top-info-styling_negative {\n\t--top-icon-color: var(--color-text-negative);\n\n\tbackground: var(--color-layer-negative-1);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { TopButton } from '@/components/forms/forms';\nimport type { Emits, Props } from '@/components/formsExt/policy/types';\n\ndefineProps<Props>();\nconst emits = defineEmits<Emits>();\n\nconst isVisible = ref(true);\n\nconst onAccept = () => {\n\tisVisible.value = false;\n\n\temits('accept');\n};\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"isVisible\"\n\t\tclass=\"top-policy\"\n\t>\n\t\t<div class=\"top-policy_title\">\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"top-policy_description\"\n\t\t\tv-html=\"description\"\n\t\t></div>\n\n\t\t<TopButton\n\t\t\tsize=\"m\"\n\t\t\t@click=\"onAccept\"\n\t\t>\n\t\t\t{{ acceptText }}\n\t\t</TopButton>\n\t</div>\n</template>\n\n<style>\n.top-policy {\n\tbox-sizing: border-box;\n\tbox-shadow: var(--top-shadow-b);\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-bg-lightning-1);\n\twidth: 600px;\n\tpadding: var(--top-padding-4);\n\tposition: fixed;\n\tright: var(--top-gap-10);\n\tbottom: var(--top-gap-10);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-4);\n\tz-index: 10000;\n}\n\n.top-policy_title {\n\tfont-size: 24px;\n\tfont-weight: 700;\n}\n\n.top-policy_description {\n\tfont-size: 14px;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-policy {\n\t\twidth: 100%;\n\t\tright: 0;\n\t\tbottom: calc(var(--top-gap-5) + var(--toolbar-height, 0px));\n\t}\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { TopButton } from '@/components/forms/forms';\nimport type { Emits, Props } from '@/components/formsExt/policy/types';\n\ndefineProps<Props>();\nconst emits = defineEmits<Emits>();\n\nconst isVisible = ref(true);\n\nconst onAccept = () => {\n\tisVisible.value = false;\n\n\temits('accept');\n};\n</script>\n\n<template>\n\t<div\n\t\tv-if=\"isVisible\"\n\t\tclass=\"top-policy\"\n\t>\n\t\t<div class=\"top-policy_title\">\n\t\t\t{{ title }}\n\t\t</div>\n\n\t\t<div\n\t\t\tclass=\"top-policy_description\"\n\t\t\tv-html=\"description\"\n\t\t></div>\n\n\t\t<TopButton\n\t\t\tsize=\"m\"\n\t\t\t@click=\"onAccept\"\n\t\t>\n\t\t\t{{ acceptText }}\n\t\t</TopButton>\n\t</div>\n</template>\n\n<style>\n.top-policy {\n\tbox-sizing: border-box;\n\tbox-shadow: var(--top-shadow-b);\n\tborder-radius: var(--top-radius-4);\n\tbackground: var(--color-bg-lightning-1);\n\twidth: 600px;\n\tpadding: var(--top-padding-4);\n\tposition: fixed;\n\tright: var(--top-gap-10);\n\tbottom: var(--top-gap-10);\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: var(--top-gap-4);\n\tz-index: 10000;\n}\n\n.top-policy_title {\n\tfont-size: 24px;\n\tfont-weight: 700;\n}\n\n.top-policy_description {\n\tfont-size: 14px;\n}\n\n@media screen and (max-width: 900px) {\n\t.top-policy {\n\t\twidth: 100%;\n\t\tright: 0;\n\t\tbottom: calc(var(--top-gap-5) + var(--toolbar-height, 0px));\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Props, Slots, Emits } from './types';\nimport TopButton from '@/components/forms/button/button.vue';\nimport { ref } from 'vue';\n\nwithDefaults(defineProps<Props>(), {\n\tshowCloseButton: true,\n});\n\ndefineSlots<Slots>();\nconst emit = defineEmits<Emits>();\n\nconst isOpen = ref(true);\n\nconst onClose = () => {\n\tisOpen.value = false;\n};\n\nconst beforeLeave = (el: Element) => {\n\tif (!(el instanceof HTMLElement)) return;\n\n\tel.style.height = `${el.offsetHeight}px`;\n\n\trequestAnimationFrame(() => {\n\t\tel.style.height = '0px';\n\t\tel.style.paddingTop = '0px';\n\t\tel.style.paddingBottom = '0px';\n\t});\n};\n\nconst afterLeave = () => {\n\temit('close');\n};\n</script>\n\n<template>\n\t<Transition\n\t\t@before-leave=\"beforeLeave\"\n\t\t@after-leave=\"afterLeave\"\n\t>\n\t\t<div\n\t\t\tv-if=\"isOpen\"\n\t\t\tclass=\"top-banner\"\n\t\t>\n\t\t\t<div class=\"top-banner_wrapper\">\n\t\t\t\t<div class=\"top-banner_content\">\n\t\t\t\t\t<span class=\"top-banner_contentText\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<TopButton\n\t\t\t\t\t\tv-if=\"buttonProps\"\n\t\t\t\t\t\t:=\"buttonProps\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template v-if=\"buttonProps.default\">\n\t\t\t\t\t\t\t{{ buttonProps.default }}\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</TopButton>\n\t\t\t\t</div>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"showCloseButton\"\n\t\t\t\t\tclass=\"top-banner_closeButton\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\t:title=\"$i18n.Common.Close\"\n\t\t\t\t\t@click=\"onClose\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</Transition>\n</template>\n\n<style>\n.top-banner {\n\tbox-sizing: border-box;\n\tborder-block: 1px solid var(--color-line-info-1);\n\tbackground: var(--color-layout-front-info-6);\n\tpadding: var(--top-padding-3) var(--top-padding-4);\n\tmin-height: 52px;\n\tz-index: 1000;\n\toverflow: hidden;\n\ttransition: var(--transition);\n}\n\n.top-banner .top-banner_wrapper {\n\tmargin: 0 auto;\n\tmax-width: var(--top-page-width);\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n\n.top-banner_content {\n\tfont-size: 14px;\n\ttext-align: center;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tgap: var(--top-gap-4);\n\tflex: 1;\n}\n\n.top-banner_contentText {\n\tmax-width: 700px;\n\toverflow-wrap: anywhere;\n}\n\n@media only screen and (max-width: 900px) {\n\t.top-banner {\n\t\tpadding: var(--top-padding-2) var(--top-padding-4);\n\t}\n\n\t.top-banner .top-banner_wrapper {\n\t\tjustify-content: center;\n\t\tgap: var(--top-gap-3);\n\t}\n\n\t.top-banner_content {\n\t\ttext-align: left;\n\t\tfont-size: 12px;\n\t\tjustify-content: unset;\n\t\tgap: var(--top-gap-3);\n\t}\n\n\t.top-banner_contentText {\n\t\tflex-grow: 1;\n\t}\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { Props, Slots, Emits } from './types';\nimport TopButton from '@/components/forms/button/button.vue';\nimport { ref } from 'vue';\n\nwithDefaults(defineProps<Props>(), {\n\tshowCloseButton: true,\n});\n\ndefineSlots<Slots>();\nconst emit = defineEmits<Emits>();\n\nconst isOpen = ref(true);\n\nconst onClose = () => {\n\tisOpen.value = false;\n};\n\nconst beforeLeave = (el: Element) => {\n\tif (!(el instanceof HTMLElement)) return;\n\n\tel.style.height = `${el.offsetHeight}px`;\n\n\trequestAnimationFrame(() => {\n\t\tel.style.height = '0px';\n\t\tel.style.paddingTop = '0px';\n\t\tel.style.paddingBottom = '0px';\n\t});\n};\n\nconst afterLeave = () => {\n\temit('close');\n};\n</script>\n\n<template>\n\t<Transition\n\t\t@before-leave=\"beforeLeave\"\n\t\t@after-leave=\"afterLeave\"\n\t>\n\t\t<div\n\t\t\tv-if=\"isOpen\"\n\t\t\tclass=\"top-banner\"\n\t\t>\n\t\t\t<div class=\"top-banner_wrapper\">\n\t\t\t\t<div class=\"top-banner_content\">\n\t\t\t\t\t<span class=\"top-banner_contentText\">\n\t\t\t\t\t\t<slot></slot>\n\t\t\t\t\t</span>\n\n\t\t\t\t\t<TopButton\n\t\t\t\t\t\tv-if=\"buttonProps\"\n\t\t\t\t\t\t:=\"buttonProps\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<template v-if=\"buttonProps.default\">\n\t\t\t\t\t\t\t{{ buttonProps.default }}\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</TopButton>\n\t\t\t\t</div>\n\n\t\t\t\t<TopButton\n\t\t\t\t\tv-if=\"showCloseButton\"\n\t\t\t\t\tclass=\"top-banner_closeButton\"\n\t\t\t\t\tcolor=\"theme\"\n\t\t\t\t\ticon=\"\"\n\t\t\t\t\t:title=\"$i18n.Common.Close\"\n\t\t\t\t\t@click=\"onClose\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</Transition>\n</template>\n\n<style>\n.top-banner {\n\tbox-sizing: border-box;\n\tborder-block: 1px solid var(--color-line-info-1);\n\tbackground: var(--color-layout-front-info-6);\n\tpadding: var(--top-padding-3) var(--top-padding-4);\n\tmin-height: 52px;\n\tz-index: 1000;\n\toverflow: hidden;\n\ttransition: var(--transition);\n}\n\n.top-banner .top-banner_wrapper {\n\tmargin: 0 auto;\n\tmax-width: var(--top-page-width);\n\tdisplay: flex;\n\tjustify-content: space-between;\n\talign-items: center;\n}\n\n.top-banner_content {\n\tfont-size: 14px;\n\ttext-align: center;\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tgap: var(--top-gap-4);\n\tflex: 1;\n}\n\n.top-banner_contentText {\n\tmax-width: 700px;\n\toverflow-wrap: anywhere;\n}\n\n@media only screen and (max-width: 900px) {\n\t.top-banner {\n\t\tpadding: var(--top-padding-2) var(--top-padding-4);\n\t}\n\n\t.top-banner .top-banner_wrapper {\n\t\tjustify-content: center;\n\t\tgap: var(--top-gap-3);\n\t}\n\n\t.top-banner_content {\n\t\ttext-align: left;\n\t\tfont-size: 12px;\n\t\tjustify-content: unset;\n\t\tgap: var(--top-gap-3);\n\t}\n\n\t.top-banner_contentText {\n\t\tflex-grow: 1;\n\t}\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- .top-scheduleTimeSelector{flex-direction:column;gap:10px;display:flex}.top-scheduleTimeSelector_item{align-items:center;display:flex}.top-scheduleTimeSelector_item>.top-button{margin-left:var(--top-gap-2)}.top-scheduleTimeSelector .top-select{width:60px}.top-scheduleTimeSelector .top-select:hover{z-index:1}.top-scheduleTimeSelector_hour .top-select_select{border-top-right-radius:0;border-bottom-right-radius:0}.top-scheduleTimeSelector_minute .top-select_select{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.top-scheduleTimeSelector .top-button{--top-icon-color:var(--color-text-primary)}.top-scheduleCalendar{gap:var(--top-gap-4);flex-direction:column;display:flex}.top-scheduleCalendar_header{justify-content:space-between;align-items:flex-end;display:flex}.top-scheduleCalendar_calendar{gap:var(--top-gap-2);grid-template-columns:repeat(7,1fr);display:grid}.top-scheduleCalendar_calendarDay{--top-icon-size:18px;cursor:pointer;box-sizing:border-box;border:1px solid var(--color-line-1);border-radius:var(--top-radius-2);justify-content:center;align-items:center;width:36px;height:36px;display:flex}.top-scheduleCalendar_calendarDay:hover{border-color:var(--top-schedule-border-color);background:var(--color-layout-front-3)}.top-scheduleCalendar_calendarDay:focus-within{outline:1px solid var(--top-schedule-border-color);outline-offset:2px}.top-scheduleCalendar_calendarDay:has(>:checked){border-color:var(--top-schedule-header-background);background:var(--top-schedule-accent-background);color:var(--color-text-white)}.top-scheduleCalendar_calendarDay:has(>:checked):hover{background:var(--top-schedule-accent-background-hover)}.top-scheduleCalendar_calendarDayCheckbox{pointer-events:none;opacity:0;width:1px;height:1px;position:absolute}.top-scheduleCalendar_selectionSummary{text-align:center}.top-scheduleCalendar_selectionSummary:not(.top-error){color:var(--color-text-3)}.top-schedule{--top-schedule-border-color:var(--color-line-primary-1);--top-schedule-header-background:var(--color-layout-front-primary-3);--top-schedule-accent-background:var(--color-bg-primary-1);--top-schedule-accent-background-hover:var(--color-bg-primary-2);--top-schedule-body-padding:var(--top-padding-4);border:1px solid var(--top-schedule-border-color);border-radius:var(--top-radius-4);background:var(--color-layout-front-1);align-self:start;width:100%;max-width:332px;overflow:hidden}.top-schedule-type_report{--top-schedule-border-color:var(--color-line-warning-1);--top-schedule-header-background:var(--color-layout-front-warning-3);--top-schedule-accent-background:var(--color-bg-warning-1);--top-schedule-accent-background-hover:var(--color-bg-warning-2)}.top-schedule_header{padding:var(--top-padding-4);background:var(--top-schedule-header-background);gap:var(--top-gap-4);flex-direction:column;display:flex}.top-schedule_header:not(:last-child){border-bottom:1px solid var(--top-schedule-border-color)}.top-schedule_headerTitle{font-size:18px;font-weight:600}.top-schedule_headerMods{width:100%}.top-schedule_afterYandexUpdatedDelay{width:auto}.top-schedule_body{padding:var(--top-schedule-body-padding)}.top-schedule_body hr{border:0;border-top:1px solid var(--color-line-1);margin:var(--top-schedule-body-padding) calc(-1 * var(--top-schedule-body-padding))}.top-scheduleEmailSelector .top-input{width:100%}.top-scheduleEmailSelector .top-input_input{padding-right:var(--top-padding-10)}.top-scheduleEmailSelector_submit.top-button{--top-icon-size:20px;top:50%;right:var(--top-padding-2);z-index:1;position:absolute;transform:translateY(-50%)}.top-scheduleEmailSelector_submit.top-button:focus-visible{position:absolute}.top-scheduleEmailSelector .ui-autocomplete{border-radius:var(--top-radius-2);background:var(--color-layout-front-2);gap:var(--top-gap-1);padding:var(--top-padding-2)!important}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item{margin:0!important}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item .ui-menu-item-wrapper{border-radius:var(--top-radius-2);align-items:flex-end;gap:var(--top-gap-2);transition:var(--transition-normal);box-sizing:border-box;background:0 0;display:flex;padding:var(--top-padding-1) var(--top-padding-2)!important;margin:0!important}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item:hover .ui-menu-item-wrapper,.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item .ui-menu-item-wrapper.ui-state-active{background:var(--color-layout-front-3)}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item .ui-menu-item-wrapper *{background:0 0;padding:0}.top-scheduleEmail{flex-direction:column;gap:10px;display:flex}.top-scheduleEmail_title{font-weight:600}.top-scheduleEmail_emails{border:1px solid var(--color-line-1);border-radius:var(--top-radius-2)}.top-scheduleEmail_emailsItem{--top-icon-size:20px;padding:var(--top-padding-1) var(--top-padding-4);padding-right:var(--top-padding-2);border-bottom:1px solid var(--color-line-1);justify-content:space-between;align-items:center;gap:var(--top-gap-1);display:flex}.top-scheduleEmail_emailsItem:last-child{border-bottom:0}.top-scheduleSocials{flex-direction:column;gap:10px;display:flex}.top-scheduleSocials_title{font-weight:600}.top-scheduleSocials_channels{border:1px solid var(--color-line-1);border-radius:var(--top-radius-2)}.top-scheduleSocials_channel{height:40px;padding:0 var(--top-padding-4);padding-right:var(--top-padding-2);border-bottom:1px solid var(--color-line-1);align-items:center;gap:var(--top-gap-2);display:flex}.top-scheduleSocials_channel:last-child{border-bottom:0}.top-scheduleSocials_channelIcon{--top-icon-size:20px;--top-icon-color:var(--color-text-3)}.top-scheduleSocials_channelLabel{flex-grow:0}.top-scheduleSocials_channelSettings{--top-icon-size:16px}.top-scheduleSocials_channelSwitcher{margin-left:auto}
1
+ .top-scheduleTimeSelector{flex-direction:column;gap:10px;display:flex}.top-scheduleTimeSelector_item{align-items:center;display:flex}.top-scheduleTimeSelector_item>.top-button{margin-left:var(--top-gap-2)}.top-scheduleTimeSelector .top-select{width:60px}.top-scheduleTimeSelector .top-select:hover{z-index:1}.top-scheduleTimeSelector_hour .top-select_select{border-top-right-radius:0;border-bottom-right-radius:0}.top-scheduleTimeSelector_minute .top-select_select{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.top-scheduleTimeSelector .top-button{--top-icon-color:var(--color-text-primary)}.top-scheduleCalendar{gap:var(--top-gap-4);flex-direction:column;display:flex}.top-scheduleCalendar_header{justify-content:space-between;align-items:flex-end;display:flex}.top-scheduleCalendar_calendar{gap:var(--top-gap-2);grid-template-columns:repeat(7,1fr);display:grid}.top-scheduleCalendar_calendarDay{--top-icon-size:18px;cursor:pointer;-webkit-user-select:none;user-select:none;box-sizing:border-box;border:1px solid var(--color-line-1);border-radius:var(--top-radius-2);justify-content:center;align-items:center;width:36px;height:36px;display:flex}.top-scheduleCalendar_calendarDay:hover{border-color:var(--top-schedule-border-color);background:var(--color-layout-front-3)}.top-scheduleCalendar_calendarDay:focus-within{outline:1px solid var(--top-schedule-border-color);outline-offset:2px}.top-scheduleCalendar_calendarDay:has(>:checked){border-color:var(--top-schedule-header-background);background:var(--top-schedule-accent-background);color:var(--color-text-white)}.top-scheduleCalendar_calendarDay:has(>:checked):hover{background:var(--top-schedule-accent-background-hover)}.top-scheduleCalendar_calendarDayCheckbox{pointer-events:none;opacity:0;width:1px;height:1px;position:absolute}.top-scheduleCalendar_selectionSummary{text-align:center}.top-scheduleCalendar_selectionSummary:not(.top-error){color:var(--color-text-3)}.top-schedule{--top-schedule-border-color:var(--color-line-primary-1);--top-schedule-header-background:var(--color-layout-front-primary-3);--top-schedule-accent-background:var(--color-bg-primary-1);--top-schedule-accent-background-hover:var(--color-bg-primary-2);--top-schedule-body-padding:var(--top-padding-4);border:1px solid var(--top-schedule-border-color);border-radius:var(--top-radius-4);background:var(--color-layout-front-1);align-self:start;width:100%;max-width:332px;overflow:hidden}.top-schedule-type_report{--top-schedule-border-color:var(--color-line-warning-1);--top-schedule-header-background:var(--color-layout-front-warning-3);--top-schedule-accent-background:var(--color-bg-warning-1);--top-schedule-accent-background-hover:var(--color-bg-warning-2)}.top-schedule_header{padding:var(--top-padding-4);background:var(--top-schedule-header-background);gap:var(--top-gap-4);flex-direction:column;display:flex}.top-schedule_header:not(:last-child){border-bottom:1px solid var(--top-schedule-border-color)}.top-schedule_headerTitle{font-size:18px;font-weight:600}.top-schedule_headerMods{width:100%}.top-schedule_afterYandexUpdatedDelay{width:auto}.top-schedule_body{padding:var(--top-schedule-body-padding);gap:var(--top-schedule-body-padding);flex-direction:column;display:flex}.top-schedule_body hr{background:var(--color-line-1);height:1px;margin:0 calc(-1 * var(--top-schedule-body-padding));border:0}.top-scheduleEmailSelector .top-input{width:100%}.top-scheduleEmailSelector .top-input_input{padding-right:var(--top-padding-10)}.top-scheduleEmailSelector_submit.top-button{--top-icon-size:20px;top:50%;right:var(--top-padding-2);z-index:1;position:absolute;transform:translateY(-50%)}.top-scheduleEmailSelector_submit.top-button:focus-visible{position:absolute}.top-scheduleEmailSelector .ui-autocomplete{border-radius:var(--top-radius-2);background:var(--color-layout-front-2);gap:var(--top-gap-1);padding:var(--top-padding-2)!important}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item{margin:0!important}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item .ui-menu-item-wrapper{border-radius:var(--top-radius-2);align-items:flex-end;gap:var(--top-gap-2);transition:var(--transition-normal);box-sizing:border-box;background:0 0;display:flex;padding:var(--top-padding-1) var(--top-padding-2)!important;margin:0!important}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item:hover .ui-menu-item-wrapper,.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item .ui-menu-item-wrapper.ui-state-active{background:var(--color-layout-front-3)}.top-scheduleEmailSelector .ui-autocomplete .ui-menu-item .ui-menu-item-wrapper *{background:0 0;padding:0}.top-scheduleEmail{flex-direction:column;gap:10px;display:flex}.top-scheduleEmail_title{font-weight:600}.top-scheduleEmail_emails{border:1px solid var(--color-line-1);border-radius:var(--top-radius-2)}.top-scheduleEmail_emailsItem{--top-icon-size:20px;padding:var(--top-padding-1);padding-left:var(--top-forms-padding);border-bottom:1px solid var(--color-line-1);justify-content:space-between;align-items:center;gap:var(--top-gap-1);display:flex}.top-scheduleEmail_emailsItem:last-child{border-bottom:0}.top-scheduleSocials{flex-direction:column;gap:10px;display:flex}.top-scheduleSocials_title{font-weight:600}.top-scheduleSocials_channels{border:1px solid var(--color-line-1);border-radius:var(--top-radius-2)}.top-scheduleSocials_channel{height:40px;padding:0 var(--top-padding-4);padding-right:var(--top-padding-2);border-bottom:1px solid var(--color-line-1);align-items:center;gap:var(--top-gap-2);display:flex}.top-scheduleSocials_channel:last-child{border-bottom:0}.top-scheduleSocials_channelIcon{--top-icon-size:20px;--top-icon-color:var(--color-text-3)}.top-scheduleSocials_channelLabel{flex-grow:0}.top-scheduleSocials_channelSettings{--top-icon-size:16px}.top-scheduleSocials_channelSwitcher{margin-left:auto}
@@ -1 +1 @@
1
- :root{--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-theme-0:#000;--color-theme-50:#0e0e11;--color-theme-75:#101013;--color-theme-100:#131316;--color-theme-125:#17171c;--color-theme-150:#1c1c21;--color-theme-175:#212126;--color-theme-200:#26262c;--color-theme-225:#2a2a32;--color-theme-250:#2f2f37;--color-theme-260:#34343d;--color-theme-275:#393942;--color-theme-300:#3d3d47;--color-theme-325:#42424d;--color-theme-350:#464653;--color-theme-360:#4b4b58;--color-theme-375:#50505e;--color-theme-400:#555563;--color-theme-410:#595969;--color-theme-420:#5e5e6e;--color-theme-430:#626274;--color-theme-440:#676779;--color-theme-450:#6c6c7e;--color-theme-460:#717184;--color-theme-465:#75758a;--color-theme-470:#7b7b8e;--color-theme-475:#818193;--color-theme-480:#868698;--color-theme-485:#8b8b9d;--color-theme-500:#9191a1;--color-theme-550:#9696a6;--color-theme-575:#9c9caa;--color-theme-600:#a1a1af;--color-theme-625:#a7a7b4;--color-theme-650:#acacb9;--color-theme-675:#b2b2bd;--color-theme-700:#b8b8c2;--color-theme-710:#bdbdc6;--color-theme-725:#c2c2cb;--color-theme-750:#c8c8d0;--color-theme-800:#cdcdd5;--color-theme-850:#d3d3d9;--color-theme-900:#d9d9de;--color-theme-925:#dedee3;--color-theme-950:#e3e3e8;--color-theme-955:#e9e9ec;--color-theme-960:#eeeef1;--color-theme-965:#f4f4f5;--color-theme-970:#fafafa;--color-theme-1000:#fff;--color-white:#fff;--color-black:#000;--color-primary-25:#1f232e;--color-primary-50:#1c2736;--color-primary-100:#18293e;--color-primary-125:#142b48;--color-primary-150:#16355a;--color-primary-200:#183e6d;--color-primary-225:#184781;--color-primary-250:#185095;--color-primary-275:#175aab;--color-primary-300:#1563c1;--color-primary-350:#136bd8;--color-primary-400:#0f74f0;--color-primary-450:#1e7ff6;--color-primary-500:#2d8afb;--color-primary-550:#3d94ff;--color-primary-600:#52a0ff;--color-primary-650:#66abff;--color-primary-700:#7ab6ff;--color-primary-720:#8fc1ff;--color-primary-740:#a3cdff;--color-primary-760:#b8d8ff;--color-primary-780:#c2ddff;--color-primary-800:#cce3ff;--color-primary-825:#d6e9ff;--color-primary-850:#e0eeff;--color-primary-900:#ebf4ff;--color-primary-950:#f5f9ff;--color-positive-25:#232424;--color-positive-50:#282a29;--color-positive-100:#25312c;--color-positive-125:#223a30;--color-positive-150:#274939;--color-positive-200:#2c5940;--color-positive-225:#2f6a46;--color-positive-250:#327b49;--color-positive-275:#348d4a;--color-positive-300:#36a150;--color-positive-350:#36b556;--color-positive-400:#36c95b;--color-positive-450:#41d265;--color-positive-500:#4ddb71;--color-positive-550:#5ae27c;--color-positive-600:#6ce58a;--color-positive-650:#87e89f;--color-positive-700:#8eeba5;--color-positive-720:#a0eeb3;--color-positive-740:#b1f1c1;--color-positive-760:#baf3c8;--color-positive-780:#c2f4cf;--color-positive-800:#cbf6d6;--color-positive-825:#d4f7dd;--color-positive-850:#dcf9e3;--color-positive-900:#e5faea;--color-positive-950:#eefcf1;--color-warning-25:#322020;--color-warning-50:#39221d;--color-warning-100:#42211a;--color-warning-125:#4c1e15;--color-warning-150:#5e2817;--color-warning-200:#713319;--color-warning-225:#854119;--color-warning-250:#9a5119;--color-warning-275:#af6418;--color-warning-300:#c56e16;--color-warning-350:#dd7813;--color-warning-400:#f08214;--color-warning-450:#f68c23;--color-warning-500:#fb9632;--color-warning-550:#ffa042;--color-warning-600:#ffab57;--color-warning-650:#ffb56b;--color-warning-700:#ffbf80;--color-warning-720:#ffc994;--color-warning-740:#ffd3a8;--color-warning-760:#ffdebd;--color-warning-780:#ffe3c7;--color-warning-800:#ffe8d1;--color-warning-825:#ffeddb;--color-warning-850:#fff3e6;--color-warning-900:#fff7f0;--color-warning-950:#fffdfa;--color-negative-25:#2f2229;--color-negative-50:#371f2d;--color-negative-100:#401c30;--color-negative-125:#4a1733;--color-negative-150:#5b1a3a;--color-negative-200:#6e1c3e;--color-negative-225:#821c40;--color-negative-250:#961d3f;--color-negative-275:#ab1c31;--color-negative-300:#c11a33;--color-negative-350:#d81834;--color-negative-400:#eb1938;--color-negative-450:#f12745;--color-negative-500:#f73652;--color-negative-550:#ff425e;--color-negative-600:#ff576f;--color-negative-650:#ff6b81;--color-negative-700:#ff8092;--color-negative-720:#ff94a4;--color-negative-740:#ffa8b5;--color-negative-760:#ffbdc6;--color-negative-780:#ffc7cf;--color-negative-800:#ffd1d8;--color-negative-825:#ffdbe1;--color-negative-850:#ffe5e9;--color-negative-900:#fff0f2;--color-negative-950:snow;--color-info-25:#1e1d2b;--color-info-50:#1c1a32;--color-info-100:#1a173b;--color-info-125:#181344;--color-info-150:#201556;--color-info-200:#2a1769;--color-info-225:#36187c;--color-info-250:#441891;--color-info-275:#5517a6;--color-info-300:#5e15bc;--color-info-350:#6612d3;--color-info-400:#6f0feb;--color-info-450:#7919f5;--color-info-500:#8428fb;--color-info-550:#8f38ff;--color-info-600:#9a4dff;--color-info-650:#a561ff;--color-info-700:#b175ff;--color-info-720:#bc8aff;--color-info-740:#c89eff;--color-info-760:#d4b2ff;--color-info-780:#d9bdff;--color-info-800:#dfc7ff;--color-info-825:#e5d1ff;--color-info-850:#ebdbff;--color-info-900:#f1e5ff;--color-info-950:#f6f0ff;--color-layer-1:#8c8ca614;--color-layer-2:#8c8ca624;--color-layer-3:#8c8ca62e;--color-layer-4:#8c8ca63d;--color-layer-primary-1:#2d6efb24;--color-layer-primary-2:#2d6efb33;--color-layer-primary-3:#2d6efb4d;--color-layer-primary-4:#2d6efb66;--color-layer-positive-1:#36b55624;--color-layer-positive-2:#36b55633;--color-layer-positive-3:#36b5564d;--color-layer-positive-4:#36b55666;--color-layer-warning-1:#ffa04224;--color-layer-warning-2:#ffa04233;--color-layer-warning-3:#ffa0424d;--color-layer-warning-4:#ffa04266;--color-layer-negative-1:#f7365224;--color-layer-negative-2:#f7365233;--color-layer-negative-3:#f736524d;--color-layer-negative-4:#f7365266;--color-layer-info-1:#a561ff24;--color-layer-info-2:#a561ff33;--color-layer-info-3:#a561ff4d;--color-layer-info-4:#a561ff66;--top-shadow-xs:0px 0px 3px #0000001c, 0px 5px 25px #00000014;--top-shadow-s:0px 0px 3px #0000001c, 0px 5px 25px #0000002b;--top-shadow:0px 0px 4px #00000024, 0px 4px 32px #0003;--top-shadow-m:0px 0px 4px 0px #00000024, 0px 4px 32px 0px #0003;--top-shadow-b:0px 0px 4px #00000026, 0px 18px 32px #00000057;--top-shadow-darken:inset 1000px 1000px 1000px 1000px #00000008;--top-shadow-darken-2:inset 1000px 1000px 1000px 1000px #0000001f;--top-shadow-darken-3:inset 1000px 1000px 1000px 1000px #0000001a;--color-bg-preloader:#ffffff03;--color-brand-1:#ffe500;--color-brand-2:#ffd400;--color-brand-3:#f5bc00;--color-bg-shading-1:var(--color-theme-150);--color-bg-shading-2:var(--color-theme-125);--color-bg-shading-3:var(--color-theme-100);--color-bg-shading-4:var(--color-theme-75);--color-bg-shading-5:var(--color-theme-50);--color-bg-shading-6:var(--color-theme-0);--color-bg-lightning-1:var(--color-theme-260);--color-bg-primary-1:var(--color-primary-550);--color-bg-primary-2:var(--color-primary-650);--color-bg-primary-3:var(--color-primary-720);--color-bg-positive-1:var(--color-positive-400);--color-bg-positive-2:var(--color-positive-600);--color-bg-positive-3:var(--color-positive-740);--color-bg-warning-1:var(--color-warning-450);--color-bg-warning-2:var(--color-warning-600);--color-bg-warning-3:var(--color-warning-700);--color-bg-negative-1:var(--color-negative-550);--color-bg-negative-2:var(--color-negative-650);--color-bg-negative-3:var(--color-negative-720);--color-bg-info-1:var(--color-info-650);--color-bg-info-2:var(--color-info-720);--color-bg-info-3:var(--color-info-780);--top-panel-background-color:#18181bcc;--color-text-1:var(--color-theme-970);--color-text-2:var(--color-theme-750);--color-text-3:var(--color-theme-500);--color-text-4:var(--color-theme-450);--color-text-1-inverse:var(--color-theme-100);--color-text-white:var(--color-white);--color-text-primary:var(--color-primary-550);--color-text-primary-alt:var(--color-primary-650);--color-text-positive:var(--color-positive-450);--color-text-positive-alt:var(--color-positive-700);--color-text-warning:var(--color-warning-450);--color-text-warning-alt:var(--color-warning-650);--color-text-negative:var(--color-negative-600);--color-text-negative-alt:var(--color-negative-720);--color-text-info:var(--color-info-650);--color-text-info-alt:var(--color-info-740);--color-line-1:var(--color-theme-350);--color-line-2:var(--color-theme-400);--color-line-3:var(--color-theme-485);--color-line-4:var(--color-theme-650);--color-line-1-opacity:#c1cbd71a;--color-line-2-opacity:#c1cbd726;--color-line-3-opacity:#c1cbd745;--color-line-primary-1:var(--color-primary-700);--color-line-primary-2:var(--color-primary-760);--color-line-primary-3:var(--color-primary-850);--color-line-primary-1-opacity:#7aa4ff24;--color-line-primary-2-opacity:#7aa4ff47;--color-line-primary-3-opacity:#7aa4ff61;--color-line-positive-1:var(--color-positive-450);--color-line-positive-2:var(--color-positive-600);--color-line-positive-3:var(--color-positive-740);--color-line-positive-1-opacity:#a4e9ab24;--color-line-positive-2-opacity:#a4e9ab47;--color-line-positive-3-opacity:#a4e9ab61;--color-line-warning-1:var(--color-warning-500);--color-line-warning-2:var(--color-warning-650);--color-line-warning-3:var(--color-warning-740);--color-line-warning-1-opacity:#ffbf8024;--color-line-warning-2-opacity:#ffbf8047;--color-line-warning-3-opacity:#ffbf8061;--color-line-negative-1:var(--color-negative-600);--color-line-negative-2:var(--color-negative-650);--color-line-negative-3:var(--color-negative-740);--color-line-negative-1-opacity:#ef879424;--color-line-negative-2-opacity:#ef879447;--color-line-negative-3-opacity:#ef879461;--color-line-info-1:var(--color-info-650);--color-line-info-2:var(--color-info-720);--color-line-info-3:var(--color-info-780);--color-line-info-1-opacity:#a878f724;--color-line-info-2-opacity:#a878f747;--color-line-info-3-opacity:#a878f761;--scroll-track-color:var(--color-theme-225);--scroll-thumb-color:var(--color-theme-250);--scroll-thumb-color-hover:var(--color-theme-300);--scroll-thumb-color-active:var(--color-theme-400);--body-background-color:var(--color-layout-front-1);--content-background-color:var(--color-layout-front-1);--top-forms-option-color:var(--color-primary-500);--top-forms-option-color-hover:var(--color-primary-600);--color-layout-back:var(--color-theme-50);--color-layout-header:var(--color-theme-175);--color-layout-middle:var(--color-theme-125);--color-layout-front-1:var(--color-theme-175);--color-layout-front-2:var(--color-theme-200);--color-layout-front-3:var(--color-theme-225);--color-layout-front-4:var(--color-theme-250);--color-layout-front-5:var(--color-theme-260);--color-layout-front-6:var(--color-theme-275);--color-layout-front-primary-1:#232f41;--color-layout-front-primary-2:#232f41;--color-layout-front-primary-3:#243149;--color-layout-front-primary-4:#243450;--color-layout-front-primary-5:#253758;--color-layout-front-primary-6:#253960;--color-layout-front-positive-1:#25333b;--color-layout-front-positive-2:#25333b;--color-layout-front-positive-3:#263a3d;--color-layout-front-positive-4:#284140;--color-layout-front-positive-5:#2a4842;--color-layout-front-positive-6:#2b4f44;--color-layout-front-warning-1:#2b3038;--color-layout-front-warning-2:#2b3038;--color-layout-front-warning-3:#343437;--color-layout-front-warning-4:#3c3836;--color-layout-front-warning-5:#453b35;--color-layout-front-warning-6:#4d3f35;--color-layout-front-negative-1:#2b2c3a;--color-layout-front-negative-2:#2b2c3a;--color-layout-front-negative-3:#342d3b;--color-layout-front-negative-4:#3c2d3c;--color-layout-front-negative-5:#452e3d;--color-layout-front-negative-6:#4d2e3e;--color-layout-front-info-1:#272c41;--color-layout-front-info-2:#272c41;--color-layout-front-info-3:#2b2c49;--color-layout-front-info-4:#2f2c50;--color-layout-front-info-5:#332b58;--color-layout-front-info-6:#362b60;--color-summary-top-3:#5ba8dc;--color-summary-top-10:#1aad7b;--color-summary-top-30:#4bd2b8;--color-summary-top-50:#68ca63;--color-summary-top-100:#9daaaa;--color-summary-top-10000:#caa549;--color-summary-top-additional-1:var(--color-summary-top-3);--color-summary-top-additional-2:#1a7ead;--color-table-top-1:#425c8f;--color-table-top-2:#384e7a;--color-table-top-3:#394660;--color-table-top-4:#357550;--color-table-top-5:#336f4e;--color-table-top-6:#326b4d;--color-table-top-7:#31684c;--color-table-top-8:#30624a;--color-table-top-9:#2f5d48;--color-table-top-10:#2d5747;--color-table-move-up-10:#0e6a44;--color-table-move-up-9:#116542;--color-table-move-up-8:#145f40;--color-table-move-up-7:#165a3e;--color-table-move-up-6:#19543c;--color-table-move-up-5:#1b4f3a;--color-table-move-up-4:#1e4938;--color-table-move-up-3:#204335;--color-table-move-up-2:#233e33;--color-table-move-up-1:#263832;--color-table-move-0:#313135;--color-table-move-down-1:#46303f;--color-table-move-down-2:#4f3040;--color-table-move-down-3:#583142;--color-table-move-down-4:#633244;--color-table-move-down-5:#6c3345;--color-table-move-down-6:#723446;--color-table-move-down-7:#793547;--color-table-move-down-8:#823649;--color-table-move-down-9:#8a364a;--color-table-move-down-10:#93374c;--color-table-down:#46303f;--color-table-down-10:#4f3040;--color-table-up:#365344;--color-table-up-10:#2c5145;--color-table-base:var(--color-layout-front-1);--color-table-featured-snippet:var(--color-layout-front-info-6);--color-table-empty:var(--color-layout-front-3);--color-table-not_found:#625c40;--color-snapshot-panel-gradient-1:#232c4d80;--color-snapshot-panel-gradient-2:#232c4dcc;--color-snippet-title:#a2c2fa;--color-snippet-title-visited:#bc8cf2;--color-snippet-url:#070;--color-table-bg-preloader:#2121264d}
1
+ :root{--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-theme-0:#000;--color-theme-50:#0e0e11;--color-theme-75:#101013;--color-theme-100:#131316;--color-theme-125:#17171c;--color-theme-150:#1c1c21;--color-theme-175:#212126;--color-theme-200:#26262c;--color-theme-225:#2a2a32;--color-theme-250:#2f2f37;--color-theme-260:#34343d;--color-theme-275:#393942;--color-theme-300:#3d3d47;--color-theme-325:#42424d;--color-theme-350:#464653;--color-theme-360:#4b4b58;--color-theme-375:#50505e;--color-theme-400:#555563;--color-theme-410:#595969;--color-theme-420:#5e5e6e;--color-theme-430:#626274;--color-theme-440:#676779;--color-theme-450:#6c6c7e;--color-theme-460:#717184;--color-theme-465:#75758a;--color-theme-470:#7b7b8e;--color-theme-475:#818193;--color-theme-480:#868698;--color-theme-485:#8b8b9d;--color-theme-500:#9191a1;--color-theme-550:#9696a6;--color-theme-575:#9c9caa;--color-theme-600:#a1a1af;--color-theme-625:#a7a7b4;--color-theme-650:#acacb9;--color-theme-675:#b2b2bd;--color-theme-700:#b8b8c2;--color-theme-710:#bdbdc6;--color-theme-725:#c2c2cb;--color-theme-750:#c8c8d0;--color-theme-800:#cdcdd5;--color-theme-850:#d3d3d9;--color-theme-900:#d9d9de;--color-theme-925:#dedee3;--color-theme-950:#e3e3e8;--color-theme-955:#e9e9ec;--color-theme-960:#eeeef1;--color-theme-965:#f4f4f5;--color-theme-970:#fafafa;--color-theme-1000:#fff;--color-white:#fff;--color-black:#000;--color-primary-25:#1f232e;--color-primary-50:#1c2736;--color-primary-100:#18293e;--color-primary-125:#142b48;--color-primary-150:#16355a;--color-primary-200:#183e6d;--color-primary-225:#184781;--color-primary-250:#185095;--color-primary-275:#175aab;--color-primary-300:#1563c1;--color-primary-350:#136bd8;--color-primary-400:#0f74f0;--color-primary-450:#1e7ff6;--color-primary-500:#2d8afb;--color-primary-550:#3d94ff;--color-primary-600:#52a0ff;--color-primary-650:#66abff;--color-primary-700:#7ab6ff;--color-primary-720:#8fc1ff;--color-primary-740:#a3cdff;--color-primary-760:#b8d8ff;--color-primary-780:#c2ddff;--color-primary-800:#cce3ff;--color-primary-825:#d6e9ff;--color-primary-850:#e0eeff;--color-primary-900:#ebf4ff;--color-primary-950:#f5f9ff;--color-positive-25:#232424;--color-positive-50:#282a29;--color-positive-100:#25312c;--color-positive-125:#223a30;--color-positive-150:#274939;--color-positive-200:#2c5940;--color-positive-225:#2f6a46;--color-positive-250:#327b49;--color-positive-275:#348d4a;--color-positive-300:#36a150;--color-positive-350:#36b556;--color-positive-400:#36c95b;--color-positive-450:#41d265;--color-positive-500:#4ddb71;--color-positive-550:#5ae27c;--color-positive-600:#6ce58a;--color-positive-650:#87e89f;--color-positive-700:#8eeba5;--color-positive-720:#a0eeb3;--color-positive-740:#b1f1c1;--color-positive-760:#baf3c8;--color-positive-780:#c2f4cf;--color-positive-800:#cbf6d6;--color-positive-825:#d4f7dd;--color-positive-850:#dcf9e3;--color-positive-900:#e5faea;--color-positive-950:#eefcf1;--color-warning-25:#322020;--color-warning-50:#39221d;--color-warning-100:#42211a;--color-warning-125:#4c1e15;--color-warning-150:#5e2817;--color-warning-200:#713319;--color-warning-225:#854119;--color-warning-250:#9a5119;--color-warning-275:#af6418;--color-warning-300:#c56e16;--color-warning-350:#dd7813;--color-warning-400:#f08214;--color-warning-450:#f68c23;--color-warning-500:#fb9632;--color-warning-550:#ffa042;--color-warning-600:#ffab57;--color-warning-650:#ffb56b;--color-warning-700:#ffbf80;--color-warning-720:#ffc994;--color-warning-740:#ffd3a8;--color-warning-760:#ffdebd;--color-warning-780:#ffe3c7;--color-warning-800:#ffe8d1;--color-warning-825:#ffeddb;--color-warning-850:#fff3e6;--color-warning-900:#fff7f0;--color-warning-950:#fffdfa;--color-negative-25:#2f2229;--color-negative-50:#371f2d;--color-negative-100:#401c30;--color-negative-125:#4a1733;--color-negative-150:#5b1a3a;--color-negative-200:#6e1c3e;--color-negative-225:#821c40;--color-negative-250:#961d3f;--color-negative-275:#ab1c31;--color-negative-300:#c11a33;--color-negative-350:#d81834;--color-negative-400:#eb1938;--color-negative-450:#f12745;--color-negative-500:#f73652;--color-negative-550:#ff425e;--color-negative-600:#ff576f;--color-negative-650:#ff6b81;--color-negative-700:#ff8092;--color-negative-720:#ff94a4;--color-negative-740:#ffa8b5;--color-negative-760:#ffbdc6;--color-negative-780:#ffc7cf;--color-negative-800:#ffd1d8;--color-negative-825:#ffdbe1;--color-negative-850:#ffe5e9;--color-negative-900:#fff0f2;--color-negative-950:snow;--color-info-25:#1e1d2b;--color-info-50:#1c1a32;--color-info-100:#1a173b;--color-info-125:#181344;--color-info-150:#201556;--color-info-200:#2a1769;--color-info-225:#36187c;--color-info-250:#441891;--color-info-275:#5517a6;--color-info-300:#5e15bc;--color-info-350:#6612d3;--color-info-400:#6f0feb;--color-info-450:#7919f5;--color-info-500:#8428fb;--color-info-550:#8f38ff;--color-info-600:#9a4dff;--color-info-650:#a561ff;--color-info-700:#b175ff;--color-info-720:#bc8aff;--color-info-740:#c89eff;--color-info-760:#d4b2ff;--color-info-780:#d9bdff;--color-info-800:#dfc7ff;--color-info-825:#e5d1ff;--color-info-850:#ebdbff;--color-info-900:#f1e5ff;--color-info-950:#f6f0ff;--color-layer-1:#8c8ca614;--color-layer-2:#8c8ca624;--color-layer-3:#8c8ca62e;--color-layer-4:#8c8ca63d;--color-layer-primary-1:#2d6efb24;--color-layer-primary-2:#2d6efb33;--color-layer-primary-3:#2d6efb4d;--color-layer-primary-4:#2d6efb66;--color-layer-positive-1:#36b55624;--color-layer-positive-2:#36b55633;--color-layer-positive-3:#36b5564d;--color-layer-positive-4:#36b55666;--color-layer-warning-1:#ffa04224;--color-layer-warning-2:#ffa04233;--color-layer-warning-3:#ffa0424d;--color-layer-warning-4:#ffa04266;--color-layer-negative-1:#f7365224;--color-layer-negative-2:#f7365233;--color-layer-negative-3:#f736524d;--color-layer-negative-4:#f7365266;--color-layer-info-1:#a561ff24;--color-layer-info-2:#a561ff33;--color-layer-info-3:#a561ff4d;--color-layer-info-4:#a561ff66;--top-shadow-xs:0px 0px 3px #0000001c, 0px 5px 25px #00000014;--top-shadow-s:0px 0px 3px #0000001c, 0px 5px 25px #0000002b;--top-shadow:0px 0px 4px #00000024, 0px 4px 32px #0003;--top-shadow-m:0px 0px 4px 0px #00000024, 0px 4px 32px 0px #0003;--top-shadow-b:0px 0px 4px #00000026, 0px 18px 32px #00000057;--top-shadow-darken:inset 1000px 1000px 1000px 1000px #00000008;--top-shadow-darken-2:inset 1000px 1000px 1000px 1000px #0000001f;--top-shadow-darken-3:inset 1000px 1000px 1000px 1000px #0000001a;--color-bg-preloader:#ffffff03;--color-brand-1:#ffe500;--color-brand-2:#ffd400;--color-brand-3:#f5bc00;--color-bg-shading-1:var(--color-theme-150);--color-bg-shading-2:var(--color-theme-125);--color-bg-shading-3:var(--color-theme-100);--color-bg-shading-4:var(--color-theme-75);--color-bg-shading-5:var(--color-theme-50);--color-bg-shading-6:var(--color-theme-0);--color-bg-lightning-1:var(--color-theme-260);--color-bg-primary-1:var(--color-primary-550);--color-bg-primary-2:var(--color-primary-650);--color-bg-primary-3:var(--color-primary-720);--color-bg-positive-1:var(--color-positive-400);--color-bg-positive-2:var(--color-positive-600);--color-bg-positive-3:var(--color-positive-740);--color-bg-warning-1:var(--color-warning-450);--color-bg-warning-2:var(--color-warning-600);--color-bg-warning-3:var(--color-warning-700);--color-bg-negative-1:var(--color-negative-550);--color-bg-negative-2:var(--color-negative-650);--color-bg-negative-3:var(--color-negative-720);--color-bg-info-1:var(--color-info-650);--color-bg-info-2:var(--color-info-720);--color-bg-info-3:var(--color-info-780);--top-panel-background-color:#18181bcc;--color-text-1:var(--color-theme-970);--color-text-2:var(--color-theme-750);--color-text-3:var(--color-theme-500);--color-text-4:var(--color-theme-450);--color-text-1-inverse:var(--color-theme-100);--color-text-white:var(--color-white);--color-text-primary:var(--color-primary-550);--color-text-primary-alt:var(--color-primary-650);--color-text-positive:var(--color-positive-450);--color-text-positive-alt:var(--color-positive-700);--color-text-warning:var(--color-warning-450);--color-text-warning-alt:var(--color-warning-650);--color-text-negative:var(--color-negative-600);--color-text-negative-alt:var(--color-negative-720);--color-text-info:var(--color-info-650);--color-text-info-alt:var(--color-info-740);--color-line-1:var(--color-theme-350);--color-line-2:var(--color-theme-400);--color-line-3:var(--color-theme-485);--color-line-4:var(--color-theme-650);--color-line-1-opacity:#c1cbd71a;--color-line-2-opacity:#c1cbd726;--color-line-3-opacity:#c1cbd745;--color-line-primary-1:var(--color-primary-700);--color-line-primary-2:var(--color-primary-760);--color-line-primary-3:var(--color-primary-850);--color-line-primary-1-opacity:#7aa4ff24;--color-line-primary-2-opacity:#7aa4ff47;--color-line-primary-3-opacity:#7aa4ff61;--color-line-positive-1:var(--color-positive-450);--color-line-positive-2:var(--color-positive-600);--color-line-positive-3:var(--color-positive-740);--color-line-positive-1-opacity:#a4e9ab24;--color-line-positive-2-opacity:#a4e9ab47;--color-line-positive-3-opacity:#a4e9ab61;--color-line-warning-1:var(--color-warning-500);--color-line-warning-2:var(--color-warning-650);--color-line-warning-3:var(--color-warning-740);--color-line-warning-1-opacity:#ffbf8024;--color-line-warning-2-opacity:#ffbf8047;--color-line-warning-3-opacity:#ffbf8061;--color-line-negative-1:var(--color-negative-600);--color-line-negative-2:var(--color-negative-650);--color-line-negative-3:var(--color-negative-740);--color-line-negative-1-opacity:#ef879424;--color-line-negative-2-opacity:#ef879447;--color-line-negative-3-opacity:#ef879461;--color-line-info-1:var(--color-info-650);--color-line-info-2:var(--color-info-720);--color-line-info-3:var(--color-info-780);--color-line-info-1-opacity:#a878f724;--color-line-info-2-opacity:#a878f747;--color-line-info-3-opacity:#a878f761;--scroll-track-color:var(--color-theme-225);--scroll-thumb-color:var(--color-theme-250);--scroll-thumb-color-hover:var(--color-theme-300);--scroll-thumb-color-active:var(--color-theme-400);--body-background-color:var(--color-layout-front-1);--content-background-color:var(--color-layout-front-1);--top-forms-option-color:var(--color-primary-500);--top-forms-option-color-hover:var(--color-primary-600);--color-layout-back:var(--color-theme-50);--color-layout-header:var(--color-theme-175);--color-layout-middle:var(--color-theme-125);--color-layout-front-1:var(--color-theme-175);--color-layout-front-2:var(--color-theme-200);--color-layout-front-3:var(--color-theme-225);--color-layout-front-4:var(--color-theme-250);--color-layout-front-5:var(--color-theme-260);--color-layout-front-6:var(--color-theme-275);--color-layout-front-primary-1:#232f41;--color-layout-front-primary-2:#232f41;--color-layout-front-primary-3:#243149;--color-layout-front-primary-4:#243450;--color-layout-front-primary-5:#253758;--color-layout-front-primary-6:#253960;--color-layout-front-positive-1:#25333b;--color-layout-front-positive-2:#25333b;--color-layout-front-positive-3:#263a3d;--color-layout-front-positive-4:#284140;--color-layout-front-positive-5:#2a4842;--color-layout-front-positive-6:#2b4f44;--color-layout-front-warning-1:#2b3038;--color-layout-front-warning-2:#2b3038;--color-layout-front-warning-3:#343437;--color-layout-front-warning-4:#3c3836;--color-layout-front-warning-5:#453b35;--color-layout-front-warning-6:#4d3f35;--color-layout-front-negative-1:#2b2c3a;--color-layout-front-negative-2:#2b2c3a;--color-layout-front-negative-3:#342d3b;--color-layout-front-negative-4:#3c2d3c;--color-layout-front-negative-5:#452e3d;--color-layout-front-negative-6:#4d2e3e;--color-layout-front-info-1:#272c41;--color-layout-front-info-2:#272c41;--color-layout-front-info-3:#2b2c49;--color-layout-front-info-4:#2f2c50;--color-layout-front-info-5:#332b58;--color-layout-front-info-6:#362b60;--color-summary-top-3:#5ba8dc;--color-summary-top-10:#1aad7b;--color-summary-top-30:#4bd2b8;--color-summary-top-50:#68ca63;--color-summary-top-100:#9daaaa;--color-summary-top-10000:#caa549;--color-summary-top-additional-1:var(--color-summary-top-3);--color-summary-top-additional-2:#1a7ead;--color-table-top-1:#425c8f;--color-table-top-2:#384e7a;--color-table-top-3:#394660;--color-table-top-4:#357550;--color-table-top-5:#336f4e;--color-table-top-6:#326b4d;--color-table-top-7:#31684c;--color-table-top-8:#30624a;--color-table-top-9:#2f5d48;--color-table-top-10:#2d5747;--color-table-move-up-10:#0e6a44;--color-table-move-up-9:#116542;--color-table-move-up-8:#145f40;--color-table-move-up-7:#165a3e;--color-table-move-up-6:#19543c;--color-table-move-up-5:#1b4f3a;--color-table-move-up-4:#1e4938;--color-table-move-up-3:#204335;--color-table-move-up-2:#233e33;--color-table-move-up-1:#263832;--color-table-move-0:#313135;--color-table-move-down-1:#46303f;--color-table-move-down-2:#4f3040;--color-table-move-down-3:#583142;--color-table-move-down-4:#633244;--color-table-move-down-5:#6c3345;--color-table-move-down-6:#723446;--color-table-move-down-7:#793547;--color-table-move-down-8:#823649;--color-table-move-down-9:#8a364a;--color-table-move-down-10:#93374c;--color-table-down:#46303f;--color-table-down-10:#4f3040;--color-table-up:#365344;--color-table-up-10:#2c5145;--color-table-base:var(--color-layout-front-1);--color-table-featured-snippet:#878742;--color-table-empty:var(--color-layout-front-3);--color-table-not_found:#625c40;--color-table-dynamic:#826d50;--color-snapshot-panel-gradient-1:#232c4d80;--color-snapshot-panel-gradient-2:#232c4dcc;--color-snippet-title:#a2c2fa;--color-snippet-title-visited:#bc8cf2;--color-snippet-url:#070;--color-table-bg-preloader:#2121264d}
@@ -1 +1 @@
1
- :root{--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-theme-0:#000;--color-theme-50:#050815;--color-theme-75:#090a18;--color-theme-100:#0e121b;--color-theme-125:#111722;--color-theme-150:#141c29;--color-theme-175:#172130;--color-theme-200:#1b2637;--color-theme-225:#1e2b3e;--color-theme-250:#223044;--color-theme-260:#25344c;--color-theme-275:#293852;--color-theme-300:#2c3e58;--color-theme-325:#2f4360;--color-theme-350:#324867;--color-theme-360:#364d6d;--color-theme-375:#395175;--color-theme-400:#3d557b;--color-theme-410:#405a82;--color-theme-420:#435f89;--color-theme-430:#47648f;--color-theme-440:#4a6996;--color-theme-450:#4d6e9d;--color-theme-460:#5173a4;--color-theme-465:#5476ab;--color-theme-470:#5b7dae;--color-theme-475:#6281b2;--color-theme-480:#6987b5;--color-theme-485:#708db8;--color-theme-500:#7692bc;--color-theme-550:#7d97bf;--color-theme-575:#849dc2;--color-theme-600:#8aa2c6;--color-theme-625:#92a7c9;--color-theme-650:#98aecd;--color-theme-675:#9fb3d0;--color-theme-700:#a7b9d3;--color-theme-710:#adbed6;--color-theme-725:#b3c3da;--color-theme-750:#bbc9dd;--color-theme-800:#c1cee1;--color-theme-850:#c8d3e4;--color-theme-900:#cfd9e8;--color-theme-925:#d6deeb;--color-theme-950:#dde3ee;--color-theme-955:#e4eaf1;--color-theme-960:#eaeff5;--color-theme-965:#f1f4f8;--color-theme-970:#f9fafb;--color-theme-1000:#fff;--color-white:#fff;--color-black:#000;--color-primary-25:#1f252e;--color-primary-50:#1c2736;--color-primary-100:#18293e;--color-primary-125:#142b48;--color-primary-150:#16355a;--color-primary-200:#183e6d;--color-primary-225:#184781;--color-primary-250:#185095;--color-primary-275:#175aab;--color-primary-300:#1563c1;--color-primary-350:#136bd8;--color-primary-400:#0f74f0;--color-primary-450:#1e7ff6;--color-primary-500:#2d8afb;--color-primary-550:#3d94ff;--color-primary-600:#52a0ff;--color-primary-650:#66abff;--color-primary-700:#7ab6ff;--color-primary-720:#8fc1ff;--color-primary-740:#a3cdff;--color-primary-760:#b8d8ff;--color-primary-780:#c2ddff;--color-primary-800:#cce3ff;--color-primary-825:#d6e9ff;--color-primary-850:#e0eeff;--color-primary-900:#ebf4ff;--color-primary-950:#f5f9ff;--color-positive-25:#111311;--color-positive-50:#131612;--color-positive-100:#141a14;--color-positive-125:#161e15;--color-positive-150:#1c2c1c;--color-positive-200:#223a23;--color-positive-225:#27492b;--color-positive-250:#2c5934;--color-positive-275:#2f6a3e;--color-positive-300:#327b44;--color-positive-350:#348d4b;--color-positive-400:#36a150;--color-positive-450:#36b556;--color-positive-500:#36c95b;--color-positive-550:#41d265;--color-positive-600:#4ddb73;--color-positive-650:#5ae27c;--color-positive-700:#6ce58a;--color-positive-720:#7de898;--color-positive-740:#8eeba5;--color-positive-760:#a0eeb3;--color-positive-780:#b1f1c1;--color-positive-800:#c2f4cf;--color-positive-825:#d8f8e0;--color-positive-850:#e5faea;--color-positive-900:#eefcf1;--color-positive-950:#f6fdf8;--color-warning-25:#3c1f1f;--color-warning-50:#39221b;--color-warning-100:#421b1a;--color-warning-125:#4c2015;--color-warning-150:#5e2517;--color-warning-200:#71321e;--color-warning-225:#7f3d19;--color-warning-250:#9a511a;--color-warning-275:#af6420;--color-warning-300:#c56d1c;--color-warning-350:#dd780c;--color-warning-400:#f08214;--color-warning-450:#f48b1b;--color-warning-500:#fb9632;--color-warning-550:#ffa042;--color-warning-600:#ffab57;--color-warning-650:#ffb56b;--color-warning-700:#ffbf80;--color-warning-720:#ffcb94;--color-warning-740:#ffd7a8;--color-warning-760:#ffdebf;--color-warning-780:#ffe3c7;--color-warning-800:#ffe8cf;--color-warning-825:#ffeddb;--color-warning-850:#fff3e6;--color-warning-900:#fff7f0;--color-warning-950:#fffdfa;--color-negative-25:#2e2229;--color-negative-50:#371f2b;--color-negative-100:#402030;--color-negative-125:#4a1733;--color-negative-150:#5b193a;--color-negative-200:#6e1c2f;--color-negative-225:#8a1c34;--color-negative-250:#9b1d32;--color-negative-275:#ab1a2f;--color-negative-300:#c31a30;--color-negative-350:#d81534;--color-negative-400:#eb1938;--color-negative-450:#f12745;--color-negative-500:#f73652;--color-negative-550:#ff4262;--color-negative-600:#ff576f;--color-negative-650:#ff6b7b;--color-negative-700:#ff8092;--color-negative-720:#ff949f;--color-negative-740:#ffa8b5;--color-negative-760:#ffbfc6;--color-negative-780:#ffc7cf;--color-negative-800:#ffd1d8;--color-negative-825:#ffdde1;--color-negative-850:#ffe5e9;--color-negative-900:#fff0f2;--color-negative-950:#fffafb;--color-info-25:#1e1d2b;--color-info-50:#1c1a32;--color-info-100:#1a173b;--color-info-125:#181344;--color-info-150:#201556;--color-info-200:#2a1769;--color-info-225:#36187c;--color-info-250:#441891;--color-info-275:#5517a6;--color-info-300:#5e15bc;--color-info-350:#6612d3;--color-info-400:#6f0feb;--color-info-450:#7919f5;--color-info-500:#8428fb;--color-info-550:#8f38ff;--color-info-600:#9a4dff;--color-info-650:#a561ff;--color-info-700:#b175ff;--color-info-720:#bc8aff;--color-info-740:#c89eff;--color-info-760:#d4b2ff;--color-info-780:#d9bdff;--color-info-800:#dfc7ff;--color-info-825:#e5d1ff;--color-info-850:#ebdbff;--color-info-900:#f1e5ff;--color-info-950:#f6f0ff;--color-layer-1:#8194b114;--color-layer-2:#8194b124;--color-layer-3:#8194b12e;--color-layer-4:#8194b13d;--color-layer-primary-1:#2d6efb24;--color-layer-primary-2:#2d6efb33;--color-layer-primary-3:#2d6efb4d;--color-layer-primary-4:#2d6efb66;--color-layer-positive-1:#36b55624;--color-layer-positive-2:#36b55633;--color-layer-positive-3:#36b5564d;--color-layer-positive-4:#36b55666;--color-layer-warning-1:#ffa04224;--color-layer-warning-2:#ffa04233;--color-layer-warning-3:#ffa0424d;--color-layer-warning-4:#ffa04266;--color-layer-negative-1:#f7365224;--color-layer-negative-2:#f7365233;--color-layer-negative-3:#f736524d;--color-layer-negative-4:#f7365266;--color-layer-info-1:#a561ff24;--color-layer-info-2:#a561ff33;--color-layer-info-3:#a561ff4d;--color-layer-info-4:#a561ff66;--top-shadow-xs:0px 0px 3px #0000001c, 0px 5px 25px #00000014;--top-shadow-s:0px 0px 3px #0000001c, 0px 5px 25px #0000002b;--top-shadow:0px 0px 4px #00000024, 0px 4px 32px #0003;--top-shadow-m:0px 0px 4px 0px #00000024, 0px 4px 32px 0px #0003;--top-shadow-b:0px 0px 4px #00000026, 0px 18px 32px #00000057;--top-shadow-darken-1:inset 1000px 1000px 1000px 1000px #00000008;--top-shadow-darken-2:inset 1000px 1000px 1000px 1000px #0000001f;--top-shadow-darken-3:inset 1000px 1000px 1000px 1000px #0000001a;--color-bg-preloader:#ffffff03;--color-brand-1:var(--color-primary-700);--color-brand-2:var(--color-primary-740);--color-brand-3:var(--color-primary-800);--color-bg-shading-1:var(--color-theme-200);--color-bg-shading-2:var(--color-theme-175);--color-bg-shading-3:var(--color-theme-150);--color-bg-shading-4:var(--color-theme-125);--color-bg-shading-5:var(--color-theme-100);--color-bg-shading-6:var(--color-theme-50);--color-bg-lightning-1:var(--color-theme-260);--color-bg-primary-1:var(--color-primary-550);--color-bg-primary-2:var(--color-primary-650);--color-bg-primary-3:var(--color-primary-720);--color-bg-positive-1:var(--color-positive-450);--color-bg-positive-2:var(--color-positive-600);--color-bg-positive-3:var(--color-positive-740);--color-bg-warning-1:var(--color-warning-450);--color-bg-warning-2:var(--color-warning-600);--color-bg-warning-3:var(--color-warning-700);--color-bg-negative-1:var(--color-negative-550);--color-bg-negative-2:var(--color-negative-650);--color-bg-negative-3:var(--color-negative-720);--color-bg-info-1:var(--color-info-650);--color-bg-info-2:var(--color-info-720);--color-bg-info-3:var(--color-info-780);--top-panel-background-color:#111722cc;--color-text-1:var(--color-theme-970);--color-text-2:var(--color-theme-750);--color-text-3:var(--color-theme-500);--color-text-4:var(--color-theme-450);--color-text-1-inverse:var(--color-theme-100);--color-text-white:var(--color-white);--color-text-primary:var(--color-primary-550);--color-text-primary-alt:var(--color-primary-650);--color-text-positive:var(--color-positive-450);--color-text-positive-alt:var(--color-positive-600);--color-text-warning:var(--color-warning-450);--color-text-warning-alt:var(--color-warning-650);--color-text-negative:var(--color-negative-550);--color-text-negative-alt:var(--color-negative-650);--color-text-info:var(--color-info-650);--color-text-info-alt:var(--color-info-740);--color-line-1:var(--color-theme-350);--color-line-2:var(--color-theme-400);--color-line-3:var(--color-theme-485);--color-line-4:var(--color-theme-650);--color-line-1-opacity:#c1cbd71a;--color-line-2-opacity:#c1cbd726;--color-line-3-opacity:#c1cbd745;--color-line-primary-1:var(--color-primary-450);--color-line-primary-2:var(--color-primary-600);--color-line-primary-3:var(--color-primary-740);--color-line-primary-1-opacity:#7aa4ff24;--color-line-primary-2-opacity:#7aa4ff47;--color-line-primary-3-opacity:#7aa4ff61;--color-line-positive-1:var(--color-positive-450);--color-line-positive-2:var(--color-positive-600);--color-line-positive-3:var(--color-positive-740);--color-line-positive-1-opacity:#a4e9ab24;--color-line-positive-2-opacity:#a4e9ab47;--color-line-positive-3-opacity:#a4e9ab61;--color-line-warning-1:var(--color-warning-450);--color-line-warning-2:var(--color-warning-600);--color-line-warning-3:var(--color-warning-700);--color-line-warning-1-opacity:#ffbf8024;--color-line-warning-2-opacity:#ffbf8047;--color-line-warning-3-opacity:#ffbf8061;--color-line-negative-1:var(--color-negative-550);--color-line-negative-2:var(--color-negative-650);--color-line-negative-3:var(--color-negative-720);--color-line-negative-1-opacity:#ef879424;--color-line-negative-2-opacity:#ef879447;--color-line-negative-3-opacity:#ef879461;--color-line-info-1:var(--color-info-650);--color-line-info-2:var(--color-info-720);--color-line-info-3:var(--color-info-780);--color-line-info-1-opacity:#a878f724;--color-line-info-2-opacity:#a878f747;--color-line-info-3-opacity:#a878f761;--scroll-track-color:var(--color-theme-225);--scroll-thumb-color:var(--color-theme-300);--scroll-thumb-color-hover:var(--color-theme-450);--scroll-thumb-color-active:var(--color-theme-550);--body-background-color:var(--color-layout-front-1);--content-background-color:var(--color-layout-front-1);--top-forms-option-color:var(--color-primary-550);--top-forms-option-color-hover:var(--color-primary-650);--color-layout-back:var(--color-theme-100);--color-layout-header:var(--color-theme-225);--color-layout-middle:var(--color-theme-125);--color-layout-front-1:var(--color-theme-225);--color-layout-front-2:#222f43;--color-layout-front-3:#253348;--color-layout-front-4:#29374d;--color-layout-front-5:#2c3b52;--color-layout-front-6:#2c3b52;--color-layout-front-primary-1:#202c3f;--color-layout-front-primary-2:#232f41;--color-layout-front-primary-3:#243149;--color-layout-front-primary-4:#243450;--color-layout-front-primary-5:#253758;--color-layout-front-primary-6:#253960;--color-layout-front-positive-1:#202d3d;--color-layout-front-positive-2:#25333b;--color-layout-front-positive-3:#263a3d;--color-layout-front-positive-4:#284140;--color-layout-front-positive-5:#2a4842;--color-layout-front-positive-6:#2b4f44;--color-layout-front-warning-1:#222d3c;--color-layout-front-warning-2:#2b3038;--color-layout-front-warning-3:#343437;--color-layout-front-warning-4:#3c3836;--color-layout-front-warning-5:#453b35;--color-layout-front-warning-6:#4d3f35;--color-layout-front-negative-1:#222b3d;--color-layout-front-negative-2:#2b2c3a;--color-layout-front-negative-3:#342d3b;--color-layout-front-negative-4:#3c2d3c;--color-layout-front-negative-5:#452e3d;--color-layout-front-negative-6:#4d2e3e;--color-layout-front-info-1:#212b3f;--color-layout-front-info-2:#272c41;--color-layout-front-info-3:#2b2c49;--color-layout-front-info-4:#2f2c50;--color-layout-front-info-5:#332b58;--color-layout-front-info-6:#362b60;--color-summary-top-3:#5ba8dc;--color-summary-top-10:#1aad7b;--color-summary-top-30:#4bd2b8;--color-summary-top-50:#68ca63;--color-summary-top-100:#9daaaa;--color-summary-top-10000:#caa549;--color-summary-top-additional-1:var(--color-summary-top-3);--color-summary-top-additional-2:#1a7ead;--color-table-top-1:#435e93;--color-table-top-2:#3f5788;--color-table-top-3:#3b5381;--color-table-top-4:#357550;--color-table-top-5:#336f4e;--color-table-top-6:#326b4d;--color-table-top-7:#31684c;--color-table-top-8:#30624a;--color-table-top-9:#2f5d48;--color-table-top-10:#2d5747;--color-table-move-up-10:#0e6a44;--color-table-move-up-9:#116542;--color-table-move-up-8:#145f40;--color-table-move-up-7:#165a3e;--color-table-move-up-6:#19543c;--color-table-move-up-5:#1b4f3a;--color-table-move-up-4:#1e4938;--color-table-move-up-3:#204335;--color-table-move-up-2:#233e33;--color-table-move-up-1:#263832;--color-table-move-0:#313135;--color-table-move-down-1:#46303f;--color-table-move-down-2:#4f3040;--color-table-move-down-3:#583142;--color-table-move-down-4:#633244;--color-table-move-down-5:#6c3345;--color-table-move-down-6:#723446;--color-table-move-down-7:#793547;--color-table-move-down-8:#823649;--color-table-move-down-9:#8a364a;--color-table-move-down-10:#93374c;--color-table-down:#46303f;--color-table-down-10:#4f3040;--color-table-up:#365344;--color-table-up-10:#2c5145;--color-table-base:var(--color-layout-front-1);--color-table-featured-snippet:var(--color-layout-front-info-6);--color-table-empty:var(--color-layout-front-3);--color-table-not_found:#313638;--color-snapshot-panel-gradient-1:#232c4d80;--color-snapshot-panel-gradient-2:#232c4dcc;--color-snippet-title:#a2c2fa;--color-snippet-title-visited:#bc8cf2;--color-snippet-url:#070;--color-table-bg-preloader:#1e2b3e4d}
1
+ :root{--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-theme-0:#000;--color-theme-50:#050815;--color-theme-75:#090a18;--color-theme-100:#0e121b;--color-theme-125:#111722;--color-theme-150:#141c29;--color-theme-175:#172130;--color-theme-200:#1b2637;--color-theme-225:#1e2b3e;--color-theme-250:#223044;--color-theme-260:#25344c;--color-theme-275:#293852;--color-theme-300:#2c3e58;--color-theme-325:#2f4360;--color-theme-350:#324867;--color-theme-360:#364d6d;--color-theme-375:#395175;--color-theme-400:#3d557b;--color-theme-410:#405a82;--color-theme-420:#435f89;--color-theme-430:#47648f;--color-theme-440:#4a6996;--color-theme-450:#4d6e9d;--color-theme-460:#5173a4;--color-theme-465:#5476ab;--color-theme-470:#5b7dae;--color-theme-475:#6281b2;--color-theme-480:#6987b5;--color-theme-485:#708db8;--color-theme-500:#7692bc;--color-theme-550:#7d97bf;--color-theme-575:#849dc2;--color-theme-600:#8aa2c6;--color-theme-625:#92a7c9;--color-theme-650:#98aecd;--color-theme-675:#9fb3d0;--color-theme-700:#a7b9d3;--color-theme-710:#adbed6;--color-theme-725:#b3c3da;--color-theme-750:#bbc9dd;--color-theme-800:#c1cee1;--color-theme-850:#c8d3e4;--color-theme-900:#cfd9e8;--color-theme-925:#d6deeb;--color-theme-950:#dde3ee;--color-theme-955:#e4eaf1;--color-theme-960:#eaeff5;--color-theme-965:#f1f4f8;--color-theme-970:#f9fafb;--color-theme-1000:#fff;--color-white:#fff;--color-black:#000;--color-primary-25:#1f252e;--color-primary-50:#1c2736;--color-primary-100:#18293e;--color-primary-125:#142b48;--color-primary-150:#16355a;--color-primary-200:#183e6d;--color-primary-225:#184781;--color-primary-250:#185095;--color-primary-275:#175aab;--color-primary-300:#1563c1;--color-primary-350:#136bd8;--color-primary-400:#0f74f0;--color-primary-450:#1e7ff6;--color-primary-500:#2d8afb;--color-primary-550:#3d94ff;--color-primary-600:#52a0ff;--color-primary-650:#66abff;--color-primary-700:#7ab6ff;--color-primary-720:#8fc1ff;--color-primary-740:#a3cdff;--color-primary-760:#b8d8ff;--color-primary-780:#c2ddff;--color-primary-800:#cce3ff;--color-primary-825:#d6e9ff;--color-primary-850:#e0eeff;--color-primary-900:#ebf4ff;--color-primary-950:#f5f9ff;--color-positive-25:#111311;--color-positive-50:#131612;--color-positive-100:#141a14;--color-positive-125:#161e15;--color-positive-150:#1c2c1c;--color-positive-200:#223a23;--color-positive-225:#27492b;--color-positive-250:#2c5934;--color-positive-275:#2f6a3e;--color-positive-300:#327b44;--color-positive-350:#348d4b;--color-positive-400:#36a150;--color-positive-450:#36b556;--color-positive-500:#36c95b;--color-positive-550:#41d265;--color-positive-600:#4ddb73;--color-positive-650:#5ae27c;--color-positive-700:#6ce58a;--color-positive-720:#7de898;--color-positive-740:#8eeba5;--color-positive-760:#a0eeb3;--color-positive-780:#b1f1c1;--color-positive-800:#c2f4cf;--color-positive-825:#d8f8e0;--color-positive-850:#e5faea;--color-positive-900:#eefcf1;--color-positive-950:#f6fdf8;--color-warning-25:#3c1f1f;--color-warning-50:#39221b;--color-warning-100:#421b1a;--color-warning-125:#4c2015;--color-warning-150:#5e2517;--color-warning-200:#71321e;--color-warning-225:#7f3d19;--color-warning-250:#9a511a;--color-warning-275:#af6420;--color-warning-300:#c56d1c;--color-warning-350:#dd780c;--color-warning-400:#f08214;--color-warning-450:#f48b1b;--color-warning-500:#fb9632;--color-warning-550:#ffa042;--color-warning-600:#ffab57;--color-warning-650:#ffb56b;--color-warning-700:#ffbf80;--color-warning-720:#ffcb94;--color-warning-740:#ffd7a8;--color-warning-760:#ffdebf;--color-warning-780:#ffe3c7;--color-warning-800:#ffe8cf;--color-warning-825:#ffeddb;--color-warning-850:#fff3e6;--color-warning-900:#fff7f0;--color-warning-950:#fffdfa;--color-negative-25:#2e2229;--color-negative-50:#371f2b;--color-negative-100:#402030;--color-negative-125:#4a1733;--color-negative-150:#5b193a;--color-negative-200:#6e1c2f;--color-negative-225:#8a1c34;--color-negative-250:#9b1d32;--color-negative-275:#ab1a2f;--color-negative-300:#c31a30;--color-negative-350:#d81534;--color-negative-400:#eb1938;--color-negative-450:#f12745;--color-negative-500:#f73652;--color-negative-550:#ff4262;--color-negative-600:#ff576f;--color-negative-650:#ff6b7b;--color-negative-700:#ff8092;--color-negative-720:#ff949f;--color-negative-740:#ffa8b5;--color-negative-760:#ffbfc6;--color-negative-780:#ffc7cf;--color-negative-800:#ffd1d8;--color-negative-825:#ffdde1;--color-negative-850:#ffe5e9;--color-negative-900:#fff0f2;--color-negative-950:#fffafb;--color-info-25:#1e1d2b;--color-info-50:#1c1a32;--color-info-100:#1a173b;--color-info-125:#181344;--color-info-150:#201556;--color-info-200:#2a1769;--color-info-225:#36187c;--color-info-250:#441891;--color-info-275:#5517a6;--color-info-300:#5e15bc;--color-info-350:#6612d3;--color-info-400:#6f0feb;--color-info-450:#7919f5;--color-info-500:#8428fb;--color-info-550:#8f38ff;--color-info-600:#9a4dff;--color-info-650:#a561ff;--color-info-700:#b175ff;--color-info-720:#bc8aff;--color-info-740:#c89eff;--color-info-760:#d4b2ff;--color-info-780:#d9bdff;--color-info-800:#dfc7ff;--color-info-825:#e5d1ff;--color-info-850:#ebdbff;--color-info-900:#f1e5ff;--color-info-950:#f6f0ff;--color-layer-1:#8194b114;--color-layer-2:#8194b124;--color-layer-3:#8194b12e;--color-layer-4:#8194b13d;--color-layer-primary-1:#2d6efb24;--color-layer-primary-2:#2d6efb33;--color-layer-primary-3:#2d6efb4d;--color-layer-primary-4:#2d6efb66;--color-layer-positive-1:#36b55624;--color-layer-positive-2:#36b55633;--color-layer-positive-3:#36b5564d;--color-layer-positive-4:#36b55666;--color-layer-warning-1:#ffa04224;--color-layer-warning-2:#ffa04233;--color-layer-warning-3:#ffa0424d;--color-layer-warning-4:#ffa04266;--color-layer-negative-1:#f7365224;--color-layer-negative-2:#f7365233;--color-layer-negative-3:#f736524d;--color-layer-negative-4:#f7365266;--color-layer-info-1:#a561ff24;--color-layer-info-2:#a561ff33;--color-layer-info-3:#a561ff4d;--color-layer-info-4:#a561ff66;--top-shadow-xs:0px 0px 3px #0000001c, 0px 5px 25px #00000014;--top-shadow-s:0px 0px 3px #0000001c, 0px 5px 25px #0000002b;--top-shadow:0px 0px 4px #00000024, 0px 4px 32px #0003;--top-shadow-m:0px 0px 4px 0px #00000024, 0px 4px 32px 0px #0003;--top-shadow-b:0px 0px 4px #00000026, 0px 18px 32px #00000057;--top-shadow-darken-1:inset 1000px 1000px 1000px 1000px #00000008;--top-shadow-darken-2:inset 1000px 1000px 1000px 1000px #0000001f;--top-shadow-darken-3:inset 1000px 1000px 1000px 1000px #0000001a;--color-bg-preloader:#ffffff03;--color-brand-1:var(--color-primary-700);--color-brand-2:var(--color-primary-740);--color-brand-3:var(--color-primary-800);--color-bg-shading-1:var(--color-theme-200);--color-bg-shading-2:var(--color-theme-175);--color-bg-shading-3:var(--color-theme-150);--color-bg-shading-4:var(--color-theme-125);--color-bg-shading-5:var(--color-theme-100);--color-bg-shading-6:var(--color-theme-50);--color-bg-lightning-1:var(--color-theme-260);--color-bg-primary-1:var(--color-primary-550);--color-bg-primary-2:var(--color-primary-650);--color-bg-primary-3:var(--color-primary-720);--color-bg-positive-1:var(--color-positive-450);--color-bg-positive-2:var(--color-positive-600);--color-bg-positive-3:var(--color-positive-740);--color-bg-warning-1:var(--color-warning-450);--color-bg-warning-2:var(--color-warning-600);--color-bg-warning-3:var(--color-warning-700);--color-bg-negative-1:var(--color-negative-550);--color-bg-negative-2:var(--color-negative-650);--color-bg-negative-3:var(--color-negative-720);--color-bg-info-1:var(--color-info-650);--color-bg-info-2:var(--color-info-720);--color-bg-info-3:var(--color-info-780);--top-panel-background-color:#111722cc;--color-text-1:var(--color-theme-970);--color-text-2:var(--color-theme-750);--color-text-3:var(--color-theme-500);--color-text-4:var(--color-theme-450);--color-text-1-inverse:var(--color-theme-100);--color-text-white:var(--color-white);--color-text-primary:var(--color-primary-550);--color-text-primary-alt:var(--color-primary-650);--color-text-positive:var(--color-positive-450);--color-text-positive-alt:var(--color-positive-600);--color-text-warning:var(--color-warning-450);--color-text-warning-alt:var(--color-warning-650);--color-text-negative:var(--color-negative-550);--color-text-negative-alt:var(--color-negative-650);--color-text-info:var(--color-info-650);--color-text-info-alt:var(--color-info-740);--color-line-1:var(--color-theme-350);--color-line-2:var(--color-theme-400);--color-line-3:var(--color-theme-485);--color-line-4:var(--color-theme-650);--color-line-1-opacity:#c1cbd71a;--color-line-2-opacity:#c1cbd726;--color-line-3-opacity:#c1cbd745;--color-line-primary-1:var(--color-primary-450);--color-line-primary-2:var(--color-primary-600);--color-line-primary-3:var(--color-primary-740);--color-line-primary-1-opacity:#7aa4ff24;--color-line-primary-2-opacity:#7aa4ff47;--color-line-primary-3-opacity:#7aa4ff61;--color-line-positive-1:var(--color-positive-450);--color-line-positive-2:var(--color-positive-600);--color-line-positive-3:var(--color-positive-740);--color-line-positive-1-opacity:#a4e9ab24;--color-line-positive-2-opacity:#a4e9ab47;--color-line-positive-3-opacity:#a4e9ab61;--color-line-warning-1:var(--color-warning-450);--color-line-warning-2:var(--color-warning-600);--color-line-warning-3:var(--color-warning-700);--color-line-warning-1-opacity:#ffbf8024;--color-line-warning-2-opacity:#ffbf8047;--color-line-warning-3-opacity:#ffbf8061;--color-line-negative-1:var(--color-negative-550);--color-line-negative-2:var(--color-negative-650);--color-line-negative-3:var(--color-negative-720);--color-line-negative-1-opacity:#ef879424;--color-line-negative-2-opacity:#ef879447;--color-line-negative-3-opacity:#ef879461;--color-line-info-1:var(--color-info-650);--color-line-info-2:var(--color-info-720);--color-line-info-3:var(--color-info-780);--color-line-info-1-opacity:#a878f724;--color-line-info-2-opacity:#a878f747;--color-line-info-3-opacity:#a878f761;--scroll-track-color:var(--color-theme-225);--scroll-thumb-color:var(--color-theme-300);--scroll-thumb-color-hover:var(--color-theme-450);--scroll-thumb-color-active:var(--color-theme-550);--body-background-color:var(--color-layout-front-1);--content-background-color:var(--color-layout-front-1);--top-forms-option-color:var(--color-primary-550);--top-forms-option-color-hover:var(--color-primary-650);--color-layout-back:var(--color-theme-100);--color-layout-header:var(--color-theme-225);--color-layout-middle:var(--color-theme-125);--color-layout-front-1:var(--color-theme-225);--color-layout-front-2:#222f43;--color-layout-front-3:#253348;--color-layout-front-4:#29374d;--color-layout-front-5:#2c3b52;--color-layout-front-6:#2c3b52;--color-layout-front-primary-1:#202c3f;--color-layout-front-primary-2:#232f41;--color-layout-front-primary-3:#243149;--color-layout-front-primary-4:#243450;--color-layout-front-primary-5:#253758;--color-layout-front-primary-6:#253960;--color-layout-front-positive-1:#202d3d;--color-layout-front-positive-2:#25333b;--color-layout-front-positive-3:#263a3d;--color-layout-front-positive-4:#284140;--color-layout-front-positive-5:#2a4842;--color-layout-front-positive-6:#2b4f44;--color-layout-front-warning-1:#222d3c;--color-layout-front-warning-2:#2b3038;--color-layout-front-warning-3:#343437;--color-layout-front-warning-4:#3c3836;--color-layout-front-warning-5:#453b35;--color-layout-front-warning-6:#4d3f35;--color-layout-front-negative-1:#222b3d;--color-layout-front-negative-2:#2b2c3a;--color-layout-front-negative-3:#342d3b;--color-layout-front-negative-4:#3c2d3c;--color-layout-front-negative-5:#452e3d;--color-layout-front-negative-6:#4d2e3e;--color-layout-front-info-1:#212b3f;--color-layout-front-info-2:#272c41;--color-layout-front-info-3:#2b2c49;--color-layout-front-info-4:#2f2c50;--color-layout-front-info-5:#332b58;--color-layout-front-info-6:#362b60;--color-summary-top-3:#5ba8dc;--color-summary-top-10:#1aad7b;--color-summary-top-30:#4bd2b8;--color-summary-top-50:#68ca63;--color-summary-top-100:#9daaaa;--color-summary-top-10000:#caa549;--color-summary-top-additional-1:var(--color-summary-top-3);--color-summary-top-additional-2:#1a7ead;--color-table-top-1:#435e93;--color-table-top-2:#3f5788;--color-table-top-3:#3b5381;--color-table-top-4:#357550;--color-table-top-5:#336f4e;--color-table-top-6:#326b4d;--color-table-top-7:#31684c;--color-table-top-8:#30624a;--color-table-top-9:#2f5d48;--color-table-top-10:#2d5747;--color-table-move-up-10:#0e6a44;--color-table-move-up-9:#116542;--color-table-move-up-8:#145f40;--color-table-move-up-7:#165a3e;--color-table-move-up-6:#19543c;--color-table-move-up-5:#1b4f3a;--color-table-move-up-4:#1e4938;--color-table-move-up-3:#204335;--color-table-move-up-2:#233e33;--color-table-move-up-1:#263832;--color-table-move-0:#313135;--color-table-move-down-1:#46303f;--color-table-move-down-2:#4f3040;--color-table-move-down-3:#583142;--color-table-move-down-4:#633244;--color-table-move-down-5:#6c3345;--color-table-move-down-6:#723446;--color-table-move-down-7:#793547;--color-table-move-down-8:#823649;--color-table-move-down-9:#8a364a;--color-table-move-down-10:#93374c;--color-table-down:#46303f;--color-table-down-10:#4f3040;--color-table-up:#365344;--color-table-up-10:#2c5145;--color-table-base:var(--color-layout-front-1);--color-table-featured-snippet:#7d7b45;--color-table-empty:var(--color-layout-front-3);--color-table-not_found:#313638;--color-table-dynamic:#826d50;--color-snapshot-panel-gradient-1:#232c4d80;--color-snapshot-panel-gradient-2:#232c4dcc;--color-snippet-title:#a2c2fa;--color-snippet-title-visited:#bc8cf2;--color-snippet-url:#070;--color-table-bg-preloader:#1e2b3e4d}
@@ -1 +1 @@
1
- :root{--lightningcss-light:initial;--lightningcss-dark: ;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-theme-0:#fff;--color-theme-50:#f9fafb;--color-theme-75:#f6f7f9;--color-theme-100:#f3f4f6;--color-theme-125:#edeff2;--color-theme-150:#e7eaee;--color-theme-175:#e2e5e9;--color-theme-200:#dce0e5;--color-theme-225:#d6dbe1;--color-theme-250:#d0d5dc;--color-theme-260:#cad0d8;--color-theme-275:#c4cbd4;--color-theme-300:#bec5cf;--color-theme-325:#b8c0cb;--color-theme-350:#b3bbc7;--color-theme-360:#adb5c2;--color-theme-375:#a7b0be;--color-theme-400:#a1abba;--color-theme-410:#9ba6b5;--color-theme-420:#95a0b1;--color-theme-430:#8f9bad;--color-theme-440:#8a96a8;--color-theme-450:#8491a4;--color-theme-460:#7e8ba0;--color-theme-465:#78869c;--color-theme-470:#728197;--color-theme-475:#6c7b93;--color-theme-480:#68778d;--color-theme-485:#637287;--color-theme-500:#5f6d81;--color-theme-550:#5b687b;--color-theme-575:#576375;--color-theme-600:#525e70;--color-theme-625:#4e596a;--color-theme-650:#4a5564;--color-theme-675:#454f5e;--color-theme-700:#414a58;--color-theme-710:#3d4552;--color-theme-725:#38404c;--color-theme-750:#343b47;--color-theme-800:#303641;--color-theme-850:#2b323b;--color-theme-900:#272d35;--color-theme-925:#23282f;--color-theme-950:#1e2329;--color-theme-955:#1a1e23;--color-theme-960:#16191d;--color-theme-965:#111318;--color-theme-970:#0d0f12;--color-theme-1000:#000;--color-white:#fff;--color-black:#000;--color-primary-25:#f5f9ff;--color-primary-50:#ebf4ff;--color-primary-100:#d6e9ff;--color-primary-125:#cce3ff;--color-primary-150:#c2ddff;--color-primary-200:#b8d8ff;--color-primary-225:#a3cdff;--color-primary-250:#8fc1ff;--color-primary-275:#7ab6ff;--color-primary-300:#66abff;--color-primary-350:#52a0ff;--color-primary-400:#3d94ff;--color-primary-450:#2d8afb;--color-primary-500:#1e7ff6;--color-primary-550:#0f74f0;--color-primary-600:#136bd8;--color-primary-650:#1563c1;--color-primary-700:#175aab;--color-primary-720:#185095;--color-primary-740:#184781;--color-primary-760:#183e6d;--color-primary-780:#16355a;--color-primary-800:#142b48;--color-primary-825:#18293e;--color-primary-850:#1c2736;--color-primary-900:#1c2736;--color-primary-950:#1f252e;--color-positive-25:#f6fdf8;--color-positive-50:#eefcf1;--color-positive-100:#e5faea;--color-positive-125:#d8f8e0;--color-positive-150:#c2f4cf;--color-positive-200:#b1f1c1;--color-positive-225:#a0eeb3;--color-positive-250:#8eeba5;--color-positive-275:#7de898;--color-positive-300:#6ce58a;--color-positive-350:#5ae27c;--color-positive-400:#4ddb73;--color-positive-450:#41d265;--color-positive-500:#36c95b;--color-positive-550:#36b556;--color-positive-600:#36a150;--color-positive-650:#348d4b;--color-positive-700:#327b44;--color-positive-720:#2f6a3e;--color-positive-740:#2c5934;--color-positive-760:#27492b;--color-positive-780:#223a23;--color-positive-800:#1c2c1c;--color-positive-825:#161e15;--color-positive-850:#141a14;--color-positive-900:#131612;--color-positive-950:#111311;--color-warning-25:#fffdfa;--color-warning-50:#fff7f0;--color-warning-100:#fff3e6;--color-warning-125:#ffeddb;--color-warning-150:#ffe8cf;--color-warning-200:#ffe3c7;--color-warning-225:#ffdebf;--color-warning-250:#ffd7a8;--color-warning-275:#ffcb94;--color-warning-300:#ffbf80;--color-warning-350:#ffb56b;--color-warning-400:#ffab57;--color-warning-450:#ffa042;--color-warning-500:#fb9632;--color-warning-550:#f48b1b;--color-warning-600:#f08214;--color-warning-650:#dd780c;--color-warning-700:#c56d1c;--color-warning-720:#af6420;--color-warning-740:#9a511a;--color-warning-760:#7f3d19;--color-warning-780:#71321e;--color-warning-800:#5e2517;--color-warning-825:#4c2015;--color-warning-850:#421b1a;--color-warning-900:#391f1e;--color-warning-950:#312121;--color-negative-25:snow;--color-negative-50:#fff1f0;--color-negative-100:#ffe6e5;--color-negative-125:#ffdcdb;--color-negative-150:#ffd3d1;--color-negative-200:#ffc9c7;--color-negative-225:#ffbfbd;--color-negative-250:#ffaba8;--color-negative-275:#ff9894;--color-negative-300:#ff8480;--color-negative-350:#ff706b;--color-negative-400:#ff5d57;--color-negative-450:#ff4842;--color-negative-500:#f73c36;--color-negative-550:#f12e27;--color-negative-600:#eb2019;--color-negative-650:#d81e18;--color-negative-700:#c1201a;--color-negative-720:#ab211c;--color-negative-740:#96211d;--color-negative-760:#821f1c;--color-negative-780:#6e1f1c;--color-negative-800:#5b1c1a;--color-negative-825:#4a1917;--color-negative-850:#401d1c;--color-negative-900:#37201f;--color-negative-950:#2f2222;--color-info-25:#fcfaff;--color-info-50:#f9f5ff;--color-info-100:#f6f0ff;--color-info-125:#f1e5ff;--color-info-150:#ebdbff;--color-info-200:#e5d1ff;--color-info-225:#dfc7ff;--color-info-250:#d9bdff;--color-info-275:#d4b2ff;--color-info-300:#c89eff;--color-info-350:#bc8aff;--color-info-400:#b175ff;--color-info-450:#a561ff;--color-info-500:#9a4dff;--color-info-550:#8f38ff;--color-info-600:#8428fb;--color-info-650:#7919f5;--color-info-700:#6f0feb;--color-info-720:#6612d3;--color-info-740:#5e15bc;--color-info-760:#5517a6;--color-info-780:#441891;--color-info-800:#36187c;--color-info-825:#2a1769;--color-info-850:#201556;--color-info-900:#181344;--color-info-950:#1e1d2b;--color-layer-1:#61799e1a;--color-layer-2:#61799e24;--color-layer-3:#61799e2e;--color-layer-4:#61799e3d;--color-layer-primary-1:#2d6efb14;--color-layer-primary-2:#2d6efb1f;--color-layer-primary-3:#2d6efb2e;--color-layer-primary-4:#2d6efb3d;--color-layer-positive-1:#36b55614;--color-layer-positive-2:#36b5561f;--color-layer-positive-3:#36b5562e;--color-layer-positive-4:#36b5563d;--color-layer-warning-1:#f0821414;--color-layer-warning-2:#f082141f;--color-layer-warning-3:#f082142e;--color-layer-warning-4:#f082143d;--color-layer-negative-1:#f12e2714;--color-layer-negative-2:#f12e271f;--color-layer-negative-3:#f12e272e;--color-layer-negative-4:#f12e273d;--color-layer-info-1:#a561ff14;--color-layer-info-2:#a561ff1f;--color-layer-info-3:#a561ff2e;--color-layer-info-4:#a561ff3d;--top-shadow-xs:0px 0px 3px #7090b012, 0px 5px 25px #7090b00f;--top-shadow-s:0px 0px 3px #7090b012, 0px 5px 25px #7090b01f;--top-shadow:0px 0px 4px #04095414, 0px 4px 32px #0409541a;--top-shadow-m:0px 0px 4px 0px #04095414, 0px 4px 32px 0px #0409541a;--top-shadow-b:0px 0px 4px #04245414, 0px 18px 32px #0419542e;--top-shadow-darken-1:inset 1000px 1000px 1000px 1000px #00000008;--top-shadow-darken-2:inset 1000px 1000px 1000px 1000px #00000017;--top-shadow-darken-3:inset 1000px 1000px 1000px 1000px #0000002e;--color-bg-preloader:#ffffff03;--color-brand-1:var(--color-primary-500);--color-brand-2:var(--color-primary-600);--color-brand-3:var(--color-primary-720);--color-bg-shading-1:var(--color-theme-50);--color-bg-shading-2:var(--color-theme-100);--color-bg-shading-3:var(--color-theme-125);--color-bg-shading-4:var(--color-theme-150);--color-bg-shading-5:var(--color-theme-175);--color-bg-shading-6:var(--color-theme-200);--color-bg-lightning-1:var(--color-theme-0);--color-bg-primary-1:var(--color-primary-500);--color-bg-primary-2:var(--color-primary-600);--color-bg-primary-3:var(--color-primary-720);--color-bg-positive-1:var(--color-positive-500);--color-bg-positive-2:var(--color-positive-700);--color-bg-positive-3:var(--color-positive-760);--color-bg-warning-1:var(--color-warning-500);--color-bg-warning-2:var(--color-warning-600);--color-bg-warning-3:var(--color-warning-720);--color-bg-negative-1:var(--color-negative-500);--color-bg-negative-2:var(--color-negative-650);--color-bg-negative-3:var(--color-negative-720);--color-bg-info-1:var(--color-info-500);--color-bg-info-2:var(--color-info-650);--color-bg-info-3:var(--color-info-720);--top-panel-background-color:#fffc;--color-text-1:var(--color-theme-850);--color-text-2:var(--color-theme-600);--color-text-3:var(--color-theme-450);--color-text-4:var(--color-theme-300);--color-text-1-inverse:var(--color-theme-0);--color-text-white:var(--color-white);--color-text-primary:var(--color-primary-550);--color-text-primary-alt:var(--color-primary-700);--color-text-positive:var(--color-positive-550);--color-text-positive-alt:var(--color-positive-700);--color-text-warning:var(--color-warning-550);--color-text-warning-alt:var(--color-warning-700);--color-text-negative:var(--color-negative-550);--color-text-negative-alt:var(--color-negative-700);--color-text-info:var(--color-info-550);--color-text-info-alt:var(--color-info-700);--color-line-1:var(--color-theme-200);--color-line-2:var(--color-theme-250);--color-line-3:var(--color-theme-375);--color-line-4:var(--color-theme-470);--color-line-1-opacity:#0e418e1a;--color-line-2-opacity:#0e418e30;--color-line-3-opacity:#0e418e63;--color-line-primary-1:var(--color-primary-500);--color-line-primary-2:var(--color-primary-650);--color-line-primary-3:var(--color-primary-720);--color-line-primary-1-opacity:#0f56f024;--color-line-primary-2-opacity:#0f56f047;--color-line-primary-3-opacity:#0f56f061;--color-line-positive-1:var(--color-positive-550);--color-line-positive-2:var(--color-positive-600);--color-line-positive-3:var(--color-positive-720);--color-line-positive-1-opacity:#36a15024;--color-line-positive-2-opacity:#36a15047;--color-line-positive-3-opacity:#36a15061;--color-line-warning-1:var(--color-warning-600);--color-line-warning-2:var(--color-warning-700);--color-line-warning-3:var(--color-warning-740);--color-line-warning-1-opacity:#fb963224;--color-line-warning-2-opacity:#fb963247;--color-line-warning-3-opacity:#fb963261;--color-line-negative-1:var(--color-negative-550);--color-line-negative-2:var(--color-negative-700);--color-line-negative-3:var(--color-negative-740);--color-line-negative-1-opacity:#f73c3624;--color-line-negative-2-opacity:#f73c3647;--color-line-negative-3-opacity:#f73c3661;--color-line-info-1:var(--color-info-500);--color-line-info-2:var(--color-info-550);--color-line-info-3:var(--color-info-600);--color-line-info-1-opacity:#7a2ff224;--color-line-info-2-opacity:#7a2ff247;--color-line-info-3-opacity:#7a2ff261;--scroll-track-color:var(--color-theme-225);--scroll-thumb-color:var(--color-theme-300);--scroll-thumb-color-hover:var(--color-theme-450);--scroll-thumb-color-active:var(--color-theme-550);--body-background-color:var(--color-layout-front-1);--content-background-color:var(--color-layout-front-1);--top-forms-option-color:var(--color-primary-500);--top-forms-option-color-hover:var(--color-primary-600);--color-layout-back:var(--color-theme-200);--color-layout-header:var(--color-theme-0);--color-layout-middle:var(--color-theme-125);--color-layout-front-1:var(--color-theme-0);--color-layout-front-2:#fcfcfd;--color-layout-front-3:#f6f6f8;--color-layout-front-4:#ebedf1;--color-layout-front-5:#e2e5ea;--color-layout-front-6:#d8dce2;--color-layout-front-primary-1:#fff;--color-layout-front-primary-2:#f7f9ff;--color-layout-front-primary-3:#eef3ff;--color-layout-front-primary-4:#e6eeff;--color-layout-front-primary-5:#dde8fe;--color-layout-front-primary-6:#d5e2fe;--color-layout-front-positive-1:#fff;--color-layout-front-positive-2:#f8fef9;--color-layout-front-positive-3:#f1fcf4;--color-layout-front-positive-4:#eafbef;--color-layout-front-positive-5:#e3f9e8;--color-layout-front-positive-6:#dbf8e3;--color-layout-front-warning-1:#fff;--color-layout-front-warning-2:#fffbf7;--color-layout-front-warning-3:#fff7f0;--color-layout-front-warning-4:#fff4e8;--color-layout-front-warning-5:#fff0e1;--color-layout-front-warning-6:#ffecda;--color-layout-front-negative-1:#fff;--color-layout-front-negative-2:#fff7f8;--color-layout-front-negative-3:#fef0f1;--color-layout-front-negative-4:#fee7e9;--color-layout-front-negative-5:#fedfe3;--color-layout-front-negative-6:#fdd7dc;--color-layout-front-info-1:#fff;--color-layout-front-info-2:#faf6ff;--color-layout-front-info-3:#f5eeff;--color-layout-front-info-4:#f0e5ff;--color-layout-front-info-5:#ebdbfe;--color-layout-front-info-6:#e6d4fe;--color-summary-top-3:#3198dd;--color-summary-top-10:#21936c;--color-summary-top-30:#1abc9c;--color-summary-top-50:#94da90;--color-summary-top-100:#bcc8c8;--color-summary-top-10000:#fcc53b;--color-summary-top-additional-1:var(--color-summary-top-3);--color-summary-top-additional-2:#216b93;--color-table-top-1:#b3d2ff;--color-table-top-2:#cce0ff;--color-table-top-3:#cce0ff;--color-table-top-4:#8af3b7;--color-table-top-5:#98f5c1;--color-table-top-6:#a2f7c8;--color-table-top-7:#acf9ce;--color-table-top-8:#b6fbd5;--color-table-top-9:#bffddb;--color-table-top-10:#ccffe4;--color-table-move-up-10:#8af3b7;--color-table-move-up-9:#8af3b7;--color-table-move-up-8:#a2f7c8;--color-table-move-up-7:#a2f7c8;--color-table-move-up-6:#b6fbd5;--color-table-move-up-5:#b6fbd5;--color-table-move-up-4:#bffddb;--color-table-move-up-3:#bffddb;--color-table-move-up-2:#ccffe4;--color-table-move-up-1:#ccffe4;--color-table-move-0:#fcfefd;--color-table-move-down-1:#fff1f0;--color-table-move-down-2:#fff1f0;--color-table-move-down-3:#fff1f0;--color-table-move-down-4:#fff1f0;--color-table-move-down-5:#ffe7e6;--color-table-move-down-6:#ffe7e6;--color-table-move-down-7:#ffe7e6;--color-table-move-down-8:#ffd5d4;--color-table-move-down-9:#ffd5d4;--color-table-move-down-10:#ffd5d4;--color-table-down:#fff1f0;--color-table-up:#eefff6;--color-table-down-10:#ffe7e6;--color-table-up-10:#deffee;--color-table-base:var(--color-layout-front-1);--color-table-featured-snippet:var(--color-layout-front-info-6);--color-table-empty:var(--color-layout-front-3);--color-table-not_found:#fff6c6;--color-snapshot-panel-gradient-1:#ffffff80;--color-snapshot-panel-gradient-2:#fffc;--color-snippet-title:#1a0dab;--color-snippet-title-visited:#609;--color-snippet-url:#070;--color-table-bg-preloader:#ffffff4d}
1
+ :root{--lightningcss-light:initial;--lightningcss-dark: ;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-theme-0:#fff;--color-theme-50:#f9fafb;--color-theme-75:#f6f7f9;--color-theme-100:#f3f4f6;--color-theme-125:#edeff2;--color-theme-150:#e7eaee;--color-theme-175:#e2e5e9;--color-theme-200:#dce0e5;--color-theme-225:#d6dbe1;--color-theme-250:#d0d5dc;--color-theme-260:#cad0d8;--color-theme-275:#c4cbd4;--color-theme-300:#bec5cf;--color-theme-325:#b8c0cb;--color-theme-350:#b3bbc7;--color-theme-360:#adb5c2;--color-theme-375:#a7b0be;--color-theme-400:#a1abba;--color-theme-410:#9ba6b5;--color-theme-420:#95a0b1;--color-theme-430:#8f9bad;--color-theme-440:#8a96a8;--color-theme-450:#8491a4;--color-theme-460:#7e8ba0;--color-theme-465:#78869c;--color-theme-470:#728197;--color-theme-475:#6c7b93;--color-theme-480:#68778d;--color-theme-485:#637287;--color-theme-500:#5f6d81;--color-theme-550:#5b687b;--color-theme-575:#576375;--color-theme-600:#525e70;--color-theme-625:#4e596a;--color-theme-650:#4a5564;--color-theme-675:#454f5e;--color-theme-700:#414a58;--color-theme-710:#3d4552;--color-theme-725:#38404c;--color-theme-750:#343b47;--color-theme-800:#303641;--color-theme-850:#2b323b;--color-theme-900:#272d35;--color-theme-925:#23282f;--color-theme-950:#1e2329;--color-theme-955:#1a1e23;--color-theme-960:#16191d;--color-theme-965:#111318;--color-theme-970:#0d0f12;--color-theme-1000:#000;--color-white:#fff;--color-black:#000;--color-primary-25:#f5f9ff;--color-primary-50:#ebf4ff;--color-primary-100:#d6e9ff;--color-primary-125:#cce3ff;--color-primary-150:#c2ddff;--color-primary-200:#b8d8ff;--color-primary-225:#a3cdff;--color-primary-250:#8fc1ff;--color-primary-275:#7ab6ff;--color-primary-300:#66abff;--color-primary-350:#52a0ff;--color-primary-400:#3d94ff;--color-primary-450:#2d8afb;--color-primary-500:#1e7ff6;--color-primary-550:#0f74f0;--color-primary-600:#136bd8;--color-primary-650:#1563c1;--color-primary-700:#175aab;--color-primary-720:#185095;--color-primary-740:#184781;--color-primary-760:#183e6d;--color-primary-780:#16355a;--color-primary-800:#142b48;--color-primary-825:#18293e;--color-primary-850:#1c2736;--color-primary-900:#1c2736;--color-primary-950:#1f252e;--color-positive-25:#f6fdf8;--color-positive-50:#eefcf1;--color-positive-100:#e5faea;--color-positive-125:#d8f8e0;--color-positive-150:#c2f4cf;--color-positive-200:#b1f1c1;--color-positive-225:#a0eeb3;--color-positive-250:#8eeba5;--color-positive-275:#7de898;--color-positive-300:#6ce58a;--color-positive-350:#5ae27c;--color-positive-400:#4ddb73;--color-positive-450:#41d265;--color-positive-500:#36c95b;--color-positive-550:#36b556;--color-positive-600:#36a150;--color-positive-650:#348d4b;--color-positive-700:#327b44;--color-positive-720:#2f6a3e;--color-positive-740:#2c5934;--color-positive-760:#27492b;--color-positive-780:#223a23;--color-positive-800:#1c2c1c;--color-positive-825:#161e15;--color-positive-850:#141a14;--color-positive-900:#131612;--color-positive-950:#111311;--color-warning-25:#fffdfa;--color-warning-50:#fff7f0;--color-warning-100:#fff3e6;--color-warning-125:#ffeddb;--color-warning-150:#ffe8cf;--color-warning-200:#ffe3c7;--color-warning-225:#ffdebf;--color-warning-250:#ffd7a8;--color-warning-275:#ffcb94;--color-warning-300:#ffbf80;--color-warning-350:#ffb56b;--color-warning-400:#ffab57;--color-warning-450:#ffa042;--color-warning-500:#fb9632;--color-warning-550:#f48b1b;--color-warning-600:#f08214;--color-warning-650:#dd780c;--color-warning-700:#c56d1c;--color-warning-720:#af6420;--color-warning-740:#9a511a;--color-warning-760:#7f3d19;--color-warning-780:#71321e;--color-warning-800:#5e2517;--color-warning-825:#4c2015;--color-warning-850:#421b1a;--color-warning-900:#391f1e;--color-warning-950:#312121;--color-negative-25:snow;--color-negative-50:#fff1f0;--color-negative-100:#ffe6e5;--color-negative-125:#ffdcdb;--color-negative-150:#ffd3d1;--color-negative-200:#ffc9c7;--color-negative-225:#ffbfbd;--color-negative-250:#ffaba8;--color-negative-275:#ff9894;--color-negative-300:#ff8480;--color-negative-350:#ff706b;--color-negative-400:#ff5d57;--color-negative-450:#ff4842;--color-negative-500:#f73c36;--color-negative-550:#f12e27;--color-negative-600:#eb2019;--color-negative-650:#d81e18;--color-negative-700:#c1201a;--color-negative-720:#ab211c;--color-negative-740:#96211d;--color-negative-760:#821f1c;--color-negative-780:#6e1f1c;--color-negative-800:#5b1c1a;--color-negative-825:#4a1917;--color-negative-850:#401d1c;--color-negative-900:#37201f;--color-negative-950:#2f2222;--color-info-25:#fcfaff;--color-info-50:#f9f5ff;--color-info-100:#f6f0ff;--color-info-125:#f1e5ff;--color-info-150:#ebdbff;--color-info-200:#e5d1ff;--color-info-225:#dfc7ff;--color-info-250:#d9bdff;--color-info-275:#d4b2ff;--color-info-300:#c89eff;--color-info-350:#bc8aff;--color-info-400:#b175ff;--color-info-450:#a561ff;--color-info-500:#9a4dff;--color-info-550:#8f38ff;--color-info-600:#8428fb;--color-info-650:#7919f5;--color-info-700:#6f0feb;--color-info-720:#6612d3;--color-info-740:#5e15bc;--color-info-760:#5517a6;--color-info-780:#441891;--color-info-800:#36187c;--color-info-825:#2a1769;--color-info-850:#201556;--color-info-900:#181344;--color-info-950:#1e1d2b;--color-layer-1:#61799e1a;--color-layer-2:#61799e24;--color-layer-3:#61799e2e;--color-layer-4:#61799e3d;--color-layer-primary-1:#2d6efb14;--color-layer-primary-2:#2d6efb1f;--color-layer-primary-3:#2d6efb2e;--color-layer-primary-4:#2d6efb3d;--color-layer-positive-1:#36b55614;--color-layer-positive-2:#36b5561f;--color-layer-positive-3:#36b5562e;--color-layer-positive-4:#36b5563d;--color-layer-warning-1:#f0821414;--color-layer-warning-2:#f082141f;--color-layer-warning-3:#f082142e;--color-layer-warning-4:#f082143d;--color-layer-negative-1:#f12e2714;--color-layer-negative-2:#f12e271f;--color-layer-negative-3:#f12e272e;--color-layer-negative-4:#f12e273d;--color-layer-info-1:#a561ff14;--color-layer-info-2:#a561ff1f;--color-layer-info-3:#a561ff2e;--color-layer-info-4:#a561ff3d;--top-shadow-xs:0px 0px 3px #7090b012, 0px 5px 25px #7090b00f;--top-shadow-s:0px 0px 3px #7090b012, 0px 5px 25px #7090b01f;--top-shadow:0px 0px 4px #04095414, 0px 4px 32px #0409541a;--top-shadow-m:0px 0px 4px 0px #04095414, 0px 4px 32px 0px #0409541a;--top-shadow-b:0px 0px 4px #04245414, 0px 18px 32px #0419542e;--top-shadow-darken-1:inset 1000px 1000px 1000px 1000px #00000008;--top-shadow-darken-2:inset 1000px 1000px 1000px 1000px #00000017;--top-shadow-darken-3:inset 1000px 1000px 1000px 1000px #0000002e;--color-bg-preloader:#ffffff03;--color-brand-1:var(--color-primary-500);--color-brand-2:var(--color-primary-600);--color-brand-3:var(--color-primary-720);--color-bg-shading-1:var(--color-theme-50);--color-bg-shading-2:var(--color-theme-100);--color-bg-shading-3:var(--color-theme-125);--color-bg-shading-4:var(--color-theme-150);--color-bg-shading-5:var(--color-theme-175);--color-bg-shading-6:var(--color-theme-200);--color-bg-lightning-1:var(--color-theme-0);--color-bg-primary-1:var(--color-primary-500);--color-bg-primary-2:var(--color-primary-600);--color-bg-primary-3:var(--color-primary-720);--color-bg-positive-1:var(--color-positive-500);--color-bg-positive-2:var(--color-positive-700);--color-bg-positive-3:var(--color-positive-760);--color-bg-warning-1:var(--color-warning-500);--color-bg-warning-2:var(--color-warning-600);--color-bg-warning-3:var(--color-warning-720);--color-bg-negative-1:var(--color-negative-500);--color-bg-negative-2:var(--color-negative-650);--color-bg-negative-3:var(--color-negative-720);--color-bg-info-1:var(--color-info-500);--color-bg-info-2:var(--color-info-650);--color-bg-info-3:var(--color-info-720);--top-panel-background-color:#fffc;--color-text-1:var(--color-theme-850);--color-text-2:var(--color-theme-600);--color-text-3:var(--color-theme-450);--color-text-4:var(--color-theme-300);--color-text-1-inverse:var(--color-theme-0);--color-text-white:var(--color-white);--color-text-primary:var(--color-primary-550);--color-text-primary-alt:var(--color-primary-700);--color-text-positive:var(--color-positive-550);--color-text-positive-alt:var(--color-positive-700);--color-text-warning:var(--color-warning-550);--color-text-warning-alt:var(--color-warning-700);--color-text-negative:var(--color-negative-550);--color-text-negative-alt:var(--color-negative-700);--color-text-info:var(--color-info-550);--color-text-info-alt:var(--color-info-700);--color-line-1:var(--color-theme-200);--color-line-2:var(--color-theme-250);--color-line-3:var(--color-theme-375);--color-line-4:var(--color-theme-470);--color-line-1-opacity:#0e418e1a;--color-line-2-opacity:#0e418e30;--color-line-3-opacity:#0e418e63;--color-line-primary-1:var(--color-primary-500);--color-line-primary-2:var(--color-primary-650);--color-line-primary-3:var(--color-primary-720);--color-line-primary-1-opacity:#0f56f024;--color-line-primary-2-opacity:#0f56f047;--color-line-primary-3-opacity:#0f56f061;--color-line-positive-1:var(--color-positive-550);--color-line-positive-2:var(--color-positive-600);--color-line-positive-3:var(--color-positive-720);--color-line-positive-1-opacity:#36a15024;--color-line-positive-2-opacity:#36a15047;--color-line-positive-3-opacity:#36a15061;--color-line-warning-1:var(--color-warning-600);--color-line-warning-2:var(--color-warning-700);--color-line-warning-3:var(--color-warning-740);--color-line-warning-1-opacity:#fb963224;--color-line-warning-2-opacity:#fb963247;--color-line-warning-3-opacity:#fb963261;--color-line-negative-1:var(--color-negative-550);--color-line-negative-2:var(--color-negative-700);--color-line-negative-3:var(--color-negative-740);--color-line-negative-1-opacity:#f73c3624;--color-line-negative-2-opacity:#f73c3647;--color-line-negative-3-opacity:#f73c3661;--color-line-info-1:var(--color-info-500);--color-line-info-2:var(--color-info-550);--color-line-info-3:var(--color-info-600);--color-line-info-1-opacity:#7a2ff224;--color-line-info-2-opacity:#7a2ff247;--color-line-info-3-opacity:#7a2ff261;--scroll-track-color:var(--color-theme-225);--scroll-thumb-color:var(--color-theme-300);--scroll-thumb-color-hover:var(--color-theme-450);--scroll-thumb-color-active:var(--color-theme-550);--body-background-color:var(--color-layout-front-1);--content-background-color:var(--color-layout-front-1);--top-forms-option-color:var(--color-primary-500);--top-forms-option-color-hover:var(--color-primary-600);--color-layout-back:var(--color-theme-200);--color-layout-header:var(--color-theme-0);--color-layout-middle:var(--color-theme-125);--color-layout-front-1:var(--color-theme-0);--color-layout-front-2:#fcfcfd;--color-layout-front-3:#f6f6f8;--color-layout-front-4:#ebedf1;--color-layout-front-5:#e2e5ea;--color-layout-front-6:#d8dce2;--color-layout-front-primary-1:#fff;--color-layout-front-primary-2:#f7f9ff;--color-layout-front-primary-3:#eef3ff;--color-layout-front-primary-4:#e6eeff;--color-layout-front-primary-5:#dde8fe;--color-layout-front-primary-6:#d5e2fe;--color-layout-front-positive-1:#fff;--color-layout-front-positive-2:#f8fef9;--color-layout-front-positive-3:#f1fcf4;--color-layout-front-positive-4:#eafbef;--color-layout-front-positive-5:#e3f9e8;--color-layout-front-positive-6:#dbf8e3;--color-layout-front-warning-1:#fff;--color-layout-front-warning-2:#fffbf7;--color-layout-front-warning-3:#fff7f0;--color-layout-front-warning-4:#fff4e8;--color-layout-front-warning-5:#fff0e1;--color-layout-front-warning-6:#ffecda;--color-layout-front-negative-1:#fff;--color-layout-front-negative-2:#fff7f8;--color-layout-front-negative-3:#fef0f1;--color-layout-front-negative-4:#fee7e9;--color-layout-front-negative-5:#fedfe3;--color-layout-front-negative-6:#fdd7dc;--color-layout-front-info-1:#fff;--color-layout-front-info-2:#faf6ff;--color-layout-front-info-3:#f5eeff;--color-layout-front-info-4:#f0e5ff;--color-layout-front-info-5:#ebdbfe;--color-layout-front-info-6:#e6d4fe;--color-summary-top-3:#3198dd;--color-summary-top-10:#21936c;--color-summary-top-30:#1abc9c;--color-summary-top-50:#94da90;--color-summary-top-100:#bcc8c8;--color-summary-top-10000:#fcc53b;--color-summary-top-additional-1:var(--color-summary-top-3);--color-summary-top-additional-2:#216b93;--color-table-top-1:#b3d2ff;--color-table-top-2:#cce0ff;--color-table-top-3:#cce0ff;--color-table-top-4:#8af3b7;--color-table-top-5:#98f5c1;--color-table-top-6:#a2f7c8;--color-table-top-7:#acf9ce;--color-table-top-8:#b6fbd5;--color-table-top-9:#bffddb;--color-table-top-10:#ccffe4;--color-table-move-up-10:#8af3b7;--color-table-move-up-9:#8af3b7;--color-table-move-up-8:#a2f7c8;--color-table-move-up-7:#a2f7c8;--color-table-move-up-6:#b6fbd5;--color-table-move-up-5:#b6fbd5;--color-table-move-up-4:#bffddb;--color-table-move-up-3:#bffddb;--color-table-move-up-2:#ccffe4;--color-table-move-up-1:#ccffe4;--color-table-move-0:#fcfefd;--color-table-move-down-1:#fff1f0;--color-table-move-down-2:#fff1f0;--color-table-move-down-3:#fff1f0;--color-table-move-down-4:#fff1f0;--color-table-move-down-5:#ffe7e6;--color-table-move-down-6:#ffe7e6;--color-table-move-down-7:#ffe7e6;--color-table-move-down-8:#ffd5d4;--color-table-move-down-9:#ffd5d4;--color-table-move-down-10:#ffd5d4;--color-table-down:#fff1f0;--color-table-up:#eefff6;--color-table-down-10:#ffe7e6;--color-table-up-10:#deffee;--color-table-base:var(--color-layout-front-1);--color-table-featured-snippet:#f6f2a0;--color-table-empty:var(--color-layout-front-3);--color-table-not_found:#fff6c6;--color-table-dynamic:#ffe5b7;--color-snapshot-panel-gradient-1:#ffffff80;--color-snapshot-panel-gradient-2:#fffc;--color-snippet-title:#1a0dab;--color-snippet-title-visited:#609;--color-snippet-url:#070;--color-table-bg-preloader:#ffffff4d}