/*
 * Біржа ↔ дизайн-система ТАТ: компоненти (SPEC-T81).
 *
 * CSS-еквіваленти компонентів сторібука https://crm.tat.ua/docs/storybook/ (React-бібліотека packages/ui-kit).
 * React на Біржі не підключаємо: токени (ds/tokens.css), шрифт Lato (ds/fonts.css) і цей файл відтворюють вигляд.
 * Кожен блок починається коментарем «DS: <група/компонент> — <посилання на сторі>».
 * Правила: префікс класів `ds-`; розміри, кольори, радіуси — через токени (var(--…)); хардкод — лише там, де в ДС
 * немає токена (позначено коментарем). Довідник: docs/sdd/specs/SPEC-T81-design-system/ds-guide.md
 *
 * Значення — з токенів теми tat (клас `theme-tat` на <html>): брендовий колір = var(--color-main) (#457fef).
 */

/* Іконки-маски (шеврон, пошук, закрити) — SVG data-URI, колір задається через background-color: currentColor/токен. */
html.theme-tat {
  --ds-mask-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 1l4 4 4-4'/%3E%3C/svg%3E");
  --ds-mask-search: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 10a7 7 0 1 0 14 0a7 7 0 1 0-14 0M21 21l-6-6'/%3E%3C/svg%3E");
  --ds-mask-close: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M18 6L6 18M6 6l12 12'/%3E%3C/svg%3E");
  /* галочка чекбокса: біла на фоні бренду (колір у data-URI фіксований) */
  --ds-img-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12l5 5L20 7'/%3E%3C/svg%3E");
}

/* ==========================================================================================================
   DS: Controls/Button — https://crm.tat.ua/docs/storybook/?path=/story/controls-button--docs
   Кнопка 40px (small 32px), 14/600, radius-lg. Теми: --brand, --brand-outline, --brand-ghost, --neutral, --danger, --white.
   Розмітка: <button class="ds-btn ds-btn--brand">Текст</button>; для посилання — <a class="ds-btn …">.
   ========================================================================================================== */
.ds-btn {
  --ds-btn-fg: var(--text-primary);
  --ds-btn-bg: transparent;
  --ds-btn-bg-hover: var(--ds-btn-bg);
  --ds-btn-border: transparent;
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--size-8);
  height: var(--size-40);
  min-width: 0;
  margin: 0;
  padding: 0 var(--size-16);
  border: var(--size-1) var(--border-solid) var(--ds-btn-border);
  border-radius: var(--radius-lg);
  background: var(--ds-btn-bg);
  color: var(--ds-btn-fg);
  font-family: var(--ds-font-family);
  font-size: var(--font-size-14);
  font-weight: var(--font-weight-600);
  line-height: var(--line-height-1);
  text-align: center;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  user-select: none;
  -webkit-appearance: none;
  appearance: none;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease;
}

.ds-btn:hover,
.ds-btn:focus {
  color: var(--ds-btn-fg);
  text-decoration: none;
}

.ds-btn:hover:not(:disabled):not(.is-loading):not([aria-disabled="true"]) {
  background: var(--ds-btn-bg-hover);
}

.ds-btn:focus-visible {
  outline: var(--size-2) var(--border-solid) var(--color-main);
  outline-offset: var(--size-2);
}

.ds-btn svg {
  flex: none;
  width: var(--size-20);
  height: var(--size-20);
}

.ds-btn--small {
  height: var(--size-32);
  padding: 0 var(--size-12);
}

.ds-btn--brand {
  --ds-btn-fg: var(--btn-color-2);
  --ds-btn-bg: var(--color-main);
  --ds-btn-bg-hover: var(--btn-bg-2-hover);
}

.ds-btn--brand-outline {
  --ds-btn-fg: var(--color-main);
  --ds-btn-border: var(--color-main);
  --ds-btn-bg-hover: var(--color-blue-50);
}

.ds-btn--brand-ghost {
  --ds-btn-fg: var(--color-main);
  --ds-btn-bg-hover: var(--color-blue-50);
}

.ds-btn--neutral {
  --ds-btn-bg: var(--bg-tertiary);
  --ds-btn-bg-hover: var(--color-neutral-200);
}

.ds-btn--danger {
  --ds-btn-fg: var(--color-white);
  --ds-btn-bg: var(--color-danger);
  --ds-btn-bg-hover: var(--color-danger-hover);
}

.ds-btn--white {
  --ds-btn-bg: var(--color-white);
  --ds-btn-border: var(--color-border-default);
  --ds-btn-bg-hover: var(--bg-secondary);
}

.ds-btn--square {
  width: var(--size-40);
  padding: 0;
}

.ds-btn--square.ds-btn--small {
  width: var(--size-32);
}

.ds-btn--circle {
  border-radius: 50%;
}

.ds-btn--fluid {
  display: flex;
  width: 100%;
}

.ds-btn:disabled,
.ds-btn[aria-disabled="true"] {
  opacity: .5;
  cursor: not-allowed;
}

/* Стан завантаження: текст прозорий, по центру — спінер кольору тексту варіанта */
.ds-btn.is-loading,
.ds-btn.is-loading:hover,
.ds-btn.is-loading:focus {
  color: transparent;
  cursor: progress;
  pointer-events: none;
}

.ds-btn.is-loading > * {
  visibility: hidden;
}

.ds-btn.is-loading::after {
  content: "";
  position: absolute;
  top: 50%;
  left: 50%;
  width: var(--size-16);
  height: var(--size-16);
  margin: -8px 0 0 -8px;
  border: var(--size-2) var(--border-solid) var(--ds-btn-fg);
  border-right-color: transparent;
  border-radius: 50%;
  animation: ds-spin .7s linear infinite;
}

@keyframes ds-spin {
  to { transform: rotate(360deg); }
}

/* ==========================================================================================================
   DS: Foundation/Icon (іконкова кнопка шапки CRM) — https://crm.tat.ua/docs/storybook/?path=/story/foundation-icon--docs
   40×40, radius-lg, прозорий фон; hover і «відкритий поповер» — фон bg-tertiary. --accent: синя плашка; --round: круг (профіль).
   Розмітка: <button class="ds-icon-btn" aria-label="…" aria-expanded="false">{% include 'parts/ds/icon.html.twig' … %}</button>
   ========================================================================================================== */
.ds-icon-btn {
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: var(--size-40);
  height: var(--size-40);
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: var(--radius-lg);
  background: transparent;
  color: var(--text-primary);
  text-decoration: none;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  transition: background-color .15s ease, color .15s ease;
}

.ds-icon-btn svg {
  width: var(--size-20);
  height: var(--size-20);
}

.ds-icon-btn:hover,
.ds-icon-btn:focus,
.ds-icon-btn.is-active,
.ds-icon-btn[aria-expanded="true"] {
  background: var(--bg-tertiary);
  color: var(--text-primary);
  text-decoration: none;
}

.ds-icon-btn:focus-visible {
  outline: var(--size-2) var(--border-solid) var(--color-main);
  outline-offset: var(--size-2);
}

.ds-icon-btn--accent {
  background: var(--color-blue-50);
  color: var(--color-main);
}

.ds-icon-btn--accent:hover,
.ds-icon-btn--accent:focus,
.ds-icon-btn--accent.is-active,
.ds-icon-btn--accent[aria-expanded="true"] {
  background: var(--color-blue-100);
  color: var(--color-main);
}

.ds-icon-btn--round {
  border-radius: 50%;
}

.ds-icon-btn--small {
  width: var(--size-32);
  height: var(--size-32);
}

.ds-icon-btn:disabled {
  opacity: .5;
  cursor: not-allowed;
}

/* ==========================================================================================================
   DS: Controls/TextField — https://crm.tat.ua/docs/storybook/?path=/story/controls-textfield--docs
   DS: Controls/SearchField — https://crm.tat.ua/docs/storybook/?path=/story/controls-searchfield--docs
   Поле: підпис 12px, input/textarea 36px (--lg 40px), рамка border-default, radius-lg; focus — рамка бренду.
   Розмітка: <div class="ds-field"><label class="ds-field__label" for="x">Підпис</label>
             <input class="ds-field__input" id="x"><div class="ds-field__hint">Підказка</div></div>
   Помилка: .is-invalid на .ds-field (або на input) + <div class="ds-field__error">.
   Іконка зліва: .ds-field--icon-left + <span class="ds-field__icon"> у .ds-field__control. Пошук: .ds-field--search (лупа сама).
   Специфічність підвищено префіксом html.theme-tat — щоб перебити браузерні стилі input/select/textarea без !important.
   ========================================================================================================== */
.ds-field {
  display: block;
  margin: 0 0 var(--size-16);
}

.ds-field__label {
  display: block;
  margin: 0 0 var(--size-6);
  color: var(--ds-color-label);
  font-size: var(--font-size-12);
  font-weight: var(--font-weight-400);
  line-height: var(--line-height-1-33);
}

.ds-field__control {
  position: relative;
  display: block;
}

html.theme-tat .ds-field__input {
  display: block;
  width: 100%;
  max-width: 100%;
  height: var(--ds-control-height);
  margin: 0;
  padding: 0 var(--size-12);
  border: var(--size-1) var(--border-solid) var(--color-border-default);
  border-radius: var(--radius-lg);
  background-color: var(--color-white);
  background-image: none;
  box-shadow: none;
  color: var(--text-primary);
  font-family: var(--ds-font-family);
  font-size: var(--font-size-14);
  font-weight: var(--font-weight-400);
  line-height: var(--line-height-1-43);
  -webkit-appearance: none;
  appearance: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}

html.theme-tat .ds-field__input::placeholder {
  color: var(--color-text-tertiary);
  opacity: 1;
}

html.theme-tat .ds-field__input:hover {
  border-color: var(--color-neutral-300);
}

html.theme-tat .ds-field__input:focus {
  border-color: var(--color-main);
  outline: 0;
  box-shadow: none;
}

html.theme-tat .ds-field--lg .ds-field__input {
  height: var(--ds-control-height-lg);
}

html.theme-tat textarea.ds-field__input {
  height: auto;
  min-height: var(--size-96);
  padding: var(--size-8) var(--size-12);
  resize: vertical;
}

html.theme-tat .ds-field__input:disabled,
html.theme-tat .ds-field__input[readonly].is-static {
  background-color: var(--bg-secondary);
  color: var(--color-text-tertiary);
  cursor: not-allowed;
}

/* Нативний <select> у вигляді поля: шеврон 10×6 справа (маска, колір — токен) */
html.theme-tat select.ds-field__input {
  padding-right: var(--size-34);
  background-image: none;
  cursor: pointer;
}

.ds-field--select .ds-field__control::after,
.ds-select::after {
  content: "";
  position: absolute;
  top: 50%;
  right: var(--size-12);
  width: var(--size-10);
  height: var(--size-6);
  margin-top: -3px;
  background-color: var(--text-primary);
  -webkit-mask: var(--ds-mask-chevron) center / contain no-repeat;
  mask: var(--ds-mask-chevron) center / contain no-repeat;
  pointer-events: none;
}

/* Помилка */
.ds-field.is-invalid .ds-field__input,
html.theme-tat .ds-field__input.is-invalid {
  border-color: var(--color-danger);
}

.ds-field__error {
  margin-top: var(--size-4);
  color: var(--color-danger);
  font-size: var(--font-size-12);
  line-height: var(--line-height-1-33);
}

.ds-field__hint {
  margin-top: var(--size-4);
  color: var(--color-text-tertiary);
  font-size: var(--font-size-12);
  line-height: var(--line-height-1-33);
}

/* Іконка зліва (та пошук) */
.ds-field__icon {
  position: absolute;
  top: 50%;
  left: var(--size-12);
  display: inline-flex;
  width: var(--size-20);
  height: var(--size-20);
  margin-top: -10px;
  color: var(--color-text-tertiary);
  pointer-events: none;
}

.ds-field__icon svg {
  width: 100%;
  height: 100%;
}

html.theme-tat .ds-field--icon-left .ds-field__input,
html.theme-tat .ds-field--search .ds-field__input {
  padding-left: var(--size-40);
}

.ds-field--search .ds-field__control::before {
  content: "";
  position: absolute;
  top: 50%;
  left: var(--size-12);
  z-index: 1;
  width: var(--size-20);
  height: var(--size-20);
  margin-top: -10px;
  background-color: var(--color-text-tertiary);
  -webkit-mask: var(--ds-mask-search) center / contain no-repeat;
  mask: var(--ds-mask-search) center / contain no-repeat;
  pointer-events: none;
}

/* ==========================================================================================================
   DS: Select (у ДС окремого Select немає — як у CRM, на базі Controls/TextField)
   https://crm.tat.ua/docs/storybook/?path=/story/controls-textfield--docs
   Тригер — readonly input або button з класами `ds-field__input ds-select__trigger`; шеврон малює `.ds-select::after`.
   Список — білий поповер: radius-lg, тінь popup, max-height 320, пункт 40px.
   Розмітка:
     <div class="ds-select" id="s1">
       <button type="button" class="ds-field__input ds-select__trigger" aria-haspopup="listbox" aria-expanded="false">Київ</button>
       <ul class="ds-select__list" role="listbox" hidden>
         <li class="ds-select__option is-selected" role="option" aria-selected="true">Київ</li> …
     Відкрито: прибрати [hidden] у списку й додати .is-open на .ds-select (поведінку — скриптом; тут лише вигляд).
   Мультиселект: .ds-select--multi, тригер — div.ds-select__trigger із чіпами .ds-chip всередині.
   ========================================================================================================== */
.ds-select {
  position: relative;
  display: block;
}

html.theme-tat .ds-select__trigger {
  display: flex;
  align-items: center;
  padding-right: var(--size-34);
  overflow: hidden;
  text-align: left;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}

.ds-select.is-open .ds-select__trigger {
  border-color: var(--color-main);
}

.ds-select__list {
  position: absolute;
  top: calc(100% + var(--size-4));
  right: 0;
  left: 0;
  z-index: 100;
  max-height: var(--size-320);
  margin: 0;
  padding: 0;
  overflow: auto;
  border-radius: var(--radius-lg);
  background: var(--color-white);
  box-shadow: var(--box-shadow-popup);
  list-style: none;
}

.ds-select__list[hidden] {
  display: none;
}

.ds-select__option {
  display: flex;
  align-items: center;
  min-height: var(--size-40);
  margin: 0;
  padding: 0 var(--size-12);
  color: var(--text-primary);
  font-size: var(--font-size-14);
  line-height: var(--line-height-1-25);
  cursor: pointer;
}

.ds-select__option:hover,
.ds-select__option.is-active {
  background: var(--bg-secondary);
}

.ds-select__option.is-selected,
.ds-select__option[aria-selected="true"] {
  background: var(--color-blue-50);
  color: var(--color-main);
}

/* Мультиселект: тригер росте за висотою, чіпи переносяться */
html.theme-tat .ds-select--multi .ds-select__trigger {
  flex-wrap: wrap;
  gap: var(--size-4);
  height: auto;
  min-height: var(--ds-control-height);
  padding-top: var(--size-4);
  padding-bottom: var(--size-4);
  white-space: normal;
}

/* ==========================================================================================================
   DS: чіп вибраного значення (мультиселект) — на базі Controls/TextField / Data/StatusBadge
   https://crm.tat.ua/docs/storybook/?path=/story/data-statusbadge--docs
   Розмітка: <span class="ds-chip">Київ <button type="button" class="ds-chip__remove" aria-label="Прибрати"></button></span>
   ========================================================================================================== */
.ds-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--size-4);
  max-width: 100%;
  height: 24px;
  padding: 0 var(--size-4) 0 var(--size-8);
  border-radius: var(--radius-md);
  background: var(--bg-tertiary);
  color: var(--text-primary);
  font-size: var(--font-size-13);
  font-weight: var(--font-weight-400);
  line-height: var(--line-height-1);
  white-space: nowrap;
}

.ds-chip__remove {
  position: relative;
  display: inline-flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: var(--size-16);
  height: var(--size-16);
  margin: 0;
  padding: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-text-tertiary);
  cursor: pointer;
}

.ds-chip__remove::before {
  content: "";
  width: var(--size-12);
  height: var(--size-12);
  background-color: currentColor;
  -webkit-mask: var(--ds-mask-close) center / contain no-repeat;
  mask: var(--ds-mask-close) center / contain no-repeat;
}

.ds-chip__remove:hover {
  background: var(--color-neutral-200);
  color: var(--text-primary);
}

/* ==========================================================================================================
   Адаптер select2 4.0.x (public/assets/js/select2.min.js) у вигляді DS-селекта (тимчасовий: до заміни select2 власним .ds-select).
   Поки сторінки кабінету не переведено на власний .ds-select, обгортка `.ds-select2` перефарбовує select2:
   поле як .ds-field__input, вибрані значення як .ds-chip, випадаючий список як .ds-select__list.
   Список select2 за замовчуванням живе в <body>: у select2 4.0.x (slim-збірка проєкту) `dropdownCssClass` НЕ працює
   (потрібен compat-модуль), тому ініціалізувати з `dropdownParent: $wrapper` (список опиниться всередині .ds-select2),
   або після відкриття додавати клас: $s.on('select2:open', () => $('.select2-dropdown').addClass('ds-select2-dropdown')).
   Розмітка: <div class="ds-select2"><select class="js-select2">…</select></div>; видалити разом із select2.
   ========================================================================================================== */
/* Обгортка: опорна точка для випадного списку (dropdownParent = .ds-select2) */
html.theme-tat .ds-select2 {
  position: relative;
  width: 100%;
  min-width: 0;
}

html.theme-tat .ds-select2 .select2-container {
  width: 100% !important;
  max-width: 100%;
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--single,
html.theme-tat .ds-select2 .select2-container--default .select2-selection--multiple {
  min-height: var(--ds-control-height);
  border: var(--size-1) var(--border-solid) var(--color-border-default);
  border-radius: var(--radius-lg);
  background-color: var(--color-white);
  box-shadow: none;
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--single {
  display: flex;
  align-items: center;
  height: var(--ds-control-height);
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--single .select2-selection__rendered {
  flex: 1;
  padding: 0 var(--size-34) 0 var(--size-12);
  color: var(--text-primary);
  font-size: var(--font-size-14);
  line-height: var(--line-height-1-43);
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--single .select2-selection__placeholder {
  color: var(--color-text-tertiary);
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--single .select2-selection__arrow {
  top: 0;
  right: var(--size-12);
  width: var(--size-10);
  height: 100%;
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--single .select2-selection__arrow b {
  top: 50%;
  left: 0;
  width: var(--size-10);
  height: var(--size-6);
  margin: -3px 0 0;
  border: 0;
  background-color: var(--text-primary);
  -webkit-mask: var(--ds-mask-chevron) center / contain no-repeat;
  mask: var(--ds-mask-chevron) center / contain no-repeat;
}

html.theme-tat .ds-select2 .select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b {
  border: 0;
  transform: rotate(180deg);
}

html.theme-tat .ds-select2 .select2-container--default.select2-container--focus .select2-selection--single,
html.theme-tat .ds-select2 .select2-container--default.select2-container--focus .select2-selection--multiple,
html.theme-tat .ds-select2 .select2-container--default.select2-container--open .select2-selection--single,
html.theme-tat .ds-select2 .select2-container--default.select2-container--open .select2-selection--multiple {
  border-color: var(--color-main);
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--multiple .select2-selection__rendered {
  display: flex;
  flex-wrap: wrap;
  gap: var(--size-4);
  padding: var(--size-4) var(--size-8);
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--multiple .select2-selection__choice {
  display: inline-flex;
  flex-direction: row-reverse;
  align-items: center;
  gap: var(--size-4);
  height: 24px;
  margin: 0;
  padding: 0 var(--size-4) 0 var(--size-8);
  border: 0;
  border-radius: var(--radius-md);
  background: var(--bg-tertiary);
  color: var(--text-primary);
  font-size: var(--font-size-13);
  line-height: var(--line-height-1);
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--multiple .select2-selection__choice__remove {
  position: static;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--size-16);
  height: var(--size-16);
  margin: 0;
  border: 0;
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--color-text-tertiary);
  font-size: var(--font-size-16);
  line-height: 1;
}

html.theme-tat .ds-select2 .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {
  background: var(--color-neutral-200);
  color: var(--text-primary);
}

html.theme-tat .ds-select2 .select2-container--default .select2-search--inline .select2-search__field {
  height: 24px;
  margin: 0;
  padding: 0 var(--size-4);
  color: var(--text-primary);
  font-size: var(--font-size-14);
}

html.theme-tat .ds-select2 .select2-container--default .select2-search--inline {
  flex: 1 1 var(--size-60);
  float: none;
  height: 24px;
  min-width: var(--size-60);
  margin: 0;
  padding: 0;
}

/* Випадаючий список select2: всередині .ds-select2 (dropdownParent) або з класом .ds-select2-dropdown на .select2-dropdown */
html.theme-tat .ds-select2 .select2-dropdown,
html.theme-tat .select2-dropdown.ds-select2-dropdown {
  margin-top: var(--size-4);
  border: 0;
  border-radius: var(--radius-lg);
  background: var(--color-white);
  box-shadow: var(--box-shadow-popup);
  overflow: hidden;
}

html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results > .select2-results__options {
  max-height: var(--size-320);
}

html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-search--dropdown {
  padding: var(--size-8);
}

html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-search--dropdown .select2-search__field {
  height: var(--ds-control-height);
  padding: 0 var(--size-12);
  border: var(--size-1) var(--border-solid) var(--color-border-default);
  border-radius: var(--radius-lg);
  font-size: var(--font-size-14);
}

html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option {
  display: flex;
  align-items: center;
  min-height: var(--size-40);
  padding: 0 var(--size-12);
  color: var(--text-primary);
  font-size: var(--font-size-14);
}

html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option--highlighted,
html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option--highlighted[aria-selected],
html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option[aria-selected="true"],
html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option--selected {
  background: var(--bg-secondary);
  color: var(--text-primary);
}

html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option[aria-selected="true"],
html.theme-tat :is(.ds-select2, .ds-select2-dropdown) .select2-results__option--selected {
  background: var(--color-blue-50);
  color: var(--color-main);
}

/* ==========================================================================================================
   DS: Controls/Checkbox — https://crm.tat.ua/docs/storybook/?path=/story/controls-checkbox--docs
   DS: Controls/Radio    — https://crm.tat.ua/docs/storybook/?path=/story/controls-radio--docs
   Бокс 20×20, radius-sm (радіо — коло), рамка neutral-300, checked — фон бренду + біла галочка.
   Розмітка: <label class="ds-checkbox"><input type="checkbox"><span class="ds-checkbox__label">Підпис</span></label>
             <label class="ds-radio"><input type="radio" name="x"><span class="ds-radio__label">Підпис</span></label>
   ========================================================================================================== */
.ds-checkbox,
.ds-radio {
  display: inline-flex;
  align-items: center;
  gap: var(--size-8);
  margin: 0;
  color: var(--text-primary);
  font-size: var(--font-size-14);
  font-weight: var(--font-weight-400);
  line-height: var(--line-height-1-43);
  cursor: pointer;
}

html.theme-tat .ds-checkbox input,
html.theme-tat .ds-radio input {
  flex: none;
  width: var(--size-20);
  height: var(--size-20);
  margin: 0;
  padding: 0;
  border: var(--size-1) var(--border-solid) var(--color-neutral-300);
  border-radius: var(--radius-sm);
  background: var(--color-white) center / var(--size-16) var(--size-16) no-repeat;
  box-shadow: none;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
  transition: background-color .15s ease, border-color .15s ease;
}

html.theme-tat .ds-radio input {
  border-radius: 50%;
}

html.theme-tat .ds-checkbox input:checked {
  border-color: var(--color-main);
  background-color: var(--color-main);
  background-image: var(--ds-img-check);
}

html.theme-tat .ds-radio input:checked {
  border-color: var(--color-main);
  background-image: radial-gradient(circle, var(--color-main) 0, var(--color-main) 5px, transparent 5.5px);
}

html.theme-tat .ds-checkbox input:focus-visible,
html.theme-tat .ds-radio input:focus-visible {
  outline: var(--size-2) var(--border-solid) var(--color-main);
  outline-offset: var(--size-2);
}

html.theme-tat .ds-checkbox input:disabled,
html.theme-tat .ds-radio input:disabled {
  opacity: .5;
  cursor: not-allowed;
}

.ds-checkbox:has(input:disabled),
.ds-radio:has(input:disabled) {
  color: var(--color-text-tertiary);
  cursor: not-allowed;
}

/* ==========================================================================================================
   DS: Navigation/Tabs — https://crm.tat.ua/docs/storybook/?path=/story/navigation-tabs--docs
   Вкладка 40px, 14/600; активна — колір бренду + лінія 2px; під рядом роздільник 1px. На вузькому екрані — горизонтальний скрол.
   Розмітка: <nav class="ds-tabs"><a class="ds-tabs__item is-active" href="…">Усі <span class="ds-tabs__count">12</span></a> …</nav>
   (для кнопок — <button class="ds-tabs__item" role="tab" aria-selected="true">).
   ========================================================================================================== */
.ds-tabs {
  display: flex;
  align-items: stretch;
  overflow-x: auto;
  border-bottom: var(--size-1) var(--border-solid) var(--color-border-default);
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}

.ds-tabs::-webkit-scrollbar {
  display: none;
}

.ds-tabs__item {
  display: inline-flex;
  flex: none;
  align-items: center;
  height: var(--size-40);
  margin: 0 var(--size-24) -1px 0;
  padding: 0 var(--size-4);
  border: 0;
  border-bottom: var(--size-2) var(--border-solid) transparent;
  background: transparent;
  color: var(--text-primary);
  font-family: var(--ds-font-family);
  font-size: var(--font-size-14);
  font-weight: var(--font-weight-600);
  line-height: var(--line-height-1);
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
  transition: color .15s ease, border-color .15s ease;
}

.ds-tabs__item:hover,
.ds-tabs__item:focus {
  color: var(--color-main);
  text-decoration: none;
}

.ds-tabs__item:focus-visible {
  outline: var(--size-2) var(--border-solid) var(--color-main);
  outline-offset: -2px;
}

.ds-tabs__item.is-active,
.ds-tabs__item[aria-selected="true"],
.ds-tabs__item[aria-current="page"] {
  border-bottom-color: var(--color-main);
  color: var(--color-main);
}

.ds-tabs__count {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: var(--size-20);
  height: var(--size-20);
  margin-left: var(--size-6);
  padding: 0 var(--size-6);
  border-radius: 10px;
  background: var(--bg-tertiary);
  color: var(--text-primary);
  font-size: var(--font-size-12);
  font-weight: var(--font-weight-600);
  line-height: var(--line-height-1);
}

.ds-tabs__item.is-active .ds-tabs__count,
.ds-tabs__item[aria-selected="true"] .ds-tabs__count {
  background: var(--color-blue-50);
  color: var(--color-main);
}

/* ==========================================================================================================
   DS: Data/StatusBadge — https://crm.tat.ua/docs/storybook/?path=/story/data-statusbadge--docs
   Бейдж 24px, radius-md, 12/600. Теми: --success, --warning, --danger, --neutral (типово), --info.
   Розмітка: <span class="ds-badge ds-badge--success">Оплачено</span>
   ========================================================================================================== */
.ds-badge {
  display: inline-flex;
  align-items: center;
  height: 24px;
  padding: 0 var(--size-8);
  border-radius: var(--radius-md);
  background: var(--bg-tertiary);
  color: var(--color-neutral-700);
  font-size: var(--font-size-12);
  font-weight: var(--font-weight-600);
  line-height: var(--line-height-1);
  white-space: nowrap;
}

.ds-badge--success { background: var(--color-green-50); color: var(--color-green-600); }
.ds-badge--warning { background: var(--color-yellow-50); color: var(--color-yellow-700); }
.ds-badge--danger { background: var(--color-red-50); color: var(--color-danger); }
.ds-badge--neutral { background: var(--bg-tertiary); color: var(--color-neutral-700); }
.ds-badge--info { background: var(--color-blue-50); color: var(--color-main); }

/* ==========================================================================================================
   DS: Overlays/Popover — https://crm.tat.ua/docs/storybook/?path=/story/overlays-popover--docs
   Білий, radius-lg, тінь (токен --box-shadow-hint = виміряне в CRM 0 4px 12px rgba(39,40,43,.12)), без стрілки, padding 12.
   Позиціонування — на боці сторінки: батьку дати `position: relative` (.ds-popover-anchor), поповеру — top/right/left.
   Розмітка: <div class="ds-popover ds-popover--w-256" hidden>…</div>; [hidden] ховає.
   ========================================================================================================== */
.ds-popover-anchor {
  position: relative;
}

.ds-popover {
  position: absolute;
  z-index: 100;
  max-width: calc(100vw - var(--size-32));
  padding: var(--size-12);
  border-radius: var(--radius-lg);
  background: var(--color-white);
  box-shadow: var(--ds-shadow-popover);
  color: var(--text-primary);
}

.ds-popover[hidden] {
  display: none;
}

.ds-popover--w-256 { width: var(--size-256); }
.ds-popover--w-320 { width: var(--size-320); }
.ds-popover--right { right: 0; }
.ds-popover--left { left: 0; }
.ds-popover--flush { padding: 0; }

/* ==========================================================================================================
   DS: Overlays/Modal + Overlays/Backdrop — https://crm.tat.ua/docs/storybook/?path=/story/overlays-modal--docs
   Бекдроп rgba(39,40,43,.5) (колір бекдропу в ДС — окремого токена немає), вікно radius-xl, ширини 432/640.
   Мобільний (≤ 480px): на всю ширину знизу, radius 12 12 0 0.
   Розмітка:
     <div class="ds-modal ds-modal--w-432" role="dialog" aria-modal="true" aria-labelledby="m-title" hidden>
       <div class="ds-modal__dialog">
         <div class="ds-modal__header"><h2 class="ds-modal__title" id="m-title">Заголовок</h2>
           <button class="ds-icon-btn" aria-label="Закрити">…</button></div>
         <div class="ds-modal__body">…</div>
         <div class="ds-modal__footer"><button class="ds-btn ds-btn--neutral">Скасувати</button><button class="ds-btn ds-btn--brand">Ок</button></div>
       </div></div>
   ========================================================================================================== */
.ds-modal {
  position: fixed;
  inset: 0;
  z-index: 1100;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: var(--size-16);
  overflow-y: auto;
  background: rgb(39 40 43 / 50%);
}

.ds-modal[hidden] {
  display: none;
}

.ds-modal__dialog {
  display: flex;
  flex-direction: column;
  width: var(--size-432);
  max-width: 100%;
  max-height: 100%;
  border-radius: var(--radius-xl);
  background: var(--color-white);
  box-shadow: var(--box-shadow-popup);
  color: var(--text-primary);
}

.ds-modal--w-432 .ds-modal__dialog { width: var(--size-432); }
.ds-modal--w-640 .ds-modal__dialog { width: var(--size-640); }

.ds-modal__header {
  display: flex;
  flex: none;
  align-items: center;
  justify-content: space-between;
  gap: var(--size-16);
  padding: var(--size-24) var(--size-24) 0;
}

.ds-modal__title {
  margin: 0;
  font-size: var(--font-size-20);
  font-weight: var(--font-weight-700);
  line-height: var(--line-height-1-25);
}

.ds-modal__body {
  flex: 1 1 auto;
  padding: var(--size-24);
  overflow-y: auto;
}

.ds-modal__footer {
  display: flex;
  flex: none;
  justify-content: flex-end;
  gap: var(--size-8);
  padding: 0 var(--size-24) var(--size-24);
}

@media (max-width: 480px) {
  .ds-modal {
    align-items: flex-end;
    padding: 0;
  }

  .ds-modal__dialog,
  .ds-modal--w-432 .ds-modal__dialog,
  .ds-modal--w-640 .ds-modal__dialog {
    width: 100%;
    max-height: 90vh;
    border-radius: var(--radius-xl) var(--radius-xl) 0 0;
  }

  .ds-modal__footer {
    flex-wrap: wrap;
  }

  .ds-modal__footer > .ds-btn {
    flex: 1 1 auto;
  }
}

/* ==========================================================================================================
   DS: Layout/View (картка-контейнер) — https://crm.tat.ua/docs/storybook/?path=/story/layout-view--docs
   Білий, рамка border-default, radius-xl, padding 16; --hover: hover — рамка neutral-300 і фон bg-secondary.
   ========================================================================================================== */
.ds-card {
  padding: var(--size-16);
  border: var(--size-1) var(--border-solid) var(--color-border-default);
  border-radius: var(--radius-xl);
  background: var(--color-white);
  color: var(--text-primary);
}

.ds-card--hover {
  transition: border-color .15s ease, background-color .15s ease;
}

.ds-card--hover:hover {
  border-color: var(--color-neutral-300);
  background: var(--bg-secondary);
}

/* ==========================================================================================================
   DS: Layout/Separate — https://crm.tat.ua/docs/storybook/?path=/story/layout-separate--docs
   Горизонтальний: 1px border-default. Вертикальний (--v): 1×40px, колір --color-divider (як у шапці CRM).
   ========================================================================================================== */
.ds-divider {
  display: block;
  width: 100%;
  height: var(--size-1);
  margin: 0;
  border: 0;
  background: var(--color-border-default);
}

.ds-divider--v {
  display: inline-block;
  flex: none;
  width: var(--size-1);
  height: var(--size-40);
  background: var(--color-divider);
}

/* ==========================================================================================================
   DS: Controls/Link — https://crm.tat.ua/docs/storybook/?path=/story/controls-link--docs
   Колір бренду, без підкреслення; hover — підкреслення.
   ========================================================================================================== */
.ds-link {
  color: var(--color-main);
  text-decoration: none;
  cursor: pointer;
}

.ds-link:hover,
.ds-link:focus {
  color: var(--btn-bg-2-hover);
  text-decoration: underline;
}

.ds-link:focus-visible {
  outline: var(--size-2) var(--border-solid) var(--color-main);
  outline-offset: var(--size-2);
}

/* ==========================================================================================================
   DS: Foundation/Skeleton — https://crm.tat.ua/docs/storybook/?path=/story/foundation-skeleton--docs
   Заглушка завантаження: фон bg-tertiary + анімація блимання (у сторібуку keyframes `ui-kit-blink`, тут `ds-blink` — те саме).
   Розміри — стилем у місці використання (width/height); --circle — коло.
   ========================================================================================================== */
.ds-skeleton {
  display: block;
  min-height: var(--size-16);
  border-radius: var(--radius-md);
  background: var(--bg-tertiary);
  animation: ds-blink 1.5s ease-in-out infinite;
}

.ds-skeleton--circle {
  border-radius: 50%;
}

@keyframes ds-blink {
  0%, 100% { opacity: 1; }
  50% { opacity: .3; }
}

@media (prefers-reduced-motion: reduce) {
  .ds-skeleton,
  .ds-btn.is-loading::after {
    animation-duration: 3s;
  }
}
