/* TaskFlow CRM — Chatwoot v4.12.1 UI overrides
 *
 * Mounted to /app/public/taskflow/overrides.css (read-only) inside
 * stack-chatwoot-web container. Injected into every text/html response
 * via Rack middleware (see /app/config/initializers/inject_custom_assets.rb).
 *
 * Когда CSS-правило перестало работать после апгрейда Chatwoot:
 * 1. Открыть DevTools → Inspect → проверить что нужный класс ещё существует
 * 2. Если переименовали — поправить селектор здесь + в .selectors-notes.md
 * 3. Грепнуть infra/chatwoot/upstream/ (после rebase на новую версию)
 * 4. Документировать новую версию Chatwoot в комментарии
 *
 * Spec:  docs/superpowers/specs/2026-05-23-chatwoot-ui-tuning-design.md
 * Notes: infra/chatwoot/.selectors-notes.md (selector rationale + DOM trace)
 */

/* ─── Task 2: Hide current agent profile widget (bottom-left sidebar) ───────
 *
 * Chatwoot v4.12.1; component: app/javascript/dashboard/components-next/sidebar/SidebarProfileMenu.vue
 * Used in:           app/javascript/dashboard/components-next/sidebar/Sidebar.vue:857
 *
 * Класс-комбинация `border-t border-n-weak` встречается в components-next/sidebar/
 * РОВНО ОДИН РАЗ — это wrapper-div вокруг SidebarProfileMenu в последней <section>
 * сайдбара. На Chatwoot CE (наш случай) SidebarChangelogCard/Button НЕ рендерятся
 * (только Cloud), поэтому эта div — единственный контент нижней section.
 */
aside > section > div.border-t.border-n-weak {
  display: none !important;
}

/* ─── Task 3: Hide account context header (top-left: Logo + name + chevron) ─
 *
 * Chatwoot v4.12.1; components:
 *   wrapper row: app/javascript/dashboard/components-next/sidebar/Sidebar.vue:748-771
 *   button:      app/javascript/dashboard/components-next/sidebar/SidebarAccountSwitcher.vue:67
 *
 * Сидит в первой <section> sidebar'а. Внутри row — три элемента:
 *   1. <Logo> (size-4, голубой кружочек)
 *   2. вертикальный разделитель (w-px h-3)
 *   3. <SidebarAccountSwitcher> → <button id="sidebar-account-switcher">{account.name}</button>
 *
 * Якорим селектор на ID кнопки через CSS :has() — устойчивее чем `:first-child`.
 * :has() supported: Chrome 105+, Safari 15.4+, FF 121+ (все агенты CRM на современных браузерах).
 *
 * ВАЖНО: эта селектор скрывает ТОЛЬКО row с аккаунтом. Search-box и Compose-button
 * (второй div в той же section) остаются видимыми.
 */
aside > section > div:has(#sidebar-account-switcher) {
  display: none !important;
}

/* ─── Task 1: бренд «Chatwoot» — основное переименование через ENV-vars  ────
 *
 *   INSTALLATION_NAME=TaskFlow CRM
 *   BRAND_NAME=TaskFlow CRM
 *
 * (заданы в /opt/stack/.env на koara — см. infra/chatwoot/env-overrides.example
 *  + InstallationConfig DB перезаписан через bin/rails runner — env-vars сидируют
 *  БД при первой установке, дальше Chatwoot читает значения из таблицы.)
 *
 * CSS-правки здесь только если ENV-vars не покроют какое-то конкретное вхождение
 * «Chatwoot» — добавлять по мере обнаружения через визуальную проверку.
 */

/* ─── Task 4: Hide «Центр поддержки» (Help Center) menu group ──────────────
 *
 * Chatwoot v4.12.1; component: app/javascript/dashboard/components-next/sidebar/Sidebar.vue:524-570
 * Menu item с name='Portals', label=t('SIDEBAR.HELP_CENTER.TITLE'),
 * icon='i-lucide-library-big'.
 *
 * Icon class `i-lucide-library-big` уникален для Help Center menu group
 * (verified: grep -rn 'i-lucide-library-big' app/javascript/ выдаёт ровно
 * 1 совпадение в Sidebar.vue:527). Используем :has() для якорения по иконке.
 *
 * Hides BOTH expanded sidebar mode (<li> wrapper from Policy as="li") AND
 * collapsed icon-only mode (button inside same <li>).
 */
aside li:has(.i-lucide-library-big) {
  display: none !important;
}

/* ─── Task 5: Rename «Кампании» → «Рассылки» (sidebar label only) ───────────
 *
 * Chatwoot v4.12.1; component: Sidebar.vue:502-523
 * Menu item с name='Campaigns', label=t('SIDEBAR.CAMPAIGNS'), icon='i-lucide-megaphone'.
 *
 * Vue I18n bundles ru/settings.json в JS bundle at build time → нельзя
 * override через file mount. Используем CSS content-replacement trick:
 * скрываем оригинальный текст через font-size:0, рисуем «Рассылки» через
 * ::before. Селектор якорится на icon `i-lucide-megaphone` (уникален —
 * grep -rn 'i-lucide-megaphone' app/javascript/ → 1 совпадение).
 *
 * Note: переименование действует ТОЛЬКО на label в sidebar. На странице
 * /campaigns заголовок и другие тексты останутся "Кампании" (там разные
 * i18n-ключи — CAMPAIGN.HEADER_TITLE и т.д.). Если нужно полное
 * переименование везде — отдельная задача через JS-injection / runtime
 * MutationObserver / merge of Vue I18n messages после mount.
 */
aside [role="button"]:has(> div .i-lucide-megaphone) span.truncate {
  font-size: 0 !important;
  line-height: 0 !important;
}
aside [role="button"]:has(> div .i-lucide-megaphone) span.truncate::before {
  content: 'Рассылки';
  font-size: 0.875rem; /* matches Tailwind text-sm / text-body-main */
  line-height: 1.25rem;
  font-weight: inherit;
  color: inherit;
}

/* ─── Task 6: «Настройки» menu — admin-only (gated by localStorage flag) ────
 *
 * Chatwoot v4.12.1; component: Sidebar.vue:571-...
 * Menu item с name='Settings', label=t('SIDEBAR.SETTINGS'), icon='i-lucide-bolt'.
 *
 * Сценарий: все сотрудники CRM используют ОДИН Chatwoot login (Руслана),
 * но мы хотим скрыть Settings от всех кроме Руслана. Chatwoot не различает
 * пользователей (один account/user → один UI). Используем UX-уровень
 * защиту через localStorage flag:
 *
 *   1. DEFAULT: Settings menu скрыт всегда.
 *   2. Руслан один раз открывает:
 *        https://49334.koara.live/?set-admin=1
 *      JS (см. inline-script в /app/config/initializers/inject_custom_assets.rb)
 *      сохраняет localStorage['crm_admin']='1' → ставит body.is-crm-admin →
 *      CSS-override ниже включает display обратно.
 *   3. Reset: открыть https://49334.koara.live/?set-admin=0 → localStorage clear.
 *
 * Это НЕ security — DevTools → Application → Local Storage → ручная установка
 * 'crm_admin'='1' обходит защиту. Используется как UX-нудж: команда не знает
 * URL, не зайдёт в Settings случайно.
 *
 * Icon i-lucide-bolt уникален для Settings menu (verified grep).
 */
aside li:has(.i-lucide-bolt) {
  display: none !important;
}

body.is-crm-admin aside li:has(.i-lucide-bolt) {
  /* Restore via `grid` (matches Vue's intent — Policy/li has class="grid ..."). */
  display: grid !important;
}
