/*
 * brand.css — стили визуального направления EpicInvest
 *
 * Направление принято 2026-07-19…20, разбор целиком — __wiki/product/visual-direction.md.
 * Характер: спокойное достоинство, эпос без крика.
 *
 * ⚠️ ЭТО ЕДИНСТВЕННЫЙ ЖИВОЙ ЭКЗЕМПЛЯР (решение владельца 2026-07-25).
 * Такой же файл лежит в PHP-макете (`assets/css/brand.css`) — он ЗАМОРОЖЕН вместе с
 * макетом, своё отработал. Правки вносятся только сюда; обратно в макет не переносятся.
 *
 * ЧТО ЭТО ЗА ФАЙЛ И ЧЕМ ОН ОТЛИЧАЕТСЯ ОТ ОСТАЛЬНЫХ ЧЕТЫРЁХ
 * Это НОВАЯ база, собираемая с чистого листа, а не правка старой. Старые файлы
 * (root.css, bs-style.css, style.css, loader.css) не трогаются и продолжают жить:
 * из них сюда ПЕРЕЕЗЖАЕТ только то, что понадобится и будет опознано как нужное
 * (например модалка). Мусор не вычищается — он просто не переезжает.
 *
 * Порядок внутри файла: токены → тёмная тема → мосты → база → компоненты.
 * Значения не вписывать в компоненты руками: любое число, встреченное дважды,
 * должно стать токеном.
 */


/* ==========================================================================
   1. ТОКЕНЫ — единственное место, где живут значения
   ========================================================================== */

:root {
	/* --- Гамма. Роли, а не оттенки: тёмная тема меняет значения, не имена --- */
	--paper:        #F7F5F0;   /* фон страницы; выбран как «та же светлота, меньше жёлтого» */
	--surface:      #FFFEFA;   /* врез, карточка — светлее бумаги */
	--ink:          #241F1B;   /* основной текст */
	--ink-soft:     #6A6157;   /* подписи, сноски, вторичное */
	--line:         #E0D5C2;   /* границы, разделители */
	--accent:       #A8462B;   /* терракота: кнопка, ссылка, линия цитаты */
	--accent-ink:   #FFF9F4;   /* текст НА акценте */

	/* Рамка вреза. В светлой теме её нет: поверхность отделяет светлота.
	   В тёмной она появляется тёплым отблеском — см. блок тёмной темы. */
	--edge:         transparent;

	/* --- Шкала риска. Единственное место в проекте, где цвет несёт СЕМАНТИКУ:
	       от «понятно, кто платит» к «непонятно». Принято владельцем 2026-07-20,
	       набор D из четырёх, разобранных рядом → __wiki/product/visual-direction.md.

	       Устроена как сгущение ОДНОГО оттенка, а не как светофор: шаг по светлоте
	       1.13 · 1.18 · 1.22 (ускоряется кверху), размах 1.63. Замер важен, потому
	       что глаз на тёплой бумаге видит разницу там, где её нет: прежние временные
	       значения давали шаг 1.00 — ступени были неразличимы, а в тёмной теме
	       верхняя оказывалась светлее средней, то есть шкала шла назад.

	       ⚠️ Пятой ступени здесь нет намеренно. «Обещают вдвое больше рынка» — не
	       инструмент, а обещание, и она выпадает из шкалы не цветом, а ОТСУТСТВИЕМ
	       заливки: разомкнутый пунктир рисует «непонятно, кто платит» буквально.
	       Красным её залить нельзя вдвойне — терракота занята созидательным
	       действием, а оценку «плохо» продукт за читателя не делает. --- */
	--risk-1:        #F3EEE3;   /* вклад, накопительный счёт */
	--risk-2:        #E9E0CE;   /* государственные облигации */
	--risk-3:        #DCCFB4;   /* облигации крупных компаний */
	--risk-4:        #CDBB98;   /* высокодоходные облигации */

	/* ⚠️ Обводка ОДНА на все ступени, а не своя у каждой — роли разведены: рамка
	   говорит «это ступень» и отделяет её от бумаги, заливка несёт шкалу. Сперва
	   обводки были градуированы вместе с заливками, и нижняя ступень оказалась
	   невидимой: заливка 1.06 к бумаге, обводка 1.33 — текст висел в воздухе.
	   Догонять норму 3.0 подъёмом каждой обводки бессмысленно: пять ступеней с
	   шагом 3.0 требуют размаха яркости в 81 раз, столько в шкале нет. Отличать
	   от фона обязан КОНТУР, а соседние ступени различаются заливкой. */
	--risk-line:     #8B7A5E;
	--risk-open-line: #7E6A4C;  /* пунктир ступени без заливки: держит её один, поэтому темнее */
	--risk-ink:      #241F1B;   /* имя ступени: текст НА заливке, идёт вместе с ней */
	--risk-note:     #453D35;   /* сноска под именем: то же, но мельче */

	/* --- Типографика --- */
	--font-voice:   'Lora', Georgia, serif;          /* заголовки и цитаты: книга, вечное */
	--font-text:    'Nunito Sans', system-ui, sans-serif;  /* текст: сегодня, тепло */

	--size-h1:      42px;
	--size-h2:      26px;
	--size-body:    19px;   /* база 110 %: владелец выбрал на переключателе доски */
	--size-lead:    24px;   /* первая фраза главной: крупнее текста, но не заголовок */
	--size-quote:   23px;
	--size-small:   17px;
	--leading:      1.75;

	/* --- Форма. Радиус — ШКАЛА по размеру элемента, а не одно число:
	       14 px на кнопке читается скруглением, на карточке 700×400 — прямым углом --- */
	--radius-control: 14px;   /* кнопки, поля, бейджи */
	--radius-card:    20px;   /* врезы, карточки */
	--radius-large:   24px;   /* модалки, крупные блоки */

	/* --- Раскладка. 700 px при 19 px = ~70 знаков в строке (норма 55–75).
	       780 проверено и отклонено: ~79 знаков, читается слишком широко --- */
	--col:          700px;
	--pad-col:      24px;   /* боковые поля колонки */
	--gap:          22px;
	--block:        56px;   /* вертикальный шаг между смысловыми блоками */

	--grain:        .35;    /* светлая тема: компенсирует малую амплитуду overlay на светлом */

	/* Нативные элементы (полоса прокрутки, поля форм, выпадающие списки) следуют
	   теме: без этого в тёмной теме остаётся светлый системный скроллбар. */
	color-scheme: light;
}


/* ==========================================================================
   2. ТЁМНАЯ ТЕМА — те же роли, другие значения
   ========================================================================== */

[data-theme="dark"] {
	--paper:      #1D1917;
	--surface:    #262120;
	--ink:        #EEE5D7;
	--ink-soft:   #A79A8B;
	--line:       #3A322C;
	--accent:     #D9805C;
	--accent-ink: #221713;

	/* Шкала риска: та же конструкция, свои значения. Шаг сохранён (1.15 · 1.20 · 1.22),
	   но идёт от тёмного к светлому — в тёмной теме «тяжелее» означает светлее, иначе
	   верхние ступени слились бы с бумагой. */
	--risk-1:        #2C2622;
	--risk-2:        #37302A;
	--risk-3:        #453C33;
	--risk-4:        #54483C;
	--risk-line:     #7C6B57;
	--risk-open-line: #8E7A61;
	--risk-ink:      #EEE5D7;
	--risk-note:     #D3C7B7;

	/* Здесь рамка нужна: светлота в тёмной теме почти не разделяет поверхности.
	   Полупрозрачным берётся ЦВЕТ ГАММЫ (охра), а не белый — белый с прозрачностью
	   на тёплом тёмном даёт мёртвое серое пятно вместо блика. */
	--edge:       rgba(210, 164, 92, .12);

	--grain:      .14;   /* подобрано владельцем глазами; см. арифметику в разделе 6 */
	color-scheme: dark;
}


/* ==========================================================================
   3. ЯЗЫК СХЕМ — собственные роли вместо чужих имён
   --------------------------------------------------------------------------
   Семь схем (_tpl/schema-*.php) были нарисованы в токенах Bootstrap, и до
   2026-07-20 здесь стоял МОСТ: он подставлял им новую гамму, не трогая семь
   файлов. Мост снят — схемы переведены на роли ниже.

   ⚠️ ЗАЧЕМ СНЯТ. Пока схема обращалась к --bs-*, её вид решала СТРАНИЦА, а не
   она сама: на витрине значения давал мост, на боевых страницах — Bootstrap и
   старый CSS. Одна и та же схема выглядела и мерилась по-разному в двух местах
   (голубовато-серые подписи на тёплых ступенях; вылет глифов 0.57 на rule-7 при
   «чисто» на витрине). Схема — самостоятельный объект, и её вид не должен
   зависеть от того, куда её положили.

   ⚠️ В САМИХ СХЕМАХ У КАЖДОГО ТОКЕНА ЕСТЬ ЗАПАСНОЕ ЗНАЧЕНИЕ, равное светлой
   теме: страницы принципов пока живут на старом CSS, где этих ролей нет.
   Без запасного значение стало бы недействительным, а fill и stroke
   наследуются — заливка ушла бы в чёрный, линия исчезла бы вовсе, и всё это
   без единой ошибки в консоли.

   Контроль, что чужих имён не осталось (должен давать пусто):
   grep -rho "var(--bs-[a-z0-9-]*" _tpl/schema-*.php | sed 's/var(//' | sort -u  */

:root {
	--sch-ink:        var(--ink);        /* имя блока, основной текст в схеме */
	--sch-ink-on:     #453D35;           /* текст на плотной заливке: темнее подписи, но не чернила */
	--sch-label:      var(--ink-soft);   /* заголовок схемы и подписи под ней */
	/* ⚠️ Второстепенный путь — тот, что БЕЗ принципа (плоская линия Павла, «до вас не
	   доходит», засечки времени). Он обязан быть тусклее выделенного, но не нечитаемым:
	   прежнее #8B8074 давало 3.54 на бумаге при норме 4.5, и под это подпадали
	   16 подписей в четырёх схемах. Решение владельца 2026-07-20 — довести до нормы
	   на бумаге, сохранив разрыв с подписью (5.57) и с акцентом. */
	--sch-dim:        #786E64;           /* 4.58 на бумаге */
	--sch-block:      #EDE7DC;           /* заливка обычного блока */
	--sch-block-dim:  #DDD4C4;           /* заливка второстепенного блока; оси и тики */
	--sch-line:       #C9BDA9;           /* стрелки, рамки, направляющие */
	--sch-empty:      var(--surface);    /* фон пустого блока */

	/* ⚠️ Смысловая правка, а не только цвет: «правильный» вариант был залит
	   --bs-success, то есть ЗЕЛЁНЫМ. Зелёный «успех» — чужой язык для этой
	   гаммы; правильный путь в проекте отмечается терракотой. */
	--sch-accent:     var(--accent);     /* выделенный путь — тот, что ПО принципу */
	--sch-accent-ink: var(--accent-ink); /* текст на акценте */

	/* Роли принципов в схеме «семь принципов как система». Имена им достались
	   от Bootstrap случайно (success/warning), к успеху и опасности отношения
	   не имеют: один принцип ключевой, другой охраняющий. */
	--sch-key:        #E9E4D6;
	--sch-key-line:   #CDBFA6;
	--sch-guard:      #EFE3CD;
	--sch-guard-line: #D6BE94;
}

[data-theme="dark"] {
	/* ⚠️ Тут шкала серых переворачивается: «текст на заливке» становится СВЕТЛЕЕ
	   подписи, а не темнее. Значение выбрано не «на шаг от соседа», а по худшему
	   месту — сноске на верхней ступени лестницы риска: при #C9BCAB там выходило
	   4.75 при норме 4.5, то есть впритык. */
	--sch-ink-on:     #D3C7B7;
	/* В тёмной теме контраст растёт от ОСВЕТЛЕНИЯ, поэтому правка идёт в другую
	   сторону. Значение подобрано по ХУДШЕМУ фону, а не по бумаге: приглушённый текст
	   лежит не только на бумаге (5.11), но и в пустом блоке очереди платежей —
	   там 4.66. Подбор по бумаге давал 4.49 на пустом блоке, то есть промах на
	   сотую долю: цель ставилась не по тому фону. */
	--sch-dim:        #96897C;
	--sch-block:      #332C28;
	--sch-block-dim:  #463D37;
	--sch-line:       #5A4F47;
	--sch-key:        #332C28;
	--sch-key-line:   #4A4038;
	--sch-guard:      #3B3025;
	--sch-guard-line: #574733;
}

/* ⚠️ Здесь стояло правило, гасившее opacity .85 у подписей на акценте: прозрачность
   срезала контраст с 5.45 до ~4.2, и подпись «плыла» на терракоте (замечено
   владельцем в тёмной теме). Правило снято 2026-07-20 вместе с мостом — вылечена
   причина: прозрачность убрана из самих схем. Она там ничего не значила, разницу
   между строками задаёт размер. Пока лечение жило здесь, на боевых страницах
   (где этого файла нет) подпись продолжала плыть. */

/* Утилиты Bootstrap, от которых зависят схемы. Без них обе раскладки
   (широкий экран и телефон) показались бы одновременно. */
.d-none  { display: none !important; }
.d-block { display: block !important; }
@media (min-width: 576px) {
	.d-sm-block { display: block !important; }
	.d-sm-none  { display: none !important; }
}
.my-4 { margin-top: 1.5rem; margin-bottom: 1.5rem; }
.mt-2 { margin-top: .5rem; }
.small { font-size: .875em; }
.text-secondary { color: var(--ink-soft); }


/* ==========================================================================
   4. БАЗА
   ========================================================================== */

* { box-sizing: border-box; }

body {
	margin: 0;
	background: var(--paper);
	color: var(--ink);
	font-family: var(--font-text);
	font-size: var(--size-body);
	line-height: var(--leading);
	-webkit-font-smoothing: antialiased;
}

.col {
	max-width: var(--col);
	margin: 0 auto;
	padding: 0 var(--pad-col);
}

h1, h2, h3 {
	font-family: var(--font-voice);
	font-weight: 500;
	line-height: 1.2;
	margin: 0;
}

h1 { font-size: var(--size-h1); letter-spacing: -.015em; margin-bottom: 32px; }
h2 { font-size: var(--size-h2); line-height: 1.3; margin: var(--block) 0 18px; }

p { margin: 0 0 22px; }
strong { font-weight: 600; }

a { color: var(--accent); text-decoration: none; border-bottom: 1px solid currentColor; }
a:hover { border-bottom-color: transparent; }

ol, ul { margin: 0 0 22px; padding-left: 24px; }
li { margin-bottom: 10px; }

/* Список функций подписки (/pay) — единый источник $conf['features'].
   Не буллеты-точки, а перечень «что даёт подписка»: имя-strong ведёт строку. */
.features { list-style: none; padding-left: 0; }
.features li { margin-bottom: 14px; }

/* У figure браузер по умолчанию ставит БОКОВЫЕ отступы 40 px. В Bootstrap их
   снимал reboot; в чистой базе снимать некому, и схема молча оказывается уже
   колонки на 80 px. Поймано замером — на глаз читается просто как «схема
   поменьше». Вертикальные отступы не трогаем: их задаёт класс на самом figure. */
figure { margin-left: 0; margin-right: 0; }
figcaption { color: var(--ink-soft); font-size: var(--size-small); }

/* Подсветка <mark> — примеры промтов/команд «впиши это боту». Тёплая подложка
   из акцента (color-mix сам адаптируется к теме: терракота в светлой, тёплый
   рыжий в тёмной), текст обычными чернилами. box-decoration-break: длинный
   промт переносится на 2–3 строки — фон обтекает каждую, а не рвётся плашкой. */
mark {
	background: color-mix(in srgb, var(--accent) 14%, transparent);
	color: var(--ink);
	padding: .12em .36em;
	border-radius: 4px;
	-webkit-box-decoration-break: clone;
	box-decoration-break: clone;
}

/* Таблица. В проекте она одна — сравнение возрастов старта в шестом принципе, и
   выбрана осознанно вместо схемы: в ячейки просятся числа, значит таблица честнее
   рисунка. Отсюда и оформление: никаких заливок строк и рамок-сетки, только линии
   под строками — глаз ведут числа, а не разлиновка.
   Обёртка с прокруткой обязательна: четыре колонки чисел на телефоне не помещаются
   в 335 px, и без неё страница поехала бы горизонтально целиком. */
.table-responsive { overflow-x: auto; }

table {
	width: 100%;
	border-collapse: collapse;
	font-size: var(--size-small);
	margin: 0;
}
th, td {
	text-align: left;
	padding: 10px 16px 10px 0;
	border-bottom: 1px solid var(--line);
	white-space: nowrap;
}
th {
	font-weight: 600;
	font-size: 15px;
	letter-spacing: .02em;
	color: var(--ink-soft);
	border-bottom-color: var(--ink-soft);
}
tbody tr:last-child td { border-bottom: 0; }

/* Цитата — голос принципа. Линия сбоку вместо кавычек-украшений;
   прямой угол здесь намеренный: это не карточка, а отчёркнутый текст. */
blockquote {
	font-family: var(--font-voice);
	font-style: italic;
	font-size: var(--size-quote);
	line-height: 1.5;
	margin: 40px 0;
	padding: 6px 0 6px 24px;
	border-left: 2px solid var(--accent);
	color: var(--ink);
}


/* ==========================================================================
   5. КОМПОНЕНТЫ
   ========================================================================== */

/* --- Шапка: логотип и одна кнопка. Иконка — своя SVG, не иконочный шрифт --- */
.site-head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--gap);
	max-width: calc(var(--col) + 200px);
	margin: 0 auto;
	padding: 22px 24px;
}

.logo {
	display: inline-flex;
	align-items: center;
	font-family: var(--font-voice);
	font-size: 22px;
	color: var(--ink);
	text-decoration: none;
	border: 0;
	letter-spacing: -.01em;
}
.logo .brand-seal { flex: none; margin-right: 11px; }
.logo b { font-weight: 600; }
.logo span { color: var(--ink-soft); font-weight: 400; }

.icon-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 44px; height: 44px;
	border: 1px solid var(--line);
	border-radius: var(--radius-control);
	background: transparent;
	color: var(--ink);
	cursor: pointer;
}
.icon-btn svg { width: 20px; height: 20px; display: block; }

/* Правая часть шапки: тумблер темы и кнопка меню рядом. Обёртка нужна потому, что
   .site-head раскладывается через space-between — без неё три элемента (лого, тема,
   меню) разъехались бы по краям и центру. */
.site-head__actions { display: flex; align-items: center; gap: 10px; }

/* Тумблер показывает иконку ТЕКУЩЕЙ темы: солнце в светлой, луна в тёмной.
   Видимостью правит CSS по data-theme, а не JS, — иначе иконка мелькнула бы при
   загрузке, до того как отработает обработчик. */
.theme-toggle .i-moon { display: none; }
[data-theme="dark"] .theme-toggle .i-sun  { display: none; }
[data-theme="dark"] .theme-toggle .i-moon { display: block; }

/* --- Панель навигации. Выезжает справа поверх затемнённой страницы.

       ⚠️ Первая редакция (2026-07-20) открывала меню на той же бумаге, во весь
       экран, без затемнения — из соображения «затемнение и скольжение это язык
       приложения, а не книги». Владелец забраковал сразу: «не понимаешь, что
       открылось меню». Урок записан в вику: меню обязано читаться как НАЛОЖЕНИЕ,
       иначе человек не понимает, что произошло, — и красивое рассуждение о
       характере тут проигрывает понятности. Затемнение и выезд остались, а от
       характера здесь другое: затемнение тёплое (цвет тёмной бумаги проекта),
       а не чёрное, и никакого размытия — блюр отклонён как спорящий с бумагой. --- */
.nav-panel { position: fixed; inset: 0; z-index: 20; }
.nav-panel[hidden] { display: none; }

.nav-panel__veil {
	position: absolute;
	inset: 0;
	background: rgba(29, 25, 23, .55);
	opacity: 0;
	transition: opacity .22s ease;
}
.nav-panel__inner {
	position: absolute;
	top: 0; right: 0; bottom: 0;
	width: min(370px, 86vw);
	background: var(--surface);
	border-left: 1px solid var(--edge);
	box-shadow: -18px 0 44px rgba(29, 25, 23, .18);
	overflow-y: auto;
	padding: 22px 26px 48px;
	transform: translateX(100%);
	transition: transform .22s ease;
}
.nav-panel.is-open .nav-panel__veil { opacity: 1; }
.nav-panel.is-open .nav-panel__inner { transform: translateX(0); }

/* Шапка панели повторяет шапку страницы: слово слева, кнопка справа. Крестик
   встаёт по тем же правилам, что гамбургер, и не «уезжает» относительно него. */
.nav-panel__head {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var(--gap);
	margin-bottom: 10px;
}
.nav-panel__label {
	font-family: var(--font-voice);
	font-size: 21px;
	color: var(--ink);
}

.nav-panel__title {
	font-size: var(--size-small);
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--ink-soft);
	margin: 30px 0 14px;
}

/* Кому не нужна анимация — тому её нет; панель просто появляется на месте. */
@media (prefers-reduced-motion: reduce) {
	.nav-panel__veil,
	.nav-panel__inner { transition: none; }
}

/* Номер принципа — часть пути, поэтому список нумерованный и номер виден.
   Ссылки без подчёркивания: здесь их и так все, линии превратились бы в шум. */
.nav-panel__list { margin: 0; padding-left: 26px; }
.nav-panel__list--plain { list-style: none; padding-left: 0; }
.nav-panel__list li { margin-bottom: 14px; }
.nav-panel__list li::marker { color: var(--ink-soft); font-size: var(--size-small); }
.nav-panel__list a { color: var(--ink); border-bottom: 0; }
.nav-panel__list a:hover { color: var(--accent); }

/* --- Кнопки. Терракота — ТОЛЬКО для созидательных действий.
       Отмена, удаление, выход не получают заливку никогда: терракота из
       красного семейства, и заливкой их было бы не отличить от опасных. --- */
.btn {
	display: inline-block;
	font-family: var(--font-text);
	font-weight: 500;
	font-size: 18px;
	line-height: 1;
	padding: 16px 26px;
	border: 1px solid transparent;
	border-radius: var(--radius-control);
	text-decoration: none;
	cursor: pointer;
}
.btn--main  { background: var(--accent); color: var(--accent-ink); }
.btn--quiet { background: transparent; color: var(--ink); border-color: var(--line); }
/* Контур на hover акцентируется ЦЕЛИКОМ: правило a:hover (выше) гасит
   border-bottom-color у всех ссылок, из-за чего у контурной кнопки пропадал
   НИЗ рамки. Задаём border-color со всех сторон — это перебивает a:hover и
   чинит. Терракота здесь уместна: `--quiet` несёт созидательные действия
   (расчёт, переход к следующему принципу), а не отмену. */
.btn--quiet:hover { border-color: var(--accent); color: var(--accent); }

/* Кнопка на время запроса: гаснет и не принимает повторных нажатий. Форма ждёт
   ответа сервера — второе нажатие завело бы вторую попытку входа или оплаты. */
.btn:disabled,
.btn[disabled] { opacity: .55; cursor: default; }

/* --- Врез применения. Звучит ТИШЕ окружающего текста, а не громче:
       в старом макете на этом месте стояла красная кнопка — самое громкое
       пятно страницы. --- */
.offer {
	margin: var(--block) 0 0;
	padding: 30px 34px 34px;
	background: var(--surface);
	border: 1px solid var(--edge);
	border-radius: var(--radius-card);
}
.offer h2 { margin-top: 0; font-size: var(--size-quote); }
.offer p  { font-size: 18px; }
.offer .price { color: var(--ink-soft); font-size: var(--size-small); }

/* --- Ценник во врезе оплаты. Цена вынута из прозы и стоит объектом: глаз берёт
       её один раз, а текст рядом идёт без цифр. Без этого одна и та же сумма
       повторяется в блоке четыре раза (подводка, условия, согласие, кнопка) и
       перестаёт читаться — заметно у вернувшегося после отмены, где «сейчас» и
       «дальше» совпадают. Голосом заголовка (Lora): число здесь не служебная
       сноска, а то, ради чего человек пришёл на страницу. --- */
.offer .price-tag {
	margin: 0 0 6px;
	font-family: var(--font-voice);
	font-size: 34px;
	line-height: 1.15;
	letter-spacing: -.015em;
}
/* Период — при сумме, но тише её: он уточняет, а не спорит за внимание. */
.offer .price-tag span {
	font-family: var(--font-text);
	font-size: var(--size-small);
	color: var(--ink-soft);
	letter-spacing: 0;
}
/* Вторая ступень (у новичка «дальше 149 ₽ / 7 дней»): про будущее, не про то,
   что спишется сейчас, — поэтому мельче ценника и тише его. */
.offer .price-next { margin: 0; color: var(--ink-soft); font-size: var(--size-small); }
/* Ценник и условия — разные по работе («сколько платить» / «как это устроено»),
   поэтому между ними воздух; вплотную они читались одной серой простынёй. */
.offer .price-tag + .price,
.offer .price-next + .price { margin-top: 16px; }

/* Абзац сразу после врезка (когда между ними нет заголовка) отделяется тем же шагом,
   что и смысловые блоки: без этого он прилипает к нижнему краю врезка — у <p> верхний
   отступ нулевой. Затрагивает только СМЕЖНЫЙ абзац; на rule-страницах после врезка
   идёт заголовок, а не p, поэтому там правило не срабатывает. */
.offer + p { margin-top: var(--block); }

.actions { display: flex; flex-wrap: wrap; gap: 14px; align-items: center; margin-top: 26px; }

/* Подсказка под кнопкой («отметьте согласия», дорога назад к возобновлению). У абзаца
   отступ по базе нижний, а здесь он нужен наоборот: подсказка примыкает к действию
   сверху, а снизу за ней край врезка — лишний воздух там читается как пустая строка. */
.actions ~ .text-secondary { margin: 12px 0 0; }

/* Переход к следующему принципу. Кнопка контурная, а не заливная: это не покупка
   и не главное действие страницы — главное действие человек делает не на сайте,
   а в приложении банка. */
.next-step { margin-top: 34px; }

/* --- Лид на главной. Крупнее основного текста, но НЕ заголовок: это первая фраза
       по существу, а не титул. Засечками, как заголовки, — чтобы вступление звучало
       одним голосом с h1, а дальше голос переходил к Nunito. --- */
.lead {
	font-family: var(--font-voice);
	font-size: var(--size-lead);
	line-height: 1.5;
	margin-bottom: 26px;
}

/* --- Карта пути: семь принципов, каждый строкой сути. Номер виден и снаружи
       колонки текста — это шкала, по которой человек понимает, где находится.
       Название — ссылка, суть под ним обычным цветом: суть здесь важнее перехода,
       и красить её в акцент значило бы звать кликать, а не читать. --- */
.path {
	list-style: none;
	padding: 0;
	margin: 26px 0 26px;
	counter-reset: path;
}
.path li {
	position: relative;
	padding-left: 44px;
	margin-bottom: 22px;
	counter-increment: path;
}
.path li::before {
	content: counter(path);
	position: absolute;
	left: 0;
	top: 1px;
	width: 28px;
	text-align: right;
	font-family: var(--font-voice);
	font-size: 21px;
	color: var(--ink-soft);
}
.path a {
	display: block;
	border-bottom: 0;
}
/* Название — терракотой, как все ссылки проекта: это и есть сигнал «сюда можно
   перейти», видимый сразу и без наведения (на телефоне курсора нет вообще). */
.path__name {
	display: block;
	font-weight: 600;
	color: var(--accent);
}
/* Подчёркивание только на наведении — показывает, на каком пункте курсор.
   text-decoration, а не border: линия рисуется поверх и не двигает вёрстку
   (тот же прыжок, что чинили в подвале). */
.path a:hover .path__name { text-decoration: underline; text-underline-offset: 3px; }
/* Суть — обычным приглушённым текстом. Она внутри ссылки, но цвет НЕ наследует
   акцент: читается как текст, а не как продолжение ссылки. */
.path__sub {
	display: block;
	color: var(--ink-soft);
	font-size: var(--size-small);
	line-height: 1.6;
	margin-top: 2px;
}

/* --- Карта дерева (страница-концепт «Денежное дерево существует»). Роль соседняя
       с .path, но НЕ та же, поэтому свой класс, а не модификатор: там номер = шкала
       «где я в курсе», здесь номеров нет намеренно (порядок идёт снизу вверх по
       растению, 7→2→1→3→4→6→5, и цифры об этот порядок спотыкались бы). Там суть —
       подпись под ссылкой, здесь объяснение — основной текст, а имя принципа стоит
       хвостом как переход. --- */
.tree-map {
	list-style: none;
	padding: 0;
	margin: 26px 0;
}
.tree-map li { margin-bottom: 26px; }
.tree-map p { margin-bottom: 6px; }
/* Стрелка — частью ссылки, а не текстом в разметке: так она не попадает в
   выделение при копировании и не читается голосом скринридера как «стрелка». */
.tree-map__to::before {
	content: '→';
	margin-right: 8px;
	color: var(--ink-soft);
}
.tree-map__to {
	font-weight: 600;
	border-bottom: 0;
}
.tree-map__to:hover { text-decoration: underline; text-underline-offset: 3px; }

/* --- Согласия. Чекбокс + текст рядом; первый служебный компонент-форма (экраны
       входа и регистрации переиспользуют его). Нативный input, крашенный
       терракотой через accent-color: поставленная галочка — созидательное
       действие, цвет уместен. Метка обёрнута в <label>, поэтому кликается
       целиком. Голос тихий: юридический текст не должен звучать громче оффера. --- */
.agree { margin: 24px 0 0; }
.check {
	display: flex;
	gap: 12px;
	align-items: start;
	margin-bottom: 14px;
	font-size: var(--size-small);
	line-height: 1.5;
	color: var(--ink-soft);
	cursor: pointer;
}
.check:last-child { margin-bottom: 0; }
/* Чекбокс не сжимается и выравнивается по первой строке текста, а не по центру
   всего абзаца согласия (он в две-три строки). */
.check input {
	flex: none;
	width: 20px;
	height: 20px;
	margin: 2px 0 0;
	accent-color: var(--accent);
	cursor: pointer;
}
/* Ссылки внутри согласия (оферта, условия, политика) — тем же тихим цветом, что
   и текст: это не призыв перейти, а юридическая сноска. */
.check a { color: var(--ink-soft); border-bottom-color: var(--line); }
.check a:hover { color: var(--accent); border-bottom-color: transparent; }

/* --- Авторизация: экраны входа/регистрации/восстановления. Сфокусированные —
       только логотип и карточка по центру, без общей шапки и меню. Поля, табы
       (почта/телефон) и переходы — первый набор форм проекта на своей базе,
       вместо готовых компонентов Bootstrap (решение 2026-07-21). --- */
.auth-page {
	min-height: 100vh;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 40px 20px;
}
.auth { width: 100%; max-width: 400px; }

.auth__logo { text-align: center; margin-bottom: 26px; }
.auth__logo a {
	font-family: var(--font-voice);
	font-size: 24px;
	color: var(--ink);
	border: 0;
	letter-spacing: -.01em;
}
.auth__logo b { font-weight: 600; }

.auth__title { font-size: var(--size-h2); text-align: center; margin: 0 0 24px; }

/* Табы способа входа — почта / телефон. Активный подчёркнут терракотой: знакомый
   паттерн, а линия в характере (та же, что у ссылок и цитат). */
.tabs {
	display: flex;
	border-bottom: 1px solid var(--line);
	margin-bottom: 24px;
}
.tab {
	flex: 1;
	padding: 11px 8px;
	background: transparent;
	border: 0;
	border-bottom: 2px solid transparent;
	margin-bottom: -1px;
	font-family: var(--font-text);
	font-size: var(--size-small);
	color: var(--ink-soft);
	cursor: pointer;
}
.tab.is-active { color: var(--accent); border-bottom-color: var(--accent); }

/* Поле ввода: метка НАД полем (ясно и доступно), без floating-трюков. */
.field { margin-bottom: 16px; }
.field label {
	display: block;
	font-size: var(--size-small);
	color: var(--ink-soft);
	margin-bottom: 6px;
}
.field input,
.field textarea {
	width: 100%;
	font-family: var(--font-text);
	font-size: var(--size-body);
	color: var(--ink);
	background: var(--paper);
	border: 1px solid var(--line);
	border-radius: var(--radius-control);
	padding: 12px 14px;
}
.field input:focus,
.field textarea:focus { outline: none; border-color: var(--accent); }
.field input::placeholder,
.field textarea::placeholder { color: var(--ink-soft); opacity: .55; }
.field textarea { min-height: 96px; resize: vertical; line-height: 1.5; }

/* Ряд коротких полей рядом (первые/последние цифры карты, дата/сумма).
   На узком экране разворачивается в столбец. */
.field-row { display: flex; gap: 12px; }
.field-row .field { flex: 1; }
@media (max-width: 480px) {
	.field-row { flex-wrap: wrap; }
	.field-row .field { flex: 1 1 100%; }
}

.auth__submit { width: 100%; margin-top: 8px; }

/* Переходы под формой — регистрация и восстановление. Тихие, приглушённые. */
.auth__links {
	display: flex;
	justify-content: space-between;
	gap: 16px;
	margin: 20px 0 0;
	font-size: var(--size-small);
}

/* Поле пароля с кнопкой «показать». Кнопка внутри поля справа, само поле ужато
   под неё padding'ом. Два глаза (открытый/перечёркнутый) переключает класс. */
.field__wrap { position: relative; }
.field__wrap input { padding-right: 46px; }
.field__eye {
	position: absolute;
	top: 0; right: 0;
	height: 100%;
	width: 44px;
	display: flex;
	align-items: center;
	justify-content: center;
	background: transparent;
	border: 0;
	color: var(--ink-soft);
	cursor: pointer;
}
.field__eye:hover { color: var(--accent); }
.field__eye svg { width: 20px; height: 20px; display: block; }
.field__eye .i-off { display: none; }
.field__eye.is-on .i-on { display: none; }
.field__eye.is-on .i-off { display: block; }

/* Пояснение под полем (восстановление пароля): что произойдёт после отправки. */
.auth__hint {
	font-size: var(--size-small);
	color: var(--ink-soft);
	line-height: 1.5;
	margin: 4px 0 20px;
}

/* Ответ сервера в форме: «неверный пароль», «нет связи», «письмо отправлено».
   Красного здесь нет намеренно — в проекте он не тратится (см. шкалу риска):
   отказ отмечается тёплой подложкой и полосой сбоку, как <mark>, а не тревогой.
   Строка тихая: человек и так видит, что не получилось, кричать не нужно. */
.form-note {
	font-size: var(--size-small);
	line-height: 1.5;
	color: var(--ink);
	background: color-mix(in srgb, var(--accent) 10%, transparent);
	border-left: 2px solid var(--accent);
	border-radius: 0 6px 6px 0;
	padding: 12px 14px;
	margin: 0 0 18px;
}
/* Удача (письмо ушло, отметка принята) — то же место и тот же голос, но без
   полосы: сообщать нечего, кроме факта. */
.form-note--ok {
	border-left-color: var(--line);
	background: color-mix(in srgb, var(--ink-soft) 8%, transparent);
	color: var(--ink-soft);
}

/* --- Модалка: наложение с карточкой по центру. Переиспользуемо (отмена подписки,
       позже регистрация). Как панель навигации, обязана читаться НАЛОЖЕНИЕМ
       (тёплое затемнение, без блюра) — иначе непонятно, что открылось. --- */
.modal {
	position: fixed;
	inset: 0;
	z-index: 30;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 20px;
}
.modal[hidden] { display: none; }
.modal__veil {
	position: absolute;
	inset: 0;
	background: rgba(29, 25, 23, .55);
	opacity: 0;
	transition: opacity .22s ease;
}
.modal__box {
	position: relative;
	width: 100%;
	max-width: 460px;
	max-height: 90vh;
	overflow-y: auto;
	background: var(--surface);
	border: 1px solid var(--edge);
	border-radius: var(--radius-large);
	padding: 30px 32px 32px;
	box-shadow: 0 20px 60px rgba(29, 25, 23, .24);
	transform: translateY(12px);
	opacity: 0;
	transition: transform .22s ease, opacity .22s ease;
}
.modal.is-open .modal__veil { opacity: 1; }
.modal.is-open .modal__box { transform: translateY(0); opacity: 1; }
.modal__title { font-size: var(--size-h2); margin: 0 0 14px; }
.modal__actions {
	display: flex;
	flex-wrap: wrap;
	gap: 18px;
	align-items: center;
	margin-top: 26px;
}

@media (prefers-reduced-motion: reduce) {
	.modal__veil,
	.modal__box { transition: none; }
}

/* Тихая ссылка — для отмены/ухода: не акцент (терракота только для созидательного). */
.link-quiet { color: var(--ink-soft); border-bottom-color: var(--line); }
.link-quiet:hover { color: var(--accent); border-bottom-color: transparent; }

/* --- Кабинет «Мой Путь»: приборная панель ДВУХ МОТОРОВ подписки (курс + применение).
       Модель → __wiki/product/retention-model.md. Две зоны меряют РАЗНОЕ и не обязаны
       сходиться: верхняя (курс) конечна и доходит до «7 из 7»; нижняя (применение)
       растёт с первого действия. Внутренний язык «мотор 1/2» в интерфейс НЕ выносим. --- */

/* Прогресс курса — сегментами, а не сплошной полосой: так виден и пройденный путь, и
   его ПРЕДЕЛ («из 7»). Пройденный сегмент терракотовый (созидательное — принцип
   освоен), непройденный — контур на поверхности. */
.track { display: flex; gap: 5px; margin: 0 0 10px; }
.track__seg {
	height: 9px;
	flex: 1;
	border-radius: 4px;
	background: var(--surface);
	border: 1px solid var(--line);
}
.track__seg.is-done { background: var(--accent); border-color: var(--accent); }
.track-note { color: var(--ink-soft); font-size: var(--size-small); margin: 0 0 18px; }

/* Дневник применения (мотор 2): свершённое и ближайшие события денег человека.
   Свершённое ярче (галочка терракотой + чернила), событие-дата тише (календарь и
   текст приглушённым) — будущее звучит тише сделанного. Иконки — свои инлайн-SVG. */
.deeds { list-style: none; padding: 0; margin: 0; }
.deed {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	line-height: 1.5;
	margin-bottom: 14px;
}
.deed:last-child { margin-bottom: 0; }
.deed__ic { flex: none; width: 20px; height: 20px; margin-top: 1px; }
.deed__ic svg { width: 100%; height: 100%; display: block; }
/* Правая колонка списка: дата свершённого в дневнике, метка состояния в списке
   принципов. Приглушена и отделена от текста, но не липнет к нему. */
.deed__when,
.deed__mark { margin-left: auto; padding-left: 12px; color: var(--ink-soft); font-size: var(--size-small); white-space: nowrap; }
.deed--done .deed__ic { color: var(--accent); }
/* Тихие состояния: событие впереди в дневнике (--soon) и принцип, до которого человек
   ещё не дошёл (--ahead). Будущее звучит тише сделанного. */
.deed--soon,
.deed--ahead,
.deed--soon .deed__ic,
.deed--ahead .deed__ic { color: var(--ink-soft); }
/* Третье состояние — «в работе»: то, чем человек занят сейчас. Ярче будущего (это
   его сегодняшнее дело), но не празднует, как свершённое: знак цветной, текст обычный. */
.deed--now .deed__ic { color: var(--accent); }
/* Абзац сразу после списка (подводка к действию зоны): у списка нижнего отступа нет,
   у абзаца нет верхнего — без этого текст липнет к последней строке. Шаг именно
   блочный: подводка начинает новую мысль, а не продолжает перечень, и отступ размером
   со строку списка читался как ещё один его пункт. */
.deeds + .text-secondary { margin-top: var(--block); }

/* Ссылки на то, что ещё впереди, звучат тише: это пока перечень, а не сегодняшнее
   дело человека. Подчёркивание приходит с наведением — кликабельность на месте, но
   список не рябит семью призывами (особенно на телефоне, где строки переносятся). */
.deed--ahead a { color: var(--ink-soft); border-bottom-color: transparent; }
.deed--ahead a:hover { color: var(--accent); border-bottom-color: currentColor; }

/* Оттиск-награда: печать свершённого (знак _tpl/seal.php) на вехе применения.
   Не рядовая отметка — знак-награду ждут, значок приедается. Поверхность-карточка
   с тонкой линией; знак несёт цвет сам (var(--accent)), следует теме. */
.award-seal {
	display: flex;
	align-items: center;
	gap: 18px;
	background: var(--surface);
	border: 1px solid var(--line);
	border-radius: 20px;
	padding: 18px 22px;
	margin: 0 0 22px;
}
.award-seal .brand-seal { flex: none; }
.award-seal__t { font-family: var(--font-voice); font-size: 20px; margin: 0 0 3px; }
.award-seal__note { color: var(--ink-soft); font-size: var(--size-small); line-height: 1.5; margin: 0; }

/* Счётчик результата реферальной программы: скольким человек помог начать путь.
   Зеркало помощи, а не денег — число терракотой (созидательный результат). */
.ref-count { font-size: var(--size-quote); line-height: 1.4; margin: 4px 0 22px; }
.ref-count strong { color: var(--accent); font-weight: 600; }

/* ==========================================================================
   6. ПРИЁМЫ СОВРЕМЕННОСТИ — НА ПРОБЕ
   --------------------------------------------------------------------------
   Включаются атрибутами на <html>, по умолчанию выключены. Так их видно
   рядом с чистой базой, а не вместо неё. Прижившееся переедет в разделы
   выше и потеряет атрибут; отклонённое удаляется отсюда целиком.

   Фильтр, по которому судим: приём служит содержанию (помогает читать,
   понимать, чувствовать путь) — или он просто модный. Второе отклоняем.
   ========================================================================== */

/* --- Ширина больше колонки. ⚠️ НЕ для схем: SVG тянется вместе со своей
       типографикой, и подписи внутри становятся крупнее авторского текста
       (замер: 24.2 px против 19 — иерархия переворачивается). Оставлено под
       будущий визуальный слой — иллюстрации и фотографии, у которых своего
       текста нет. Класс вешается на объект вручную, автоматически не работает. --- */
.wide {
	width: min(920px, calc(100vw - 48px));
	margin-left: 50%;
	transform: translateX(-50%);
}

/* --- Зернистость бумаги. Цифровой фон становится тактильным.
       Слой поверх всего, но не перехватывает мышь.

       ⚠️ Режим наложения — overlay, и это принципиально. multiply только
       затемняет, screen только осветляет: любой из них СДВИГАЕТ тон фона, и
       выбранная гамма разваливается (поймано владельцем: «фон стал светлее,
       сочетание остального пропало»). overlay симметричен относительно
       среднего серого — светлые крупинки чуть осветляют, тёмные чуть
       затемняют, а средний тон остаётся ИСХОДНЫМ. Родной цвет плюс зерно. --- */
[data-grain="on"] body::after {
	content: '';
	position: fixed;
	inset: 0;
	pointer-events: none;
	z-index: 2;
	/* Сила зерна — ПАРА значений по темам, а не одно число (третий такой параметр
	   после рамки вреза и фона). Причина арифметическая: overlay тем слабее, чем
	   ближе фон к краю диапазона. Бумага #F7F5F0 — это ~96 % яркости, и предельная
	   амплитуда там 8 %; тёмный #1D1917 — ~10 % яркости, амплитуда 20 %, то есть
	   в 2.5 раза больше. При одинаковой силе светлая тема зерна почти не показывает. */
	opacity: var(--grain);
	mix-blend-mode: overlay;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}


/* ==========================================================================
   7. ТЕЛЕФОН
   --------------------------------------------------------------------------
   Брейкпоинт 575.98px взят НЕ произвольно: ровно на 576 px переключаются
   раскладки схем (d-sm-block / d-sm-none). Свой брейкпоинт здесь означал бы,
   что текст уже перестроился, а схема ещё нет — или наоборот.

   Правится ТОКЕН, а не компоненты: тогда мобильная версия остаётся той же
   системой с другими значениями, а не второй вёрсткой.
   ========================================================================== */

@media (max-width: 575.98px) {
	:root {
		/* Кегль десктопа на узком экране даёт 33 знака в строке при разумном
		   минимуме ~40: текст рвётся почти на каждой строке. 17 px возвращает
		   строку к 40 знакам, не делая текст мелким. */
		--size-h1:    34px;
		--size-h2:    23px;
		--size-body:  17px;
		/* Лид на телефоне занимал шесть строк и выталкивал вход за сгиб */
		--size-lead:  20px;
		--size-quote: 20px;
		--size-small: 15px;
		--pad-col:    20px;
		--block:      44px;
	}

	.site-head { padding: 16px 20px; }

	/* Меню на телефоне не помещалось в экран на 29 px — обидный случай, когда
	   прокрутка появляется ради одной строки. Поджаты поля и шаги между группами;
	   сами пункты не трогаем, они должны оставаться крупными для пальца. */
	.nav-panel__inner { padding: 18px 22px 26px; }
	.nav-panel__title { margin: 22px 0 12px; }

	.offer {
		/* 34 px по бокам съедали пятую часть ширины экрана */
		padding: 22px 20px 24px;
		border-radius: var(--radius-control);
	}

	/* На узком экране кнопка во всю ширину: две кнопки по 240 px вставали
	   лесенкой с рваным правым краем. */
	.actions { gap: 10px; }
	.actions .btn { width: 100%; text-align: center; }
}


/* --- Подвал. Служебный по содержанию, поэтому тихий по голосу: мельче основного
       текста и приглушённым цветом. Капса нет намеренно — в старом подвале ссылки
       шли в верхнем регистре и звучали громче страницы. --- */
.site-foot {
	margin-top: 80px;
	padding: 32px 0 48px;
	border-top: 1px solid var(--line);
	color: var(--ink-soft);
	font-size: var(--size-small);
	line-height: 1.6;
}
.site-foot p { margin: 0 0 18px; }
.site-foot a { color: var(--ink-soft); border-bottom-color: var(--line); }
.site-foot a:hover { color: var(--accent); border-bottom-color: transparent; }

.site-foot__brand { font-family: var(--font-voice); font-size: 19px; color: var(--ink); }
.site-foot__brand b { font-weight: 600; }
.site-foot__brand span { font-size: var(--size-small); color: var(--ink-soft); }

/* Ссылки в строку через воздух, без точек-разделителей. Точка рисовалась бы
   псевдоэлементом ВНУТРИ ссылки — то есть попала бы в кликабельную область и в
   подчёркивание. Пробел разделяет не хуже, а к характеру идёт ближе. */
/* ⚠️ Линия под ссылкой ПРОЗРАЧНАЯ, а не отсутствующая. Если её убирать совсем и
   возвращать на наведении, ссылка становится на пиксель выше — и вся строка
   подпрыгивает, увлекая соседей. Замечено владельцем 2026-07-20. Место под линию
   занято всегда, меняется только цвет. */
.site-foot__links { display: flex; flex-wrap: wrap; gap: 6px 22px; }
.site-foot__links a { border-bottom: 1px solid transparent; }
.site-foot__links a:hover { border-bottom-color: currentColor; }

.site-foot__legal { font-size: 15px; }
