/**
 * ATS Design Tokens
 * Единственный источник правды для цветов, отступов, радиусов, теней,
 * длительностей и шрифтов. Все остальные CSS-файлы темы используют
 * ТОЛЬКО эти custom properties — новых hex-значений быть не должно.
 *
 * v2 (2026-08-05) — палитра/шрифты полностью заменены по новому Design
 * Specification (Creative Director, референсы Linear/Stripe/Apple HIG).
 * Решение и обоснование каждого отступления от документа — см.
 * docs/02-decisions-log.md, запись от 2026-08-05.
 */

:root {
	/* Brand — электрик-синий (ссылки, графика маршрутов, фокус, вторичные действия).
	   600/700 — точные значения из спеки (accent-blue/blue-700), остальные ступени
	   досчитаны в той же тональности (H≈229°) для целостной шкалы. */
	--brand-50: #F1F3FB;
	--brand-100: #DEE3F7;
	--brand-200: #BCC7F5;
	--brand-300: #8CA0F8;
	--brand-400: #5B78FB;
	--brand-500: #3D61FF;
	--brand-600: #2851FF;
	--brand-700: #17339E;
	--brand-800: #122268;
	--brand-900: #0F173E;

	/* Accent (signal-amber) — только для CTA, см. правило ниже. 500 — точное
	   значение из спеки; hover/active — затемнение на 8%/14% (правило документа,
	   не осветление, как было в v1 палитре). */
	--accent-50: #FBF4F2;
	--accent-100: #F6DFD5;
	--accent-400: #F39468;
	--accent-500: #EF6A2C;
	--accent-600: #D04D11;
	--accent-hover: #E15311;
	--accent-active: #C5480F;
	/* Акцент в роли ТЕКСТА (бейджи). --accent-600 на --surface-accent-soft даёт
	   4.07:1 — для мелкого кегля мало. Как графика (силуэт машины на карточке)
	   тот же --accent-600 проходит: там норма 3:1, поэтому шкала не меняется. */
	--accent-text: #B8430E;

	/* Neutrals — холодная шкала на тоне ink (H≈224°), separate от тёплого
	   --border (см. ниже): в документе эти два тона намеренно разного оттенка
	   (ink — холодный, border/surface-warm — тёплый), а не одна шкала. */
	--white: #FFFFFF;
	--neutral-50: #F8F8F9;
	--neutral-100: #F1F2F3;
	--neutral-200: #E1E2E5;
	--neutral-300: #C8CAD0;
	--neutral-400: #8A8D94;
	--neutral-500: #636774;
	--neutral-600: #3A3E4B;
	--ink-900: #12141A;
	--ink-950: #0B0D12;

	/* Status.
	   Яркие --success/--warning/--error — заливки и крупная графика. Для ТЕКСТА
	   и границ полей рядом с ними стоят затемнённые *-text: замеренный контраст
	   ярких к своим подложкам проваливал AA (success #12B76A на success-bg —
	   2.37:1, warning #B8730A на белом — 3.82:1, error #D92D20 на error-bg —
	   4.23:1). Затемнённые дают 5.28 / 6.15 / 5.75:1. Проверка: scripts/contrast.py.
	   Ревизия дизайна 2026-08-18. */
	--success: #12B76A;
	--success-text: #087443;
	--success-bg: #E7F7EF;
	--error: #D92D20;
	--error-text: #B42318;
	--error-bg: #FDECEB;
	--warning: #B8730A;
	--warning-text: #8A5607;
	--warning-bg: #FBF0DF;
	/* Тёмно-зелёный из фирменной палитры самого WhatsApp: на его светлом
	   #25D366 белая иконка давала 1.98:1 при норме 3:1 для значимой графики
	   (WCAG 1.4.11). Здесь — 4.14:1, зелёный остаётся узнаваемым. */
	--whatsapp: #128C7E;
	--telegram: #229ED9;
	/* MAX (мессенджер VK): фирменный сине-фиолетовый, приближённо — точного
	   брендбука в открытом доступе нет. Белая иконка на нём даёт > 3:1. */
	--max: #4F5BFF;

	/* Surfaces — surface-app теперь отдельный тон "холста" страницы (не белый),
	   surface-card/white — только фактические карточки/попапы поверх него. */
	--surface-app: #EDEEF0;
	--surface-base: #FFFFFF;
	--surface-warm: #F6F5F1;
	--surface-subtle: #F6F5F1;
	--surface-sunken: #F1F2F3;
	--surface-inverse: #0B0D12;
	--surface-brand-soft: #F1F3FB;
	--surface-accent-soft: #FBF4F2;

	/* Text.
	   ВАЖНО (правки WCAG AA против буквальных значений из документа —
	   см. decisions-log): --text-muted переопределён с neutral-400 (#8A8D94,
	   контраст к surface-app всего 2.86:1 — провал AA) на neutral-500
	   (#636774, 4.86:1 — проходит). --text-link-inverse — новый токен: чистый
	   --brand-600 на тёмном ink-950 даёт только 3.43:1 (провал для текста
	   мелким кеглем), поэтому ссылки на тёмных секциях (hero, футер, CTA-баннер)
	   используют более светлый --brand-400 (5.11:1). --text-on-accent остаётся
	   тёмным (ink-900), не белым: EF6A2C даёт всего 3.1:1 с белым текстом
	   (провал AA для обычного текста кнопки) против 5.93:1 с тёмным. */
	--text-primary: #12141A;
	--text-secondary: #3A3E4B;
	--text-muted: #636774;
	--text-inverse: #FFFFFF;
	--text-inverse-muted: rgba(255, 255, 255, .72);
	--text-link: #2851FF;
	--text-link-hover: #17339E;
	--text-link-inverse: #5B78FB;
	--text-on-accent: #12141A;

	/* Borders — тёплый тон (H≈45°, из спеки), намеренно отличается от холодных
	   --neutral-*, см. комментарий у Neutrals выше. */
	--border-default: #E3E1DB;
	--border-strong: #CFCCC2;
	--border-focus: #2851FF;
	/*
	 * Отдельная граница для ПОЛЕЙ ВВОДА и чекбоксов. WCAG 1.4.11 требует 3:1
	 * для контуров, по которым опознают элемент управления, а декоративные
	 * рамки карточек под это правило не подпадают — поэтому вводится новый
	 * токен, а --border-default/--border-strong остаются как были (1.31:1 и
	 * 1.61:1 к белому: для карточек нормально, для поля ввода нет — поле
	 * буквально не видно на светлом фоне). Тот же тёплый тон H≈45°, 3.52:1
	 * к белому и 3.03:1 к --surface-app. Ревизия дизайна 2026-08-18.
	 */
	--border-input: #8F8878;
	/* Ховер поля — темнее покоя. Раньше здесь стоял --border-strong, который
	   СВЕТЛЕЕ нового --border-input: наведение делало рамку бледнее, то есть
	   работало наоборот. */
	--border-input-hover: #6B6558;

	/* Actions */
	--action-primary: #EF6A2C;
	--action-primary-hover: #E15311;
	--action-primary-active: #C5480F;
	--action-secondary: #2851FF;

	/* Spacing scale (без изменений) */
	--space-1: 4px;
	--space-2: 8px;
	--space-3: 12px;
	--space-4: 16px;
	--space-5: 20px;
	--space-6: 24px;
	--space-8: 32px;
	--space-10: 40px;
	--space-12: 48px;
	--space-16: 64px;
	--space-20: 80px;
	--space-24: 96px;
	--space-32: 128px;

	/*
	 * Вертикальный ритм разворотов. Раньше каждая секция задавала себе отступы
	 * сама, и расстояние между блоками главной гуляло от 48 до 96px без правила
	 * — страница читалась как склейка, а не как один документ. Ревизия
	 * композиции 2026-08-22.
	 */
	--section-pad: var(--space-16);
	--section-pad-lg: var(--space-24);

	/* Radii — 12px карточки/попапы (не менялось), 10px кнопки/инпуты (было 8px),
	   pill — бейджи/pill-кнопки. Явный запрет документа: никаких радиусов
	   24–32px "уровня ThemeForest". */
	--r-sm: 6px;
	--r-md: 10px;
	--r-lg: 12px;
	--r-xl: 16px;
	--r-full: 9999px;

	/* Shadows — один стиль на всё (правило документа: "тень одна"), hover
	   заменяет её на подъём (translateY), а не добавляет вторую тень. */
	--shadow-sm: 0 1px 2px rgba(18, 20, 26, .06), 0 8px 24px rgba(18, 20, 26, .06);
	--shadow-md: 0 1px 2px rgba(18, 20, 26, .06), 0 8px 24px rgba(18, 20, 26, .06);
	--shadow-lg: 0 4px 8px rgba(18, 20, 26, .08), 0 16px 40px rgba(18, 20, 26, .10);
	--shadow-up: 0 -2px 12px rgba(18, 20, 26, .08);
	--focus-ring: 0 0 0 3px rgba(40, 81, 255, .18);

	/* Timing (без изменений) */
	--t-instant: 100ms;
	--t-fast: 160ms;
	--t-base: 240ms;
	--t-slow: 400ms;
	--t-reveal: 600ms;
	--t-signature: 900ms;

	/* Easing (без изменений) */
	--ease-standard: cubic-bezier(.2, .6, .2, 1);
	--ease-out: cubic-bezier(0, .55, .45, 1);
	--ease-in: cubic-bezier(.55, 0, 1, .45);
	/*
	 * Экспоненциальный выход — для крупных появлений (разворот секции, отрисовка
	 * карты рейсов): движение почти всю длительность гасится, поэтому элемент
	 * приезжает без «доводки» в конце. --ease-out выше остаётся для мелких
	 * переходов, где такая длинная хвостовая часть читается как задержка.
	 * Ревизия композиции 2026-08-22.
	 */
	--ease-expo: cubic-bezier(.16, 1, .3, 1);

	/* Type — Manrope теперь и для display, и для body (документ явно отказывается
	   от Inter в пользу единой гарнитуры); IBM Plex Mono — новый шрифт, только
	   для цифр/данных (цены, км, тонны, сроки, номера заявок). */
	--font-display: "Manrope", -apple-system, "Segoe UI", Roboto, sans-serif;
	--font-body: "Manrope", -apple-system, "Segoe UI", Roboto, sans-serif;
	--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;

	/* Layout — контейнер 1280 по спеке (было 1200) */
	--container-max: 1280px;
}

/**
 * Самохостинг шрифтов — без Google Fonts CDN.
 * font-display: swap исключает блокировку рендера текстом-невидимкой (FOIT).
 * Реальный <link rel="preload"> для manrope-400 и manrope-700 должен быть
 * в <head> на уровне enqueue (functions.php) — CSS этого не может.
 */
@font-face {
	font-family: "Manrope";
	src: url("../fonts/manrope-400.woff2") format("woff2");
	font-weight: 400;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "Manrope";
	src: url("../fonts/manrope-500.woff2") format("woff2");
	font-weight: 500;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "Manrope";
	src: url("../fonts/manrope-600.woff2") format("woff2");
	font-weight: 600;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "Manrope";
	src: url("../fonts/manrope-700.woff2") format("woff2");
	font-weight: 700;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "Manrope";
	src: url("../fonts/manrope-800.woff2") format("woff2");
	font-weight: 800;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "IBM Plex Mono";
	src: url("../fonts/ibm-plex-mono-400.woff2") format("woff2");
	font-weight: 400;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "IBM Plex Mono";
	src: url("../fonts/ibm-plex-mono-500.woff2") format("woff2");
	font-weight: 500;
	font-style: normal;
	font-display: swap;
}

@font-face {
	font-family: "IBM Plex Mono";
	src: url("../fonts/ibm-plex-mono-600.woff2") format("woff2");
	font-weight: 600;
	font-style: normal;
	font-display: swap;
}
