/* Anti-flash inline стилі для sidebar collapse — діють миттєво при парсингу
     HTML, до завантаження components.css. Використовуємо display:none
     (а не visibility:hidden+opacity), щоб render-tree з самого старту збігався
     з фінальним станом після components.css (display:none !important).
     Інакше перехід visibility→display форсував би layout recalculation і
     візуально читався б як геометричний стрибок сайдбара. */
html.sb-pre-collapsed .crm-sidebar {
    width: var(--sb-width-collapsed, 56px);
}
html.sb-pre-collapsed .crm-sb-item span,
html.sb-pre-collapsed .crm-sb-badge,
html.sb-pre-collapsed .crm-sb-brand-text,
html.sb-pre-collapsed .crm-sb-new span {
    display: none !important;
}
/* Секції — ТОЧНО як .crm-sidebar.collapsed .crm-sb-section (height:0, НЕ display:none):
   display:none прибирав їх повністю, а справжній .collapsed лишає ~1px кожній →
   після handoff всі пункти зсувались на +1px за кожну секцію (мікро-здвиг іконок). */
html.sb-pre-collapsed .crm-sb-section { height: 0; padding: 0; opacity: 0; overflow: hidden; }
/* Шеврон згортання: JS ставить bi-chevron-double-right лише на DOMContentLoaded —
   до того лівий глиф. Дзеркалимо CSS-ом ЛИШЕ поки клас лівий (після свапу селектор
   не матчить → без зворотного фліпу). */
html.sb-pre-collapsed #crm-sb-collapse-icon.bi-chevron-double-left { transform: scaleX(-1); }
/* ПОВНА геометрія згорнутого стану (не лише ширина+текст) — інакше до
   handoff іконки лівовирівняні й секції займають висоту, а .collapsed їх
   центрує/прибирає → горизонтальний+вертикальний СТРИБОК іконок при кожному
   релоаді. Значення 1-в-1 з .crm-sidebar.collapsed у components.css. */
html.sb-pre-collapsed .crm-sb-item    { justify-content: center; padding: 9px 0; }
html.sb-pre-collapsed .crm-sb-item .bi { width: auto; }
html.sb-pre-collapsed .crm-sb-new     { justify-content: center; padding: 8px; }
/* Заголовок сторінки (.kb-page-top) позиціюється від .crm-sidebar.collapsed,
   який JS ставить лише на DOMContentLoaded → у ПРЕ-фазі title ~40-300мс висів
   на позиції РОЗГОРНУТОГО сайдбару (left 248) і стрибав на 64 («текст блимає
   в шапці на Cmd+R» — доведено headless-телеметрією). Ставимо collapsed-позицію
   одразу в пре-фазі. */
html.sb-pre-collapsed .crm-content .kb-page-top { left: calc(var(--sb-width-collapsed, 56px) + var(--tb-margin-x, 8px)); }

/* Anti-flash для board bg: коли boot-script у <head> поставив
   data-kb-bg, ми ВЖЕ красимо body потрібним кольором — до того як
   kanban.css підвантажить .board-bg-* класи і DOMContentLoaded
   накине їх на body. Значення збігаються з .board-bg-* у kanban.css. */
/* ЄДИНЕ ПЛАТФОРМЕННЕ ПРАВИЛО фону робочої області (канбан-дошка / журнали /
   календар): джерело правди = data-kb-bg на <html> (+ --board-bg-override для
   custom). Змінюється live через глобальний window.setKbBg → каскадує на body
   ВСІХ сторінок без релоаду (body статичний при SPA). Раніше фон керувався
   body-класом лише на дошці Угод і не оновлювався на журналах/календарі. */
/* ⚠️ ЛИШЕ світла тема — board-bg preference це СВІТЛО-режимна фіча (ключ
   localStorage = crm_kb_bg_light). Без :not(dark) збережений світлий/custom фон
   перебивав би нічний --board-bg → календар/дошка «тримали старий фон» у ночі.
   У ночі фон ЗАВЖДИ = --board-bg (body.crm-body default у components.css). */
html[data-kb-bg="white"]:not([data-bs-theme="dark"])  body.crm-body { background: #ffffff; }
html[data-kb-bg="blue"]:not([data-bs-theme="dark"])   body.crm-body { background: #EBF4FF; }
html[data-kb-bg="green"]:not([data-bs-theme="dark"])  body.crm-body { background: #EDFBF4; }
html[data-kb-bg="custom"]:not([data-bs-theme="dark"]) body.crm-body { background: var(--board-bg-override, var(--board-bg)); }

/* Угоди table-вид анти-flash: ховаємо kanban-дошку + показуємо таблицю ДО paint,
   поки setDealsView() (DOMContentLoaded) не перебере керування і не зніме клас. */
html.deals-pre-table #kanban-board     { display: none !important; }
html.deals-pre-table #deals-table-wrap { display: flex !important; }
