/* =============================================================================
   Штурман CMP — стили баннера/модала cookie. nalogi-ip.ru, vanilla, без зависимостей.
   Версия согласия задаётся в cmp.js (CONSENT_VERSION). Уважение reduced-motion.

   ПАЛИТРА СНЯТА С ПРОДУКТА, не придумана: зелёный #0E9E74 — цвет главных кнопок лендинга
   («Узнать, сколько останется», «Войти через Telegram»), чернила #17181B — его же текст,
   линия #E3E1D9 выведена из бумажного фона #EEEDE7. Было индиго #4f46e5 — цвет ниоткуда:
   такого нет нигде в Штурмане.

   ТЕМИЗАЦИЯ — ПО СИГНАЛУ САЙТА: :root[data-theme="dark"] (тумблер в шапке лендинга), НЕ по
   prefers-color-scheme. Сайт тему ОС игнорирует, поэтому баннер, слушавший ОС, на тёмной системе
   рисовался тёмным поверх светлой страницы. Теперь он переключается вместе со страницей.
   ============================================================================= */

:root {
  --cmp-z: 2147483000;

  --cmp-bg: #ffffff;            /* белая карточка — как карточки Штурмана */
  --cmp-bg-elev: #f7f6f1;       /* тёплая подложка (взята с сайта: фон полей ввода) */
  --cmp-fg: #17181b;            /* чернила */
  --cmp-fg-muted: #5a5e66;      /* вторичный текст */
  --cmp-border: #e3e1d9;        /* тёплая линия в тон бумаги, а не холодный серый */
  --cmp-shadow: 0 8px 28px -10px rgba(23, 24, 27, .22), 0 1px 3px rgba(23, 24, 27, .06);

  /* Зелёный — только чернила и рамка. Заливкой не пользуемся: в Штурмане зелёный означает
     «деньги, которые остаются у вас», и тратить его на кнопку про cookie — обесценивать смысл. */
  --cmp-accent: #0e9e74;
  --cmp-accent-fg: #ffffff;
  --cmp-accent-hover: #0a7b5b;
  --cmp-accent-soft: transparent;
  --cmp-accent-text: #0a7b5b;

  --cmp-ghost-bg: transparent;
  --cmp-ghost-border: #d9d7cd;
  --cmp-ghost-hover: #f2f1ea;

  --cmp-overlay: rgba(23, 24, 27, .5);

  --cmp-toggle-off: #d0cec4;
  --cmp-toggle-on: #0e9e74;
  --cmp-toggle-knob: #ffffff;
  --cmp-toggle-locked: #b3b1a6;

  --cmp-focus: #0e9e74;
  --cmp-radius: 14px;           /* как карточки сайта (13–14px), а не 16 */
  --cmp-radius-sm: 11px;        /* мелкие карточки (категории в модалке) — тоже как на сайте */
  --cmp-pill: 999px;            /* кнопки — пилюли, родной словарь форм Штурмана («УСН 6%») */
}

/* Тёмная тема — по СИГНАЛУ САЙТА (data-theme на <html>, тумблер-солнышко в шапке лендинга),
   а НЕ по prefers-color-scheme. Разница принципиальная: сайт тему ОС игнорирует, поэтому баннер,
   слушавший ОС, на тёмной системе рисовался тёмным поверх светлой страницы. Теперь баннер
   переключается ровно тогда, когда переключается страница.
   Цвета сняты с тёмной темы лендинга: поверхность #161A21, приподнятая #1C2129, линия #2A2F38,
   текст #ECEEF2, зелёный #2EC79A (осветлённый фирменный — в тёмной теме он именно такой). */
:root[data-theme="dark"] {
  --cmp-bg: #161a21;
  --cmp-bg-elev: #1c2129;
  --cmp-fg: #eceef2;
  --cmp-fg-muted: #9aa3b2;
  --cmp-border: #2a2f38;
  --cmp-shadow: 0 8px 28px -10px rgba(0, 0, 0, .6), 0 1px 3px rgba(0, 0, 0, .4);

  --cmp-accent: #2ec79a;
  --cmp-accent-fg: #0b1f19;
  --cmp-accent-hover: #2ec79a;
  --cmp-accent-soft: transparent;
  --cmp-accent-text: #2ec79a;

  --cmp-ghost-bg: transparent;
  --cmp-ghost-border: #3a414d;
  --cmp-ghost-hover: #222831;

  --cmp-overlay: rgba(0, 0, 0, .6);

  --cmp-toggle-off: #3a414d;
  --cmp-toggle-on: #2ec79a;
  --cmp-toggle-knob: #eceef2;
  --cmp-toggle-locked: #5a6472;

  --cmp-focus: #2ec79a;
}

/* ---------- Базовая обёртка ---------- */
.cmp-root,
.cmp-root * {
  box-sizing: border-box;
}

.cmp-root {
  position: fixed;
  inset: 0;
  z-index: var(--cmp-z);
  pointer-events: none;
  /* Наследуем шрифт страницы: в кабинете это Manrope, на лендинге — системный. Свой третий
     шрифт баннер не навязывает — он гость на странице, а не отдельный продукт. */
  font-family: inherit;
  font-size: 15px;
  line-height: 1.5;
  color: var(--cmp-fg);
  -webkit-font-smoothing: antialiased;
}

.cmp-root[hidden] {
  display: none !important;
}

.cmp-hidden {
  display: none !important;
}

/* =============================================================================
   1. Баннер (первый вход)
   ============================================================================= */
/* Служебная плашка, а не герой экрана: она не должна спорить с контентом. Отсюда узкая карточка,
   тёплая тень в тон чернил (не чёрная) и заголовок размером с обычный текст. */
.cmp-banner {
  pointer-events: auto;
  position: fixed;
  left: 16px;
  right: 16px;
  bottom: 16px;
  margin: 0 auto;
  max-width: 520px;
  background: var(--cmp-bg);
  border: 1px solid var(--cmp-border);
  border-radius: var(--cmp-radius);
  box-shadow: var(--cmp-shadow);
  padding: 16px 18px;
  animation: cmp-slide-up .28s cubic-bezier(.2, .8, .2, 1);
}

/* Трекинг −.02em — эхо заголовков Штурмана (h1 набран весом 720 с трекингом −1.085px). */
.cmp-banner__title {
  margin: 0 0 4px;
  font-size: 13.5px;
  font-weight: 700;
  letter-spacing: -.02em;
}

.cmp-banner__text {
  margin: 0 0 14px;
  color: var(--cmp-fg-muted);
  font-size: 13px;
  line-height: 1.5;
}

/* Ссылки — чернилами, не зелёным. Зелёный на плашке звучит ровно один раз («Принять все»);
   если красить им ещё и ссылки, акцент перестаёт что-либо значить. Подчёркивания довольно,
   чтобы ссылку было видно: это ориентир, а не действие. */
.cmp-banner__text a {
  color: var(--cmp-fg);
  text-decoration: underline;
  text-decoration-color: var(--cmp-border);
  text-underline-offset: 2px;
}

/* Настроить прижата влево, выбор — вправо: это разные по смыслу действия, не один ряд равных. */
.cmp-banner__actions {
  display: flex;
  align-items: center;
  gap: 8px;
}

.cmp-banner__actions .cmp-btn--link {
  margin-right: auto;
}

/* nowrap ТОЛЬКО в баннере: подписи тут короткие и должны стоять в строку. В модалке подписи длинные
   («Отклонить необязательные») — там nowrap ломал футер, кнопки наезжали друг на друга. */
.cmp-banner__actions .cmp-btn {
  white-space: nowrap;
}

/* Мобильная раскладка — ниже, в блоке @media (max-width: 560px): он идёт позже по файлу и перебивает. */

/* =============================================================================
   2. Кнопки
   ============================================================================= */
/* Пилюля + вес 600 — ровно так набраны кнопки и чипы самого Штурмана («УСН 6%», «Поднять выручку»). */
.cmp-btn {
  appearance: none;
  border: 1px solid transparent;
  border-radius: var(--cmp-pill);
  padding: 9px 16px;
  font: inherit;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: background-color .15s ease, border-color .15s ease, color .15s ease, transform .05s ease;
}

.cmp-btn:active {
  transform: translateY(1px);
}

.cmp-btn--primary {
  background: var(--cmp-accent);
  color: var(--cmp-accent-fg);
  flex: 1 1 auto;
  min-width: 140px;
}

.cmp-btn--primary:hover {
  background: var(--cmp-accent-hover);
}

/* «Обязательные» и «Принять все» — ОДИН вес: одинаковый размер, шрифт и паддинги.
   Отличаются только заливкой рамки, чтобы «Принять все» читалось как основное действие,
   но отказ не был визуально задвинут. Если отказаться труднее, чем согласиться, согласие
   перестаёт быть свободным — раньше здесь было ярко-индиговое «Принять все» против блёклого отказа. */
.cmp-btn--ghost,
.cmp-btn--accept {
  flex: 1 1 0;
  min-width: 0;
}

.cmp-btn--ghost {
  background: var(--cmp-ghost-bg);
  border-color: var(--cmp-ghost-border);
  color: var(--cmp-fg);
}

.cmp-btn--ghost:hover {
  background: var(--cmp-ghost-hover);
}

.cmp-btn--accept {
  background: var(--cmp-accent-soft);
  border-color: var(--cmp-accent);
  color: var(--cmp-accent-text);
}

.cmp-btn--accept:hover {
  background: var(--cmp-accent);
  color: var(--cmp-accent-fg);
}

/* «Настроить» — не выбор, а переход на экран настройки: тихий, без подчёркивания и акцентного цвета. */
.cmp-btn--link {
  background: none;
  border: none;
  color: var(--cmp-fg-muted);
  padding: 10px 4px;
  font-weight: 500;
  flex: 0 0 auto;
}

.cmp-btn--link:hover {
  color: var(--cmp-fg);
}

.cmp-btn:focus-visible,
.cmp-toggle__input:focus-visible + .cmp-toggle__track {
  outline: 3px solid var(--cmp-focus);
  outline-offset: 2px;
}

/* =============================================================================
   3. Модал «Настроить»
   ============================================================================= */
.cmp-overlay {
  pointer-events: auto;
  position: fixed;
  inset: 0;
  background: var(--cmp-overlay);
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 16px;
  animation: cmp-fade .2s ease;
}

.cmp-modal {
  background: var(--cmp-bg);
  border: 1px solid var(--cmp-border);
  border-radius: var(--cmp-radius);
  box-shadow: var(--cmp-shadow);
  width: 100%;
  max-width: 600px;
  max-height: min(86vh, 760px);
  display: flex;
  flex-direction: column;
  overflow: hidden;
  animation: cmp-pop .24s cubic-bezier(.2, .8, .2, 1);
}

.cmp-modal__header {
  padding: 20px 22px 14px;
  border-bottom: 1px solid var(--cmp-border);
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 12px;
}

.cmp-modal__title {
  margin: 0;
  font-size: 18px;
  font-weight: 700;
  letter-spacing: -.01em;
}

.cmp-modal__close {
  appearance: none;
  border: none;
  background: none;
  color: var(--cmp-fg-muted);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  padding: 2px 6px;
  border-radius: 8px;
}

.cmp-modal__close:hover {
  background: var(--cmp-ghost-hover);
  color: var(--cmp-fg);
}

.cmp-modal__body {
  padding: 8px 22px 16px;
  overflow-y: auto;
  flex: 1 1 auto;
}

.cmp-modal__intro {
  color: var(--cmp-fg-muted);
  font-size: 13.5px;
  margin: 10px 0 16px;
}

.cmp-modal__footer {
  padding: 16px 22px;
  border-top: 1px solid var(--cmp-border);
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  background: var(--cmp-bg-elev);
}

/* =============================================================================
   4. Категории + тумблеры
   ============================================================================= */
.cmp-cat {
  border: 1px solid var(--cmp-border);
  border-radius: var(--cmp-radius-sm);
  padding: 14px 16px;
  margin-bottom: 12px;
  background: var(--cmp-bg-elev);
}

.cmp-cat__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.cmp-cat__name {
  margin: 0;
  font-size: 15px;
  font-weight: 650;
  display: flex;
  align-items: center;
  gap: 8px;
}

.cmp-cat__badge {
  font-size: 11px;
  font-weight: 600;
  color: var(--cmp-fg-muted);
  background: var(--cmp-border);
  border-radius: 999px;
  padding: 2px 9px;
  white-space: nowrap;
}

.cmp-cat__desc {
  margin: 8px 0 0;
  font-size: 13px;
  color: var(--cmp-fg-muted);
}

/* Тумблер */
.cmp-toggle {
  position: relative;
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
}

.cmp-toggle__input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  cursor: pointer;
}

.cmp-toggle__track {
  width: 46px;
  height: 26px;
  border-radius: 999px;
  background: var(--cmp-toggle-off);
  position: relative;
  transition: background-color .18s ease;
  display: inline-block;
}

.cmp-toggle__knob {
  position: absolute;
  top: 3px;
  left: 3px;
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--cmp-toggle-knob);
  box-shadow: 0 1px 3px rgba(0, 0, 0, .3);
  transition: transform .18s cubic-bezier(.2, .8, .2, 1);
}

.cmp-toggle__input:checked + .cmp-toggle__track {
  background: var(--cmp-toggle-on);
}

.cmp-toggle__input:checked + .cmp-toggle__track .cmp-toggle__knob {
  transform: translateX(20px);
}

.cmp-toggle__input:disabled {
  cursor: not-allowed;
}

.cmp-toggle__input:disabled + .cmp-toggle__track {
  background: var(--cmp-toggle-locked);
  opacity: .85;
}

/* =============================================================================
   5. Плавающая кнопка «⚙ Настройки cookie»
   ============================================================================= */
.cmp-fab {
  pointer-events: auto;
  position: fixed;
  left: 16px;
  bottom: 16px;
  z-index: calc(var(--cmp-z) - 1);
  display: inline-flex;
  align-items: center;
  gap: 7px;
  background: var(--cmp-bg);
  color: var(--cmp-fg);
  border: 1px solid var(--cmp-border);
  border-radius: 999px;
  box-shadow: 0 4px 16px rgba(16, 22, 29, .16);
  padding: 9px 14px;
  font-family: inherit;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  transition: background-color .15s ease, transform .1s ease;
}

.cmp-fab:hover {
  background: var(--cmp-ghost-hover);
}

.cmp-fab:active {
  transform: translateY(1px);
}

.cmp-fab:focus-visible {
  outline: 3px solid var(--cmp-focus);
  outline-offset: 2px;
}

.cmp-fab__icon {
  font-size: 15px;
  line-height: 1;
}

/* =============================================================================
   6. Адаптив
   ============================================================================= */
@media (max-width: 560px) {
  .cmp-banner {
    left: 8px;
    right: 8px;
    bottom: 8px;
    padding: 18px 16px;
  }

  /* Столбиком НЕ ставим: «Обязательные» и «Принять все» — парный выбор, они должны читаться рядом и
     одинаково. Разложив их в столбик, нижняя кнопка автоматически выглядит «главной» — тот же перекос,
     от которого уходим. Делим строку пополам (flex: 1 1 0 у обеих), «Настроить» уводим на строку ниже. */
  .cmp-banner__actions {
    flex-wrap: wrap;
  }

  .cmp-banner__actions .cmp-btn--link {
    order: 1;
    width: 100%;
    margin-right: 0;
    padding: 6px 4px 0;
  }

  .cmp-modal__footer {
    flex-direction: column;
  }

  .cmp-modal__footer .cmp-btn {
    width: 100%;
  }

  .cmp-fab__label {
    display: none;
  }

  .cmp-fab {
    padding: 11px;
  }
}

/* =============================================================================
   7. Reduced motion
   ============================================================================= */
@media (prefers-reduced-motion: reduce) {
  .cmp-banner,
  .cmp-overlay,
  .cmp-modal,
  .cmp-toggle__track,
  .cmp-toggle__knob,
  .cmp-btn,
  .cmp-fab {
    animation: none !important;
    transition: none !important;
  }
}

@keyframes cmp-slide-up {
  from { opacity: 0; transform: translateY(16px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes cmp-fade {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes cmp-pop {
  from { opacity: 0; transform: scale(.97) translateY(8px); }
  to   { opacity: 1; transform: scale(1) translateY(0); }
}

/* Анти-протечка (аудит 2026-07-24): докрутив список категорий до конца, жест уходил на страницу
   под модалкой. Баннер (.cmp-banner) намеренно НЕ трогаем — под ним сайт обязан оставаться
   читаемым и прокручиваемым, пока человек не сделал выбор. */
.cmp-modal__body { overscroll-behavior: contain; }
.cmp-overlay { overscroll-behavior: none; }
