/* =========================================================================
   OnTrack Web — библиотека компонентов (статический аналог @ao/ui + src/components/ui).
   Классы и метрики сняты из реального кода:
   AoBtn, AoIconBtn, AoChip, AoBadgeStatus, AoTextField, AoCheckbox, AoSwitch,
   AoTabsToggler, AoTabLinks, AoTooltip, AoDialogLayout, AoInfoBanner,
   AoGroupbox, AoExpansionPanel, MultiSelectionActions, ag-grid-таблица и т.д.
   ========================================================================= */

/* ---------- Иконка (AoIcon) ---------- */
.ao-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:inherit}
.ao-icon svg{width:1em;height:1em;fill:currentColor}
.ao-icon svg [stroke]:not([stroke="none"]){stroke:currentColor}
.ao-icon svg [fill]:not([fill="none"]){fill:currentColor}
.ao-icon--sm{font-size:12px}
.ao-icon--md{font-size:16px}
.ao-icon--lg{font-size:20px}
.ao-icon--xl{font-size:24px}
.ao-icon--xxl{font-size:32px}

/* ---------- Кнопки (AoBtn) ---------- */
.ao-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  height:36px;padding:0 16px;border-radius:var(--r);
  font-size:14px;font-weight:500;letter-spacing:0;text-transform:none;
  color:var(--text-body);background:transparent;
  transition:background .15s ease,box-shadow .15s ease,color .15s ease;
  user-select:none;white-space:nowrap;
}
.ao-btn .ao-icon{font-size:16px}
.ao-btn:disabled{opacity:.38;pointer-events:none}

/* варианты (Vuetify variants) */
.ao-btn--elevated{background:var(--surface);box-shadow:var(--shadow-elevation-2)}
.ao-btn--elevated:hover{box-shadow:var(--shadow-elevation-4)}
.ao-btn--flat{box-shadow:none}
.ao-btn--tonal{background:rgba(var(--primary-rgb),.12)}
.ao-btn--outlined{border:1px solid currentColor}
.ao-btn--text:hover,.ao-btn--plain:hover{background:rgba(0,0,0,.04)}
.ao-btn--plain{opacity:.62}
.ao-btn--plain:hover{opacity:1;background:none}

/* цвета */
.ao-btn--primary{background:var(--primary);color:#fff}
.ao-btn--primary:hover{background:var(--primary-dark)}
.ao-btn--primary.ao-btn--tonal{background:rgba(var(--primary-rgb),.12);color:var(--primary)}
.ao-btn--primary.ao-btn--text{background:none;color:var(--primary)}
.ao-btn--primary.ao-btn--text:hover{background:rgba(var(--primary-rgb),.08)}
.ao-btn--primary.ao-btn--outlined{background:none;color:var(--primary);border-color:var(--primary)}
.ao-btn--error{background:var(--error);color:#fff}
.ao-btn--error.ao-btn--tonal{background:rgba(var(--error-rgb),.12);color:var(--error)}
.ao-btn--error.ao-btn--text{background:none;color:var(--error)}
.ao-btn--success{background:var(--success);color:#fff}
.ao-btn--success.ao-btn--tonal{background:rgba(var(--success-rgb),.12);color:var(--success)}
.ao-btn--warning{background:var(--warning);color:#fff}
.ao-btn--warning.ao-btn--tonal{background:rgba(var(--warning-rgb),.12);color:var(--warning)}
.ao-btn--secondary{background:var(--secondary);color:var(--text-800)}

/* размеры */
.ao-btn--x-small{height:22px;padding:0 8px;font-size:10px}
.ao-btn--x-small .ao-icon{font-size:12px}
.ao-btn--small{height:28px;padding:0 12px;font-size:12px}
.ao-btn--small .ao-icon{font-size:14px}
.ao-btn--large{height:44px;padding:0 20px;font-size:16px}
.ao-btn--block{display:flex;width:100%}

/* пресеты custom= */
.ao-btn--nav-link{height:31px;justify-content:flex-start;font-size:12px;color:var(--text-700);width:100%;padding:0 10px;border-radius:var(--r)}
.ao-btn--nav-link:hover{background:var(--primary-50)}
.ao-btn--nav-link.is-active{background:var(--primary);color:#fff}
.ao-btn--tab-link{height:36px;font-size:12px;color:var(--text-600);border-radius:6px 6px 0 0;padding:0 12px 5px}
.ao-btn--tab-link.is-active{background:var(--surface);color:var(--text-body);padding-bottom:0}
.ao-btn--preset-tab{position:relative;height:54px;font-size:12px;padding:0 12px;color:var(--text-700);border-radius:0}
.ao-btn--preset-tab:hover::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--text-600)}
.ao-btn--preset-tab.is-active{background:var(--surface);color:var(--text-body)}
.ao-btn--preset-tab.is-active::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--primary)}
.ao-btn--tool{width:32px;height:32px;padding:0;border:1px dashed var(--border-dashed);color:var(--text-700)}
.ao-btn--tool:hover{background:var(--primary-50)}
.ao-btn--dashed{border:1px dashed var(--border-dashed);height:28px;padding:0 10px;font-size:12px;color:var(--text-700)}
.ao-btn--dashed:hover{border-style:solid}

/* ---------- Иконочная кнопка (AoIconBtn) ---------- */
.ao-icon-btn{
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  width:36px;height:36px;padding:0;border-radius:var(--r);color:var(--text-700);
  transition:background .15s ease,color .15s ease;
}
.ao-icon-btn:hover{background:rgba(0,0,0,.04)}
.ao-icon-btn .ao-icon{font-size:18px}
.ao-icon-btn--x-small{width:16px;height:16px}
.ao-icon-btn--x-small .ao-icon{font-size:10px}
.ao-icon-btn--small{width:24px;height:24px}
.ao-icon-btn--small .ao-icon{font-size:14px}
.ao-icon-btn--large{width:44px;height:44px}
.ao-icon-btn--large .ao-icon{font-size:22px}
.ao-icon-btn.is-selected{background:var(--secondary);color:var(--primary)}
.ao-icon-btn--primary{color:var(--primary)}
.ao-icon-btn--filled{background:var(--primary);color:#fff}
.ao-icon-btn--filled:hover{background:var(--primary-dark)}

/* бейдж-счётчик (v-badge) */
.ao-badge-dot{
  position:absolute;top:2px;right:2px;min-width:16px;height:16px;padding:0 4px;
  border-radius:var(--r-pill);background:var(--error);color:#fff;
  font-size:9px;font-weight:600;line-height:16px;text-align:center;
}
.ao-badge-dot--accent{background:var(--accent)}

/* левый сайдбар: кнопки рельсы (.left-sidebar-btn) */
.left-sidebar-btn{color:var(--text-700)}
.left-sidebar-btn:hover:not(.is-active){background:var(--primary-50)}
.left-sidebar-btn.is-active{background:var(--primary);color:#fff}

/* ---------- Чипы (AoChip) ---------- */
.ao-chip{
  display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;
  border-radius:var(--r);background:var(--panel-grey);color:var(--text-800);
  font-size:11px;font-weight:500;white-space:nowrap;
}
.ao-chip--x-small{height:24px;font-size:10px;padding:0 8px;border-radius:var(--r-sm)}
.ao-chip--default{height:36px;font-size:12px;padding:0 12px;border-radius:var(--r-md)}
.ao-chip--large{height:40px;font-size:14px;padding:0 14px;border-radius:var(--r-lg)}
.ao-chip--primary{background:rgba(var(--primary-rgb),.12);color:var(--primary)}
.ao-chip--outlined{background:none;border:1px solid var(--border-dashed)}
.ao-chip__close{display:inline-flex;color:var(--text-600);cursor:pointer}
.ao-chip__close:hover{color:var(--text-800)}
.ao-chip__close .ao-icon{font-size:12px}

/* Теги (AoTags) */
.ao-tag{
  display:inline-flex;align-items:center;gap:8px;padding:4px 4px 4px 8px;
  border-radius:var(--r-xs);background:var(--panel-grey);
  font-size:11px;font-weight:500;color:var(--text-800);
}

/* ---------- Статус-бейджи (AoBadgeStatus / PreviewStatus) ---------- */
.ao-status{display:inline-block;padding:4px 8px;border-radius:var(--r);font-size:10px;font-weight:500;line-height:140%;white-space:nowrap}
.ao-status--large{font-size:12px;border-radius:var(--r-lg);padding:6px 8px}
.ao-status--open{background:var(--status-open-bg);color:var(--status-open-fg)}
.ao-status--done{background:var(--status-done-bg);color:var(--status-done-fg)}
.ao-status--warn{background:var(--status-cancel-bg);color:#c99a1d}
.ao-status--danger{background:var(--status-danger-bg);color:var(--status-danger-fg)}
.ao-status--muted{background:var(--status-other-bg);color:var(--status-other-fg)}
.ao-status--blue{background:var(--status-blue-bg);color:var(--status-blue-fg)}

/* точка-статус */
.ao-dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex:0 0 auto}

/* ---------- Поля ввода (AoTextField) ---------- */
.ao-field{display:flex;flex-direction:column;gap:2px;min-width:0}
.ao-field__label{font-size:10px;font-weight:400;line-height:140%;color:var(--text-600)}
.ao-field__control{
  display:flex;align-items:center;gap:8px;height:32px;padding:2px 0;
  border-bottom:1px solid var(--text-secondary);
  transition:border-color .15s ease,box-shadow .15s ease;
}
.ao-field__control:focus-within{border-bottom:2px solid var(--primary);margin-bottom:-1px}
.ao-field__control input,.ao-field__control select{
  flex:1;min-width:0;border:none;outline:none;background:none;
  font-size:14px;font-weight:400;color:var(--text-body);padding:0;
}
.ao-field__control input::placeholder{color:var(--text-secondary)}
.ao-field__control .ao-icon{color:var(--text-600);font-size:16px}
.ao-field--outlined .ao-field__control{border:1px solid var(--text-secondary);border-radius:var(--r);padding:2px 12px;height:40px}
.ao-field--outlined .ao-field__control:focus-within{border:2px solid var(--primary);margin:0}
.ao-field--error .ao-field__control{border-color:var(--error)}
.ao-field__msg{font-size:10px;color:var(--text-600)}
.ao-field--error .ao-field__msg,.ao-field--error .ao-field__label{color:var(--error)}
.ao-field--disabled{opacity:.38;pointer-events:none}
.ao-field__clear{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:rgba(15,24,34,.05);color:var(--text-600)}
.ao-field__clear .ao-icon{font-size:8px}

/* select-активатор с шевроном */
.ao-field__control .chevron{margin-left:auto;color:var(--text-600);transition:transform .2s ease}
.ao-field--open .chevron{transform:rotate(180deg)}

/* ---------- Чекбокс (AoCheckbox) ---------- */
.ao-checkbox{display:inline-flex;align-items:center;gap:10px;min-height:24px;padding:2px 6px;border-radius:var(--r);cursor:pointer;font-size:12px;color:var(--text-body)}
.ao-checkbox:hover{background:var(--panel-grey)}
.ao-checkbox input{display:none}
.ao-checkbox .checkmark{
  width:14px;height:14px;flex:0 0 auto;border:1px solid var(--text-600);border-radius:2.67px;
  display:flex;align-items:center;justify-content:center;background:var(--surface);
  transition:background .12s ease,border-color .12s ease;
}
.ao-checkbox .checkmark svg{width:9px;height:9px;fill:none;stroke:#fff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:0}
.ao-checkbox input:checked+.checkmark{background:var(--primary);border-color:var(--primary)}
.ao-checkbox input:checked+.checkmark svg{opacity:1}
.ao-checkbox.is-partial .checkmark{background:var(--primary);border-color:var(--primary)}
.ao-checkbox.is-partial .checkmark svg{opacity:1}
.ao-checkbox--disabled{opacity:.4;pointer-events:none}

/* ---------- Радио (AoRadioBtn) ---------- */
.ao-radio{display:inline-flex;align-items:center;gap:10px;min-height:24px;padding:2px 6px;border-radius:var(--r);cursor:pointer;font-size:12px}
.ao-radio:hover{background:var(--panel-grey)}
.ao-radio input{display:none}
.ao-radio .mark{width:14px;height:14px;border:1px solid var(--text-600);border-radius:50%;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.ao-radio .mark::after{content:'';width:8px;height:8px;border-radius:50%;background:var(--primary);transform:scale(0);transition:transform .12s ease}
.ao-radio input:checked+.mark{border-color:var(--primary)}
.ao-radio input:checked+.mark::after{transform:scale(1)}

/* ---------- Свитч (AoSwitch) ---------- */
.ao-switch{display:inline-flex;align-items:center;gap:8px;min-height:28px;cursor:pointer;font-size:12px;color:var(--text-700)}
.ao-switch input{display:none}
.ao-switch .track{
  width:28px;height:16px;border-radius:var(--r-pill);background:var(--text-secondary);
  position:relative;flex:0 0 auto;transition:background .15s ease;
}
.ao-switch .track::after{
  content:'';position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;
  background:#fff;transition:transform .15s ease;box-shadow:0 1px 2px rgba(0,0,0,.2);
}
.ao-switch input:checked+.track{background:var(--primary)}
.ao-switch input:checked+.track::after{transform:translateX(12px)}

/* ---------- Сегментированный переключатель (AoButtonToggle / AoTabsToggler) ---------- */
.ao-toggler{display:inline-flex;align-items:center;gap:2px;padding:4px;border-radius:var(--r);background:var(--background)}
.ao-toggler__item{
  position:relative;display:inline-flex;align-items:center;gap:6px;
  padding:2px 8px;border-radius:var(--r-xs);font-size:14px;color:var(--text-700);
  transition:background .12s ease,color .12s ease;height:28px;
}
.ao-toggler__item:hover{background:rgba(var(--primary-rgb),.2)}
.ao-toggler__item.is-active{background:var(--primary);color:#fff}
.ao-toggler__item .ao-icon{font-size:14px}
.ao-toggler--small .ao-toggler__item{font-size:12px;height:22px}
.ao-toggler__item .dot-badge{position:absolute;top:-2px;right:-2px;width:8px;height:8px;border-radius:50%;background:var(--accent)}

/* ---------- Таб-ссылки (AoTabLinks) ---------- */
.ao-tab-links{display:flex;align-items:flex-end;gap:2px}
.ao-tab-link{
  display:inline-flex;align-items:center;gap:6px;padding:8px 12px;
  border-radius:var(--r) var(--r) 0 0;font-size:12px;font-weight:500;color:var(--text-700);
}
.ao-tab-link:hover{background:rgba(255,255,255,.6)}
.ao-tab-link.is-active{background:var(--surface);color:var(--text-900)}

/* Крупные «карточные» табы (AoTabs) */
.ao-big-tabs{display:flex;gap:2px;align-items:flex-end}
.ao-big-tab{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  height:66px;margin-top:8px;padding:0 18px;flex:1;
  background:var(--border-soft);border:1px solid var(--border);border-bottom:none;
  border-radius:var(--r-lg) var(--r-lg) 0 0;font-size:12px;font-weight:500;color:var(--text-700);
  transition:all .15s ease;
}
.ao-big-tab .ao-icon{font-size:20px}
.ao-big-tab.is-active{height:74px;margin-top:0;background:var(--surface);color:var(--primary)}

/* ---------- Тултип (AoTooltip) ---------- */
.ao-tooltip{
  position:absolute;z-index:100;padding:4px 8px;border-radius:var(--r);
  background:var(--text-900);color:#fff;font-size:10px;font-weight:500;line-height:14px;
  box-shadow:var(--shadow-card);white-space:nowrap;pointer-events:none;
}
.ao-tooltip::before{
  content:'';position:absolute;width:8px;height:8px;background:inherit;transform:rotate(45deg);
}
.ao-tooltip--top::before{top:-3px;left:calc(50% - 4px)}
.ao-tooltip--left::before{left:-3px;top:calc(50% - 4px)}
.ao-tooltip--dark-grey{background:#3F464E}

/* css-hover тултип для прототипа */
.has-tooltip{position:relative}
.has-tooltip>.ao-tooltip{display:none}
.has-tooltip:hover>.ao-tooltip{display:block}

/* ---------- Меню / поповер ---------- */
.ao-menu{
  position:absolute;z-index:90;min-width:180px;padding:4px;
  background:var(--surface);border-radius:var(--r);box-shadow:var(--shadow-popover);
}
.ao-menu__item{
  display:flex;align-items:center;gap:10px;width:100%;padding:8px 12px;border-radius:var(--r-lg);
  font-size:14px;font-weight:500;color:var(--text-body);text-align:left;
}
.ao-menu__item:hover{background:var(--primary-50)}
.ao-menu__item.is-active{background:var(--primary-50);color:var(--primary)}
.ao-menu__item .ao-icon{color:var(--text-600);font-size:16px}
.ao-menu__divider{height:1px;margin:4px 0;background:var(--border-soft)}

/* ---------- Диалог (AoDialogLayout) ---------- */
.ao-overlay{
  position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:rgba(33,33,33,.46);
}
.ao-dialog{
  display:flex;flex-direction:column;width:600px;max-width:calc(100vw - 48px);
  max-height:calc(100vh - 48px);background:var(--surface);border-radius:var(--r);
  box-shadow:var(--shadow-popover);
}
.ao-dialog--sm{width:428px}
.ao-dialog__header{display:flex;align-items:flex-start;gap:12px;padding:24px}
.ao-dialog__header .title{font-size:18px;font-weight:600;line-height:135%}
.ao-dialog__header .subtitle{font-size:11px;font-weight:400;color:var(--text-600);margin-top:2px}
.ao-dialog__header .close{margin-left:auto}
.ao-dialog__header--line{border-bottom:1px solid var(--border-soft)}
.ao-dialog__content{padding:0 24px 24px;overflow:auto}
.ao-dialog__footer{display:flex;justify-content:flex-end;gap:8px;padding:16px 24px 24px}
.ao-dialog__footer--line{border-top:1px solid var(--border-soft);padding-top:16px}

/* ---------- Инфо-баннер (AoInfoBanner) ---------- */
.ao-banner{display:flex;align-items:flex-start;gap:12px;padding:12px;border-radius:var(--r-lg);font-size:12px}
.ao-banner .ao-icon{font-size:16px;margin-top:1px}
.ao-banner--default{background:rgba(var(--primary-rgb),.1);color:var(--primary)}
.ao-banner--success{background:rgba(var(--success-rgb),.1);color:var(--success)}
.ao-banner--warning{background:rgba(var(--warning-rgb),.1);color:#c99a1d}
.ao-banner--error{background:rgba(var(--error-rgb),.1);color:var(--error)}
.ao-banner__text{color:var(--text-800)}
.ao-banner__title{font-weight:600;margin-bottom:2px;color:inherit}

/* ---------- Снекбар / тост ---------- */
.ao-snackbar{
  position:fixed;top:16px;right:16px;z-index:300;display:flex;align-items:center;gap:16px;
  min-width:280px;padding:12px 16px;border-radius:var(--r);color:#fff;font-size:13px;
  background:var(--text-800);box-shadow:var(--shadow-float);
}
.ao-snackbar--success{background:var(--success)}
.ao-snackbar--error{background:var(--error)}
.ao-snackbar__close{color:#fff;font-weight:600;font-size:12px;text-transform:uppercase;opacity:.9}

/* ---------- Группбокс (AoGroupbox) ---------- */
.ao-groupbox{width:100%;padding:12px;border-radius:var(--r);background:var(--light-grey);border:1px solid var(--border-soft)}
.ao-groupbox--card{background:var(--surface)}
.ao-groupbox--preview{border:none}

/* ---------- Аккордеон (AoExpansionPanel) ---------- */
.ao-expansion{border-bottom:1px solid var(--border-soft)}
.ao-expansion__head{
  display:flex;align-items:center;gap:8px;width:100%;padding:12px 0;
  color:var(--text-700);font-size:12px;font-weight:500;text-transform:uppercase;text-align:left;
}
.ao-expansion__head .chevron{margin-left:auto;transition:transform .2s ease;font-size:16px;color:var(--text-600)}
.ao-expansion.is-open .ao-expansion__head .chevron{transform:rotate(180deg)}
.ao-expansion__body{display:none;padding:0 0 12px}
.ao-expansion.is-open .ao-expansion__body{display:block}

/* ---------- Аватар (AoAvatar) ---------- */
.ao-avatar{
  display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;
  width:36px;height:36px;border-radius:50%;background:#b8d5c2;color:var(--text-800);
  font-size:13.5px;font-weight:500;overflow:hidden;
}
.ao-avatar--sm{width:24px;height:24px;font-size:10px}
.ao-avatar--lg{width:48px;height:48px;font-size:16px}
.ao-avatar--rounded{border-radius:var(--r-lg)}
.ao-avatar--primary{background:var(--secondary);color:var(--primary)}
.ao-avatar img{width:100%;height:100%;object-fit:cover}

/* ---------- Строка списка (AoListItem / AoSelectItem) ---------- */
.ao-list-item{
  display:flex;align-items:center;gap:12px;padding:8px 12px;border-radius:var(--r-lg);
  font-size:14px;font-weight:500;cursor:pointer;
}
.ao-list-item:hover,.ao-list-item.is-active{background:var(--primary-50)}
.ao-list-item.is-disabled{color:var(--text-secondary);pointer-events:none}
.ao-list-item__text{flex:1;min-width:0}
.ao-list-item__subtitle{font-size:10px;font-weight:400;color:var(--text-600)}

/* ---------- Пустое состояние (EmptyStateBlock) ---------- */
.ao-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:48px 24px;color:var(--text-700)}
.ao-empty .ao-icon{font-size:54px;color:var(--icon-600);margin-bottom:24px}
.ao-empty__title{font-size:14px;font-weight:500}
.ao-empty__subtitle{font-size:12px;font-weight:400;color:var(--text-600);margin-top:4px}

/* ---------- Прелоадер (AoPreloader) ---------- */
.ao-spinner{width:64px;height:64px;border-radius:50%;border:4px solid rgba(var(--primary-rgb),.2);border-top-color:var(--primary);animation:ao-spin 1s linear infinite}
.ao-spinner--sm{width:24px;height:24px;border-width:3px}
@keyframes ao-spin{to{transform:rotate(360deg)}}
.ao-progress-linear{height:4px;border-radius:2px;background:rgba(var(--primary-rgb),.2);overflow:hidden}
.ao-progress-linear>i{display:block;height:100%;background:var(--primary);border-radius:2px}

/* Скелетон */
.ao-skeleton{background:linear-gradient(90deg,var(--panel-grey) 25%,var(--border-soft) 50%,var(--panel-grey) 75%);background-size:200% 100%;animation:ao-skeleton 1.4s ease infinite;border-radius:var(--r)}
@keyframes ao-skeleton{from{background-position:200% 0}to{background-position:-200% 0}}

/* ---------- Прогресс-бары ---------- */
.ao-stack-bar{display:flex;height:20px;border-radius:var(--r);overflow:hidden}
.ao-stack-bar>i{display:block;height:100%}
.ao-limit-bar{position:relative;height:8px;border-radius:4px;background:#e0e0e0}
.ao-limit-bar>i{position:absolute;left:0;top:0;bottom:0;border-radius:4px;background:#27AE60}
.ao-limit-bar>b{position:absolute;top:-2px;bottom:-2px;width:1px;background:var(--text-900)}

/* ---------- Таймлайн (AoTimeline) ---------- */
.ao-timeline{position:relative;padding-left:24px;font-family:var(--font-accent);font-size:12px}
.ao-timeline::before{content:'';position:absolute;left:5px;top:8px;bottom:8px;width:2px;background:var(--secondary)}
.ao-timeline__item{position:relative;padding:0 0 16px}
.ao-timeline__item::before{
  content:'';position:absolute;left:-24px;top:4px;width:12px;height:12px;border-radius:90px;
  background:var(--secondary);border:1px solid var(--primary-200);
}
.ao-timeline__item.is-active::before{background:var(--primary);border-color:var(--primary-dark)}

/* ---------- Таблица (ag-grid-подобная) ---------- */
.ao-table{width:100%;background:var(--surface);font-size:13px;color:rgba(0,0,0,.87);border-collapse:collapse}
.ao-table th{
  height:42px;padding:0 12px;text-align:left;font-size:12px;font-weight:600;
  color:rgba(0,0,0,.54);background:var(--surface);border-bottom:1px solid #e2e2e2;
  white-space:nowrap;position:sticky;top:0;z-index:2;
}
.ao-table th .sort{display:inline-flex;vertical-align:middle;margin-left:4px;color:var(--text-600);font-size:12px}
.ao-table td{height:36px;padding:0 12px;border-bottom:1px solid transparent;white-space:nowrap;vertical-align:middle}
.ao-table tbody tr:hover{background:#fafafa}
.ao-table tbody tr.is-selected{background:rgba(33,150,243,.12)}
.ao-table .cell-num{text-align:right;font-variant-numeric:tabular-nums}
.ao-table .cell-check{width:34px;padding-right:0}
.ao-table tr.group-row td{background:var(--light-grey);font-weight:600;color:var(--text-800)}
.ao-table .cell-sub{font-size:10px;color:var(--text-600)}
.ao-table tfoot td{position:sticky;bottom:0;background:var(--light-grey);font-weight:600;border-top:1px solid #e2e2e2}

/* панель массовых действий (MultiSelectionActions) */
.multi-actions{
  position:absolute;top:0;left:0;right:0;z-index:50;display:flex;align-items:center;gap:16px;
  height:50px;padding:0 16px;background:#222529;color:#fff;font-size:12px;
  animation:multi-in .3s ease;
}
@keyframes multi-in{from{transform:translateY(-100%)}to{transform:translateY(0)}}
.multi-actions .count{color:#8e8e8e}
.multi-actions .ao-icon-btn{color:#fff;opacity:.85;width:28px;height:28px}
.multi-actions .ao-icon-btn:hover{opacity:1;background:var(--primary)}
.multi-actions .close{margin-left:auto}

/* FAB */
.ao-fab{
  position:absolute;right:24px;bottom:24px;z-index:40;width:48px;height:48px;border-radius:50%;
  background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;
  box-shadow:var(--shadow-float);transition:background .15s ease;
}
.ao-fab:hover{background:var(--primary-dark)}
.ao-fab .ao-icon{font-size:20px}

/* ---------- Карточки дашборда ---------- */
.dash-card{
  display:flex;flex-direction:column;gap:10px;padding:16px;background:var(--surface);
  border-radius:var(--r);box-shadow:var(--shadow-elevation-4);min-width:0;
}
.dash-card__head{display:flex;align-items:center;gap:8px}
.dash-card__title{font-size:12px;font-weight:500;text-transform:uppercase;color:var(--text-700);letter-spacing:.02em}
.dash-card__actions{margin-left:auto;display:flex;gap:4px}
.dash-value{display:flex;align-items:center;gap:12px}
.dash-value__num{min-width:64px;min-height:36px;display:inline-flex;align-items:center;justify-content:center;background:var(--secondary);border-radius:var(--r);font-size:18px;font-weight:600;padding:4px 10px}
.dash-kpi{font-size:32px;font-weight:600;line-height:42px}
.dash-kpi small{font-size:12px;font-weight:700;opacity:.5}
.ao-widget-label{font-size:10px;text-transform:uppercase;color:var(--text-700)}
.ao-widget-value{font-size:16px;font-weight:500}

/* карточка-паспорт */
.passport-widget{padding:12px;border-radius:var(--r);background:var(--light-grey)}
.passport-widget .t{font-family:var(--font-accent);font-size:10px;font-weight:700;text-transform:uppercase;color:#4f4f4f}
.passport-widget .v{font-size:18px;font-weight:600}
.passport-widget .v small{font-size:12px;font-weight:700;opacity:.5}

/* ---------- Легенда карты ---------- */
.legend-item{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:10px;font-weight:500}
.legend-item .swatch{width:16px;height:16px;border-radius:50%;flex:0 0 auto;border:1px solid rgba(0,0,0,.08)}
.legend-item .swatch--sm{width:8px;height:8px}
.legend-item .val{margin-left:auto;color:var(--text-600)}

/* ---------- Разное ---------- */
.ao-divider{height:1px;background:var(--border-soft);border:none;margin:0}
.ao-kbd{font-family:ui-monospace,Consolas,monospace;font-size:11px;background:var(--primary-50);color:var(--primary-dark);padding:2px 6px;border-radius:var(--r-md)}
