/* ══════════════════════════════════════════════════════════════════════
   ПУБЛИЧНАЯ ВИТРИНА — слой поверх токенов, только для страниц до входа.

   Переносит строй Direct Win с его же витрины (~/Projects/direct-materials/
   static/landing.css): та же тёплая бумага, тот же один терракотовый акцент,
   волоски вместо карточек с тенями. Витрина лишь даёт воздух и крупную
   типографику, которых плотным рабочим таблицам не нужно.

   ⚠️ ИМЕНА ТОКЕНОВ У НАС ДРУГИЕ, ЧЕМ У ОРИГИНАЛА. Это главная ловушка при
   переносе: скопировать landing.css дословно нельзя. У Direct Win --paper,
   --ink, --rule, --dim-2, --accent; у нас таких переменных НЕТ ВОВСЕ.
   Неразрешённый var() в CSS не ошибка - объявление молча отбрасывается, и
   страница вышла бы без стилей, честно отдавая 200. Ни один тест такого не
   заметил бы. Соответствие:
       --paper      -> --background      --rule       -> --border
       --ink        -> --foreground      --rule-strong-> --rule-strong
       --dim-2      -> --muted-foreground--accent     -> --accent-line
       --dim        -> --dim             --field      -> --field
       --accent-ink/--accent-fill/--add/--del  - совпали
   Сторож на это - tests/test_landing_style.py: он требует, чтобы каждый
   var(--x) в этом файле был объявлен либо в tokens.css, либо ниже.

   ⚠️ СВОЕГО :root ЗДЕСЬ НЕТ. Цвета - только из css/tokens.css. Собственная
   шкала размеров объявлена на .pub (класс на <body> витрины), а НЕ в :root:
   в :root она протекла бы на рабочие экраны, если кто-нибудь однажды
   подключит этот файл в base.html. Размерные токены дашборда рассчитаны на
   плотную таблицу (--h1-fs 19px, --text-fs 13px) - на витрине заголовок
   такого размера не читается как заголовок.

   ⚠️ ФАЙЛ ПОДКЛЮЧЁН ТОЛЬКО ИЗ templates/public/_base.html. Рабочие экраны его
   не видят вовсе - это сильнее, чем у образца, где витрина живёт поверх
   общего style.css.
   ══════════════════════════════════════════════════════════════════════ */

.pub {
  /* Шкала витрины. Крупнее дашбордной и живёт только здесь. */
  --pub-text: 15px;          /* основной текст (в дашборде 13) */
  --pub-lead: 17px;          /* вводный абзац секции           */
  --pub-h1: 44px;
  --pub-h2: 26px;
  --pub-h3: 17px;
  --pub-eyebrow: 12px;       /* моно-надпись над заголовком    */
  --pub-section-y: 64px;     /* воздух между секциями          */
  --pub-max: 1060px;         /* ширина колонки                 */
  --pub-max-narrow: 720px;
  /* ⚠️ Скругление МЯГЧЕ дашбордного (4px): у образца на витрине 7px у кнопки
     и 10px у миниатюры интерфейса. Это не отступление от строя - на витрине
     объектов мало и они крупные, острый угол там читается как обрезка. */
  --pub-radius: 7px;
  --pub-radius-lg: 10px;

  margin: 0;
  background: hsl(var(--background));
  color: hsl(var(--foreground));
  font: var(--pub-text)/1.65 var(--sans);
  -webkit-font-smoothing: antialiased;
}

.mkt { max-width: var(--pub-max); margin: 0 auto; padding: 0 24px; }
.mkt-narrow { max-width: var(--pub-max-narrow); }

/* ── Шапка и подвал ─────────────────────────────────────────────────── */

.pub-top {
  position: sticky; top: 0; z-index: 10;
  background: hsl(var(--background));
  border-bottom: 1px solid hsl(var(--border));
}
.pub-top-inner {
  display: flex; align-items: center; gap: 24px;
  padding-top: 14px; padding-bottom: 14px;
}
.pub-brand {
  font: 600 16px var(--mono);
  letter-spacing: -0.01em;
  color: hsl(var(--foreground));
  text-decoration: none;
}
.pub-nav { display: flex; gap: 18px; margin-left: 8px; }
.pub-nav a {
  font-size: 14px;
  color: hsl(var(--muted-foreground));
  text-decoration: none;
  border-bottom: 1px solid transparent;
  padding-bottom: 2px;
}
.pub-nav a:hover {
  color: hsl(var(--foreground));
  border-bottom-color: hsl(var(--accent-line));
}
.pub-enter {
  margin-left: auto;
  font: 500 14px var(--sans);
  color: hsl(var(--foreground));
  text-decoration: none;
  border: 1px solid hsl(var(--border));
  border-radius: var(--pub-radius);
  padding: 7px 14px;
}
.pub-enter:hover { border-color: hsl(var(--dim)); }

.pub-foot {
  border-top: 1px solid hsl(var(--border));
  margin-top: var(--pub-section-y);
  padding: 26px 0 34px;
  color: hsl(var(--dim));
  font-size: 13px;
}
.pub-foot-inner {
  display: flex; gap: 20px; justify-content: space-between; flex-wrap: wrap;
}
.pub-foot-links { display: flex; gap: 16px; flex-wrap: wrap; }
.pub-foot a { color: hsl(var(--muted-foreground)); text-decoration: none;
              border-bottom: 1px solid hsl(var(--border)); }
.pub-foot a:hover { color: hsl(var(--accent-ink));
                    border-bottom-color: hsl(var(--accent-line)); }

/* ── Секции ─────────────────────────────────────────────────────────── */

.section { padding: var(--pub-section-y) 0; border-top: 1px solid hsl(var(--border)); }
.section:first-of-type { border-top: 0; }

/* Моно-надпись над заголовком - тот же приём, что h2 в дашборде. */
.eyebrow {
  font: 500 var(--pub-eyebrow) var(--mono);
  text-transform: uppercase;
  letter-spacing: 0.14em;
  color: hsl(var(--muted-foreground));
  margin: 0 0 12px;
}

.pub h1 {
  font: 800 var(--pub-h1)/1.06 var(--sans);
  letter-spacing: -0.022em;
  margin: 0 0 18px;
  text-wrap: balance;
}
/* Подсветка под словом вместо подчёркивания - терракота с прозрачностью.
   Токены заданы HSL-тройками, поэтому альфа подмешивается через slash. */
.pub h1 .u {
  background: linear-gradient(transparent 62%, hsl(var(--accent-line) / .28) 62%);
}
.pub h2 {
  font: 700 var(--pub-h2)/1.2 var(--sans);
  letter-spacing: -0.015em;
  margin: 0 0 16px;
  text-wrap: balance;
}
.pub h3 { font: 600 var(--pub-h3)/1.35 var(--sans); margin: 0 0 6px; }
.pub p { margin: 0 0 12px; }
p.lead {
  font-size: var(--pub-lead);
  line-height: 1.6;
  color: hsl(var(--muted-foreground));
  max-width: 62ch;
}

/* ── Кнопки ─────────────────────────────────────────────────────────── */

/* ⚠️ ЗАЛИТАЯ КНОПКА ВИТРИНЫ - ТЕРРАКОТОВАЯ, хотя в дашборде --primary это
   чернила. Так и в оригинале (.btn-primary = var(--accent-fill)), и довод
   из tokens.css («каждая вторая кнопка стала бы оранжевой, и акцент
   перестал бы выделять») тут не работает: на секцию приходится ровно одно
   действие. Белым по --accent-fill 4.9:1 - посчитано при переносе палитры. */
.btn-primary {
  display: inline-flex; align-items: center; gap: 9px;
  background: hsl(var(--accent-fill));
  color: #fff;
  border: 1px solid hsl(var(--accent-fill));
  border-radius: var(--pub-radius);
  padding: 11px 20px;
  font: 600 15px/1 var(--sans);
  text-decoration: none;
  cursor: pointer;
}
.btn-primary:hover {
  background: hsl(var(--accent-fill-hover));
  border-color: hsl(var(--accent-fill-hover));
}
.btn-ghost {
  display: inline-flex; align-items: center;
  color: hsl(var(--muted-foreground));
  text-decoration: none;
  font: 600 15px/1 var(--sans);
  padding: 11px 6px;
  border-bottom: 1px solid transparent;
}
.btn-ghost:hover {
  color: hsl(var(--foreground));
  border-bottom-color: hsl(var(--accent-line));
}
.cta-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap;
           margin-top: 22px; }
.hero-note { margin: 18px 0 0; color: hsl(var(--dim)); font-size: 13px; }

.pub :focus-visible {
  outline: 2px solid hsl(var(--accent-line));
  outline-offset: 2px;
}

/* ── Герой ──────────────────────────────────────────────────────────── */

.hero { padding: 72px 0 56px; }
.hero-grid { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 48px;
             align-items: center; }

/* ── Сетки секций ───────────────────────────────────────────────────── */

.who-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.who-card {
  border: 1px solid hsl(var(--border));
  border-radius: var(--pub-radius);
  background: hsl(var(--card));
  padding: 20px 22px;
}
.who-card p { margin: 0; color: hsl(var(--muted-foreground)); }

/* Шаги: номер рисует счётчик, а не разметка - шаг нельзя пронумеровать
   неправильно, вставив четвёртый в середину. */
.steps { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px;
         counter-reset: step; }
.step { counter-increment: step; }
.step::before {
  content: counter(step);
  display: grid; place-items: center;
  width: 26px; height: 26px; margin-bottom: 10px;
  border: 1px solid hsl(var(--accent-line));
  border-radius: 50%;
  font: 600 12px var(--mono);
  color: hsl(var(--accent-ink));
}
.step p { margin: 0; color: hsl(var(--muted-foreground)); font-size: 14px; }

.feat { display: grid; grid-template-columns: repeat(3, 1fr); gap: 26px 24px; }
.feat-item p { margin: 0; color: hsl(var(--muted-foreground)); font-size: 14px; }
/* Моно-метка над названием - «чип» без рамки, тот же язык, что в таблицах. */
.mk {
  display: inline-block; margin-bottom: 6px;
  font: 400 11.5px var(--mono);
  letter-spacing: 0.06em; text-transform: uppercase;
  color: hsl(var(--accent-ink));
}

/* Список «чего сервис не делает» - галочки цветом «применено». */
.trust { list-style: none; margin: 0; padding: 0;
         display: grid; grid-template-columns: 1fr 1fr; gap: 12px 28px; }
.trust li { position: relative; padding-left: 24px;
            color: hsl(var(--muted-foreground)); font-size: 14px; }
.trust li::before {
  content: "✓"; position: absolute; left: 0; top: 0;
  color: hsl(var(--add)); font-weight: 600;
}
.trust b { color: hsl(var(--foreground)); font-weight: 600; }

.endcta { padding: 68px 0 76px; text-align: center; }
.endcta .cta-row { justify-content: center; }

/* ══════════════════════════════════════════════════════════════════════
   МИНИАТЮРЫ ИНТЕРФЕЙСА

   ⚠️ СКРИНШОТОВ НЕТ НИ ОДНОГО, И ЭТО НЕ ЛЕНЬ. За логином лежат финансы
   конкретных магазинов - снять их нельзя ни с одного кабинета. Экраны
   воспроизведены вёрсткой на выдуманных числах, тем же языком, что и сам
   дашборд (бумага, волоски, моноширинные данные). Рядом на странице стоит
   подпись «демонстрационные данные».

   ⚠️ ТЕНИ НЕТ, в отличие от образца. У Direct Win .screen с box-shadow; у нас
   записано, что приподнятых плоскостей в строю не бывает - миниатюру
   очерчивает волосок и белая подложка --field.
   ══════════════════════════════════════════════════════════════════════ */

.screen {
  border: 1px solid hsl(var(--border));
  border-radius: var(--pub-radius-lg);
  background: hsl(var(--field));
  overflow: hidden;
}
.screen-top {
  display: flex; justify-content: space-between; align-items: center;
  padding: 9px 14px;
  border-bottom: 1px solid hsl(var(--border));
  background: hsl(var(--background));
  font: 400 11.5px var(--mono);
  color: hsl(var(--muted-foreground));
}
.screen-body { padding: 4px 0; }
.screen-note {
  padding: 8px 14px 10px;
  border-top: 1px solid hsl(var(--border));
  font: 400 11.5px var(--mono);
  color: hsl(var(--dim));
}
figure.screen-fig { margin: 0; }
figure.screen-fig figcaption {
  margin-top: 8px; font-size: 12.5px; color: hsl(var(--dim));
}

/* Строка таблицы в миниатюре: моноширинные числа вправо, как в дашборде. */
.mrow {
  display: grid; grid-template-columns: 1.6fr repeat(3, 1fr);
  gap: 10px; padding: 7px 14px;
  border-bottom: 1px solid hsl(var(--border));
  font-size: 12.5px;
}
.mrow:last-child { border-bottom: 0; }
.mrow-head {
  font: 500 11px var(--mono); text-transform: uppercase; letter-spacing: 0.06em;
  color: hsl(var(--muted-foreground));
  background: hsl(var(--background));
}
.mnum { text-align: right; font-family: var(--mono);
        font-variant-numeric: tabular-nums; }
.mgood { color: hsl(var(--add)); }
.mbad { color: hsl(var(--del)); }
.mnd { color: hsl(var(--accent-ink)); }

/* Дифф «было → станет» - тот же приём, что на экране подтверждения цен. */
.mdiff { display: grid; gap: 2px; padding: 8px 14px; }
.mdiff-line {
  display: grid; grid-template-columns: 16px 1fr auto;
  gap: 8px; align-items: baseline;
  padding: 3px 6px 3px 0;
  border-left: 2px solid transparent;
  font-size: 12.5px;
}
.mdiff-was { border-left-color: hsl(var(--was-line)); background: hsl(var(--was-bg)); }
.mdiff-will { border-left-color: hsl(var(--will-line)); background: hsl(var(--will-bg)); }
.mdiff-mark { font: 12px var(--mono); text-align: center; }
.mdiff-was .mdiff-mark { color: hsl(var(--del)); }
.mdiff-will .mdiff-mark { color: hsl(var(--add)); }
.mdiff-val { font-family: var(--mono); font-variant-numeric: tabular-nums; }

/* Чип состояния - буквы в тонкой рамке, как в рабочих таблицах. */
.mchip {
  display: inline-block; padding: 1px 6px;
  border: 1px solid hsl(var(--rule-strong));
  border-radius: var(--chip-radius);
  font: 400 11.5px var(--mono); letter-spacing: 0.02em;
  color: hsl(var(--muted-foreground));
}
.mchip-good { color: hsl(var(--add)); border-color: #b7cfbe; }
.mchip-warn { color: hsl(var(--accent-ink)); border-color: #e0b7a5; }

/* ── Тарифы ─────────────────────────────────────────────────────────── */

.plans { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.plan {
  border: 1px solid hsl(var(--border));
  border-radius: var(--pub-radius);
  background: hsl(var(--card));
  padding: 22px;
  display: flex; flex-direction: column;
}
.plan-featured { border-color: hsl(var(--accent-line)); }
.plan .price {
  font: 700 28px var(--mono); font-variant-numeric: tabular-nums;
  margin: 10px 0 2px;
}
.plan .price-none { font: 600 20px var(--sans); color: hsl(var(--muted-foreground)); }
.plan .period { color: hsl(var(--dim)); font-size: 13px; }
.plan ul { list-style: none; margin: 16px 0 20px; padding: 0;
           display: grid; gap: 8px; }
.plan li { position: relative; padding-left: 20px; font-size: 14px;
           color: hsl(var(--muted-foreground)); }
.plan li::before { content: "·"; position: absolute; left: 6px;
                   color: hsl(var(--accent-line)); font-weight: 700; }
.plan .btn-primary, .plan .btn-outline { margin-top: auto; justify-content: center; }
.btn-outline {
  display: inline-flex; align-items: center; justify-content: center;
  border: 1px solid hsl(var(--border));
  border-radius: var(--pub-radius);
  padding: 10px 18px;
  font: 600 15px/1 var(--sans);
  color: hsl(var(--foreground));
  text-decoration: none;
}
.btn-outline:hover { border-color: hsl(var(--dim)); }

/* ── Форма заявки ───────────────────────────────────────────────────── */

.form-grid { display: grid; gap: 14px; max-width: 520px; }
.form-field label {
  display: block; margin-bottom: 5px;
  font: 500 var(--h2-fs) var(--mono);
  text-transform: uppercase; letter-spacing: 0.06em;
  color: hsl(var(--muted-foreground));
}
.form-field input, .form-field textarea {
  width: 100%; box-sizing: border-box;
  background: hsl(var(--field));
  border: 1px solid hsl(var(--input));
  border-radius: var(--control-radius);
  color: hsl(var(--foreground));
  font: var(--pub-text) var(--sans);
  padding: 9px 12px;
}
.form-field textarea { min-height: 96px; resize: vertical; line-height: 1.5; }
.form-field input:focus, .form-field textarea:focus {
  outline: 2px solid hsl(var(--accent-line));
  outline-offset: -1px;
  border-color: hsl(var(--accent-line));
}
.form-hint { font-size: 13px; color: hsl(var(--dim)); margin: 4px 0 0; }

/* ⚠️ ЛОВУШКА ДЛЯ БОТОВ. Поле уводится за экран, а не прячется display:none:
   часть ботов пропускает невидимое, но заполняет всё, до чего дотянулась.
   Человек его не увидит и не поймает табом (tabindex=-1 в разметке). */
.hp-field {
  position: absolute; left: -9999px; top: auto;
  width: 1px; height: 1px; overflow: hidden;
}

/* Сообщения формы - линией слева, как везде в проекте. */
.form-note {
  border: 0; border-left: 2px solid hsl(var(--border));
  padding: 10px 14px; margin: 0 0 18px;
  font-size: 14px; line-height: 1.55;
}
.form-note-ok { border-left-color: hsl(var(--add)); }
.form-note-bad { border-left-color: hsl(var(--del)); }

/* ── Узкий экран ────────────────────────────────────────────────────── */

@media (max-width: 900px) {
  .pub { --pub-h1: 34px; --pub-h2: 22px; --pub-section-y: 48px; }
  .hero { padding: 44px 0 36px; }
  .hero-grid, .who-grid, .feat, .steps, .plans, .trust {
    grid-template-columns: 1fr;
  }
  .pub-top-inner { flex-wrap: wrap; gap: 12px; }
  .pub-foot-inner { flex-direction: column; }
}

@media (prefers-reduced-motion: reduce) {
  .pub *, .pub *::before, .pub *::after {
    transition: none !important; animation: none !important;
  }
}
