/* ============================================================
 * START_MODULE_CONTRACT
 *   PURPOSE: терминальная тема W4 (UI-спека владельца): чёрный фон,
 *     янтарный фосфор (#bf8065), JetBrains Mono self-host (I-W4: БЕЗ CDN),
 *     мигающий курсор, лог-строки [OK]/[WARN]/[ERR]/[INFO]/[...],
 *     текстовый прогресс-бар [██████░░░░] 60%, reduced-motion, mobile
 *   SCOPE: только оформление; НИКАКИХ inline-стилей (CSP style-src 'self'),
 *     динамическая ширина — CSS-классы/custom properties (R2-MED-08)
 *   DEPENDS: static/fonts/JetBrainsMono-*.woff2 (OFL)
 *   ROLE: UI_COMPONENT
 * END_MODULE_CONTRACT
 * ============================================================ */

/* ── шрифты: self-host, I-W4 (никаких Google Fonts/CDN) ── */
@font-face {
  font-family: "JetBrains Mono";
  src: url("/static/fonts/JetBrainsMono-Regular.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "JetBrains Mono";
  src: url("/static/fonts/JetBrainsMono-Medium.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "JetBrains Mono";
  src: url("/static/fonts/JetBrainsMono-Bold.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

/* ── палитра терминала (UI-спека §2) ── */
:root {
  --bg: #000000;
  --primary: #bf8065;   /* янтарный фосфор (решение владельца 2026-08-24) */
  --secondary: #8a5f46;
  --error: #FF0040;
  --warning: #FFB800;
  --info: #00CCFF;
  --white: #FFFFFF;
  --progress-bg: #1a0f0a;
  --font-mono: "JetBrains Mono", "Fira Code", Consolas, "Courier New", monospace;
  /* CRT-слой (UI-спека §5.6): калибровано на тёмный янтарный фосфор (#bf8065) */
  --fx-scanlines: 0.15;
  --fx-bloom: 0.85;
  --fx-sweep: 0.14;
  --fx-noise: 0.06;
  --fx-vignette: 1;
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html, body {
  background: var(--bg);
  color: var(--primary);
  font-family: var(--font-mono);
  font-size: 14px;
  line-height: 1.6;
  min-height: 100vh;
  overflow-x: clip; /* декоративные «пятна» не создают горизонтальный скролл (clip не ломает sticky, в отличие от hidden) */
}

/* ── общие появления: fade-in + slide-up, stagger (UI-спека §4.3) ── */
@keyframes fade-up {
  from { opacity: 0; transform: translateY(20px); }
  to   { opacity: 1; transform: translateY(0); }
}
.landing > *, .done-wrap > * {
  animation: fade-up 0.4s ease both;
}
.landing > *:nth-child(2) { animation-delay: 0.15s; }
.landing > *:nth-child(3) { animation-delay: 0.30s; }
.landing > *:nth-child(4) { animation-delay: 0.45s; }
.done-wrap > *:nth-child(2) { animation-delay: 0.15s; }
.done-wrap > *:nth-child(3) { animation-delay: 0.30s; }
.done-wrap > *:nth-child(4) { animation-delay: 0.45s; }

/* ── мигающий курсор в поле ввода: нативная каретка янтарным (решение
   владельца 2026-08-12: декоративный `_` из заголовка убран, курсор — в
   поле, где вводится сайт). Само правило — у #domain ниже (caret-color). */

/* ── рабочие строки «[…]»: статичные (мигание убрано, решение владельца 2026-08-12) ── */
/* Раньше здесь был @keyframes pulse-wait (opacity 1→0.35) — пульсировали
   ВСЕ строки block_start/TLS-хинта; владелец попросил убрать мигание.
   Цвет строк .dots — .log-line.dots ниже (вторичный зелёный). */

/* ══════════════════ LANDING (/) ══════════════════ */

.landing {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  padding: 24px 16px;
  text-align: center;
}

.h1 {
  font-size: 36px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--primary);
  margin-bottom: 12px;
}

.subtitle {
  color: var(--secondary);
  font-size: 15px;
  margin-bottom: 36px;
}

/* ── форма: input + кнопка в ряд, consent СПРАВА от кнопки (D-6) ── */
.scan-form {
  width: 100%;
  max-width: 860px;
}
.form-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 12px;
}

#domain {
  width: 400px;
  height: 56px;
  background: var(--bg);
  border: 2px solid var(--primary);
  border-radius: 0;
  color: var(--primary);
  font-family: var(--font-mono);
  font-size: 18px;
  font-weight: 500;
  padding: 0 14px;
  caret-color: var(--primary); /* мигающий _-курсор ввода */
  outline: none;
}
#domain::placeholder { color: var(--secondary); }
#domain:focus { box-shadow: 0 0 10px rgba(191, 128, 101, 0.3); }

#submit-btn {
  width: 100px;
  height: 56px;
  background: var(--bg);
  border: 2px solid var(--primary);
  border-radius: 0;
  color: var(--primary);
  font-family: var(--font-mono);
  font-size: 14px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  cursor: pointer;
  transition: background 0.2s, color 0.2s;
}
#submit-btn:hover:not(:disabled) {
  background: var(--primary);
  color: #000000;
}
#submit-btn:active:not(:disabled) { transform: scale(0.97); }
#submit-btn:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

/* 2026-08-24: галочка согласия убрана с главной (решение владельца, Tier 1) */

.prompt {
  color: var(--secondary);
  font-size: 13px;
  margin-top: 18px;
  min-height: 21px;
}

.form-error {
  color: var(--error);
  font-size: 13px;
  margin-top: 12px;
  border: 1px solid var(--error);
  padding: 8px 12px;
  display: inline-block;
  max-width: 100%;
  overflow-wrap: anywhere; /* R2-MIN-04: длинные тексты ошибок не ломают вёрстку */
}
.form-error[hidden] { display: none; }

/* ══════════════════ SCANNING (/scan/{id}/{token}) ══════════════════ */

.terminal-wrap {
  display: flex;
  justify-content: center;
  align-items: center;
  min-height: 100vh;
  padding: 24px 16px;
  animation: fade-up 0.3s ease both;
}

.terminal-window {
  position: relative;
  overflow: hidden;
  width: 1000px;
  max-width: 100%;
  /* тёплый backlight в центре экрана (UI-спека §5.6) */
  background: radial-gradient(ellipse at 50% 40%, rgba(191,128,101,0.10), rgba(0,0,0,0) 72%), var(--bg);
  border: 1px solid var(--secondary);
  border-radius: 12px;          /* лёгкая кривизна ЭЛТ (UI-спека §5.6) */
  padding: 24px;
  /* корпус-безель (UI-спека §5.6): читается как физический монитор */
  box-shadow: 0 0 0 5px #0b0705, 0 0 0 6px #14100c, 0 18px 60px rgba(0,0,0,0.85);
}

.terminal-title {
  color: var(--secondary);
  font-size: 17px;
  margin-bottom: 12px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.log {
  height: 600px;
  overflow-y: auto;
  padding: 4px 2px 12px;
  font-size: 20px;
  line-height: 1.6;
  overflow-wrap: anywhere; /* R2-MIN-04: длинные строки ошибок/evidence */
}
/* тонкий янтарный скроллбар (UI-спека §5.4B) */
.log::-webkit-scrollbar { width: 10px; }
.log::-webkit-scrollbar-track { background: var(--bg); }
.log::-webkit-scrollbar-thumb { background: var(--secondary); }

.log-line { color: var(--primary); white-space: pre-wrap; }
.log-line.ok    { color: var(--primary); }
.log-line.warn  { color: var(--warning); }
.log-line.err   { color: var(--error); }
.log-line.info  { color: var(--info); }
.log-line.dots  { color: var(--secondary); }
.log-line.final { color: var(--primary); font-weight: 700; }

/* bloom (свечение люминофора, UI-спека §5.6): многослойный, светлее текста */
.log-line        { text-shadow: 0 0 1px rgba(238,204,176,0.85), 0 0 5px rgba(232,190,156,calc(var(--fx-bloom)*0.9)), 0 0 14px rgba(224,175,140,calc(var(--fx-bloom)*0.55)); }
.log-line.warn   { text-shadow: 0 0 2px rgba(255,184,0,0.6), 0 0 8px rgba(255,184,0,0.35), 0 0 18px rgba(255,184,0,0.22); }
.log-line.err    { text-shadow: 0 0 2px rgba(255,0,64,0.6), 0 0 8px rgba(255,0,64,0.35), 0 0 18px rgba(255,0,64,0.22); }
.log-line.info   { text-shadow: 0 0 2px rgba(0,204,255,0.55), 0 0 8px rgba(0,204,255,0.32), 0 0 18px rgba(0,204,255,0.2); }
.log-line.dots   { text-shadow: 0 0 1px rgba(138,95,70,0.5); }

.progress {
  border-top: 1px solid var(--secondary);
  padding-top: 10px;
  color: var(--primary);
  font-size: 18px;
  white-space: nowrap;
}
.progress-fill   { color: var(--primary); }        /* ████ — #bf8065 */
.progress-empty  { color: var(--progress-bg); }    /* ░░░░ — #1a0f0a */
.progress-pct    { color: var(--secondary); }
.progress-bracket { color: var(--secondary); }

/* ── «постоянная активность» (решение владельца 2026-08-24): шиммер + статус-бар ──
   Держат экран живым во время долгих блоков (TLS до 90 с): шиммер анимируется
   всегда, статус-бар показывает текущий блок и прошедшие секунды (1/с через JS). */
.scan-shimmer {
  margin: 6px 2px 0;
  height: 2px;
  background: linear-gradient(90deg, transparent 0%, rgba(191,128,101,0.45) 50%, transparent 100%);
  background-size: 40% 100%;
  background-repeat: no-repeat;
  animation: shimmer 1.4s linear infinite;
}
@keyframes shimmer {
  0%   { background-position: -40% 0; }
  100% { background-position: 140% 0; }
}
.scan-status {
  margin-top: 10px;
  color: var(--secondary);
  font-size: 14px;
  letter-spacing: 0.05em;
  min-height: 18px;
}

/* ── «Скан-шоу» (план v0.3): фиксированный сценарий 60 с ──
   Рабочие строки шоу (пролог/шаги/эпилог) и пост-обработки — приглушённые,
   чтобы не создавать впечатления «результатов» (DS-4/I-W3: находки в отчёте). */
.log-line.show-step,
.log-line.show-post { color: var(--secondary); }
/* финальная строка шоу («Проверки выполнены» / «Сканирование остановлено») */
.log-line.show-step.final { color: var(--primary); font-weight: 700; }
/* командные строки (dig/sslyze/whois/curl/…) — голубые, «сырой» терминал */
.log-line.show-cmd { color: var(--info); text-shadow: 0 0 2px rgba(0,204,255,0.5); }
/* прогресс при 100% — свечение заполнения (состояние классом, без inline, R2-m3) */
.progress--finished .progress-fill { text-shadow: 0 0 8px rgba(191,128,101,0.7); }
/* активный терминал — прогресс-курсор (a11y R2-m4) */
#terminal[aria-busy="true"] { cursor: progress; }

/* ══════════════════ T2 «Скан-шоу» (план v0.5 §10) ══════════════════
   Янтарный акцент на чувствительные зоны (левер 2), чипы подблоков
   (левер 5) и «пульс сканера» (левер: честный сигнал «работа идёт»,
   частота привязана к активной фазе — JS вешает класс t2-live). */
.log-line.t2-accent { color: var(--primary); text-shadow: 0 0 1px rgba(238,204,176,0.85), 0 0 6px rgba(232,190,156,calc(var(--fx-bloom)*0.8)); }
.log-line.t2-broken { color: var(--error); text-shadow: 0 0 2px rgba(255,0,64,0.55); }
/* аудит-след (левер: «процесс → отчёт», честно) */
.log-line.audit { color: var(--secondary); opacity: 0.72; font-size: 12px; letter-spacing: 0.04em; }

/* чипы подблоков web-фазы (crawl/paths/vhosts/sec) */
.subblock-row { display: flex; flex-wrap: wrap; gap: 6px 8px; margin: 4px 0 10px; }
.subblock-chip {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 3px 9px; border: 1px solid var(--secondary); border-radius: 2px;
  font-size: 12px; color: var(--secondary); letter-spacing: 0.03em;
  transition: color 0.2s, border-color 0.2s;
}
.subblock-chip.t2-accent { border-color: rgba(191,128,101,0.55); color: var(--primary); }
.subblock-chip.subblock--active { color: var(--white); border-color: var(--primary); animation: subblock-pulse 1.2s ease-in-out infinite; }
.subblock-chip.subblock--done { color: var(--secondary); opacity: 0.85; }
.subblock-chip.subblock--done::after { content: " ✓"; color: var(--primary); }
.subblock-chip.subblock--error { color: var(--error); border-color: var(--error); }
.subblock-chip.subblock--error::after { content: " — прервано"; }

/* пульс сканера: активная фаза ускоряет фоновое «дыхание» шиммера */
.terminal-wrap.t2-live .scan-shimmer { animation-duration: 0.8s; opacity: 0.95; }
@keyframes subblock-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.55; } }

/* ══════════════════ RESULT (/scan/{id}/{token}/done) ══════════════════ */

.done-wrap {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  min-height: 100vh;
  padding: 24px 16px;
  text-align: center;
}

.done-title {
  font-size: 24px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.15em;
  color: var(--primary);
  margin-bottom: 36px;
}

.report-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 280px;
  height: 64px;
  background: var(--primary);   /* единственный «залитый» элемент (UI-спека §6.3B) */
  color: #000000;
  font-family: var(--font-mono);
  font-size: 16px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  text-decoration: none;
  border: 2px solid var(--primary);
  transition: box-shadow 0.2s, transform 0.2s;
}
.report-btn:hover {
  box-shadow: 0 0 20px rgba(191, 128, 101, 0.5);
  transform: scale(1.02);
}
.report-btn:active { transform: scale(0.98); }

.summary {
  color: var(--secondary);
  font-size: 15px;
  margin-top: 28px;
  min-height: 24px;
}

.new-scan {
  color: var(--secondary);
  font-size: 13px;
  margin-top: 40px;
}
.new-scan:hover { color: var(--primary); }

/* ── CRT-оверлеи (UI-спека §5.6): сканлайны/glow-line/виньетка/noise/блик ── */
.fx-scanlines { position:absolute; inset:0; z-index:5; pointer-events:none; opacity: var(--fx-scanlines); background: repeating-linear-gradient(0deg, rgba(0,0,0,0.42) 0 1px, transparent 1px 3px); }
.fx-sweep { position:absolute; left:0; right:0; top:0; height:120px; z-index:4; pointer-events:none; background: linear-gradient(180deg, transparent, rgba(214,168,140,var(--fx-sweep)) 45%, rgba(214,168,140,calc(var(--fx-sweep)*0.8)) 55%, transparent); animation: crt-sweep 5s linear infinite; }
.fx-vignette { position:absolute; inset:0; z-index:6; pointer-events:none; opacity: var(--fx-vignette); background: radial-gradient(ellipse at 50% 42%, rgba(0,0,0,0) 46%, rgba(0,0,0,0.62) 100%); }
.fx-noise { position:absolute; inset:-20px; z-index:7; pointer-events:none; opacity: var(--fx-noise); background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='120'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/></filter><rect width='120' height='120' filter='url(%23n)' opacity='0.7'/></svg>"); animation: crt-noise 0.5s steps(3) infinite; }
.fx-glare { position:absolute; inset:0; z-index:8; pointer-events:none; background: linear-gradient(115deg, rgba(255,255,255,0.11) 0%, rgba(255,255,255,0.0) 34%, rgba(0,0,0,0) 62%, rgba(191,128,101,0.08) 100%); }
@keyframes crt-sweep { from { top:-120px; } to { top:100%; } }   /* top от контейнера; translateY% от собственной высоты — пол-экрана */
@keyframes crt-noise { 0%{transform:translate(0,0)} 33%{transform:translate(-12px,8px)} 66%{transform:translate(10px,-10px)} 100%{transform:translate(0,0)} }

/* ── a11y: фокус виден (Tab-навигация, UI-спека §9.3) ── */
a:focus-visible,
button:focus-visible,
input:focus-visible {
  outline: 2px solid var(--info);
  outline-offset: 2px;
}

/* ── R2-MIN-05: prefers-reduced-motion отключает анимации ── */
@media (prefers-reduced-motion: reduce) {
  * {
    animation: none !important;
    transition: none !important;
  }
}

/* ── mobile <480px (UI-спека §9.4): input+кнопка вертикально, терминал 100% ── */
@media (max-width: 480px) {
  .h1 { font-size: 24px; }
  .form-row {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }
  #domain,
  #submit-btn {
    width: 100%;
  }
  .terminal-window { width: 100%; }
  .log { height: 50vh; }
}

/* ══════════════════ LANDING (стандартный, скоуп body.landing) ══════════════════
   One-pager маркетинговый лендинг (/). Все правила — под скоупом
   body[data-page="landing"] / .landing-* и НЕ протекают в терминальные
   scan/report (там data-page="scan"/"done"/"report"). Палитра: тёплая светлая.
   DESIGN-SKIN «Тёплый доверительный сервис» (2026-08-26): крем + изумруд-доверие
   + янтарь-жизнь, бесшовные переходы секций (не «коробки»). Hero и меню —
   терминальные (не трогаем).
   I-W4: без inline-стилей; состояния — классами/атрибутами. */

/* RATIONALE (2026-09-27, R1-R3): токены светлой дизайн-системы общие для лендинга И внутренних
   публичных страниц (data-page="public" — пилот /proverka-sajta-onlajn). Блоки .landing-block/
   .landing-card/.landing-cmp/.landing-faq объявлены БЕЗ скоупа, но читают эти переменные, поэтому
   без расширения селектора на новой странице фон/цвета разваливались. Терминальные страницы
   (scan/done/report/verify) и /methodology (свой тёмный .methodology) не затронуты. */
body[data-page="landing"],
body[data-page="public"] {
  /* палитра warm-trust */
  --paper: #faf7f2;
  --card: #fffdf9;
  --tone-1: #f2ede1;
  --tone-2: #efe8da;
  --ink: #2b2a26;
  --ink-soft: #57534a;
  --ink-muted: #5d5a52;
  --teal: #0f766e;
  --teal-deep: #115e59;
  --amber: #d97706;
  --amber-deep: #b45309;
  --coral: #c2410c;
  --olive: #4d7c0f;
  --shadow-card: 0 1px 2px rgba(43, 42, 38, .05), 0 18px 36px -18px rgba(43, 42, 38, .22);
  --radius-card: 20px;
  --landing-bg: #faf7f2;
  --landing-bg-alt: #f5efe4;
  /* система фонов лендинга: 9 тонов секций (план v0.3) — плавная волна свет→тень→свет (ред. 2026-08-27) */
  --landing-tone-what: #faf7f2;
  --landing-tone-proof: #f8f3eb;
  --landing-tone-how: #f6efe5;
  --landing-tone-report: #f5ede1;
  --landing-tone-forwho: #f3e9da; /* пик «тени» — в середине, чтобы волна была монотонной */
  --landing-tone-plans: #f5ede1;
  --landing-tone-compare: #f6efe5;
  --landing-tone-limits: #f8f3eb;
  --landing-tone-faq: #faf7f2;
  --landing-text: #2b2a26;
  --landing-muted: #57534a;
  --landing-accent: #0f766e;
  --landing-accent-dark: #115e59;
  --landing-border: rgba(43, 42, 38, 0.09);
  --landing-danger: #c2410c;
  background: var(--landing-bg);
  color: var(--landing-text);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    "Helvetica Neue", Arial, sans-serif;
  font-size: 16px;
  line-height: 1.6;
  overflow-x: clip; /* цветные «пятна» уходят за край вьюпорта без горизонтального скролла */
}

/* ── hero: ТЕРМИНАЛЬНЫЙ (как было, D-5) — тёмный фон, янтарный текст, JetBrains Mono.
   Скоуп body[data-page="landing"] .landing — только hero; светлые маркетинг-блоки
   (.landing-*) не затронуты. Дети (.h1/.subtitle/#domain/#submit-btn/.prompt/.form-error)
   берут оригинальные терминальные правила из блока выше. ── */
body[data-page="landing"] .landing {
  min-height: calc(100vh - 65px);
  padding: 96px 16px 28px;
  background: var(--bg);
  color: var(--primary);
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
body[data-page="landing"] #scan-form {
  scroll-margin-top: 96px; /* якорь CTA «Проверить сайт» — под липкой шапкой */
}

/* ── содержимое hero: центрируется, низ отдан под микростроку и scroll-кью ── */
.landing-hero-main {
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
}

/* ── микрокопия под формой (над scroll-кью) ── */
.landing-micro {
  margin-top: 0;
  padding-top: 20px;
  color: var(--secondary);
  font-size: 13px;
}

/* ── scroll-кью внизу hero: «Что проверяем?» + мягкая анимация вниз (указатель на #what) ── */
.landing-scroll {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  margin-top: 8px;
  color: var(--secondary);
  font-size: 13px;
}
.landing-scroll-chevron {
  width: 8px;
  height: 8px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  animation: landing-scroll-bounce 1.8s ease-in-out infinite;
}
@keyframes landing-scroll-bounce {
  0%, 100% { transform: rotate(45deg) translateY(0); opacity: 0.45; }
  50%      { transform: rotate(45deg) translateY(4px); opacity: 1; }
}
@media (prefers-reduced-motion: reduce) {
  .landing-scroll-chevron { animation: none; }
}

/* ── кнопка «наверх» (появляется при прокрутке, возвращает к hero) — стиль как у «ВВОД» ── */
.landing-to-top {
  position: fixed;
  right: 24px;
  bottom: 24px;
  z-index: 90;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 10px 18px;
  background: var(--bg);
  border: 2px solid var(--primary);
  border-radius: 8px;
  color: var(--primary);
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 14px;
  cursor: pointer;
  transition: background 0.2s, color 0.2s;
  box-shadow: 0 6px 24px rgba(0, 0, 0, 0.35);
}
.landing-to-top[hidden] { display: none !important; }
.landing-to-top:hover {
  background: var(--primary);
  color: #000000;
}

/* ── липкая шапка + бургер + навигация ── */
.landing-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--bg);
  border-bottom: 1px solid var(--secondary);
}
.landing-header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  min-height: 64px;
  padding-top: 8px;
  padding-bottom: 8px;
}
.landing-container {
  width: 100%;
  max-width: 1080px;
  margin: 0 auto;
  padding-left: 20px;
  padding-right: 20px;
}
.landing-logo,
.landing-nav a {
  box-sizing: border-box;
}
.landing-logo {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  font-size: 20px;
  font-weight: 700;
  color: var(--primary);
  text-decoration: none;
  letter-spacing: 0.02em;
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.landing-logo::after {
  content: ".";
  color: var(--secondary);
}
.landing-burger {
  display: none; /* показывается на мобильном (медиа-запрос ~840px) */
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 5px;
  width: 44px;
  height: 44px;
  padding: 0;
  background: var(--bg);
  border: 1px solid var(--secondary);
  border-radius: 10px;
  cursor: pointer;
}
.landing-burger-bar {
  display: block;
  width: 20px;
  height: 2px;
  border-radius: 1px;
  background: var(--primary);
}
.landing-nav {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 6px 18px;
}
.landing-nav a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: 10px 2px;
  color: var(--primary);
  text-decoration: none;
  font-size: 15px;
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.landing-nav a:hover { color: #e9bd9a; }

/* H-04: активный раздел (aria-current, выставляется app.js через IntersectionObserver) */
.landing-nav a[aria-current="true"] {
  color: #e9bd9a;
  box-shadow: inset 0 -2px 0 var(--secondary);
}
@media (max-width: 840px) {
  .landing-nav a[aria-current="true"] {
    border-left: 3px solid var(--secondary);
    padding-left: 12px;
    box-shadow: none;
    background: rgba(191, 128, 101, 0.08);
  }
}

/* H-03: компакт-режим 841-1080px — шапка в одну строку, высота 64px */
@media (min-width: 841px) and (max-width: 1080px) {
  .landing-header-inner { gap: 10px; }
  .landing-logo { font-size: 18px; }
  .landing-nav { flex-wrap: nowrap; gap: 4px 4px; }
  .landing-nav a { font-size: 14px; letter-spacing: 0; white-space: nowrap; }
}
/* H-06: CTA «Проверить сайт» в шапке — янтарная кнопка под терминальный стиль
   (перекрывает бирюзовый .landing-cta: на чёрной шапке янтарный в тему герой-блока) */
.landing-nav .landing-header-cta {
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: 14px;
  font-weight: 600;
  padding: 9px 16px;
  background: var(--primary);
  border-color: var(--primary);
  color: #000;
  border-radius: 8px;
}
.landing-nav .landing-header-cta:hover {
  background: #e9bd9a;
  color: #000;
  border-color: #e9bd9a;
}

/* ── CTA / кнопки ── */
.landing-cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 10px 20px;
  background: var(--landing-accent);
  border: 1px solid var(--landing-accent);
  border-radius: 10px;
  color: #ffffff;
  font-family: inherit;
  font-size: 15px;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
  transition: background 0.15s ease;
}
.landing-cta:hover {
  background: var(--landing-accent-dark);
  color: #ffffff;
}
/* заглушка «скоро»: выглядит как кнопка, но НЕ активна (aria-disabled, БЕЗ disabled,
   чтобы клик перехватывался JS и показывал сообщение, L3) */
.landing-stub {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 10px 20px;
  background: var(--landing-bg-alt);
  border: 1px dashed #c9c9cc;
  border-radius: 10px;
  color: var(--landing-muted);
  font-family: inherit;
  font-size: 15px;
  font-weight: 600;
  cursor: not-allowed;
}

/* ── секции маркетинга (ВНЕ <main class="landing">) ── */
.landing-block {
  position: relative;
  background: var(--landing-bg);
  padding: 72px 0;
  scroll-margin-top: 84px; /* якоря под липкой шапкой */
}
/* ── Система фонов лендинга (2026-08-27, план v0.3, аудиты R1+R2) ──
   Только фон/связки. Структура, контент секций и терминальный hero/menu НЕ тронуты. */
/* ШАГ 0 — замена старой «дизайн-скин» системы бликов: глобальные ::before/::after
   сброшены (фон + геометрия), чтобы ни одна секция не несла остатки старых «пятен». */
.landing-block::before,
.landing-block::after {
  background: none;
  position: absolute;
  z-index: 0;
  pointer-events: none;
  content: "";
  top: auto;
  bottom: auto;
  left: auto;
  right: auto;
  width: auto;
  height: auto;
  border-radius: 0;
  margin: 0;
}
.landing-block > .landing-container { position: relative; z-index: 1; }
.landing-block--alt { background: var(--landing-bg-alt); }

/* ШАГ 1 — тон каждой секции (только background-color, НЕ shorthand — иначе id-специфичность
   сбросит background-image фактуры .landing-block--alt; R1-S3) */
#what     { background-color: var(--landing-tone-what); }
#proof    { background-color: var(--landing-tone-proof); }
#how      { background-color: var(--landing-tone-how); }
#report   { background-color: var(--landing-tone-report); }
#forwho   { background-color: var(--landing-tone-forwho); }
#plans    { background-color: var(--landing-tone-plans); }
#compare  { background-color: var(--landing-tone-compare); }
#limits   { background-color: var(--landing-tone-limits); }
#faq      { background-color: var(--landing-tone-faq); }

/* ШАГ 2 — атмосферные свечения (per-секция ::before, альфа ≤0.06; #faq свечение убрано — реш. владельца 2026-08-27) */
#proof::before,  #how::before   { --glow: rgba(217,119,6,.06); }   /* янтарь — перекликается с акцентом заголовков */
#report::before, #forwho::before{ --glow: rgba(15,118,110,.05); }  /* teal — вторичный акцент (доверие/отчёт) */
#plans::before   { --glow: rgba(194,65,12,.04); }                  /* коралл — лёгкий «нагрев» около цен/риска */
#proof::before,
#how::before,
#report::before,
#forwho::before,
#plans::before {
  background: radial-gradient(circle, var(--glow) 0%, transparent 65%);
  position: absolute;
  z-index: 0;
  pointer-events: none;
  content: "";
  top: 10%;
  right: -120px;
  width: 420px;
  height: 420px;
  border-radius: 50%;
}

/* ШАГ 3 — швы между секциями (::after, 24px внизу, плавный переход в тон следующей; R1-C2 полная геометрия) */
#what::after,
#proof::after,
#how::after,
#report::after,
#forwho::after,
#plans::after,
#compare::after,
#limits::after,
#faq::after {
  position: absolute;
  z-index: 0;
  pointer-events: none;
  content: "";
  top: auto;
  bottom: 0;
  left: 0;
  right: 0;
  width: auto;
  height: 24px;
  border-radius: 0;
  margin: 0;
}
#what::after    { background: linear-gradient(to bottom, var(--landing-tone-what),    var(--landing-tone-proof)); }
#proof::after   { background: linear-gradient(to bottom, var(--landing-tone-proof),   var(--landing-tone-how)); }
#how::after     { background: linear-gradient(to bottom, var(--landing-tone-how),     var(--landing-tone-report)); }
#report::after  { background: linear-gradient(to bottom, var(--landing-tone-report),  var(--landing-tone-forwho)); }
#forwho::after  { background: linear-gradient(to bottom, var(--landing-tone-forwho),  var(--landing-tone-plans)); }
#plans::after   { background: linear-gradient(to bottom, var(--landing-tone-plans),   var(--landing-tone-compare)); }
#compare::after { background: linear-gradient(to bottom, var(--landing-tone-compare), var(--landing-tone-limits)); }
#limits::after  { background: linear-gradient(to bottom, var(--landing-tone-limits),  var(--landing-tone-faq)); }
#faq::after     { background: linear-gradient(to bottom, var(--landing-tone-faq),     var(--landing-bg-alt)); } /* → футер */

/* ШАГ 4 — фактура «бумага» на --alt секциях (#how,#forwho,#compare,#faq); перекрёстные диагонали (R1-M3) */
.landing-block--alt {
  background-image:
    repeating-linear-gradient(45deg, rgba(43,42,38,.02) 0 1px, transparent 1px 8px),
    repeating-linear-gradient(-45deg, rgba(43,42,38,.015) 0 1px, transparent 1px 8px);
}

/* ШАГ 5 — мобильная адаптация свечений (R2-M2): компактнее, чтобы «акварель» не уходила за экран */
@media (max-width: 640px) {
  #proof::before,
  #how::before,
  #report::before,
  #forwho::before,
  #plans::before {
    right: -40px;
    width: 240px;
    height: 240px;
  }
}
.landing-block h2 {
  font-size: clamp(28px, 3.2vw, 40px);
  line-height: 1.16;
  letter-spacing: -0.02em;
  color: var(--ink);
  margin-bottom: 12px;
}
.landing-block h2 em {
  font-style: normal;
  color: var(--amber);
  text-decoration: underline;
  text-decoration-color: rgba(217, 119, 6, .45);
  text-decoration-thickness: 4px;
  text-underline-offset: 7px;
}
.landing-lead {
  color: var(--landing-muted);
  font-size: 16px;
  max-width: 680px;
  margin-bottom: 36px;
}

/* ── флюид-сетки: auto-fit/minmax, без фиксированных пиксельных колонок ── */
.landing-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 16px;
}
.landing-grid--3 {
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}
.landing-card {
  background: var(--card);
  border: 1px solid rgba(43, 42, 38, .08);
  border-radius: var(--radius-card);
  padding: 20px;
  box-shadow: var(--shadow-card);
  transition: transform .25s ease, box-shadow .25s ease;
}
.landing-card:hover { transform: translateY(-3px); box-shadow: 0 2px 4px rgba(43, 42, 38, .06), 0 30px 50px -22px rgba(43, 42, 38, .30); }
}
.landing-card h3 {
  font-size: 17px;
  margin-bottom: 8px;
}
.landing-card p {
  color: var(--landing-muted);
  font-size: 14.5px;
}
.landing-more {
  margin-top: 28px;
}
.landing-more a {
  display: inline-block;
  min-height: 44px;
  padding: 10px 18px;
  border: 1px solid var(--landing-accent);
  border-radius: 8px;
  color: var(--landing-accent);
  font-weight: 600;
  text-decoration: none;
  transition: background-color 0.15s ease, color 0.15s ease;
}
.landing-more a:hover {
  background: var(--landing-accent);
  color: #fff;
  text-decoration: none;
}
.landing-more a:focus-visible {
  outline: 2px solid var(--landing-accent);
  outline-offset: 2px;
}

/* ── #what (L-PB-02): читаемость + акцент-полоска (скоуп, чтобы не задеть др. блоки) ── */
#what .landing-lead { font-size: 18px; line-height: 1.6; margin-bottom: 40px; }
#what .landing-grid { gap: 24px; }
#what .landing-card { position: relative; padding: 28px 24px 24px; }
#what .landing-card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 10px;
  background: rgba(15, 118, 110, 0.08);
  color: var(--landing-accent);
  margin-bottom: 14px;
}
#what .landing-card-icon svg { width: 22px; height: 22px; }
#what .landing-card h3 { font-size: 18px; margin-bottom: 12px; }
#what .landing-card p { font-size: 15px; line-height: 1.6; }
@media (max-width: 840px) {
  #what .landing-lead { font-size: 17px; margin-bottom: 28px; }
  #what .landing-grid { gap: 16px; }
  #what .landing-card { padding: 24px 20px 20px; }
}
@media (max-width: 480px) {
  #what .landing-lead { font-size: 16px; }
  #what .landing-card p { font-size: 14.5px; }
}

/* ── #forwho (L-PB-05): читаемость + акцент-полоска — в связке с #what ── */
#forwho .landing-lead { font-size: 18px; line-height: 1.6; margin-bottom: 40px; }
#forwho .landing-grid { gap: 24px; }
#forwho .landing-card { position: relative; padding: 28px 24px 24px; }
#forwho .landing-card::before { content: ""; display: block; width: 32px; height: 3px; border-radius: 2px; background: var(--landing-accent); margin-bottom: 12px; }
#forwho .landing-card h3 { font-size: 18px; margin-bottom: 12px; }
#forwho .landing-card p { font-size: 15px; line-height: 1.6; }
@media (max-width: 840px) {
  #forwho .landing-lead { font-size: 17px; margin-bottom: 28px; }
  #forwho .landing-grid { gap: 16px; }
  #forwho .landing-card { padding: 24px 20px 20px; }
}
@media (max-width: 480px) {
  #forwho .landing-lead { font-size: 16px; }
  #forwho .landing-card p { font-size: 14.5px; }
}

/* ── #how: 4 шага, тёплые карточки ── */
.landing-steps {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 16px;
}
.landing-step {
  background: var(--landing-bg);
  border: 1px solid var(--landing-border);
  border-radius: 12px;
  padding: 20px;
}
.landing-step-num {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 50%;
  background: var(--landing-accent);
  color: #ffffff;
  font-weight: 700;
  font-size: 15px;
  margin-bottom: 12px;
}
.landing-step h3 {
  font-size: 17px;
  margin-bottom: 8px;
}
.landing-step p {
  color: var(--landing-muted);
  font-size: 14.5px;
}

/* ── #how (L-PB-03): тёплые карточки, цветные номера 01–04 по «дорожке цикла» ── */
#how .landing-steps { position: relative; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 24px; }
#how .landing-lead { font-size: 18px; line-height: 1.6; margin-bottom: 40px; }
#how .landing-step {
  position: relative; z-index: 1;
  background: var(--card);
  border: 1px solid rgba(43, 42, 38, .07);
  border-radius: var(--radius-card);
  padding: 26px 24px 28px;
  box-shadow: var(--shadow-card);
  transition: transform .25s ease, box-shadow .25s ease;
}
#how .landing-step:hover { transform: translateY(-4px); box-shadow: 0 2px 4px rgba(43, 42, 38, .06), 0 30px 50px -22px rgba(43, 42, 38, .30); }
#how .landing-step-num {
  display: inline-flex; align-items: center; justify-content: center;
  width: 52px; height: 52px; border-radius: 14px;
  color: #ffffff; font-size: 19px; font-weight: 800; letter-spacing: .02em;
  margin-bottom: 14px;
}
#how .landing-step:nth-child(1) { border-top: 3px solid var(--teal); }
#how .landing-step:nth-child(2) { border-top: 3px solid var(--amber); }
#how .landing-step:nth-child(3) { border-top: 3px solid var(--coral); }
#how .landing-step:nth-child(4) { border-top: 3px solid var(--olive); }
#how .landing-step:nth-child(1) .landing-step-num { background: var(--teal); box-shadow: 0 10px 18px -10px rgba(15, 118, 110, .75); }
#how .landing-step:nth-child(2) .landing-step-num { background: var(--amber-deep); box-shadow: 0 10px 18px -10px rgba(180, 83, 9, .75); }
#how .landing-step:nth-child(3) .landing-step-num { background: var(--coral); box-shadow: 0 10px 18px -10px rgba(194, 65, 12, .75); }
#how .landing-step:nth-child(4) .landing-step-num { background: var(--olive); box-shadow: 0 10px 18px -10px rgba(77, 124, 15, .75); }
#how .landing-step h3 { font-size: 18px; font-weight: 800; letter-spacing: -0.01em; line-height: 1.3; color: var(--ink); margin-bottom: 8px; }
#how .landing-step p { font-size: 15px; line-height: 1.6; color: var(--ink-muted); }
#how .landing-steps::before { content: ""; position: absolute; z-index: 0; top: 52px; left: 12.5%; right: 12.5%; border-top: 2px dashed rgba(180, 83, 9, .35); }
@media (max-width: 900px) {
  #how .landing-steps { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
  #how .landing-steps::before { display: none; }
  #how .landing-lead { font-size: 17px; margin-bottom: 28px; }
  #how .landing-step { padding: 24px 22px 26px; }
}
@media (max-width: 560px) {
  #how .landing-steps { grid-template-columns: 1fr; gap: 20px; }
  #how .landing-steps::before { display: block; left: 46px; right: auto; top: 0; bottom: 0; border-top: none; border-left: 2px dashed rgba(180, 83, 9, .35); }
  #how .landing-lead { font-size: 16px; }
  #how .landing-step { padding: 22px 20px 24px; }
  #how .landing-step p { font-size: 14.5px; }
}

/* ── #report: демо-карточка находки + вкладки (radio, без JS) ── */
.landing-finding {
  background: var(--card);
  border: 1px solid rgba(43, 42, 38, .08);
  border-left: 4px solid var(--landing-danger);
  border-radius: var(--radius-card);
  padding: 20px;
  box-shadow: var(--shadow-card);
}
.landing-finding-head {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
  margin-bottom: 10px;
}
.landing-finding-head h3 {
  font-size: 17px;
}
.landing-badge {
  display: inline-flex;
  align-items: center;
  min-height: 28px;
  padding: 4px 10px;
  border-radius: 999px;
  font-size: 12.5px;
  font-weight: 700;
  letter-spacing: 0.02em;
}
.landing-badge--high {
  background: #fbe9e0;
  color: #b33d0c;
}
.landing-finding-text {
  color: var(--landing-text);
  font-size: 15px;
  margin-bottom: 6px;
}
.landing-finding-sec {
  color: var(--landing-muted);
  font-size: 13px;
  margin-top: 10px;
}
.landing-finding-sec code {
  font-family: "JetBrains Mono", Consolas, "Courier New", monospace;
  font-size: 12.5px;
  background: var(--landing-bg-alt);
  border: 1px solid var(--landing-border);
  border-radius: 6px;
  padding: 2px 6px;
  overflow-wrap: anywhere;
}

/* ── #report (L-PB-04): читаемость в паритет с #what/#how ── */
#report .landing-finding { padding: 24px; }
#report .landing-finding-text { font-size: 16px; }
#report .landing-finding-sec { font-size: 14px; line-height: 1.6; }

/* ── #report (рефрейм, L-PB-04): строка-резюме ── */
.landing-report-summary { font-size: 16px; line-height: 1.6; margin: 20px 0; color: var(--landing-text); }
.landing-report-summary b { color: var(--landing-accent); }

/* ── #report: подпись + карусель карточек находок ── */
.landing-report-caption { color: var(--landing-muted); font-size: 14px; margin: 26px 0 4px; }
.landing-badge--medium { background: #fdeeda; color: #a04a08; }
.landing-badge--ok { background: #e9f2e9; color: #3f6212; }
.landing-report-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 20px;
  margin-top: 8px;
}
@media (max-width: 840px) {
  .landing-report-grid { grid-template-columns: 1fr; }
}
#what .landing-card p.landing-card-sub {
  color: var(--landing-muted);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0.01em;
  margin: -6px 0 10px;
}
.landing-faq summary { cursor: pointer; }
.landing-faq summary:focus-visible { outline: 2px solid var(--landing-accent); outline-offset: 2px; border-radius: 6px; }
.landing-faq summary::marker { color: var(--landing-accent); }

/* ── #compare: таблица ── */
.landing-cmp-wrap {
  overflow-x: auto;
}
.landing-cmp {
  width: 100%;
  border-collapse: collapse;
  font-size: 15px;
  background: var(--landing-bg);
}
.landing-cmp th,
.landing-cmp td {
  border: 1px solid var(--landing-border);
  padding: 12px 14px;
  text-align: left;
  vertical-align: top;
}
.landing-cmp thead th {
  background: var(--landing-bg-alt);
  font-weight: 600;
}
.landing-cmp tbody th {
  font-weight: 600;
  white-space: nowrap;
}
.landing-cmp .landing-cmp-best {
  color: var(--landing-accent);
}
/* L-PB-06: подсветить «нашу» колонку стражсайта.рф (2-й столбец) — конверсионный акцент */
#compare .landing-cmp thead th:nth-child(2) { background: rgba(15, 118, 110, 0.08); }
#compare .landing-cmp tbody td:nth-child(2) { background: rgba(15, 118, 110, 0.045); }

/* ── #plans: 3 колонки тарифов ── */
.landing-plans {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 20px;
  align-items: stretch;
}
.landing-plan {
  display: flex;
  flex-direction: column;
  background: var(--card);
  border: 1px solid rgba(43, 42, 38, .08);
  border-radius: 14px;
  padding: 24px;
  box-shadow: var(--shadow-card);
}
.landing-plan--featured {
  border: 2px solid var(--landing-accent);
  box-shadow: 0 10px 28px rgba(15, 118, 110, 0.16);
}
.landing-plan h3 {
  font-size: 18px;
}
.landing-plan-sub {
  color: var(--landing-muted);
  font-size: 13.5px;
  margin-top: 2px;
}
.landing-price {
  font-size: 32px;
  font-weight: 700;
  line-height: 1.2;
  margin: 14px 0 4px;
}
.landing-price-unit {
  font-size: 15px;
  font-weight: 400;
  color: var(--landing-muted);
  margin-left: 4px;
}
.landing-price-ladder {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 10px;
  margin: 14px 0 2px;
}
.landing-price-old,
.landing-price-mid {
  color: var(--landing-muted);
  font-size: 15px;
  text-decoration: line-through;
}
.landing-price-new {
  font-size: 32px;
  font-weight: 700;
  line-height: 1.2;
}
.landing-price-note {
  color: var(--landing-muted);
  font-size: 13px;
}
.landing-plan ul {
  list-style: none;
  margin: 16px 0 24px;
  flex: 1;
}
.landing-plan li {
  position: relative;
  padding: 6px 0 6px 24px;
  font-size: 14.5px;
}
.landing-plan li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--landing-accent);
  font-weight: 700;
}
.landing-plans-note {
  margin-top: 20px;
  color: var(--landing-muted);
  font-size: 13.5px;
}
/* L-PB-07: читаемость фич в связке с остальными блоками + усиление featured-тарифа */
#plans .landing-plan li { font-size: 15px; line-height: 1.6; }
#plans .landing-plan--featured { background: rgba(15, 118, 110, 0.05); }

/* ── #limits: «Мы делаем / Мы не делаем» + «Данные и закон» ── */
.landing-cols {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 16px;
}
.landing-do,
.landing-dont {
  list-style: none;
  margin-top: 8px;
}
.landing-do li,
.landing-dont li {
  position: relative;
  padding: 6px 0 6px 24px;
  font-size: 14.5px;
  color: var(--landing-muted);
}
.landing-do li::before {
  content: "✓";
  position: absolute;
  left: 0;
  color: var(--olive);
  font-weight: 700;
}
.landing-dont li::before {
  content: "✕";
  position: absolute;
  left: 0;
  color: var(--coral);
  font-weight: 700;
}
.landing-card--law {
  margin-top: 16px;
}
.landing-card--law p {
  color: var(--landing-text);
}
/* L-PB-08: паддинг карточек в связке с остальными блоками + читаемость списков */
#limits .landing-card { padding: 24px; }
#limits .landing-do li,
#limits .landing-dont li { font-size: 15px; line-height: 1.6; }
/* L-PB-08: 2 карточки (делаем/не делаем) — ровно 2 колонки, без пустой 3-й ячейки */
#limits .landing-cols { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 840px) {
  #limits .landing-cols { grid-template-columns: 1fr; }
}

/* ── #faq ── */
.landing-faq {
  display: grid;
  gap: 12px;
}
.landing-faq details {
  background: var(--landing-bg);
  border: 1px solid var(--landing-border);
  border-radius: 12px;
  padding: 16px 20px;
}
.landing-faq summary {
  cursor: pointer;
  font-weight: 600;
  font-size: 16px;
  min-height: 44px;
  display: flex;
  align-items: center;
  list-style: none;
}
.landing-faq summary::-webkit-details-marker { display: none; }
.landing-faq summary::after {
  content: "▾";
  margin-left: auto;
  color: var(--landing-muted);
  transition: transform 0.15s ease;
}
.landing-faq details[open] summary::after { transform: rotate(180deg); }
.landing-faq summary:focus-visible { outline: 2px solid var(--landing-accent); outline-offset: 2px; }
.landing-faq details p {
  color: var(--landing-muted);
  font-size: 15px;
  line-height: 1.6;
  margin-top: 8px;
}

/* ── футер ── */
.landing-footer {
  background: var(--landing-bg-alt);
  border-top: none; /* 2026-08-27: убрана 1px линия — шов #faq→футер бесшовный (реш. владельца, R2-M1) */
  padding: 48px 0 40px;
  font-size: 14px;
  color: var(--landing-muted);
}
.landing-footer-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 24px;
  margin-bottom: 28px;
}
.landing-footer h3 {
  font-size: 15px;
  color: var(--landing-text);
  margin-bottom: 10px;
}
.landing-footer a {
  display: block;
  padding: 6px 0;
  color: var(--landing-muted);
  text-decoration: none;
}
.landing-footer a:hover { color: var(--landing-accent); }
.landing-footer p { margin-bottom: 4px; }
.landing-footer-gov {
  margin-top: 10px;
  font-size: 13px;
}
.landing-footer-note {
  border-top: 1px solid var(--landing-border);
  padding-top: 16px;
  font-size: 13px;
}
/* ── соцсети в подвале (Дзен / ВКонтакте): монохром, hover → акцент ── */
.landing-footer .landing-social {
  display: flex;
  align-items: center;
  gap: 10px;
  margin-top: 14px;
}
.landing-footer .landing-social a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  padding: 0;
  border-radius: 50%;
  border: 1px solid var(--landing-border);
  color: var(--landing-muted);
  transition: color .15s ease, border-color .15s ease, background-color .15s ease;
}
.landing-footer .landing-social a:hover {
  color: var(--landing-accent);
  border-color: var(--landing-accent);
  background-color: rgba(0, 0, 0, 0.04);
}
.landing-footer .landing-social a:focus-visible {
  outline: 2px solid var(--landing-accent);
  outline-offset: 2px;
}
.landing-footer .landing-social svg {
  display: block;
  width: 17px;
  height: 17px;
}

/* ── модалки (dialog; hidden → display:none!important, чтобы flex не перебивал) ── */
.landing-modal[hidden] {
  display: none !important;
}
.landing-modal {
  position: fixed;
  inset: 0;
  z-index: 200;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  background: rgba(26, 26, 26, 0.55); /* подложка: клик по ней закрывает (JS) */
}
.landing-modal-dialog {
  position: relative;
  width: 100%;
  max-width: 460px;
  max-height: calc(100vh - 40px);
  overflow-y: auto;
  background: var(--landing-bg);
  border-radius: 14px;
  padding: 28px;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.25);
}
.landing-modal-dialog h3 {
  font-size: 20px;
  margin-bottom: 8px;
  padding-right: 32px;
}
.landing-modal-close {
  position: absolute;
  top: 12px;
  right: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  padding: 0;
  background: var(--landing-bg-alt);
  border: 1px solid var(--landing-border);
  border-radius: 10px;
  color: var(--landing-muted);
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
}
.landing-modal-close:hover {
  color: var(--landing-text);
  border-color: var(--landing-muted);
}
.landing-modal-note {
  margin: 12px 0 4px;
  padding: 10px 12px;
  background: var(--landing-bg-alt);
  border-left: 3px solid var(--landing-accent);
  border-radius: 8px;
  font-size: 14px;
  color: var(--landing-text);
}
.landing-modal-actions {
  display: flex;
  flex-direction: column;
  gap: 12px;
  margin-top: 16px;
}

/* ── модалка ВЫБОРА ПРОВЕРКИ: терминальный стиль херо-блока (2026-09-01).
   Scope ТОЛЬКО #tier-modal — лид-модалка остаётся светлой («тёплый сервис»).
   Элементы повторяют визуал херо: тёмный фон, 2px янтарная рамка, JetBrains Mono,
   кнопки как «ВВОД» (инверсия на hover). ── */
#tier-modal .landing-modal-dialog {
  background: var(--bg);
  border: 2px solid var(--primary);
  border-radius: 0;
  font-family: var(--font-mono);
  color: var(--primary);
  box-shadow: 0 0 0 1px var(--secondary), 0 18px 60px rgba(0, 0, 0, 0.85);
}
#tier-modal .landing-modal-dialog h3 {
  color: var(--primary);
  font-family: var(--font-mono);
  font-size: 20px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
#tier-modal .landing-modal-note {
  background: rgba(191, 128, 101, 0.08);
  border-left: 3px solid var(--primary);
  color: var(--primary);
}
#tier-modal .landing-modal-close {
  background: var(--bg);
  border: 1px solid var(--primary);
  border-radius: 0;
  color: var(--primary);
  font-family: var(--font-mono);
}
#tier-modal .landing-modal-close:hover {
  background: var(--primary);
  color: #000;
  border-color: var(--primary);
}
#tier-modal .landing-modal-actions .landing-cta {
  width: 100%;
  background: var(--bg);
  border: 2px solid var(--primary);
  border-radius: 0;
  color: var(--primary);
  font-family: var(--font-mono);
  font-size: 14px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  white-space: normal;
  line-height: 1.3;
  text-align: center;
}
#tier-modal .landing-modal-actions .landing-cta:hover {
  background: var(--primary);
  color: #000;
  border-color: var(--primary);
}
.landing-lead-form {
  display: flex;
  flex-direction: column;
  gap: 14px;
  margin-top: 8px;
}
/* ── Заявка на эксперта: honeypot и галочка согласия (2026-09-27) ──
   honeypot: настоящее поле ввода, невидимое человеку и недостижимое с клавиатуры
   (tabindex="-1" + aria-hidden в разметке); бот, заполняющий все поля, себя выдаёт.
   Скрываем через CSS, а НЕ inline-стилем — CSP style-src 'self' без 'unsafe-inline' (I-W4). */
.lead-trap {
  position: absolute;
  left: -9999px;
  top: auto;
  width: 1px;
  height: 1px;
  overflow: hidden;
}
.landing-check {
  display: flex;
  align-items: flex-start;
  gap: 10px;
  min-height: 44px;          /* тап-таргет по гайдлайну (≥44px) */
  padding: 4px 0;
  font-size: 14px;
  line-height: 1.45;
  font-weight: 400;          /* внутри .landing-field label вес 600 — тут обычный текст */
  cursor: pointer;
}
.landing-check input[type="checkbox"] {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
  margin: 2px 0 0;
  accent-color: var(--landing-accent);
}
.landing-check a { color: var(--landing-accent); }
.landing-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.landing-field label {
  font-size: 14px;
  font-weight: 600;
}
.landing-field input,
.landing-field textarea {
  width: 100%;
  min-height: 44px;
  padding: 10px 12px;
  border: 1px solid var(--landing-border);
  border-radius: 10px;
  background: var(--landing-bg);
  color: var(--landing-text);
  font-family: inherit;
  font-size: 15px;
}
.landing-field textarea {
  min-height: 88px;
  resize: vertical;
}
.landing-field input:focus,
.landing-field textarea:focus {
  outline: 2px solid var(--landing-accent);
  outline-offset: 1px;
}

/* ── респонсив: ~840px — сетки в 1 колонку, бургер, hero-форма столбиком ── */
@media (max-width: 840px) {
  .landing-burger {
    display: inline-flex;
  }
  .landing-nav {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    /* H-02: терминальная тёмная панель (было белое --landing-bg → провал контраста) */
    background: var(--bg);
    border-bottom: 1px solid var(--secondary);
    box-shadow: 0 16px 32px rgba(0, 0, 0, 0.6);
    padding: 8px 20px 16px;
    /* H-05: не обрезать пункты на низких/landscape экранах */
    max-height: calc(100vh - 64px);
    overflow-y: auto;
    overscroll-behavior: contain;
    -webkit-overflow-scrolling: touch;
  }
  .landing-nav--open {
    display: flex;
  }
  .landing-nav a {
    display: flex;
    width: 100%;
    min-height: 44px;
    padding: 12px 0;
    justify-content: flex-start;
    /* H-02: разделитель в терминальный тон (было #f0f0f1) */
    border-bottom: 1px solid rgba(138, 95, 70, 0.35);
  }
  .landing-nav a:last-child {
    border-bottom: 0;
  }
  .landing-nav .landing-cta {
    margin-top: 12px;
    border-bottom: none;
  }
  body[data-page="landing"] .landing {
    padding: 72px 16px 48px;
  }
  body[data-page="landing"] .h1 {
    font-size: 28px;
  }
  /* hero-форма столбиком (ранее только <480px) */
  body[data-page="landing"] .form-row {
    flex-direction: column;
    align-items: stretch;
    gap: 10px;
  }
  body[data-page="landing"] #domain,
  body[data-page="landing"] #submit-btn {
    width: 100%;
  }
  .landing-block {
    padding: 48px 0;
  }
  .landing-grid,
  .landing-grid--3,
  .landing-steps,
  .landing-plans,
  .landing-cols {
    grid-template-columns: 1fr;
  }
  .landing-cmp {
    font-size: 13.5px;
    min-width: 640px;
  }
}

/* ── ~480px: отступы/шрифты компактнее ── */
@media (max-width: 480px) {
  body[data-page="landing"] {
    font-size: 15px;
  }
  .landing-block {
    padding: 40px 0;
  }
  .landing-block h2 {
    font-size: 24px;
  }
  .landing-container {
    padding-left: 16px;
    padding-right: 16px;
  }
  .landing-plan {
    padding: 20px;
  }
  .landing-modal {
    padding: 12px;
  }
  .landing-modal-dialog {
    padding: 20px;
  }
}

/* ── #proof (соц.доказательство, 2026-08-27): «Что нашли» → «Что сделали» → карточка ── */
/* Смысловая логика: главный блок — «Что нашли» (шкала критичности, критичные — акцент),
   вторичный контекст — «Что сделали» (доверие, приглушённо). */
#proof .landing-proof-group { margin-bottom: 30px; }
#proof .landing-proof-group:last-child { margin-bottom: 0; }
#proof .landing-proof-group-title {
  font-size: 17px; font-weight: 700; color: var(--landing-text);
  margin: 0 0 12px;
}
#proof .landing-proof-group-title em { font-style: normal; color: var(--amber); text-decoration: underline; }

#proof .landing-proof-row { display: grid; gap: 16px; }
#proof .landing-proof-row--main { grid-template-columns: repeat(2, minmax(0, 1fr)); }
#proof .landing-proof-row--sev { grid-template-columns: repeat(3, minmax(0, 1fr)); }

#proof .landing-proof {
  background: var(--card);
  border: 1px solid rgba(43, 42, 38, .08);
  border-radius: var(--radius-card);
  box-shadow: var(--shadow-card);
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
#proof .landing-proof-value { font-weight: 700; font-variant-numeric: tabular-nums; line-height: 1; }

/* «Что сделали» — вторичный контекст: цифра слева, текст справа, приглушённо */
#proof .landing-proof--main {
  flex-direction: row; align-items: center; gap: 16px; padding: 22px;
}
#proof .landing-proof--main .landing-proof-value { font-size: 40px; color: var(--landing-muted); }
#proof .landing-proof--main .landing-proof-label { font-size: 15px; font-weight: 600; color: var(--landing-text); }

/* «Что нашли» — шкала критичности: цветные карточки + бейдж. Критичные — акцент. */
#proof .landing-proof--sev { gap: 10px; }
#proof .landing-proof--sev .landing-proof-value { font-size: 40px; }
#proof .landing-proof-badge {
  align-self: flex-start; font-size: 12px; font-weight: 600; letter-spacing: .01em;
  padding: 3px 9px; border-radius: 999px; line-height: 1.2;
}
#proof .landing-proof--critical { border-color: rgba(166, 27, 27, .30); background: #fff7f6; }
#proof .landing-proof--critical .landing-proof-value { font-size: 48px; color: #A61B1B; }
#proof .landing-proof--critical .landing-proof-badge { background: rgba(166, 27, 27, .12); color: #A61B1B; }
#proof .landing-proof--high .landing-proof-value { color: #B45309; }
#proof .landing-proof--high .landing-proof-badge { background: rgba(180, 83, 9, .13); color: #B45309; }
#proof .landing-proof--medium .landing-proof-value { color: #6E6A5B; }
#proof .landing-proof--medium .landing-proof-badge { background: rgba(110, 106, 91, .14); color: #6E6A5B; }

#proof .landing-proof-label { color: var(--landing-muted); font-size: 14px; line-height: 1.4; }

/* подпись «ТОП-3 уязвимости:» — отступ сверху, чтобы не прилипала к карточкам */
#proof .landing-proof-caption { font-size: 17px; font-weight: 700; color: var(--landing-text); margin: 48px 0 12px; }

/* карточка «как в отчёте»: метрика у заголовка, прогресс-бар, структурированный список */
#proof .landing-proof-card {
  background: var(--card); border: 1px solid rgba(43, 42, 38, .08);
  border-radius: var(--radius-card); box-shadow: var(--shadow-card); padding: 24px;
}
#proof .landing-proof-card-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 10px; flex-wrap: wrap; }
#proof .landing-proof-card-title { font-size: 20px; color: var(--landing-text); margin: 0; }
#proof .landing-proof-card-count { font-size: 16px; font-weight: 700; color: var(--landing-accent-dark); white-space: nowrap; }
#proof .landing-proof-card-bar { height: 6px; border-radius: 999px; background: rgba(43, 42, 38, .10); overflow: hidden; margin: 4px 0 18px; }
#proof .landing-proof-card-bar-fill { display: block; height: 100%; background: var(--landing-accent); border-radius: 999px; }
#proof .landing-proof-card-item { margin: 0 0 14px; max-width: 65ch; }
#proof .landing-proof-card-item-title { font-size: 14px; font-weight: 700; color: var(--landing-text); margin: 0 0 4px; }
#proof .landing-proof-card-item-text { font-size: 15px; color: var(--landing-muted); line-height: 1.5; margin: 0; }
#proof .landing-proof-card-item--key { padding: 12px 14px; background: rgba(15, 118, 110, .07); border-radius: 12px; max-width: 65ch; }
#proof .landing-proof-card-item--key .landing-proof-card-item-text { color: var(--landing-text); }

/* карусель «ТОП-3 уязвимости»: один слайд на экране, стрелки + точки (a11y) */
#proof .landing-carousel { position: relative; }
#proof .landing-carousel-track { position: relative; display: grid; }
#proof .landing-carousel-slide { grid-area: 1 / 1; visibility: hidden; }
#proof .landing-carousel-slide.is-active { visibility: visible; animation: lc-in 0.3s ease; }
@keyframes lc-in { from { opacity: 0; transform: translateX(10px); } to { opacity: 1; transform: none; } }
#proof .landing-carousel-controls { display: flex; align-items: center; justify-content: space-between; margin-top: 16px; }
#proof .landing-carousel-nav {
  width: 44px; height: 44px; display: inline-flex; align-items: center; justify-content: center;
  background: var(--landing-bg); border: 1px solid var(--landing-border); border-radius: 50%;
  color: var(--landing-text); font-size: 20px; cursor: pointer; transition: background .2s, color .2s, border-color .2s;
}
#proof .landing-carousel-nav:hover { background: var(--landing-accent); color: #fff; border-color: var(--landing-accent); }
#proof .landing-carousel-nav:focus-visible { outline: 2px solid var(--landing-accent); outline-offset: 2px; }
#proof .landing-carousel-dots { display: flex; align-items: center; gap: 6px; }
#proof .landing-carousel-dot { position: relative; width: 44px; height: 44px; padding: 0; background: transparent; border: none; cursor: pointer; }
#proof .landing-carousel-dot::before { content: ""; position: absolute; top: 50%; left: 50%; width: 12px; height: 12px; transform: translate(-50%, -50%); border-radius: 50%; border: 2px solid var(--landing-border); background: transparent; transition: background .2s, border-color .2s; }
#proof .landing-carousel-dot:hover::before { border-color: var(--landing-accent); }
#proof .landing-carousel-dot.is-active::before { background: var(--landing-accent); border-color: var(--landing-accent); }

@media (max-width: 720px) {
  #proof .landing-proof-row--main { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
  #proof .landing-proof-row--sev { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; }
  #proof .landing-proof { padding: 16px; }
  #proof .landing-proof--sev .landing-proof-value { font-size: 34px; }
  #proof .landing-proof--critical .landing-proof-value { font-size: 42px; }
  #proof .landing-proof-card { padding: 18px; }
}
@media (max-width: 420px) {
  #proof .landing-proof-row--main { grid-template-columns: 1fr; }
  #proof .landing-proof--main { gap: 12px; }
  #proof .landing-proof-card-head { flex-direction: column; gap: 4px; align-items: flex-start; }
}

/* ── Пейвол-фронт (R5): верификация владения (экран 1 полигона) ── */
.verify-body{padding:26px 24px;color:var(--amber,#bf8065);font-family:var(--mono,ui-monospace,monospace)}
.verify-h1{font-size:24px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--amber,#bf8065);margin:0 0 8px;text-align:left}
.verify-sub{color:var(--amber2,#8a5f46);font-size:13px;margin:0 0 20px;max-width:560px;text-align:left}
.verify-steps{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 22px;font-size:12px}
.verify-step{padding:5px 10px;border:1px solid #3a2a20;border-radius:4px;color:var(--amber2,#8a5f46)}
.verify-step.on{color:var(--amber,#bf8065);border-color:var(--amber,#bf8065)}
.verify-field{margin-bottom:14px;max-width:460px}
.verify-label{font-size:12px;color:var(--amber2,#8a5f46);margin-bottom:6px;display:block}
.verify-input{width:100%;background:#000;color:var(--amber,#bf8065);border:2px solid var(--amber,#bf8065);border-radius:0;padding:12px 13px;font-family:var(--mono,ui-monospace,monospace);font-size:16px;outline:none}
.verify-input::placeholder{color:#4a3328}
.verify-input:focus{box-shadow:0 0 10px rgba(191,128,101,.28)}
.verify-code{letter-spacing:.3em}
.verify-row{display:flex;gap:10px;align-items:stretch;max-width:460px;margin:0 0 10px;flex-wrap:wrap}
.verify-btn{background:#000;color:var(--amber,#bf8065);border:2px solid var(--amber,#bf8065);border-radius:0;padding:12px 16px;font-family:var(--mono,ui-monospace,monospace);font-weight:700;letter-spacing:.06em;font-size:12px;cursor:pointer;transition:.18s;white-space:nowrap}
.verify-btn:hover{background:var(--amber,#bf8065);color:#000}
.verify-btn--primary{background:var(--amber,#bf8065);color:#000}
.verify-btn:disabled{opacity:.35;cursor:not-allowed;background:#000;color:var(--amber,#bf8065)}
.verify-btn--primary:disabled{background:#000;color:var(--amber,#bf8065)}
.verify-msg{color:var(--amber2,#8a5f46);font-size:12px;margin:6px 0 0;min-height:14px}
.verify-msg.ok{color:#7fbf7f}
.verify-msg.err{color:#c06b5a}
.verify-note{color:var(--amber2,#8a5f46);font-size:12px;margin-top:14px}
/* «На главную» — терминальная ссылка-кнопка (фикс. верх-лево, не мешает центровке окна) */
.verify-back{position:fixed;top:16px;left:16px;z-index:10;display:inline-flex;align-items:center;gap:6px;color:var(--amber2,#8a5f46);font-family:var(--mono,ui-monospace,monospace);font-size:13px;text-decoration:none;padding:6px 12px;border:1px solid var(--amber,#bf8065);border-radius:4px;background:transparent;transition:.15s;max-width:fit-content}
.verify-back:hover{background:var(--amber,#bf8065);color:#000;text-decoration:none}
.verify-consent{display:flex;gap:10px;align-items:flex-start;max-width:460px;margin:0 0 16px;font-size:13px;color:var(--amber2,#8a5f46);text-align:left;cursor:pointer;line-height:1.45}
/* нативный input скрыт, но остаётся фокусируемым/в a11y-дереве */
.verify-consent-input{position:absolute;opacity:0;width:1px;height:1px;margin:0}
/* кастомный бокс — терминальный квадрат: чёрный фон, янтарная рамка */
.verify-consent-box{flex:0 0 20px;width:20px;height:20px;margin-top:1px;border:2px solid var(--amber,#bf8065);background:#000;position:relative;transition:background .15s ease,border-color .15s ease}
/* галочка (L-образная, чистый CSS — без inline) при checked */
.verify-consent-input:checked+.verify-consent-box{background:var(--amber,#bf8065)}
.verify-consent-input:checked+.verify-consent-box::after{content:'';position:absolute;left:6px;top:1px;width:5px;height:9px;border:solid #000;border-width:0 2px 2px 0;transform:rotate(45deg)}
/* фокус-кольцо (a11y) */
.verify-consent-input:focus-visible+.verify-consent-box{box-shadow:0 0 0 2px rgba(191,128,101,.35)}
/* ── Пейвол-фронт (R5): тизер-блок в done (счётчики + индекс + цена) ── */
/* v0.7.1: тизер в терминальной эстетике (как verify) — тёмная карточка,
   янтарный акцент, цветные бейджи severity (были белыми на белом = «без
   стиля»). CSP style-src 'self' — без inline. */
.done-body{padding:20px 4px 4px;font-family:var(--mono,ui-monospace,monospace)}
.paywall-teaser{max-width:560px;margin:4px auto 0}
.pv-steps{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 18px;font-size:12px}
.pv-step{padding:5px 10px;border:1px solid #3a2a20;border-radius:4px;color:var(--amber2,#8a5f46)}
.pv-step.on{color:var(--amber,#bf8065);border-color:var(--amber,#bf8065)}
.pv-step.cur{color:var(--amber,#bf8065);border-color:var(--amber,#bf8065);background:rgba(191,128,101,.12)}
.pv-head h2{font-size:20px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--amber,#bf8065);margin:0 0 6px;text-align:left}
.pv-head p{color:var(--amber2,#8a5f46);font-size:13px;margin:0 0 16px;text-align:left}
.pv-sev{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 16px}
.pv-sev-badge{padding:6px 12px;border-radius:4px;font-size:12px;font-weight:600;color:#fff}
.pv-sev-badge.pv-sev-a{background:#9b1c1c}   /* critical */
.pv-sev-badge.pv-sev-b{background:#c0392b}   /* high */
.pv-sev-badge.pv-sev-c{background:#c07a30}   /* medium */
.pv-sev-badge.pv-sev-d{background:#8a5f46}   /* low */
.pv-sev-badge.pv-sev-e{background:#4a3328}   /* info */
.pv-risk{font-size:14px;margin:0 0 6px;color:var(--amber2,#8a5f46)}
.pv-risk b{font-size:22px;color:var(--amber,#bf8065)}
.pv-price{font-size:14px;margin:0 0 18px;color:var(--amber2,#8a5f46)}
.pv-price b{font-size:18px;color:var(--amber,#bf8065)}
.pv-actions{display:flex;gap:10px;flex-wrap:wrap;margin:0 0 4px}
.pv-btn{display:inline-block;background:var(--amber,#bf8065);color:#000;padding:13px 22px;border:2px solid var(--amber,#bf8065);border-radius:0;font-weight:700;font-size:13px;letter-spacing:.06em;font-family:var(--mono,ui-monospace,monospace);cursor:pointer;text-decoration:none}
.pv-btn:hover{background:#000;color:var(--amber,#bf8065)}
.pv-cols{color:var(--amber2,#8a5f46);font-size:12px;margin-top:14px;max-width:560px;text-align:left}
/* ── /methodology: полный список проверок (2026-09-03) ── */
.methodology{max-width:1160px;margin:0 auto;padding:48px 24px 64px;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;color:var(--amber2,#8a5f46)}
.methodology-home{display:inline-block;margin:0 0 22px;background:transparent;color:var(--amber,#bf8065);border:1px solid var(--amber,#bf8065);border-radius:4px;padding:10px 18px;font-family:var(--mono,ui-monospace,monospace);font-weight:700;font-size:12px;letter-spacing:.06em;text-decoration:none;transition:.18s}
.methodology-home:hover{background:var(--amber,#bf8065);color:#000}
.methodology-hero{max-width:720px;margin-bottom:40px}
.methodology-hero h1{font-size:34px;font-weight:800;letter-spacing:-.02em;color:var(--amber,#bf8065);margin:0 0 12px}
.methodology-hero p{font-size:16px;line-height:1.65;color:var(--amber2,#8a5f46);margin:0}
.methodology-tier{margin-bottom:48px}
.methodology-tier-head{display:flex;align-items:center;gap:12px;margin-bottom:18px}
.methodology-tier-head h2{font-size:22px;font-weight:700;color:var(--amber,#bf8065);margin:0;letter-spacing:-.01em}
.methodology-tier-tag{font-family:var(--mono,ui-monospace,monospace);font-size:12px;font-weight:700;letter-spacing:.12em;padding:4px 10px;border:1px solid var(--amber,#bf8065);border-radius:4px;color:var(--amber,#bf8065)}
.methodology-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:20px}
.methodology-card{background:#0c0c0c;border:1px solid #2a1f16;border-radius:10px;padding:22px 20px;display:flex;flex-direction:column}
.methodology-card h3{font-size:17px;font-weight:700;color:var(--amber,#bf8065);margin:0 0 8px;display:flex;justify-content:space-between;gap:10px;align-items:baseline}
.methodology-card .methodology-n{font-family:var(--mono,ui-monospace,monospace);font-size:12px;color:var(--amber2,#8a5f46);font-weight:600}
.methodology-card .methodology-desc{font-size:14px;line-height:1.55;color:#c9b39b;margin:0 0 16px}
.methodology-checks{display:flex;flex-direction:column;gap:6px;margin-top:auto}
.check-row{display:flex;align-items:baseline;gap:10px;padding:7px 0;border-top:1px dashed #2a1f16}
.check-row:first-child{border-top:none}
.check-id{font-family:var(--mono,ui-monospace,monospace);font-size:12px;color:var(--amber,#bf8065);flex:0 0 auto;min-width:110px}
.check-title{font-size:13.5px;color:var(--amber2,#8a5f46);line-height:1.4}
.methodology-back{margin:8px 0 0;font-size:14px}
.methodology-back a{color:var(--amber,#bf8065);text-decoration:none}
.methodology-back a:hover{text-decoration:underline}
@media (max-width:760px){.methodology{padding:32px 16px 48px}.methodology-hero h1{font-size:28px}.methodology-grid{grid-template-columns:1fr}}
/* ── Уведомление о cookies (152-ФЗ, 2026-09-03) ── */
.cookie-notice{position:fixed;left:0;right:0;bottom:0;z-index:1000;background:#0c0c0c;border-top:1px solid var(--amber,#bf8065);padding:16px 20px;box-shadow:0 -6px 20px rgba(0,0,0,.45)}
.cookie-notice-body{max-width:1160px;margin:0 auto;display:flex;gap:18px;align-items:center;justify-content:space-between;flex-wrap:wrap}
.cookie-notice-text{font-size:13.5px;line-height:1.5;color:var(--amber2,#8a5f46);margin:0;max-width:820px}
.cookie-notice-text a{color:var(--amber,#bf8065);text-decoration:underline}
.cookie-notice-btn{flex:0 0 auto;background:transparent;color:var(--amber,#bf8065);border:1px solid var(--amber,#bf8065);border-radius:4px;padding:9px 18px;font-family:var(--mono,ui-monospace,monospace);font-weight:700;font-size:12px;letter-spacing:.06em;cursor:pointer;transition:.18s}
.cookie-notice-btn:hover{background:var(--amber,#bf8065);color:#000}
@media (max-width:640px){.cookie-notice-body{flex-direction:column;align-items:flex-start;gap:12px}}


/* ══════════════════ ВНУТРЕННИЕ ПУБЛИЧНЫЕ СТРАНИЦЫ (body[data-page="public"]) ══════════════════
   Пилот — /proverka-sajta-onlajn (2026-09-27). ПЕРВЫЙ ЭКРАН — ТЕРМИНАЛЬНЫЙ, как на главной
   (решение владельца 2026-09-27 отменяет прежнюю часть R1 «hero не переносим»): тёмный фон,
   янтарный моно-текст, та же форма — её стили ГЛОБАЛЬНЫЕ (style.css:98-175), перекрывать не нужно.
   Остальные блоки — светлые лендинговые (.landing-block/.landing-card/.landing-cmp/.landing-faq)
   со светлой палитрой (см. блок токенов выше).
   Акценты оставлены только два: K5 (шаги) и K7 (маркер FAQ). Чипы K3 и светлая форма K1 ОТМЕНЕНЫ
   владельцем 2026-09-27 («убрать ячейки в карточках, сделать как на главной»).
   Палитра на светлом: янтарь #bf8065 не проходит контраст 4.5:1 → глубокий #8a5f46 (R5).
   Запрещено (R6): CRT-оверлеи на светлых блоках, символы $/«root», фейковые строки лога. */

body[data-page="public"] { overflow-x: clip; }

/* ── hero: те же правила, что у hero главной (терминальный блок) + отступ под липкой шапкой ── */
body[data-page="public"] .landing {
  min-height: calc(100vh - 65px);
  padding: 96px 16px 28px;
  background: var(--bg);
  color: var(--primary);
  font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
body[data-page="public"] #scan-form { scroll-margin-top: 96px; }
/* ── компактный первый экран страницы БЕЗ формы (/pricing, 2026-09-27, решение R12).
   Причина: базовый скоуп выше задаёт min-height: calc(100vh - 65px) — с одним заголовком это
   пустой тёмный экран на весь вьюпорт, и тарифы уезжают под сгиб; владелец выбрал «без формы»
   именно ради того, чтобы цены были видны сразу. Высоту отпускаем в auto и выключаем центровку. ── */
body[data-page="public"] .landing--compact {
  min-height: 0;
  justify-content: flex-start;
  padding: 120px 16px 40px;
}
body[data-page="public"] .landing--compact .subtitle { margin-bottom: 0; }
/* лого каркасной шапки — моноширинным (шапка терминальная, как у главной) */
body[data-page="public"] .landing-logo { font-family: var(--font-mono); }

/* ── K5 (R4): «Как это работает» — статусные квадраты + направляющая ── */
body[data-page="public"] .terminal-steps { list-style: none; margin: 0; padding: 0; }
body[data-page="public"] .terminal-steps li { position: relative; padding-left: 44px; min-height: 36px; }
body[data-page="public"] .terminal-steps li::before {
  content: ""; position: absolute; left: 6px; top: .42em; width: 11px; height: 11px;
  border: 2px solid #8a5f46; border-radius: 3px; background: #fff;
}
body[data-page="public"] .terminal-steps li:last-child::before { background: #8a5f46; }
body[data-page="public"] .terminal-steps li:not(:last-child)::after {
  content: ""; position: absolute; left: 11px; top: 1.55em; bottom: -.85em; width: 1px;
  background: rgba(138, 95, 70, .3);
}

/* ── K7 (R4): FAQ — свой маркер раскрытия.
   Геометрия (правка владельца 2026-09-27): маркер был ВЫШЕ текста строки — выравниваем по центру
   строки вопроса через top:50% + translateY(-50%) (summary — flex с min-height 44px).
   Базовое правило .landing-faq summary::after (выше по файлу) задаёт content "▾", margin-left:auto
   и rotate(180deg) на [open] — наш скоуп специфичнее, но обязан сбросить унаследованное. ── */
body[data-page="public"] .landing-faq summary { position: relative; padding-left: 30px; list-style: none; }
body[data-page="public"] .landing-faq summary::-webkit-details-marker { display: none; }
body[data-page="public"] .landing-faq summary::after {
  content: ""; position: absolute; right: auto; margin: 0;
  left: 6px; top: 50%; width: 9px; height: 9px;
  border-right: 2px solid #8a5f46; border-bottom: 2px solid #8a5f46;
  transform: translateY(-50%) rotate(-45deg);
  transform-origin: center; transition: transform .2s ease;
}
body[data-page="public"] .landing-faq details[open] summary::after { transform: translateY(-50%) rotate(45deg); }
body[data-page="public"] .landing-faq summary:focus-visible {
  outline: 3px solid rgba(138, 95, 70, .55); outline-offset: 3px; border-radius: 6px;
}

/* ── статьи (/articles, /articles/<slug>, 2026-09-27): читаемая колонка длинного текста.
   Тело материала приходит HTML-фрагментом из content/articles/<slug>.html — типографику задаём
   здесь один раз, чтобы автор текста не нёс классы в разметке. Светлая палитра (R5): акценты —
   #8a5f46, а не янтарь #bf8065. Скоуп только body[data-page="public"]. ── */
body[data-page="public"] .article-body {
  max-width: 760px;
  margin: 0 auto;
  font-size: 17px;
  line-height: 1.65;
  color: var(--landing-text);
}
body[data-page="public"] .article-body > *:first-child { margin-top: 0; }
body[data-page="public"] .article-body h2 { margin: 34px 0 12px; font-size: 25px; line-height: 1.3; }
body[data-page="public"] .article-body h3 { margin: 26px 0 10px; font-size: 20px; line-height: 1.35; }
body[data-page="public"] .article-body p,
body[data-page="public"] .article-body li { font-size: 17px; }
body[data-page="public"] .article-body p { margin: 0 0 15px; }
body[data-page="public"] .article-body ul,
body[data-page="public"] .article-body ol { margin: 0 0 18px; padding-left: 24px; }
body[data-page="public"] .article-body li { margin-bottom: 8px; }
body[data-page="public"] .article-body a { color: #8a5f46; text-decoration: underline; }
body[data-page="public"] .article-body strong { font-weight: 700; }
body[data-page="public"] .article-body table { width: 100%; border-collapse: collapse; margin: 0 0 20px; font-size: 16px; }
body[data-page="public"] .article-body th,
body[data-page="public"] .article-body td { padding: 8px 10px; border-bottom: 1px solid var(--landing-border); text-align: left; }
body[data-page="public"] .article-body th { font-weight: 700; }
/* Таблица тела материала на узком экране (дефект на телефоне, 08.10.2026).
   На 375 px колонка текста 343 px, а таблица из четырёх колонок — 439 px: она вылезала за
   границу экрана, правые колонки были недоступны (прокрутки у таблицы и у родителя не было).
   Обёртку .article-table-wrap ставит wrap_tables() при рендере страницы — автор материала про
   неё не помнит. Прокручивается ТОЛЬКО таблица: страница вбок не едет.
   min-width 560px подобран так, чтобы колонки перестали сжиматься в столбик: замер на статье
   (375 px) — колонка «Масштаб инцидента» укладывается в 5 строк вместо 7 при пределе сжатия
   439 px, а запас прокрутки (560 − 343 = 217 px) меньше ширины экрана — укладывается в один свайп.
   С 900 px колонка текста шире 560 px — ограничение снимается, таблица = колонке, скролла нет.
   Замеры (Playwright, 375/768/1280): 375 — обёртка 343/560 (скролл есть), 768 — 728/728,
   1280 — 760/760; overflow страницы = 0 везде. */
body[data-page="public"] .article-table-wrap {
  max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; margin: 0 0 22px;
}
body[data-page="public"] .article-table-wrap table { min-width: 560px; margin-bottom: 0; }
@media (min-width: 900px) {
  body[data-page="public"] .article-table-wrap table { min-width: 0; }
}
body[data-page="public"] .article-body blockquote {
  margin: 0 0 18px; padding: 10px 16px; border-left: 3px solid #8a5f46;
  background: var(--landing-bg-alt); border-radius: 0 8px 8px 0;
}
/* ── изображения в теле статьи (ТЗ профиля seo 08.10.2026). Автор текста вставляет
   <figure class="article-figure"><img class="article-img" …><figcaption>…</figcaption></figure>.
   img: display:block + max-width:100% + height:auto — картинка не выходит за колонку (760px)
   и сохраняет пропорции (без max-width картинка 1200–1664px даёт горизонтальный скролл);
   height:auto обязателен — атрибут height в разметке даёт presentational-hint и растянул бы
   картинку по высоте. figure сбрасывает браузерный margin:1em 40px, иначе картинка съезжает
   относительно текста. Подпись — мелким серым (--landing-muted), как служебные строки сайта. ── */
body[data-page="public"] .article-body img {
  display: block; max-width: 100%; height: auto; border-radius: 10px;
}
body[data-page="public"] .article-body figure.article-figure { margin: 0 0 22px; }
body[data-page="public"] .article-body figcaption {
  margin-top: 8px; font-size: 14px; line-height: 1.5; color: var(--landing-muted);
}
body[data-page="public"] .articles-list-note { max-width: 760px; margin: 20px auto 0; }

/* ── карточка статьи (_article_card.html, ТЗ профиля seo 08.10.2026 §3): лента /articles
   и блок «Наши статьи» на главной. Компонент живёт и на главной (data-page="landing"),
   и на публичных страницах — классы БЕЗ скоупа.
   RATIONALE (отличие от сниппета ТЗ): селекторы усилены предком .article-card — иначе базовые
   .landing-card h3 (font-size 17px) и .landing-card p (color/font-size 14.5px) с весом (0,1,1)
   перебивали бы одиночный класс карточки (0,1,0), и заданные размеры заголовка/лида не применились.
   Обложка: width:100% + height:auto + aspect-ratio 1200/630 держат пропорцию без растяжки вёрстки
   (место зарезервировано — CLS не прыгает). height:auto обязателен: атрибут height="630" в разметке
   даёт presentational-hint height:630px, и без явного height:auto картинка растягивалась бы по высоте
   на всю ширину карточки (замер на стенде: 301×630 вместо 301×158). ── */
.article-card .article-card-link { display: block; color: inherit; text-decoration: none; }
.article-card .article-card-cover { width: 100%; height: auto; aspect-ratio: 1200 / 630; object-fit: cover; border-radius: 10px; display: block; }
.article-card .article-card-date { margin: 14px 0 6px; font-size: 14px; color: var(--landing-muted); }
.article-card .article-card-title { margin: 0 0 8px; font-size: 18px; line-height: 1.35; }
.article-card .article-card-lead { margin: 0; color: var(--landing-muted); font-size: 15px; line-height: 1.55; }

/* ── видимая хлебная крошка (_breadcrumbs.html, ТЗ §5). Первый экран публичной страницы —
   ТЕРМИНАЛЬНЫЙ (чёрный фон, .landing--compact), поэтому цвет берём из терминальной палитры
   (--secondary #8a5f46 — как соседняя строка .landing-micro), а не --landing-muted #57534a
   (тёмно-серый на чёрном не читается). ── */
body[data-page="public"] .landing-breadcrumbs { font-size: 14px; color: var(--secondary); margin-bottom: 18px; }
body[data-page="public"] .landing-breadcrumbs a { color: var(--secondary); text-decoration: underline; text-underline-offset: 3px; }
body[data-page="public"] .landing-breadcrumbs-sep { margin: 0 8px; }

@media (max-width: 640px) {
  body[data-page="public"] .article-body { font-size: 16px; }
  body[data-page="public"] .article-body p,
  body[data-page="public"] .article-body li { font-size: 16px; }
  body[data-page="public"] .article-body h2 { font-size: 22px; }
  /* картинка тела статьи на узком экране занимает всю ширину колонки (правила те же) */
  body[data-page="public"] .article-body img { width: 100%; }
}

/* ── мобильные: форма hero столбиком (как на главной при ≤640px) ── */
@media (max-width: 640px) {
  body[data-page="public"] .form-row { flex-direction: column; align-items: stretch; gap: 10px; }
  body[data-page="public"] #domain,
  body[data-page="public"] #submit-btn { width: 100%; }
}

/* ── a11y ── */
@media (prefers-reduced-motion: reduce) {
  body[data-page="public"] .landing-faq summary::after { transition: none; }
}
@media (prefers-contrast: high) {
  body[data-page="public"] .terminal-steps li::before { border-color: #1a1a1a; }
  body[data-page="public"] .terminal-steps li:last-child::before { background: #1a1a1a; }
  body[data-page="public"] .landing-faq summary::after { border-color: #1a1a1a; }
}
