/* ssl.css — слой главной bridge-ssl.com v4.
   Поверх tokens/base/home, перенесённых из bridge-waf-static. Здесь только то,
   чего в слое WAF нет: снятие моноширинного, фотография моста в герое и
   компоненты трёх болей — счёт, установка, уровни, сравнение, ошибки. */

/* ── 1. Моноширинный убран ──────────────────────────────────────────────
   Владелец: «у людей возникает иллюзия, что это очень сложный технический
   проект». Браузерная таблица стилей ставит monospace на code/kbd/samp/pre
   сама, без единого объявления в слое, — поэтому её надо отменить явно.
   Строка-значение остаётся узнаваемой за счёт фона и трекинга, а не гарнитуры. */
code, kbd, samp, pre, tt { font-family: inherit; font-size: inherit; }

.lit {
  display: inline;
  padding: 0.06em 0.2em;
  margin-inline: -0.05em;
  /* фон чипа не должен распадаться на два прямоугольника при переносе */
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  border-radius: var(--radius);
  background: var(--accent-soft);
  color: var(--text);
  font-weight: 500;
  font-size: 0.94em;
  letter-spacing: 0.012em;
  font-variant-numeric: tabular-nums slashed-zero;
  /* различённая единица и перечёркнутый ноль: свойство, ради которого сеть
     раньше держала IBM Plex. У Inter это начертания cv08 и zero. */
  font-feature-settings: "cv08" 1, "zero" 1;
  white-space: nowrap;
  overflow-wrap: break-word;
}
.lit-link { color: var(--text); text-decoration: none; white-space: normal; }
.lit-link:hover { background: var(--accent); color: var(--accent-fg); }

/* ── 2. Мост в герое ────────────────────────────────────────────────────
   Фон, а не <img>: тема переключается атрибутом, и две картинки в разметке
   означали бы двойную загрузку 400 КБ ради одной видимой. LCP страницы —
   заголовок, поэтому фоновая загрузка ничего не задерживает. */
.bridge-art {
  background: no-repeat center / cover url("/images/library/ssl-hero-dark-alpha.png");
  opacity: 0.78;
  -webkit-mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,0.82) 46%, transparent 96%);
  mask-image: linear-gradient(180deg, #000 0%, rgba(0,0,0,0.82) 46%, transparent 96%);
}
[data-theme="proof-light"] .bridge-art {
  background-image: url("/images/library/ssl-hero-light-alpha.png");
  opacity: 0.6;
}
.hero { position: relative; isolation: isolate; }

/* ── 3. Иконки ──────────────────────────────────────────────────────────
   Набор главного сайта bridge-cdn.com: Lucide, viewBox 24×24, обводка 1.7,
   скруглённые концы, currentColor, без заливки. Символы объявлены спрайтом
   в начале <body>, разметка ссылается на них через <use>. */
.icon-sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
.ico {
  flex: none;
  width: 20px; height: 20px;
  fill: none;
  stroke: currentColor;
  stroke-width: 1.7;
  stroke-linecap: round;
  stroke-linejoin: round;
}

/* ── 4. Счёт в герое ────────────────────────────────────────────────────
   Первая боль названа предметом, а не эпитетом: строки счёта и итог. */
.invoice {
  margin: 0;
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--panel);
  box-shadow: 0 1px 0 var(--line-soft);
}
.invoice-head {
  display: flex; flex-wrap: wrap; gap: 4px var(--space-4);
  align-items: baseline; justify-content: space-between;
  padding: var(--space-6);
  border-bottom: var(--hairline) solid var(--line);
}
.invoice-title { font-weight: 600; letter-spacing: -0.01em; }
.invoice-sub { color: var(--dim); font-size: 0.86rem; }
.invoice-lines { list-style: none; margin: 0; padding: var(--space-2) 0; }
.invoice-lines > li {
  display: flex; gap: var(--space-4);
  align-items: baseline; justify-content: space-between;
  padding: var(--space-3) var(--space-6);
}
.invoice-lines > li + li { border-top: var(--hairline) solid var(--line-soft); }
.invoice-item { color: var(--muted); font-size: 0.94rem; }
.invoice-note {
  display: block; margin-top: 2px;
  color: var(--gold); font-style: normal;
  font-size: 0.76rem; font-weight: 600;
  letter-spacing: 0.06em; text-transform: uppercase;
}
.invoice-price {
  flex: none;
  color: var(--text); font-weight: 500; font-size: 0.9rem;
  font-variant-numeric: tabular-nums;
}
.invoice-price-win { color: var(--gold); font-weight: 600; }
.invoice-total {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: var(--space-4);
  padding: var(--space-6);
  border-top: var(--hairline) solid var(--line);
  background: var(--accent-soft);
}
.invoice-total-label { color: var(--muted); font-size: 0.9rem; }
.invoice-total-value {
  font-size: clamp(2rem, 4.4vw, 2.75rem);
  font-weight: 650; line-height: 1;
  letter-spacing: -0.03em;
  color: var(--accent);
  font-variant-numeric: tabular-nums;
}
.invoice-fine {
  margin: 0;
  padding: var(--space-4) var(--space-6);
  border-top: var(--hairline) solid var(--line-soft);
  color: var(--dim); font-size: 0.8rem;
}

/* ── 5. Что покупают / что заменяет ─────────────────────────────────────*/
.paying {
  display: grid; gap: var(--space-6);
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  margin-top: var(--space-10);
}
.paying-col {
  padding: var(--space-6);
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--panel);
}
.paying-col-us { border-color: var(--accent); background: var(--accent-soft); }
.paying-h {
  margin: 0 0 var(--space-4);
  font-size: 0.78rem; font-weight: 600;
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--dim);
}
.paying-col-us .paying-h { color: var(--accent); }
.paying-list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--space-4); }
.paying-list > li {
  display: flex; gap: var(--space-4);
  align-items: center;              /* плитка 40px задаёт высоту строки */
  color: var(--muted);
  min-height: 40px;
}
.paying-list-on > li { color: var(--text); }

/* ── 6. Установка: девять шагов против одного ───────────────────────────*/
.tracks { display: grid; gap: var(--space-6); margin-top: var(--space-10); }
.track {
  padding: var(--space-6);
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--panel);
}
.track-us { border-color: var(--accent); background: var(--accent-soft); }
.track-head {
  display: flex; flex-wrap: wrap; gap: 4px var(--space-4);
  align-items: baseline; justify-content: space-between;
  margin-bottom: var(--space-4);
}
.track-label { font-weight: 600; letter-spacing: -0.01em; }
.track-us .track-label { color: var(--accent); }
.track-count { color: var(--dim); font-size: 0.84rem; font-variant-numeric: tabular-nums; }
.track-steps {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-wrap: wrap; gap: var(--space-2);
}
.track-steps > li {
  display: flex; gap: 8px; align-items: center;
  padding: 9px 13px;
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--bg-raise);
  color: var(--muted);
  font-size: 0.87rem;
  transition: border-color var(--t-slow), color var(--t-slow), transform var(--t-slow);
}
.track-steps > li:hover { border-color: var(--dim); color: var(--text); transform: translateY(-1px); }
.track-steps > li > b {
  display: grid; place-items: center;
  width: 19px; height: 19px; flex: none;
  border-radius: var(--radius);
  background: var(--panel-2);
  color: var(--dim);
  font-size: 0.7rem; font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.track-steps-on > li {
  border-color: var(--accent);
  background: var(--bg-raise);
  color: var(--text);
  font-size: 1.05rem; font-weight: 550;
  padding: 14px 20px;
}
.track-steps-on > li > b { background: var(--accent); color: var(--accent-fg); }
.track-loop {
  display: flex; gap: var(--space-3); align-items: flex-start;
  margin: var(--space-4) 0 0;
  color: var(--dim); font-size: 0.9rem;
}
.track-loop .ico { margin-top: 2px; }
.track-loop-on { color: var(--muted); }
.track-loop-on .ico { color: var(--accent); }

.aside {
  margin: var(--space-8) 0 0;
  padding-left: var(--space-4);
  border-left: 2px solid var(--line);
  color: var(--muted);
  font-size: 0.92rem;
  max-width: 68ch;
}

/* ── 7. Дерево уровней ──────────────────────────────────────────────────*/
.tree { margin-top: var(--space-10); }
.tree-row {
  display: flex; flex-wrap: wrap; gap: var(--space-2) var(--space-3);
  align-items: center;
  padding: var(--space-4) 0;
  position: relative;
}
.tree-row + .tree-row { border-top: var(--hairline) solid var(--line-soft); }
.tree-row-3 { padding-left: var(--space-6); }
.tree-row-4 { padding-left: var(--space-12); }
.tree-node {
  padding: 7px 12px;
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--panel);
  font-size: 0.9rem; font-weight: 500;
  transition: border-color var(--t-slow), transform var(--t-slow);
}
.tree-node:hover { border-color: var(--accent); transform: translateY(-1px); }
.tree-node > i { font-style: normal; color: var(--dim); font-weight: 400; }
.tree-node-root { border-color: var(--accent); background: var(--accent-soft); }
.tree-node-deep { border-style: dashed; border-color: var(--gold); }
.tree-tag {
  margin-left: auto;
  font-size: 0.76rem; font-weight: 600;
  letter-spacing: 0.05em; text-transform: uppercase;
  color: var(--dim);
}
.tree-tag .lit { text-transform: none; letter-spacing: 0.012em; }
.tree-tag-ok { color: var(--accent); }
.tree-tag-gold { color: var(--gold); }
.tree-verdict {
  display: grid; gap: var(--space-6);
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  margin-top: var(--space-8);
}
.tree-verdict-col {
  padding: var(--space-6);
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--panel);
}
.tree-verdict-col-on { border-color: var(--accent); background: var(--accent-soft); }
.tree-verdict-label {
  display: block; margin-bottom: var(--space-3);
  font-size: 0.78rem; font-weight: 600;
  letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--dim);
}
.tree-verdict-col-on .tree-verdict-label { color: var(--accent); }
.tree-verdict-col p { margin: 0; color: var(--muted); font-size: 0.94rem; }

/* ── 8. Таблицы ─────────────────────────────────────────────────────────*/
.table-scroll {
  margin-top: var(--space-10);
  overflow-x: auto;
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  background: var(--panel);
}
.cmp, .errs { width: 100%; border-collapse: collapse; font-size: 0.9rem; }
.cmp { min-width: 54rem; }
.errs { min-width: 60rem; }
.cmp tbody th, .cmp thead th:first-child { width: 15rem; }
.cmp td, .cmp thead th:not(:first-child) { width: 22%; }
.cmp th, .cmp td, .errs th, .errs td {
  padding: var(--space-4) var(--space-4);
  text-align: left; vertical-align: top;
  border-bottom: var(--hairline) solid var(--line-soft);
}
.cmp thead th, .errs thead th {
  position: sticky; top: 0; z-index: 1;
  background: var(--bg-raise);
  border-bottom: var(--hairline) solid var(--line);
  font-size: 0.76rem; font-weight: 600;
  letter-spacing: 0.07em; text-transform: uppercase;
  color: var(--dim);
  white-space: nowrap;
}
.cmp tbody th, .errs tbody th { font-weight: 550; color: var(--text); }
.cmp td, .errs td { color: var(--muted); }
.cmp tbody tr:last-child th, .cmp tbody tr:last-child td,
.errs tbody tr:last-child th, .errs tbody tr:last-child td { border-bottom: 0; }
.cmp tbody tr:hover td, .cmp tbody tr:hover th,
.errs tbody tr:hover td, .errs tbody tr:hover th { background: var(--line-soft); }
.cmp-us, .errs-us { background: var(--accent-soft); }
.cmp thead .cmp-us, .errs thead .errs-us { color: var(--accent); background: var(--accent-soft); }
.cmp-us b { color: var(--text); font-weight: 600; }
.cmp-win { color: var(--text); }
.cmp-eg { display: inline-block; margin-top: 4px; font-weight: 400; }
.errs tbody th { min-width: 19rem; }
.errs .lit { white-space: normal; overflow-wrap: break-word; }
.errs-none { color: var(--dim); font-style: italic; }

.mark-yes, .mark-part, .mark-no {
  display: inline-block; margin-right: 6px;
  padding: 2px 8px;
  border-radius: var(--radius-pill);
  font-size: 0.72rem; font-weight: 650;
  letter-spacing: 0.05em; text-transform: uppercase;
  white-space: nowrap;
}
.mark-yes { background: var(--accent); color: var(--accent-fg); }
.mark-part { background: var(--gold-soft); color: var(--gold); box-shadow: inset 0 0 0 1px var(--gold); }
.mark-no { background: var(--panel-2); color: var(--muted); box-shadow: inset 0 0 0 1px var(--line); }

/* ── 9. Оговорка к сравнению ────────────────────────────────────────────
   Не мелкий шрифт под таблицей: без неё сравнение было бы нечестным,
   поэтому она заметна ровно настолько же. */
.caveat {
  display: flex; gap: var(--space-4); align-items: flex-start;
  margin-top: var(--space-6);
  padding: var(--space-6);
  border: var(--hairline) solid var(--gold);
  border-radius: var(--radius);
  background: var(--gold-soft);
}
.caveat > .tile { margin-top: 1px; }
.caveat p { margin: 0; color: var(--muted); font-size: 0.92rem; }
.caveat p + p { margin-top: var(--space-3); }
.caveat-src { color: var(--dim) !important; font-size: 0.82rem !important; }
.caveat-src a { color: var(--muted); text-decoration: underline; text-underline-offset: 2px; }
.caveat-src a:hover { color: var(--accent-hover); }

/* ── 10. Границы ────────────────────────────────────────────────────────*/
.hero-cta-center { justify-content: center; }

.limits {
  display: grid; gap: var(--space-6);
  grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));
  margin-top: var(--space-10);
}
.limit { padding-top: var(--space-4); border-top: 2px solid var(--line); }
.limit-h { margin: 0 0 var(--space-3); font-size: 1.02rem; font-weight: 600; letter-spacing: -0.01em; }
.limit p { margin: 0; color: var(--muted); font-size: 0.94rem; }

@media (max-width: 860px) {
  .tree-row-3 { padding-left: var(--space-4); }
  .tree-row-4 { padding-left: var(--space-8); }
  .tree-tag { margin-left: 0; flex-basis: 100%; }
  .invoice-total-value { font-size: 2rem; }
}


/* ── 11. Карта разделов ─────────────────────────────────────────────────
   Восемь материнских страниц и то, что под ними. Это не «ещё карточки»:
   с лендинга иначе нет ни одного пути внутрь сайта, кроме подвала. */
.cocoons {
  display: grid; gap: var(--hairline);
  /* 290px давали три колонки и девятую пустую ячейку на восьми коконах.
     240px дают четыре: 8 делится на 4, 2 и 1 без остатка на всех ширинах. */
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  margin-top: var(--space-10);
  background: var(--line);
  border: var(--hairline) solid var(--line);
  border-radius: var(--radius);
  overflow: hidden;
}
.cocoon { background: var(--bg); padding: var(--space-6); display: grid; align-content: start; gap: var(--space-3); }
.cocoon-head {
  display: flex; align-items: center; gap: var(--space-3);
  color: var(--text); text-decoration: none;
}
.cocoon-head:hover { color: var(--accent-hover); }
.cocoon-tile { transition: transform var(--t-slow), border-color var(--t-slow); }
.cocoon-head:hover .cocoon-tile {
  transform: translateY(-2px);
  border-color: var(--accent);
}
.cocoon-name { font-weight: 600; letter-spacing: -0.01em; }
.cocoon-count {
  margin-left: auto; flex: none;
  color: var(--dim); font-size: 0.74rem; font-weight: 600;
  letter-spacing: 0.06em; text-transform: uppercase;
  font-variant-numeric: tabular-nums;
}
.cocoon-desc { margin: 0; color: var(--muted); font-size: 0.88rem; }
.cocoon-kids { list-style: none; margin: 0; padding: 0; display: grid; gap: 2px; }
.cocoon-kids > li > a {
  display: block; padding: 5px 0 5px var(--space-4);
  border-left: 2px solid var(--line);
  color: var(--dim); font-size: 0.86rem;
  text-decoration: none;
  transition: border-color var(--t-slow), color var(--t-slow), padding-left var(--t-slow);
}
.cocoon-kids > li > a:hover {
  border-left-color: var(--accent);
  color: var(--text);
  padding-left: calc(var(--space-4) + 3px);
}


/* ── 12. Переход вглубь ─────────────────────────────────────────────────
   Лендинг показывает пять кодов; полный разбор живёт на своей странице.
   Ссылка должна читаться как дверь, а не как строка «читать далее». */
.deeper {
  display: flex; align-items: center; gap: var(--space-6);
  margin-top: var(--space-6);
  padding: var(--space-6);
  border: var(--hairline) solid var(--accent);
  border-radius: var(--radius);
  background: var(--accent-soft);
  color: var(--text); text-decoration: none;
  transition: background var(--t-slow), border-color var(--t-slow);
}
.deeper:hover { background: var(--bg-raise); border-color: var(--accent-hover); }
.deeper-body { display: grid; gap: 6px; }
.deeper-title { font-weight: 600; letter-spacing: -0.01em; }
.deeper:hover .deeper-title { color: var(--accent-hover); }
.deeper-text { color: var(--muted); font-size: 0.92rem; }
.deeper-arrow {
  flex: none; margin-left: auto;
  width: 22px; height: 22px; color: var(--accent);
  transition: transform var(--t-slow);
}
.deeper:hover .deeper-arrow { transform: translateX(4px); }


/* ── 13. Плитка иконки — компонент главного сайта ───────────────────────
 * `.index-icon-tile` из bridge-cdn.com перенесён размерами и формой как
 * есть: 40×40, скругление 8px (у главного сайта --radius-md), рамка 1px,
 * подложка тона, глиф 20px внутри. Это опознаваемая часть идентики, а не
 * украшение: на главном сайте так набран весь список возможностей.
 *
 * Тона у донора завязаны на его палитру (green = акцент, amber = warning,
 * teal = accent-secondary). Здесь их три и каждый что-то значит:
 *   accent  — то, что включено и работает;
 *   gold    — то, за что берут деньги в другом месте;
 *   plain   — то, что делаете вы руками (левая колонка сравнений).
 * Четвёртого тона нет: цвет на этой странице называет состояние, а не
 * раскрашивает список.
 */
.tile {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px; height: 40px;
  flex-shrink: 0;
  border-radius: 8px;
  border: 1px solid var(--line);
  background: var(--panel-2);
  color: var(--dim);
}
.tile > .ico { width: 20px; height: 20px; }
.tile-accent {
  background: var(--accent-soft);
  border-color: color-mix(in srgb, var(--accent) 28%, var(--line));
  color: var(--accent);
}
.tile-gold {
  background: var(--gold-soft);
  border-color: color-mix(in srgb, var(--gold) 32%, var(--line));
  color: var(--gold);
}


/* ── Шапка на узких экранах ─────────────────────────────────────────────
 * Замер на 390px: доступно 338px (390 минус два отступа по 26), а знак с
 * подписью, «Menu», переключатель темы и кнопка действия просят около 398.
 * Flex не переносит и не сжимает их, поэтому строка вылезала за отступ и
 * кнопка обрезалась правым краем — на главной ровно так же, как на
 * внутренних. Проверено по пикселям: заливка доходила до последнего.
 *
 * Лечится сжатием, а не выбрасыванием кнопки: она и есть цель страницы.
 */
@media (max-width: 460px) {
  .wrap { padding-inline: var(--space-4); }
  .hdr-in { gap: var(--space-3); }
  .hdr-right { gap: var(--space-2); }
}
@media (max-width: 420px) {
  /* Подпись знака уходит, сам знак остаётся и ведёт на главную —
     у ссылки есть aria-label, поэтому имя доступно и без текста. */
  .hdr-brand b { display: none; }
}
