/* ============================================================
   ASTROLABS — design tokens
   Единственный источник правды для палитры, типографики,
   спейсинга, теней, анимаций. Все остальные CSS-файлы
   ссылаются только на переменные отсюда — цвет/размер
   руками не хардкодить.
   ============================================================ */

:root{
  /* --- Палитра «Deep Field» --- */
  --void:     #05070D; /* фон страницы — не чистый чёрный, есть куда уходить темнее */
  --surface:  #0A0F1A; /* карточки, панели первого уровня */
  --elevated: #0F1626; /* поднятые панели, поповеры, шапка */
  --line:     #1C2434; /* волосяные границы (декоративные разделители) */
  /* Границы интерактивных элементов (поля, чекбоксы). WCAG 1.4.11 требует
     для них 3:1 к фону; --line даёт 1.3:1 и годится только для декора.
     #525F80 = 3.02:1 к --surface — минимум, при котором поле формы
     остаётся различимым и волосяная эстетика не ломается. */
  --line-control: #525F80;
  --text:     #E8ECF4; /* основной текст */
  --muted:    #8B97AD; /* вторичный текст */

  --accent:      #6EE7F9; /* ионный циан — свечение, хайлайты, hover */
  --accent-rgb:  110, 231, 249;
  --deep:        #2B6CFF; /* электрический синий — глубина градиентов */
  --deep-rgb:    43, 108, 255;
  --violet:      #7C5CFF; /* середина туманности */
  --violet-rgb:  124, 92, 255;
  --ember:       #FF8A3D; /* тёплый контрапункт, <5% площади — CTA/акценты */
  --ember-rgb:   255, 138, 61;

  /* Семантика поверх палитры */
  --success: #4ADE80;
  --danger:  #FB7185;
  --focus-ring: var(--accent);

  /* --- Шрифты (все с кириллицей) --- */
  --font-display: 'Unbounded', system-ui, sans-serif;
  --font-text:    'Onest', system-ui, sans-serif;
  --font-mono:    'JetBrains Mono', ui-monospace, 'SFMono-Regular', monospace;

  /* --- Типографическая шкала: fluid clamp(min, vw, max) --- */
  --fs-xs:   clamp(0.75rem, 0.72rem + 0.15vw, 0.8125rem);
  --fs-sm:   clamp(0.875rem, 0.84rem + 0.18vw, 0.9375rem);
  --fs-base: clamp(1rem, 0.96rem + 0.2vw, 1.0625rem);
  --fs-md:   clamp(1.125rem, 1.06rem + 0.32vw, 1.25rem);
  --fs-lg:   clamp(1.375rem, 1.26rem + 0.55vw, 1.625rem);
  --fs-xl:   clamp(1.75rem, 1.55rem + 1vw, 2.25rem);
  /* Нижний (мобильный) конец крупных ступеней опущен 2026-07-20:
     на 390px h2 набирались в 48–50px, длинные слова («Engineering»,
     «автоматизация») не влезали в строку и рвались посреди слова.
     Верхний конец не тронут — десктоп выглядит ровно как раньше
     (обе ступени упираются в свой максимум уже к ~1200px). */
  /* Верхний конец опущен 2026-07-20: h2 (--fs-3xl) добирался до 80px и
     оказывался КРУПНЕЕ h1 внутренних страниц (64px) — инверсия иерархии;
     плюс длинные русские слова («прилагательных», «Инфраструктура») в
     80px не помещались в колонку 640–820px и рвались посреди слова.
     Дисплейная гарнитура Unbounded широкая, кириллица длиннее латиницы —
     для неё эта шкала была великовата. */
  --fs-2xl:  clamp(1.875rem, 1.45rem + 2.35vw, 2.75rem);
  --fs-3xl:  clamp(2.375rem, 1.5rem + 3.6vw, 3.5rem);
  --fs-hero: clamp(3rem, 2rem + 9vw, 9rem); /* hero-заголовок */

  /* Межстрочие идёт лестницей вместе с кеглем: чем мельче заголовок,
     тем больше ему нужно воздуха. Раньше все h1–h4 набирались одним
     --lh-tight (0.95), и у h3/h4 (22–36px) выносные элементы Unbounded
     сцеплялись между строками — на кириллице особенно («Ц», «щ», «у»). */
  --lh-tight: 0.95;  /* герой, h1 */
  --lh-head:  1.08;  /* h2 */
  --lh-snug:  1.15;  /* h3 */
  --lh-sub:   1.25;  /* h4, мелкие подзаголовки */
  --lh-normal:1.5;
  --lh-loose: 1.6;

  /* Трекинг — та же лестница: отрицательный трекинг оптически нужен
     только крупному дисплею, на мелком кегле он съедает разборчивость. */
  --ls-tight: -0.03em;  /* крупный дисплей, h1–h2 */
  --ls-snug:  -0.015em; /* h3 */
  --ls-micro: -0.005em; /* h4 */
  --ls-normal: 0em;
  --ls-wide:  0.01em;  /* оптическая компенсация светлого текста на тёмном */
  --ls-wider: 0.08em;  /* лейблы капсом */

  /* --- Мера строки (длина строки).
     До этого по компонентам было рассыпано восемь разных значений
     (52/56/58/60/62/68/70/72ch) плюс блоки вообще без ограничения —
     в .card--wide строка доходила до ~150 знаков. Три токена вместо
     россыпи; целевой диапазон — 65–75 знаков для основного текста.
     Значения выставлены по замеру реального числа знаков в строке
     (Playwright, 12 страниц × 5 ширин), а не «на глаз»: у Onest ширина
     знака «0» заметно больше средней ширины строчной буквы, поэтому
     68ch давали не 68, а ~80 знаков по-русски и ~95 по-английски. --- */
  --measure-lead: 50ch; /* лиды, центрованный текст, CTA */
  --measure-text: 58ch; /* основная проза (fs-base) */
  --measure-card: 54ch; /* текст внутри карточек (fs-sm) */

  /* --- Спейсинг-шкала (кратно 4px, fluid для крупных отступов) --- */
  --sp-1:  0.25rem;
  --sp-2:  0.5rem;
  --sp-3:  0.75rem;
  --sp-4:  1rem;
  --sp-5:  1.5rem;
  --sp-6:  2rem;
  --sp-7:  clamp(2.5rem, 2rem + 2vw, 3.5rem);
  --sp-8:  clamp(3.5rem, 2.5rem + 4vw, 5.5rem);
  --sp-9:  clamp(5rem, 3rem + 8vw, 9rem);   /* межсекционные отступы */

  /* --- Радиусы --- */
  --r-sm:  8px;
  --r-md:  14px;
  --r-lg:  22px;
  --r-full: 999px;

  /* --- Тени / свечение --- */
  --shadow-sm: 0 2px 8px rgba(0,0,0,.35);
  --shadow-md: 0 8px 30px rgba(0,0,0,.45);
  --shadow-lg: 0 20px 60px rgba(0,0,0,.55);
  --glow-accent: 0 0 40px rgba(var(--accent-rgb), .25);
  --glow-ember:  0 0 40px rgba(var(--ember-rgb), .25);

  /* --- Анимации: единый почерк движения --- */
  --ease-out:   cubic-bezier(.22, 1, .36, 1);  /* входы */
  --ease-move:  cubic-bezier(.65, 0, .35, 1);  /* перемещения */
  /* Пружина: слабо задемпфированная, отскок ~6%. Только для отпускания
     нажатия и входа состояний формы — там, где движению предшествовало
     физическое действие пользователя. На простые появления не вешать:
     отскок без предшествующего жеста читается как дёрганье. */
  --ease-spring: cubic-bezier(.34, 1.42, .64, 1);
  --dur-press:  90ms;   /* нажатие: отклик должен быть на pointer-down, а не на отпускании */
  --dur-fast:   200ms;
  --dur-base:   400ms;
  --dur-slow:   800ms;

  /* --- Z-index слои --- */
  --z-base:     1;
  --z-elevated: 10;
  --z-header:   100;
  --z-overlay:  500;
  --z-modal:    900;
  --z-grain:    9999;

  /* --- Брейкпоинты (для справки в комментариях, в CSS используем @media напрямую) --- */
  --bp-sm: 480px;
  --bp-md: 768px;
  --bp-lg: 1024px;
  --bp-xl: 1440px;
}

/* Английская страница набирает в ту же ширину примерно на 15% больше
   знаков, чем русская (слова короче, диакритики нет). Чтобы мера в
   ЗНАКАХ, а не в пикселях, совпадала в обеих локалях, для EN колонка
   уже. Пользовательские свойства наследуются от html — переопределения
   достаточно в одном месте. */
html[lang="en"]{
  --measure-lead: 43ch;
  --measure-text: 50ch;
  --measure-card: 46ch;
}
