/* ══════════════════════════════════════════════════════════════════════
   type.css · СЛОЙ БУКВЫ (ЭТАП 3 задачи «Докрутка каталога»)
   DESIGN_SYSTEM §4. Подключается ПОСЛЕ lumen.css и после _v6/figure.css.

   Зачем отдельный файл. Вендоренное ядро (tokens.css, tablo-charts.css,
   product.css) не правится — правка уедет при следующем обновлении донора.
   Всё, что задаёт гарнитуру, вес и кегль поверх вендора, живёт здесь.

   Почему список селекторов такой длинный. Ниже по каскаду лежат ~110 правил
   ядра и вендора, которые выставляют веса и кегли мимо лестницы. Править их
   на месте нельзя: часть — чужой код, часть — зона других слоёв. Поэтому слой
   повторяет ровно те селекторы и присваивает им ступень. Специфичность та же,
   файл подключён позже — ступень выигрывает без единого !important.
   Появится новое значение мимо лестницы — оно всплывёт в линте (Ш1/В1/Т1),
   а не будет тихо жить на странице.

   Правки 07.09.2026 (карточки fable-review-two-sans · weight-ladder ·
   gpt-review-type · zai-review-bignum · fable-review-svg-scale ·
   fable-review-value-labels).
   ══════════════════════════════════════════════════════════════════════ */

/* ─── §4.0 · СЛОВАРЬ БУКВЫ ─────────────────────────────────────────────
   Одно место, где объявлены гарнитура, четыре веса, шкала кеглей фигуры и
   три ступени крупного числа. Всё остальное в этом файле только раздаёт их. */
:root{
  /* Гарнитура одна. До 07.09.2026 страница держала четыре: Onest у текста
     (--font-spec), Geist у фигур (--font вендора), Arial у нативных контролов
     и системный monospace у голого <code>. Цифра на оси и цифра в тексте
     карточки были набраны разными шрифтами — это и читалось как «библиотека
     из четырёх поколений». Теперь --font и --font-spec — один стек. */
  --font:'Onest','Geist',Inter,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;

  /* Лестница весов. Четыре ступени и ни одной между.
     Перевод старых значений: 450 → 500, 550 → 600, 560 → 600, 650 → 600.
     650 уходит вниз, а не вверх: «жирное» заголовка не должно спорить
     с настоящим 700, иначе на экране снова два разных жирных. */
  --w-body:400;       /* основной текст, подписи, служебное */
  --w-medium:500;     /* смысловое выделение внутри строки, активный пункт */
  --w-semibold:600;   /* имя, заголовок, число, b — единственное «жирное» */
  --w-bold:700;       /* только там, где 600 не хватает: титр, крупный акцент */

  /* KPI-вес ядра был 560 — единственный источник этой ступени на всю систему. */
  --lm-kpi-w:var(--w-semibold);

  /* Шкала кеглей SVG-текста. Три значения в коридоре 10–30 px и ничего между.
     Опорное — --sp-fig-lbl из figure.css, чтобы у подписи фигуры остался
     один источник правды. */
  --sp-t-lbl:var(--sp-fig-lbl,11px);  /* подпись внутри фигуры: ось, категория, значение */
  --sp-t-key:13px;                    /* акцентная подпись: срез внутри полотна, режим показа */
  --sp-t-num:19px;                    /* число в центре кольца и гейджа */

  /* Крупные числа — три ступени. Пиксели в вызове запрещены (zai-review-bignum). */
  --sp-num-1:28px;    /* плотная полоса: ряд KPI, плитка в списке */
  --sp-num-2:34px;    /* плитка, компакт: одно число на карточку */
  --sp-num-3:44px;    /* главный факт, показ */
  --lm-kpi:var(--sp-num-1);
  --lm-display:var(--sp-num-3);

  /* Основной кегль текста был 13.5 px — половинная ступень, из-за которой
     на странице жили шесть кеглей в окне 2,5 px. Ставим целое. */
  --lm-body:13px;
}

/* ─── §4.1 · ОДНА ГАРНИТУРА ────────────────────────────────────────────
   Три источника чужого семейства: вендорные классы чартов, нативные контролы
   и голый <code>. Закрываем все три. */

/* SVG-текст наследует семейство страницы — правило Ш1 линта. */
svg :is(text,tspan){font-family:inherit}

/* Вендорные классы tablo-charts.css задают семейство явно и перебивают
   наследование. Повторяем их здесь пустым семейством страницы. */
.chart-axislbl,.chart-catlbl,.chart-center-val,.chart-center-lbl,
.chart-funnel-lbl,.chart-funnel-conv,.chart-hm-lbl,
.lm-chart .chart-axislbl{font-family:inherit}

/* Нативные контролы шрифт не наследуют: браузер рисует их своим (Arial).
   Мерилось на карточках 8.14, 11.9, 12.16 — это были не «SVG без семейства»,
   а чекбоксы. */
.lm :is(input,select,textarea,button,optgroup,option){font-family:inherit}

/* Моноширинный остаётся ровно для кода, ключей и адресов. Голый <code> без
   класса .lm-mono падал на системный monospace (карточка 13.15). */
.lm :is(code,kbd,samp,pre){font-family:var(--font-mono)}

/* ─── §4.2 · ЛЕСТНИЦА ВЕСОВ ────────────────────────────────────────────
   Сначала общее правило для b/strong (оно же снимает 700 из таблицы
   браузера), затем поимённо те правила ядра и вендора, что выпадали
   из четырёх ступеней. */

.lm :is(b,strong){font-weight:var(--w-semibold)}

/* 450 → 500 */
.lm-kpi .lm-kpi-v .na,
.lm-d6-lead .big .na,
.lm-a6-appr .t>b,
.sp-nav a,
.sp-nav a[aria-current]{font-weight:var(--w-medium)}

/* 550 → 600 · ядро */
.lm-usage b,.lm-me b,.lm-top .lm-crumbs b,.lm-legend .it .p,.lm-tip b,
.lm-tip .r .v,.lm-ent .t b,.lm-amt,.lm-item .t b,details.lm-method .body b,
.lm-toast b,.lm-banner b,.lm-timeline .t b,.lm-picto .lbl b,.lm-evid-h .who,
.lm-chk-zones .z b,.lm-chk-block summary .nm,.lm-f2 .t b,.lm-gap .hd b,
.lm-price .meta b,.lm-price details summary,.lm-span .hd b,.lm-hitl-row .lot b,
.lm-hitl-row .col.an .d,.lm-rule summary b,.lm-agentp .draft b,.lm-board .pc b,
.lm-kp .st b,.lm-review .err .hd b,.lm-focus .a b,.lm-health .nm b,.lm-flow .n b,
.lm-rag .src b,.lm-cmp .pair .lbl,.lm-feed .it .t b,.lm-deck-grid .th b,
.lm-code .hd b,.lm-drop b,.lm-kanban .col h4,.lm-cubes .lbl b,.lm-cv .lm-item .t b,
.lm-aging .nm b,.lm-antrend .a b,.lm-mtable td b,.lm-heat6 .mh b,
.lm-heat6 .cell.tot,.lm-ins .lm-delta,.lm-ins-cta{font-weight:var(--w-semibold)}

/* 550 → 600 · старые экраны (product.css, каркас.css) */
.head h1,.card h3,.rule b,.freshbar b,.denied h3{font-weight:var(--w-semibold)}

/* 550 → 600 · слои контуров */
.lm .lm-table.lm-pf tbody td:nth-child(1),.lm .lm-mk b,
.lm-a6-hist .ev b,.lm-a6-tile .lm-kpi-n b,.lm-a6-meet .t>b,.lm-a6-q .dec,
.lm-a6-appr .it.prop .t>b,
.sp-diff-lg .of b,.sp-diff-note b,
.lm-e6-ladder .bar .mk,.lm-e6-cuts .ch b,.lm-e6-shares .hd b,
.lm-e6-wlabels span.hot,.lm-e6-shifts .t b,.lm-e6-breaches .t b,
.lm-e6-breaches .th b,
.lm-m6-ft b,.lm-m6-run .node b,.lm-m6-step .s[data-on="1"]>button,
.lm-m6-hand .r b,.lm-m6-sweep .top .leg .r b,.lm-m6-ctl .cr output,
.lm-m6-rows .r .nm b,.lm-m6-rows .r .v,.lm-m6-ft2 b,.lm-m6-fan-who,
.lm-m6-fan-c-h,.lm-m6-rank-nm b,.lm-m6-seg>button[aria-selected="true"],
.lm-m6-feed-i b,.lm-m6-mv-i>b,
.sp-empty q{font-weight:var(--w-semibold)}

/* 560 → 600 */
.lm-compare .side b,.lm-show .hero .num,
.lm-m6-sweep .big,.lm-m6-nums .n b,.lm-m6-rows .det .big,
.lm-m6-swap .head b,.lm-m6-swap .head .hl{font-weight:var(--w-semibold)}

/* 650 → 600 · заголовок страницы держит вес трекингом, а не лишней ступенью */
.lm-brand .mark,.lm-brand .name,.lm-inbox .lm-item.unread .t b,.lm-tv header b,
.lm-hub .c,
.lm-a6-count .n b,.lm-a6-steps .hd h3,.lm-a6-meet .dt b,.lm-a6-stat .m b,
.lm-a6-fr .hd h3,.lm-a6-track .stg .dot,.lm-a6-stage .lm-card-h .dot,
.lm-a6-appr .bh h3,
.lm-m6-rings-v b{font-weight:var(--w-semibold)}


/* ─── §4.2а · МАРКА НЕ БЫВАЕТ ЖИРНОЙ ───────────────────────────────────
   Замечание Дениса 07.09.2026: «всё ещё жирные и не красивые». Речь про
   пилюлю, тег, бейдж, дельту и подпись под фигурой — они стояли на 600,
   то есть тем же весом, что имя и заголовок.

   Почему это дефект, а не вкус. Вес в системе значит ранг: 600 — «это
   имя объекта, на него смотрят». Марка объектом не является: она
   ПОДПИСЫВАЕТ соседнюю цифру. Когда подпись весит столько же, сколько
   имя, ранг перестаёт различать, и глаз читает ряд из десяти одинаково
   жирных капсул вместо «цифра, а при ней ярлык». Плюс марка почти всегда
   стоит на тинте и мелким кеглем, а жирный на цветном фоне даёт
   заплывший контур знака.

   Ступень марки — 500. Различает её не вес, а цвет текста и иконка.
   Исключение одно и по делу: `.lm-ins .lm-delta` во вставке в видео —
   там дельта набрана 36 px и работает титром, а не ярлыком (см. §4.2). */
:root .lm-pill,:root .lm-tag,:root .lm-badge,:root .lm-badge-period,
:root .lm-chip,:root .lm-delta,:root .lm-cv .lm-delta,
:root .lm-legend .it,:root .lm-fresh,:root .sp-mark,
:root .lm-cap,:root figcaption{font-weight:var(--w-medium)}
:root .lm-ins .lm-delta{font-weight:var(--w-semibold)}


/* Подпись ступени воронки: единственное место, где вес приезжал из слоя карточки. */
.lm .lm-chart .chart-funnel-lbl{font-weight:var(--w-semibold)}

/* Метка порога и номер сноски на фигуре — не код и не адрес: гарнитура страницы.
   Правила ядра (.lm-f51 .mkl · .youl · .annn) ставили сюда моноширинный, и на
   одной карточке уживались две гарнитуры. Табличные цифры остаются. */
.lm-f51 .mkl,.lm-f51 .youl,.lm-f51 .annn{font-family:inherit}

/* ─── §4.3 · ШКАЛА КЕГЛЕЙ SVG ──────────────────────────────────────────
   Три значения: подпись 11 · акцентная подпись 13 · число в центре 19.
   Дробные кегли вендора (10.5 · 9.5 · 10) и подписи меньше 10 px уходят:
   на 390 px они не читались, а на широкой карточке разъезжались вдвое. */
.chart-axislbl,.lm-chart .chart-axislbl,
.chart-catlbl,.chart-hm-lbl,.chart-center-lbl,
.chart-funnel-lbl,.chart-funnel-conv{font-size:var(--sp-t-lbl)}
.chart-center-val{font-size:var(--sp-t-num)}

/* Режим показа: подпись фигуры делает шаг вверх, но остаётся на шкале. */
.lm-show .fig .chart-axislbl,.lm-show .fig .chart-catlbl{font-size:var(--sp-t-key)}

/* Компенсация масштаба viewBox (--lm-cs) снимается: с 07.09.2026 кегль
   SVG-текста держит проход LM.fitSvgText (см. lumen.js §42) — он ставит
   тексту встречный масштаб вокруг его же якоря, и объявленный кегль
   становится экранным. Делить кегль на масштаб полотна больше не нужно;
   если делить и дальше, компенсация сложится дважды. Признак — data-pxtext
   на полотне: пока проход не отработал, работает старое правило ядра. */
.lm-chart svg.lm-cs[data-pxtext] .chart-axislbl,
.lm-chart svg.lm-cs[data-pxtext] .chart-catlbl,
.lm-chart svg.lm-cs[data-pxtext] .chart-funnel-lbl,
.lm-chart svg.lm-cs[data-pxtext] .chart-funnel-conv,
.lm-chart svg.lm-cs[data-pxtext] .chart-hm-lbl{font-size:var(--sp-t-lbl)}

/* ─── §4.4 · ПОДПИСЬ ЗНАЧЕНИЯ (fable-review-value-labels) ──────────────
   Число на марке — один кегль, один вес, один тон, чем бы марку ни рисовали.
   Место числа задаёт тип марки, а не движок: столбик — над марком,
   линия — последняя точка и порог, полоса — внутри справа, клетка — по центру.
   Единица измерения называется один раз: в заголовке оси или на первой
   засечке. Класс .chart-vallbl — единственный носитель этого правила. */
.chart-vallbl{
  font-family:inherit;
  font-size:var(--sp-t-lbl);
  font-weight:var(--w-medium);
  font-variant-numeric:tabular-nums;
  fill:var(--ink-2);
  paint-order:stroke;
  pointer-events:none;
}
.chart-vallbl.on-bar{dominant-baseline:auto}          /* столбик: над маркой */
.chart-vallbl.in-bar{dominant-baseline:middle}        /* полоса: внутри справа */
.chart-vallbl.in-cell{dominant-baseline:middle;text-anchor:middle} /* клетка: по центру */
.chart-vallbl.on-fill{fill:var(--lm-ink-on-fill)}     /* число лежит на заливке марки */
/* Единица у оси — не у каждой засечки. Тише подписи значения на один тон. */
.chart-unitlbl{font-size:var(--sp-t-lbl);font-weight:var(--w-body);fill:var(--ink-4);letter-spacing:.02em}

/* ─── §4.5 · КРУПНЫЕ ЧИСЛА — ТРИ СТУПЕНИ ───────────────────────────────
   Было семь близких размеров (22 · 23 · 24 · 25 · 26 · 30 · 32) — числа
   одной смысловой роли имели разный оптический вес. Стало три ступени,
   и размер приходит только из токена.
   Крупная цифра сцены и титр презентации (.lm-ins-*, .lm-show .hero) свой
   масштаб сохраняют — они живут в кадре 1920, а не в витрине. */
/* Любое крупное число витрины начинает с первой ступени; ниже — только те роли,
   что сознательно поднимаются на вторую. */
.lm .lm-kpi-v{font-size:var(--sp-num-1)}

/* Единица и база рядом с крупным числом — не вторая ступень шкалы, а подпись.
   Ядро задавало ей .82em, и из шкалы вываливались 22,96 и 27,88 px. */
.lm .lm-kpi-v small{font-size:var(--lm-h2)}

.lm-kpi .lm-kpi-v,.lm-bt .lm-kpi .lm-kpi-v,.lm-cv .lm-kpi .lm-kpi-v,
.lm-cv .lm-kpis .lm-kpi .lm-kpi-v,.lm-phone .scr .lm-kpi-v,
.lm-a6-tile .lm-kpi-v,
.chart-trend-num,
.lm-agent .nums b,.lm-talk .nums b,.lm-digest .nums b,.lm-usage .top b,
.lm-cmp .imp b,.lm-bench .row b,.lm-two .sc b,.lm-pipe .ans .lead b,
.lm-a6-count .n b,.lm-d6-split .pt>b,
.lm-m6-sweep .big,.lm-m6-rings-v b{font-size:var(--sp-num-1)}

.lm-tv .lm-kpi .lm-kpi-v,.lm-float .lm-kpi-v,.lm-cv .lm-kpi-v,
.lm-compare .side b{font-size:var(--sp-num-2)}

/* ─── §4.6 · ЦИФРЫ ─────────────────────────────────────────────────────
   Табличные цифры везде, где число сравнивают глазом со следующим числом:
   иначе колонка «прыгает» на каждой единице. */
.lm :is(td,th,.lm-num,.lm-kpi-v,.lm-amt,.lm-delta,.lm-vs),
svg :is(text,tspan){font-variant-numeric:tabular-nums}
