/* ── L2KM Tokens — единственный источник палитры ──────────────────────────────
   Подключается ПЕРВЫМ на каждой странице: раньше её собственного <style> и
   раньше shell.css. Порядок принципиален. Собственные стили страницы стоят
   выше shell.css в документе, то есть при равной специфичности shell выигрывает
   — но переменные так не работают: var() разрешается в момент применения, и
   объявление обязано просто существовать к этому моменту. Поставь этот файл
   ниже — и часть var() разрешится в пустоту.

   До 2026-08-30 палитра была скопирована в тринадцать мест: :root в shell.css
   и по одному в каждой странице. Копии разъехались в исходниках (--panel .03
   против .035, --text #e8e8f0 против #e2e8f0), но на экране этого не было
   видно: свой <style> страницы стоит ВЫШЕ shell.css, поэтому при равной
   специфичности выигрывал shell, и локальные копии были мёртвыми — правка
   цвета в самой странице просто ничего не делала. Кроме тех имён, которых в
   shell.css не было: --line/--accent/--accent2/--panel2 и роли в /ts,
   --up/--down/--gold в /rating, --green/--red/--yellow/--cell-* в /l2dc,
   --elev-2 в /admin (эта страница shell.css не подключает вовсе),
   --accent-grad в /emblem — вот они работали и разъехались по-настоящему.

   Правило: цветовых переменных не объявляет больше НИКТО. Страница, которой
   нужен свой оттенок, либо получает токен здесь, либо пишет литерал.
   Не-цветовые переменные страниц (--header-h в index, --sidebar в admin,
   --mono в integration) к этому правилу не относятся и живут у себя.       */

:root {
  /* Сайт тёмный целиком, и браузер обязан это знать: выпадающий список <select>
     рисует ОС, а не страница, и без color-scheme он приходил белым — с белым
     текстом, унаследованным от нашего select (14.09.2026: «Мероприятия» при
     загрузке КМа, «Посадить в канал» на /ts). Заодно тёмными становятся
     скроллбары и календарь <input type=date>. */
  color-scheme: dark;
  /* ── Поверхности ────────────────────────────────────────────────────────
     --panel и --panel-2 — полупрозрачные: панель светлеет ровно настолько,
     насколько под ней фон, и на градиентных пятнах .bg-fx это видно. */
  --bg:          #06061a;
  --panel:       rgba(255,255,255,.035);
  --panel-2:     rgba(255,255,255,.05);
  --elev:        #0c0c26;
  --elev-2:      #101030;

  /* ── Границы ── */
  --border:      rgba(255,255,255,.1);
  --border-soft: rgba(255,255,255,.07);

  /* ── Текст ── */
  /* Приглушённый — ТРИ ступени, а не две. Считано по применению: все три
     живут почти только в `color`, и каждая занимает свой этаж —
     #94a3b8 текст 46 (подписи), #64748b текст 42 (метки),
     --faint-deep текст 31 (сноски, плейсхолдеры, «нет данных», «прошло»).
     Контраст на #0c0c26: 7.5 → 4.0 → 3.3.

     Нижняя ступень была #475569 — 2.5:1, ниже порога 3:1 даже для крупного
     текста. В тёмной комнате читается, на ноутбуке при дневном свете нет, а
     ею набраны «нет данных» и плейсхолдеры — то есть ровно те строки, ради
     которых человек и вглядывается. 31.08.2026 поднята до #586780 (3.3:1 на
     --elev, 3.5:1 на --bg). Выше не уводили намеренно: на 4.5:1 она сливается
     с --faint и три этажа схлопываются в два. */
  --text:        #e2e8f0;
  --muted:       #94a3b8;
  --faint:       #64748b;
  --faint-deep:  #586780;

  /* ── Акценты ──
     --violet — акцент в тексте и на границах, --violet-deep — в заливках и в
     градиенте. Пара не взаимозаменяема: deep на тёмном фоне почти не читается,
     светлый под белым текстом — наоборот. */
  --violet:      #a78bfa;
  --violet-deep: #7c3aed;
  --cyan:        #06b6d4;
  --accent-grad: linear-gradient(135deg, #7c3aed, #06b6d4);

  /* ── Ролевые цвета: две ступени, как у фиолетового ──
     Это не разнобой, а система, и она видна в том, КАК цвета применяются
     (посчитано по всем страницам до переезда на токены):

       #a78bfa  текст 28, границы 59        #7c3aed  заливки 147, ТЕКСТ 0
       #f87171  ТЕКСТ 13, заливки 4         #ef4444  заливки 30, границы 23, ТЕКСТ 0
       #fbbf24  ТЕКСТ 14, заливки 8         #f59e0b  заливки 17, границы 15, текст 4
       #34d399  текст 4                     #22c55e  заливки 9, границы 13

     Светлая ступень — чернила: текст на тёмном фоне. Глубокая — поверхность:
     сплошные заливки, границы и α-подложки в 10–20%. Контраст на #0c0c26
     подтверждает: чернильные 6.9–11.5, глубокие 3.4–8.9. Перепутать местами
     — значит либо посадить нечитаемый текст, либо получить блёклую заливку. */
  --green:       #34d399;
  --green-deep:  #22c55e;
  --red:         #f87171;
  --red-deep:    #ef4444;
  --amber:       #fbbf24;
  --amber-deep:  #f59e0b;
  /* Третий зелёный, и он обязателен. Сплошная заливка ПОД БЕЛЫМ текстом
     (/l2dc: включённый скилл, камень клинса). Белое на --green даёт 1.9:1,
     на --green-deep 2.3:1 — оба нечитаемы; на --green-solid 3.4:1. У красного
     такой ступени не нужно: белое на --red-deep уже 3.8:1. */
  --green-solid: #2ea04e;
  /* Бронза подиума: чернила у неё свои, подложка — rgba(180,83,9,…). */
  --bronze:      #cd7f32;

  /* ── Роли ──
     Роль ссылается на цвет, а не повторяет его: «наш на чужом TS» и «рост в
     рейтинге» сегодня оба зелёные, но это разные вещи и однажды разойдутся.
     Менять роль здесь — одно место, менять цвет — тоже одно, и они не связаны. */
  --ok:          var(--green);       --ok-deep:     var(--green-deep);
  --warn:        var(--amber);       --warn-deep:   var(--amber-deep);
  --danger:      var(--red);         --danger-deep: var(--red-deep);
  --ours:     var(--green);    /* /ts: наш в чужом канале */
  --foreign:  var(--red);      /* /ts: чужой */
  --neutral:  var(--faint);    /* /ts: ни то ни другое */
  --up:       var(--green);    /* /rating: рост за сутки */
  --down:     var(--red);      /* /rating: падение */
  --gold:     var(--amber);    /* /rating: первое место; /: клановая касса */
}

/* Пункты выпадающих списков — на своей палитре явно, а не на доверии к
   color-scheme: Firefox на Linux и старый Chrome красят <option> по-своему. */
select option, select optgroup { background: var(--elev); color: var(--text); }
