:root {
  --bg: #111113;
  --surface: #1c1c1e;
  --raised: #1c1c22;
  --overlay: rgba(255,255,255,0.04);
  --border: rgba(255,255,255,0.06);
  --border-s: rgba(255,255,255,0.10);
  /* ── Три ступени текста (с.48, посчитано по WCAG, не на глаз) ──────
     Тема ТОЛЬКО тёмная (решение Альберта с.48) — значит вылизываем одну.
     Норма читаемости 4.5:1. Было: --dim 25% давал 2.20:1 — вдвое ниже нормы,
     а им покрашены плейсхолдеры, даты, «пусто» → отсюда «еле видно».
     Ступени разведены, чтобы иерархия читалась и всё проходило норму:
       --text 14.3:1 · --muted ~7.6:1 · --dim 4.5:1 (край нормы). */
  --text: #e0e0e0;
  --muted: rgba(255,255,255,0.62);
  --dim: rgba(255,255,255,0.45);
  /* был #007aff — на поверхности 4.24:1, ниже нормы. Берём синий, которым
     Work уже живёт локально (--wk-accent) → заодно минус одно расхождение. */
  --accent: #4c8dff;
  --green: #34c759;
  --red: #ff3b30;
  --orange: #ff9f0a;
  --purple: #bf7af0;
  --teal: #30b0c7;
  /* TARS: янтарь-медь по трафарету на корпусе («Интерстеллар»). Отдельно от
     --orange (#ff9f0a) — тот сигнальный, для тревог/затыков; этот — имя. */
  --tars: #d08a3e;
  --tars-dim: rgba(208,138,62,.42);
  /* Тот же янтарь для СВЕТЛОЙ поверхности (терминал). #d08a3e на белом даёт
     2.7:1 — вдвое ниже нормы, знак превращается в блёклую кашу. Этот —
     4.8:1 на #fcfcfd. Внутри .term он подставляется как --tars, поэтому
     .tars-name/.tars-dots работают там без единого дублирующего правила. */
  --tars-ink: #a35d18;
  /* ── Пространство: сетка 4pt (с.49) ────────────────────────────────
     Замер до шкалы: 31 разное значение от 1 до 48px, из них 143
     объявления на НЕЧЁТНЫХ (1,3,5,7,9,11,13,15,17). Именно они дают
     ощущение «вёрстка гуляет»: 6, 10, 14 сидят между ступенями, поэтому
     ничто ни с чем не выравнивается. Девять ступеней вместо 31.
     Нечётные запрещены везде, кроме волосяных границ (0.5px/1px).
     --sp-0 оставлен честно: 2px реально нужен в сегментных контролах. */
  --sp-0: 2px;
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;   /* стандартный внутренний отступ карточки */
  --sp-5: 24px;   /* разрыв между блоками */
  --sp-6: 32px;   /* разрыв между секциями */
  --sp-7: 40px;   /* поля страницы */
  --sp-8: 48px;

  /* Радиусы. Правило вложенности: внутренний = внешний − отступ.
     Кнопка --r-m внутри карточки --r-l с отступом --sp-1 совпадает по
     дуге — от этого вложенные элементы выглядят влитыми, а не наклеенными. */
  --r-s: 6px;
  --r-m: 10px;
  --r-l: 14px;
  --r-xl: 20px;
  --r-full: 999px;
  --font: 'Inter', -apple-system, sans-serif;
  --mono: 'JetBrains Mono', monospace;
  /* Антиква — ТОЛЬКО заголовок «Digest» (замысел Альберта: NYT-стиль).
     Имя токена говорит о назначении, чтобы её снова не растащили по секциям. */
  --font-digest: Georgia, 'Times New Roman', 'Times', serif;

  /* ── Единая type-scale (весь проект) ──────────────────────────────
     Одна шкала размеров вместо разнобоя 10–25px по файлам. Вкладки
     переводим на неё постепенно; Learn — первая, Work — вторая.
     с.48: вся шкала поднята на ступень (было 11.5/13/14.5/16/20/25) —
     по живой критике «шрифт везде мелкий». Blockchain/myday/layout/growth
     пока на своих сырых px и НЕ подрастают — их перевод отдельным заходом. */
  --fs-1: 12.5px;  /* микро: mono-мета, бейджи, крумбы */
  --fs-2: 14px;    /* мелкий: подписи, чипы, метки секций */
  --fs-3: 16px;    /* базовый текст */
  --fs-4: 18px;    /* акцентный текст, кнопки */
  --fs-5: 22px;    /* заголовки тем/секций, h1 */
  --fs-6: 28px;    /* герой-строка фокуса */

  /* ── Движение (с.49) ───────────────────────────────────────────
     Длительность = роль, как и размеры. Сырые .15s/.25s по файлам —
     такой же разнобой, каким были px. */
  --dur-1: 120ms;  /* отклик: hover, чипы, кнопки */
  --dur-2: 220ms;  /* появление: карточки, панели, фокус */
  --dur-3: 400ms;  /* переход экрана, кольца-гейджи */
  --ease: cubic-bezier(.2,.7,.3,1);
  --ease-io: cubic-bezier(.5,0,.2,1);
}

/* Уважение к системной настройке. На весь проект — 15 keyframes и ~80
   transition жили без неё вообще. Гасим здесь один раз, а не в каждом файле. */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.01ms!important;animation-iteration-count:1!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
}
