/* Blanc de Blancs — панель управленческого учёта
   tokens.css — дизайн-токены (CSS custom properties). Vanilla CSS, без сборки.
   Нейтральная деловая палитра · семантика денег · tabular-nums для всех чисел.
   Итерация 2 (#029/#064, см. CHANGES.md): бренд-палитра из ds-bundle сайта (blue/navy/
   бордо), самохостинг PT Sans/PT Serif, токены sidebar, палитра групп контрагентов до 12. */
:root{
  color-scheme:light;

  /* ——— Нейтральная деловая палитра (прохладный сланец) ——— */
  --c-white:#ffffff;
  --c-canvas:#f4f6f9;        /* фон страницы */
  --c-surface:#ffffff;       /* карточки / панели */
  --c-surface-2:#f7f9fc;     /* вложенные блоки, зебра, шапки таблиц */
  --c-slate-50:#eef1f6;
  --c-slate-100:#e5e9f0;
  --c-slate-200:#d7dce5;     /* границы */
  --c-slate-300:#bcc4d1;
  --c-slate-400:#97a0b1;
  --c-slate-500:#697182;     /* приглушённый текст (AA на белом) */
  --c-slate-600:#505a6d;
  --c-slate-700:#3a4356;
  --c-slate-800:#28303f;
  --c-slate-900:#1c2330;     /* основной текст */
  --c-slate-950:#111621;     /* заголовки */

  /* ——— Бренд / первичное действие (Blanc de Blancs — фирменный синий, из ds-bundle сайта) ———
     Итерация 2 (§0.1 ТЗ): визуальный язык кита корзины, те же роли токенов co-slots —
     ничего не переименовано, только цвет. brand-600 = #003F80 (кнопка), brand-700 = #154390
     (фирменный синий-акцент для ссылок — отдельный от кнопки тон, как в брендбуке), brand-800 =
     #021245 (тёмно-синий, hover-ссылки и фон sidebar/топбара). */
  --c-brand-50:#e9eff7;
  --c-brand-100:#d3e0f0;
  --c-brand-200:#a8c1e0;
  --c-brand-400:#336599;
  --c-brand-500:#0058b4;
  --c-brand-600:#003f80;     /* кнопка (белый текст — AA) */
  --c-brand-700:#154390;     /* фирменный синий-акцент — ссылки */
  --c-brand-800:#021245;     /* тёмно-синий — hover-ссылки, фон sidebar/топбара */

  /* ——— Бренд-акцент (бордо) — ТОЛЬКО брендовые элементы: шапка/лого/активный пункт
     навигации (§0.1 ТЗ, п.3). НЕ использовать в денежной семантике и в таблицах —
     фирменное бордо визуально близко к --expense, конфликт запрещён явно. ——— */
  --accent-bordo:#b1152d;
  --accent-bordo-hover:#8f1024;
  --sidebar-hover-bg:rgba(255,255,255,.08);
  --sidebar-active-bg:rgba(177,21,45,.18);

  /* ——— Семантика денег ——— */
  --c-pos-50:#e7f6ed;        /* приход / плюс */
  --c-pos-100:#c9ecd7;
  --c-pos-500:#1a8552;
  --c-pos-600:#157a4a;
  --c-pos-700:#0f6740;       /* текст на белом (AA) */

  --c-neg-50:#fdeceb;        /* расход / минус */
  --c-neg-100:#fad3d0;
  --c-neg-500:#d5342a;
  --c-neg-600:#bf2a20;
  --c-neg-700:#9b1c1c;       /* текст на белом (AA) */

  --c-warn-50:#fbf1dc;       /* расхождение / внимание */
  --c-warn-100:#f4e0b2;
  --c-warn-500:#b9820c;
  --c-warn-700:#845600;      /* текст на белом (AA) */

  --c-info-50:#e9f2fb;       /* информация */
  --c-info-100:#cfe0f2;
  --c-info-700:#1f5e9b;

  /* Семантические алиасы — используйте их в разметке */
  --income:var(--c-pos-700);
  --expense:var(--c-neg-700);
  --discrepancy:var(--c-warn-700);
  --alert:var(--c-neg-700);
  --link:var(--c-brand-700);
  --link-hover:var(--c-brand-800);

  /* ——— История панели (#332): цвет точки-маркера категории пункта; текст пунктов обычный.
     Контраст точки к --c-surface светлой темы ≥3:1 (non-text WCAG 1.4.11); 🧹 стартовый
     #9aa0a6 давал 2.64 — усилен до #858b92 (3.44). ——— */
  --hist-new:#6f9a6f;
  --hist-fix:#6f87a6;
  --hist-bug:#b08a5a;
  --hist-internal:#858b92;

  /* ——— Текст ——— */
  --text:var(--c-slate-900);
  --text-strong:var(--c-slate-950);
  --text-muted:var(--c-slate-500);
  --text-inverse:#ffffff;

  /* ——— Границы / фокус ——— */
  --border:var(--c-slate-200);
  --border-strong:var(--c-slate-300);
  --border-focus:var(--c-brand-500);
  --focus-ring:rgba(0,63,128,.35);

  /* ——— Топбар / sidebar (нейтральный слейт по умолчанию — правка от 20.07: бренд-navy
     показался тяжёлым; выбор цвета — переключатель в sidebar__user, хранится в localStorage
     как тема) #029 ——— */
  --sidebar-bg:var(--c-slate-900);
  --sidebar-bg-navy:#021245;
  --sidebar-bg-bordo:#2a1219;
  --topbar-bg:var(--sidebar-bg);
  --topbar-fg:#ffffff;
  --sidebar-w:16rem;
  --sidebar-w-collapsed:4.5rem;

  /* ——— Типографика: PT Sans/PT Serif самохостингом (ds-bundle/fonts/), системный стек — fallback ——— */
  --font-sans:'PT Sans',system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-serif:'PT Serif',Georgia,"Times New Roman",serif;
  --font-mono:ui-monospace,"SFMono-Regular","Cascadia Mono","Segoe UI Mono",Menlo,Consolas,monospace;
  --fw-regular:400; --fw-medium:500; --fw-semibold:600; --fw-bold:700;
  --text-xs:.75rem;     /* 12 */
  --text-sm:.8125rem;   /* 13 */
  --text-base:.9375rem; /* 15 — плотная база */
  --text-md:1.0625rem;  /* 17 */
  --text-lg:1.25rem;    /* 20 */
  --text-xl:1.5rem;     /* 24 */
  --text-2xl:1.875rem;  /* 30 */
  --text-3xl:2.375rem;  /* 38 — крупные KPI */
  --lh-tight:1.15; --lh-snug:1.3; --lh-normal:1.5;

  /* ——— Отступы (шаг 4px) ——— */
  --space-0:0; --space-1:.25rem; --space-2:.5rem; --space-3:.75rem; --space-4:1rem;
  --space-5:1.25rem; --space-6:1.5rem; --space-8:2rem; --space-10:2.5rem;
  --space-12:3rem; --space-16:4rem;

  /* ——— Радиусы ——— */
  --radius-xs:3px; --radius-sm:5px; --radius-md:8px; --radius-lg:12px; --radius-full:999px;

  /* ——— Тени (сдержанные) ——— */
  --shadow-sm:0 1px 2px rgba(16,21,31,.06);
  --shadow-md:0 2px 6px rgba(16,21,31,.08),0 1px 2px rgba(16,21,31,.05);
  --shadow-lg:0 10px 30px rgba(16,21,31,.14);
  --shadow-focus:0 0 0 3px var(--focus-ring);

  /* ——— Графики (полноценный класс компонентов) ——— */
  --chart-grid:var(--c-slate-100);        /* линии сетки */
  --chart-axis:var(--c-slate-300);        /* оси X / Y */
  --chart-label:var(--text-muted);        /* подписи осей */
  --chart-label-size:var(--text-xs);
  --chart-h-sm:6rem; --chart-h:11rem; --chart-h-lg:15rem;
  /* Цвета серий — из семантической палитры */
  --series-revenue:var(--c-brand-500);  --series-revenue-soft:var(--c-brand-50);   /* выручка / основная серия */
  --series-income:var(--c-pos-500);     --series-income-soft:var(--c-pos-50);      /* приход / прибыль */
  --series-expense:var(--c-neg-500);    --series-expense-soft:var(--c-neg-50);     /* расход */
  --series-warn:var(--c-warn-500);      --series-warn-soft:var(--c-warn-50);       /* внимание */
  --series-prev:var(--c-slate-400);     --series-prev-soft:var(--c-slate-100);     /* прошлый период / год */

  /* ——— Справочники и источники данных ——— */
  --acct-default:var(--c-slate-500);      /* цвет метки счёта по умолчанию; переопределяется --acct-color */
  --grp-alcohol:#6d4bd8;   /* алкоголь */
  --grp-food:#0f766e;      /* продукты */
  --grp-services:#2563a8;  /* услуги */
  --grp-rent:#b4602e;      /* аренда */
  --grp-utilities:#0e7490; /* коммуналка */
  --grp-payroll:#9b3b6a;   /* ФОТ (зарплата) */
  --grp-household:#8a7226; /* хозтовары */
  --grp-aggregators:#4f5f8f; /* агрегаторы доставки */
  --grp-taxes:#5c5580;     /* налоги */
  --grp-transport:#6b5f52; /* транспорт */
  --grp-repair:#5b7c8a;    /* ремонт */
  --grp-other:var(--c-slate-500); /* прочее */
  /* Итерация 8: справочник вырос до 15 групп — палитры на 12 не хватило.
     Четыре новых оттенка разведены по тону с принятыми 12 (см. CHANGES итерации 8).
     Бакалея переиспользует --grp-food, --grp-payroll остаётся за ФОТ в табеле. */
  --grp-meat:#8c3a3a;      /* мясо */
  --grp-fish:#6b8ea8;      /* рыба */
  --grp-produce:#4f8a3f;   /* овощи и фрукты */
  --grp-market:#b08a1f;    /* рынок */

  /* ── Способ выплаты (итерация 2, обновлённый вводный): карта/наличные — цвет суммы + бейдж-буква К/Н,
     независимо от цвета (буква — главный сигнал для ч/б-печати). Подтверждено согласовано
     с SPEC_030C §1 (итерация 3) — применять везде, где видны выплаты (табель/квиток/ведомость). ── */
  --pay-card:#5b5fc7;
  --pay-cash:#8a6a2e;

  /* ── График смен (#077, итерация 3): цвет слота прихода = фон ячейки (kind=work); отдельные
     токены от денежной семантики и от палитры групп контрагентов (ТЗ §5, §11). ── */
  --slot-open-bg:#eef0fd;    --slot-open-fg:#4a4dc4;   /* К открытию (зал), 09:30 */
  --slot-kitchen-bg:#e2f5f4; --slot-kitchen-fg:#0e7a76; /* Кухня, 10:00 */
  --slot-rest-bg:#f4ecf6;    --slot-rest-fg:#7c3f96;    /* Остальные, 12:00 */

  /* ── Типы записи графика (kind, §2/§5): отсутствия — свой цвет, независимо от слота.
     «absent-neutral» — взгляд коллеги на любое отсутствие без типа/причины (§3, ПДн). ──
     Пакет 2: --kind-vacation был на волосок от --slot-kitchen (e0f4f7 vs e2f5f4 — почти
     неразличимо рядом в одной строке). Отпуск переведён на насыщенный тон той же гаммы —
     бледный/насыщенный читается однозначно даже при том же оттенке, и буква «О» внутри
     получает контраст, которого не было на бледном фоне. */
  --kind-vacation-bg:#a8dee6; --kind-vacation-fg:#053e47;  /* отпуск — насыщенный, не спутать с бледной «кухней» */
  --kind-sick-bg:#faeaf0;     --kind-sick-fg:#a13d68;      /* больничный */
  --kind-dayoff-bg:#faf1de;   --kind-dayoff-fg:#8a6a1f;    /* важная дата — не может выйти */
  --kind-trial-bg:#eef1f6;    --kind-trial-fg:#505a6d;     /* смотровой день, неоплачиваемый */
  --kind-absent-neutral-bg:#e5e9f0; --kind-absent-neutral-fg:#697182; /* взгляд коллеги */
  --kind-absent-unexcused-bg:var(--c-neg-100); --kind-absent-unexcused-fg:var(--c-neg-700); /* прогул — из негативной палитры (#129) */
  --kind-probation:var(--c-info-700); /* маркер стажировки — пунктир каймы, не заливка */

  /* ── Комплект дня (§5) — ОТДЕЛЬНЫЙ канал от цвета слота (рамка/полоса, не заливка ячейки).
     Переиспользует язык pos/warn — то же «норма/внимание», что и всюду в панели. ── */
  --coverage-good:var(--c-pos-600);   /* перекомплект — смена «желательная» */
  --coverage-short:var(--c-warn-500); /* недокомплект */
  /* цветовой код источника данных (точка в нейтральном бейдже) */
  --src-1c:var(--c-warn-500);
  --src-sbis:var(--c-info-700);
  --src-bank:var(--c-brand-600);
  --src-manual:var(--c-slate-400);
  --src-excel:var(--c-pos-600);

  /* цветовой код потоков выручки (#модель выручки, итерация 7).
     Нейтрально-брендовая шкала: НЕ перехватывает денежную семантику pos/neg/warn. */
  --flow-cash-fisc:var(--c-brand-600);
  --flow-cash-nonfisc:var(--c-slate-500);
  --flow-card:var(--c-info-700);
  --flow-qr:#5c7f9b;
  --flow-agg:#7a6aa8;
  --flow-house:#8a7226;
  --transit-bd:var(--c-slate-400);

  /* ——— Раскладка ——— */
  --container:72rem;
  /* #108 часть 1: рабочая область табличных экранов. 72rem (1152) — правило для ТЕКСТА:
     длинная строка читается плохо. Для таблицы с данными оно работает против пользователя:
     на 1920 половина таблиц упиралась в 1068–1110 px при контейнере 1112, а 512 px справа
     простаивало. 100rem = 1600 px: на 1920 панель занимает 1856 из 1920 (сайдбар 256 +
     контейнер 1600), на 2560 не растягивается дальше — потолок задан в rem, а не в vw.
     Текстовые экраны (Обзор, Настройки, квиток, вход) остаются на --container и не меняются. */
  --container-wide:100rem;
  --topbar-h:3.5rem;
  --bottomnav-h:3.75rem;
  --z-sidebar:40; --z-offcanvas:70; --z-picker:30;
}

/* ——— Выбор цвета sidebar (нейтральный/навy/бордо), хранится как data-sidebar-color на <html> ——— */
[data-sidebar-color="navy"]{ --sidebar-bg:var(--sidebar-bg-navy); }
[data-sidebar-color="bordo"]{ --sidebar-bg:var(--sidebar-bg-bordo); }

/* ——— Тёмная тема (опционально): data-theme="dark" на <html> ——— */
[data-theme="dark"]{
  color-scheme:dark;
  --pay-card:#9099e8;
  --pay-cash:#d1ad6e;
  --c-canvas:#0f1320;
  --c-surface:#161d2c;
  --c-surface-2:#1e2739;
  --c-slate-50:#1b2333;
  --c-slate-100:#222c40;
  --c-slate-200:#2a3446;
  --c-slate-300:#3a4658;
  --c-slate-400:#6b7791;
  --c-slate-500:#9aa6bb;
  --border:#2a3446;
  --border-strong:#3a4658;
  --text:#e6eaf2;
  --text-strong:#f6f8fb;
  --text-muted:#9aa6bb;
  --text-inverse:#0f1320;
  --c-pos-50:#122a1d; --c-pos-100:#1c3f2c; --c-pos-700:#5fd39a; --c-pos-600:#4cc389; --c-pos-500:#3fbf82;
  --c-neg-50:#301616; --c-neg-100:#4a2020; --c-neg-700:#f39189; --c-neg-600:#ef7a70; --c-neg-500:#e8635a;
  --c-warn-50:#2c2411; --c-warn-100:#463819; --c-warn-700:#e8c06a; --c-warn-500:#d6a63f;
  --c-info-50:#122236; --c-info-100:#1d3450; --c-info-700:#7db4ea;
  --c-brand-50:#152238; --c-brand-100:#1c2f4d; --c-brand-200:#2a4468;
  --c-brand-400:#5b8fd6; --c-brand-500:#4f8fe0; --c-brand-600:#5b9be6; --c-brand-700:#8fb8ec; --c-brand-800:#cddef5;
  --focus-ring:rgba(91,155,230,.4);
  --slot-open-bg:#242a52; --slot-open-fg:#a9b0f5;
  --slot-kitchen-bg:#123a38; --slot-kitchen-fg:#5fd9d1;
  --slot-rest-bg:#3a2a42; --slot-rest-fg:#dba8ef;
  --hist-new:#7fae7f; --hist-fix:#89a3c2; --hist-bug:#c2a075; --hist-internal:#8a9096;
  --kind-vacation-bg:#0c5560; --kind-vacation-fg:#bdf0f7;
  --kind-sick-bg:#3a1f2c; --kind-sick-fg:#ec9ac0;
  --kind-dayoff-bg:#39301a; --kind-dayoff-fg:#e6c568;
  --kind-trial-bg:#242c3d; --kind-trial-fg:#9aa6bb;
  --kind-absent-neutral-bg:#222c3f; --kind-absent-neutral-fg:#8792a8;
  --kind-absent-unexcused-bg:var(--c-neg-100); --kind-absent-unexcused-fg:var(--c-neg-700); /* прогул (#129, тёмная тема) */
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow-md:0 2px 8px rgba(0,0,0,.45);
  --shadow-lg:0 12px 34px rgba(0,0,0,.55);
}
