/* Дизайн-токены «Пульса». Причины каждого выбора — в DESIGN.md.
   Цвета живут ТОЛЬКО здесь: страницы и компоненты ссылаются на переменные,
   ни одного шестнадцатеричного цвета за пределами этого файла. */

/* --- Шрифты: IBM Plex, локальные файлы (public/vendor/fonts), без CDN --- */

@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-sans-latin-400-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+2000-206F, U+20A0-20BF, U+2212;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-sans-cyrillic-400-normal.woff2') format('woff2');
  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-sans-latin-500-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+2000-206F, U+20A0-20BF, U+2212;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-sans-cyrillic-500-normal.woff2') format('woff2');
  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-sans-latin-600-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+2000-206F, U+20A0-20BF, U+2212;
}
@font-face {
  font-family: 'IBM Plex Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-sans-cyrillic-600-normal.woff2') format('woff2');
  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-mono-latin-400-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+2000-206F, U+20A0-20BF, U+2212;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-mono-cyrillic-400-normal.woff2') format('woff2');
  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-mono-latin-500-normal.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+2000-206F, U+20A0-20BF, U+2212;
}
@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/vendor/fonts/ibm-plex-mono-cyrillic-500-normal.woff2') format('woff2');
  unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}

/* --- Токены --- */

:root {
  /* Поверхности: холодный светлый кабинет; карточки поднимаются тенью-кольцом */
  --paper: #F5F6F8;      /* подложка страницы */
  --card: #FFFFFF;       /* карточки и панели */
  --well: #EFF1F4;       /* «углубление»: поля ввода, слоты-заглушки */

  /* Текст: четыре уровня.
     Первые три несут содержание, поэтому проходят контраст 4.5:1 на всех
     трёх поверхностях (--card / --paper / --well): --ink-mute стоит под
     каждой второй подписью в 11px, и «тихий серый» на нём не читался
     (аудит 2026-08-06: было #8A93A0 — 3.1:1, стало 4.6–5.2:1).
     --ink-ghost вне этого правила: им гаснут прочерки «—» и выключенное,
     то есть отсутствие данных, а не данные. */
  --ink: #191D24;        /* основной */
  --ink-soft: #4C5560;   /* вторичный */
  --ink-mute: #656E7A;   /* метаданные, подписи */
  --ink-ghost: #B6BDC7;  /* прочерки, отключённое */

  /* Чернила в виде триплета — для полупрозрачных линий, теней и затемнений */
  --ink-rgb: 25, 29, 36;

  /* Линии */
  --rule: rgba(var(--ink-rgb), 0.10);       /* границы, найдётся взглядом */
  --rule-soft: rgba(var(--ink-rgb), 0.06);  /* тонкие внутренние разделители */

  /* Единственный акцент — «пульс», приглушённая маджента Wildberries.
     Дозировка ~10% экрана: активный пункт, ссылки, пульс-линии. */
  --pulse: #A8137E;
  --pulse-deep: #8C1069;                 /* hover/нажатие */
  --pulse-wash: rgba(168, 19, 126, 0.07);/* подложка активного пункта меню */
  --on-pulse: #FFFFFF;                   /* текст на заливке --pulse */

  /* Семантика дельт: только у цифр «рост/падение», не для украшения.
     Тона глубже базовых: этими же цветами набрана прибыль внутри залитых
     клеток полосы дней — на пике заливки прежние #177245/#BF3247 давали
     3.5:1 и тонули (аудит 2026-08-06). Сейчас 4.5:1 даже там. */
  --gain: #15693F;
  --loss: #A82C3E;
  /* Подложки статусов (юнит-экономика: слив/прибыль) */
  --gain-wash: rgba(21, 105, 63, 0.10);
  --loss-wash: rgba(168, 44, 62, 0.10);
  /* Третий semantic-тон: «посмотри, но это не ошибка» — размер не из
     текущего ряда артикула, строка уже с датой. Красный тут врал бы:
     он означает «не сохранится». Тёмная охра, а не жёлтая: на белой
     карточке жёлтый даёт 1.8:1, эта — 5.9:1. */
  --warn: #8A5A00;
  --warn-wash: rgba(217, 145, 0, 0.13);

  /* Графики: категориальные слоты из проверенной палитры скилла dataviz
     (пары соседей прошли проверку на дальтонизм). Слот 1 — главная серия,
     слот 2 — вторая; прошлый период всегда --chart-ghost, не третий цвет. */
  --chart-1: #2A78D6;
  --chart-2: #EB6834;
  --chart-ghost: #C9CFD8;
  /* Тепловая карта: один тон, интенсивность — прозрачностью (светлее→темнее).
     Тот же синий, что слот 1, чтобы не плодить осей смысла.
     Для полярных метрик (прибыль/убыток) — триплеты gain/loss.
     Потолок насыщенности общий для всех заливок — --heat-max: выше него
     текст поверх клетки перестаёт держать 4.5:1. */
  --heat: 42, 120, 214;
  --heat-gain: 21, 105, 63;
  --heat-loss: 168, 44, 62;
  --heat-max: 0.30;

  /* Структура рубля (колонка «Куда уходит рубль» в ABC): слоты
     категориальной палитры скилла dataviz, порядок сегментов в полосе
     повторяет порядок слотов — так соседние пары проходят валидатор
     (worst adjacent CVD ΔE 16.6 при пороге 8, normal-vision 18.7 при 15).
     Прибыль и убыток берут семантические --gain/--loss: здесь цвет
     означает «хорошо/плохо», а не ещё одну категорию.
     «Прочее» намеренно нейтральное — это остаток (хранение, штрафы,
     налог), а не своя категория; валидатор ругается на его хроматичность
     ожидаемо, для остаточной корзины серый и нужен. */
  --str-comm: #2A78D6;
  --str-log:  #EB6834;
  --str-ads:  #4A3AA7;
  --str-cogs: #EDA100;
  --str-other: #9BA3AE;

  /* Заливки у полосы дней в РНП больше нет (2026-08-07): прямоугольник
     в каждой клетке перетягивал внимание на правую половину строки.
     Токены --demand/--demand-max удалены вместе с ней; тепловая карта
     свою заливку сохранила и живёт на --heat выше. */

  /* Глубина: одна стратегия — тень-кольцо на поднятых поверхностях */
  --lift: 0 0 0 1px rgba(var(--ink-rgb), 0.05),
          0 1px 2px -1px rgba(var(--ink-rgb), 0.05),
          0 2px 4px rgba(var(--ink-rgb), 0.04);

  /* Типографика: base 14, шаг ~1.25 */
  --font-ui: 'IBM Plex Sans', 'Segoe UI', system-ui, sans-serif;
  --font-mono: 'IBM Plex Mono', Consolas, monospace;
  --fs-caption: 11px;
  --fs-body: 14px;
  --fs-h4: 16px;
  --fs-h3: 18px;
  --fs-h2: 22px;
  --fs-value: 28px;      /* главная цифра KPI */

  /* Отступы: база 4px. Плотность рабочая: карточка 16–20px, не «брошюрные» 24+ */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 20px;
  --sp-6: 24px;
  --sp-8: 32px;

  /* Радиусы: контролы < карточки */
  --r-ctl: 6px;
  --r-card: 10px;

  /* Каркас: сайдбар служит контенту, поэтому узкий */
  --side-w: 232px;
}
