/* ═══════════════════════════════════════════════
   Мастер 24 — лендинг выездного ремонта техники
   Синий корпоративный стиль: тёмно-синий hero с фото,
   крупные жирные заголовки, белые секции, много движения.
   Шрифт: Golos Text, один на весь сайт.
   ═══════════════════════════════════════════════ */

:root{
  /* цвет */
  --ink:       #14181C;   /* основной текст, 15.9:1 на белом */
  --ink-2:     #58626D;   /* вторичный текст, 5.6:1 на белом */
  --line:      #E3E7EB;
  --soft:      #F4F7FA;   /* фон чередующихся секций */
  --white:     #FFFFFF;

  --acc:       #1D63E0;   /* основной синий, 5.5:1 на белом */
  --acc-dk:    #1750B8;
  --acc-soft:  #E8F0FE;
  --navy:      #0E2E4D;   /* тёмно-синий: цифры, футер, кнопка на hero */
  --navy-dk:   #0A2440;
  --hero-a:    #1B4F7D;   /* градиент hero: белый текст даёт 8.6:1 … */
  --hero-b:    #35719F;   /* … и 5.2:1 на светлом конце */
  --star:      #F0A202;
  --err:       #C8321F;

  --f: 'Golos Text', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

  /* сетка */
  --gut: 20px;
  --max: 1400px;   /* на мониторах 2К контейнер 1180px занимал меньше половины экрана */
  --r:   16px;
  --r-s: 10px;

  /* чекбокс согласия */
  --check:     16px;
  --check-gap: 9px;

  --sh:    0 2px 6px rgba(14,46,77,.05), 0 14px 34px -22px rgba(14,46,77,.35);
  --sh-lg: 0 6px 16px rgba(14,46,77,.07), 0 34px 70px -40px rgba(14,46,77,.5);
  --ease:  cubic-bezier(.22,.68,.32,1);
}

*,*::before,*::after{ box-sizing:border-box; }

/* overflow-x:clip, а не hidden: hidden на html сделал бы его скролл-контейнером
   и сломал position:sticky у шапки. Нужно, потому что блоки с .reveal--r до
   появления сдвинуты вправо на 34px и иначе растягивают страницу вбок. */
html{ scroll-behavior:smooth; scroll-padding-top:88px; -webkit-text-size-adjust:100%; overflow-x:clip; }

/* Системную полосу прокрутки прячем: положение на странице показывает линия
   прогресса вверху. Прокрутка колесом, клавишами, тачпадом и с телефона
   работает как обычно — скрыт только сам ползунок. */
html{ scrollbar-width:none; }
html::-webkit-scrollbar{ width:0; height:0; }

body{
  margin:0;
  font-family:var(--f);
  font-size:16px;
  line-height:1.6;
  color:var(--ink);
  background:var(--white);
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}

img,svg{ max-width:100%; }
img{ display:block; }
a{ color:inherit; text-decoration:none; }
button,input,select,textarea{ font:inherit; color:inherit; }
h1,h2,h3,p,ul,ol,dl,dd,figure,blockquote{ margin:0; }
ul,ol{ padding:0; list-style:none; }

/* Атрибут hidden скрывает через display:none в стиле браузера, а любой наш
   display его перебивает. Без этой строки не прячутся .fld__err и .bigform__body —
   форма и «Заявка принята» показываются одновременно. */
[hidden]{ display:none !important; }

:focus-visible{ outline:3px solid var(--acc); outline-offset:2px; border-radius:4px; }
.hero :focus-visible{ outline-color:var(--white); }

/* ── утилиты ── */
.wrap{ width:100%; max-width:var(--max); margin-inline:auto; padding-inline:var(--gut); }

.vh{
  position:absolute; width:1px; height:1px; overflow:hidden;
  clip:rect(0 0 0 0); clip-path:inset(50%); white-space:nowrap;
}

.skip-link{
  position:absolute; left:var(--gut); top:-100px; z-index:200;
  background:var(--navy); color:var(--white); font-weight:600;
  padding:10px 18px; border-radius:0 0 var(--r-s) var(--r-s);
  transition:top .15s;
}
.skip-link:focus{ top:0; }

.eyebrow{
  display:inline-block; font-size:13px; font-weight:600; letter-spacing:.04em;
  text-transform:uppercase; color:var(--acc); margin-bottom:14px;
}

.ico{ width:20px; height:20px; flex:none; }

.ticks{ display:flex; flex-direction:column; gap:12px; }
.ticks li{ display:flex; align-items:flex-start; gap:11px; font-size:16px; }
.ticks .ico{ width:20px; height:20px; margin-top:2px; color:var(--acc); }

/* ── кнопки ── */
.btn{
  position:relative; overflow:hidden;
  display:inline-flex; align-items:center; justify-content:center; gap:9px;
  font-weight:600; font-size:16px; line-height:1;
  padding:16px 28px; border:1px solid transparent; border-radius:var(--r-s);
  cursor:pointer; text-align:center; white-space:nowrap;
  transition:background-color .2s, border-color .2s, color .2s,
             transform .2s var(--ease), box-shadow .2s var(--ease);
}
.btn:hover{ transform:translateY(-2px); }
.btn:active{ transform:translateY(0); }
.btn .ico{ transition:transform .25s var(--ease); }
.btn:hover .ico--arr{ transform:translateX(4px); }

.btn--acc{ background:var(--acc); color:var(--white); }
.btn--acc:hover{ background:var(--acc-dk); box-shadow:0 12px 26px -12px rgba(29,99,224,.75); }
.btn--navy{ background:var(--navy); color:var(--white); }
.btn--navy:hover{ background:var(--navy-dk); box-shadow:0 12px 26px -12px rgba(0,0,0,.6); }
.btn--white{ background:var(--white); color:var(--navy); }
.btn--white:hover{ background:#EDF3F9; box-shadow:0 12px 26px -12px rgba(0,0,0,.45); }
.btn--out{ background:var(--white); color:var(--ink); border-color:var(--line); }
.btn--out:hover{ border-color:var(--acc); color:var(--acc); }
.btn--lg{ padding:18px 32px; font-size:17px; }
.btn--sm{ padding:12px 20px; font-size:15px; }
.btn--block{ width:100%; }

/* ═══ ПОЛОСА ПРОКРУТКИ ═══ */
.progress{
  position:fixed; left:0; top:0; z-index:120;
  width:100%; height:3px; background:var(--acc);
  transform:scaleX(0); transform-origin:0 50%;
}

/* ═══ ШАПКА ═══ */
.hdr{
  position:sticky; top:0; z-index:100;
  background:var(--white);
  border-bottom:1px solid var(--line);
  transition:box-shadow .25s, height .25s;
}
.hdr.is-scrolled{ box-shadow:0 6px 24px -12px rgba(14,46,77,.35); }
.hdr__in{ display:flex; align-items:center; gap:26px; height:78px; transition:height .25s var(--ease); }
.hdr.is-scrolled .hdr__in{ height:66px; }

.brand{ display:inline-flex; align-items:center; flex:none; }
.brand__text{ font-weight:700; font-size:22px; letter-spacing:-.03em; color:var(--ink); }
.brand__num{ color:var(--acc); }

.nav{ display:flex; gap:28px; margin-inline-start:auto; }
.nav__link{
  position:relative; font-size:15px; color:var(--ink-2); white-space:nowrap; padding:6px 0;
  transition:color .18s;
}
.nav__link::after{
  content:''; position:absolute; left:0; right:0; bottom:0; height:2px;
  background:var(--acc); transform:scaleX(0); transform-origin:0 50%;
  transition:transform .28s var(--ease);
}
.nav__link:hover{ color:var(--ink); }
.nav__link:hover::after{ transform:scaleX(1); }

.hdr__act{ display:flex; align-items:center; gap:18px; margin-inline-start:auto; }
.hdr__tel{ display:flex; align-items:center; gap:9px; }
.hdr__tel-ico{ width:18px; height:18px; color:var(--acc); }
.hdr__tel-txt{ display:flex; flex-direction:column; line-height:1.3; }
.hdr__tel-num{ font-weight:700; font-size:16px; white-space:nowrap; font-variant-numeric:tabular-nums; }
.hdr__tel-hint{ font-size:12px; color:var(--ink-2); }

.burger{
  display:none; width:44px; height:44px; padding:11px;
  background:var(--white); border:1px solid var(--line); border-radius:var(--r-s);
  cursor:pointer;
}
.burger span{ display:block; height:2px; background:var(--ink); border-radius:2px; transition:transform .25s var(--ease), opacity .2s; }
.burger span+span{ margin-top:5px; }
.burger[aria-expanded="true"] span:nth-child(1){ transform:translateY(7px) rotate(45deg); }
.burger[aria-expanded="true"] span:nth-child(2){ opacity:0; }
.burger[aria-expanded="true"] span:nth-child(3){ transform:translateY(-7px) rotate(-45deg); }

/* ═══ ПЕРВЫЙ ЭКРАН ═══ */
.hero{
  position:relative; overflow:hidden; color:var(--white);
  background:linear-gradient(115deg, var(--hero-a) 0%, var(--hero-a) 38%, var(--hero-b) 100%);
}
/* .hero__grid намеренно без position: иначе он стал бы точкой отсчёта
   для .hero__media, и фото упёрлось бы в границу контейнера, а не в край экрана. */
.hero__grid{
  display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  align-items:center; min-height:560px; padding-block:64px;
}
.hero__txt{ position:relative; z-index:2; }

.hero__top{ font-size:15px; color:rgba(255,255,255,.85); margin-bottom:16px; }
.hero__h1{
  font-weight:700; font-size:clamp(38px,5.2vw,68px);
  line-height:1.04; letter-spacing:-.035em; margin-bottom:20px;
}
.hero__sub{ font-size:18px; color:rgba(255,255,255,.9); margin-bottom:30px; max-width:44ch; }
.hero__btns{ display:flex; flex-wrap:wrap; gap:14px; margin-bottom:28px; }

/* фото-слайдер справа */
.hero__media{
  position:absolute; top:0; right:0; bottom:0; left:50%; z-index:1;
}
/* Левый край фото растворяем маской, а не заливкой поверх. Заливка давала
   вертикальный шов: её цвет не совпадал с диагональным градиентом фона. */
.hero__ph{
  position:absolute; inset:0; opacity:0;
  transition:opacity 1.1s cubic-bezier(.4,0,.2,1);
  -webkit-mask-image:linear-gradient(90deg, transparent 0, rgba(0,0,0,.55) 20%, #000 48%);
          mask-image:linear-gradient(90deg, transparent 0, rgba(0,0,0,.55) 20%, #000 48%);
}
.hero__ph.is-on{ opacity:1; }
.hero__ph img{ width:100%; height:100%; object-fit:cover; }
.op-r img{ object-position:76% center; }

/* ═══ 4 ПРЕИМУЩЕСТВА ═══ */
.perks{ padding-block:72px; }
/* Две колонки, а не четыре: в 265px заголовки вроде «Выезд и диагностика — 0 ₽»
   ломались посреди фразы. Иконка слева — блок получается компактнее. */
.perks__grid{ display:grid; grid-template-columns:repeat(2,1fr); gap:20px; }
.perk{
  padding:26px 28px; border:1px solid var(--line); border-radius:var(--r); background:var(--white);
  transition:transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s;
}
.perk:hover{ transform:translateY(-4px); box-shadow:var(--sh); border-color:transparent; }
.perk h3{ font-size:18.5px; font-weight:700; margin-bottom:7px; letter-spacing:-.015em; }
.perk p{ font-size:15.5px; color:var(--ink-2); }

/* ═══ СЕКЦИИ ═══ */
.sec{ padding-block:92px; }
.sec--soft{ background:var(--soft); }

.sec__head{ max-width:720px; margin:0 auto 52px; text-align:center; }
.sec__head--left{ margin-inline:0; text-align:left; }
.sec__h2{
  font-weight:700; font-size:clamp(28px,3.4vw,42px);
  line-height:1.1; letter-spacing:-.03em; margin-bottom:16px;
}
.sec__lead{ font-size:17.5px; color:var(--ink-2); }

/* ═══ БЛОК С ФОТО В РАМКЕ ═══ */
.split{ display:grid; grid-template-columns:1fr 1.05fr; gap:64px; align-items:center; }
.split__txt .sec__lead{ margin-bottom:28px; }
.split__btns{ display:flex; flex-wrap:wrap; gap:14px; }

/* Одна подложка со смещением вниз-вправо. Раньше их было две, обе почти
   прозрачные — читались как артефакт отрисовки, а не как приём. */
.frame{ position:relative; padding:0 18px 18px 0; }
.frame::before{
  content:''; position:absolute; right:0; bottom:0; top:36px; left:54px;
  background:var(--acc-soft); border-radius:20px; z-index:0;
}
.frame__in{
  position:relative; z-index:1; border-radius:20px; overflow:hidden;
  box-shadow:var(--sh-lg); animation:float 7s ease-in-out infinite;
}
.frame__in img{ width:100%; height:auto; aspect-ratio:3/2; object-fit:cover; background:var(--soft); }
@keyframes float{ 0%,100%{ transform:translateY(0); } 50%{ transform:translateY(-12px); } }

/* ═══ УСЛУГИ ═══ */
.cards{ display:grid; grid-template-columns:repeat(2,1fr); gap:28px; }
.card{
  display:flex; flex-direction:column; overflow:hidden;
  background:var(--white); border:1px solid var(--line); border-radius:var(--r);
  transition:transform .35s var(--ease), box-shadow .35s var(--ease), border-color .3s;
}
.card:hover{ transform:translateY(-8px); box-shadow:var(--sh-lg); border-color:transparent; }
.card__ph{ overflow:hidden; }
.card__img{
  width:100%; height:auto; aspect-ratio:16/10; object-fit:cover; background:var(--soft);
  transition:transform .7s var(--ease);
}
.card:hover .card__img{ transform:scale(1.06); }
.card__body{ display:flex; flex-direction:column; flex:1; padding:28px 28px 26px; }
.card__h3{ font-size:23px; font-weight:700; letter-spacing:-.02em; margin-bottom:16px; }
.card__list{ display:flex; flex-direction:column; gap:9px; margin-bottom:24px; }
.card__list li{ position:relative; padding-left:19px; font-size:16px; color:var(--ink-2); }
.card__list li::before{
  content:''; position:absolute; left:0; top:10px;
  width:7px; height:7px; border-radius:50%; background:var(--acc);
  transition:transform .3s var(--ease);
}
.card:hover .card__list li::before{ transform:scale(1.35); }
.card__from{
  display:flex; align-items:baseline; gap:7px;
  /* без line-height:1 строку раздувает интерлиньяж 1.6 — цена уезжает вниз
     и висит далеко от разделительной линейки */
  line-height:1;
  margin-top:auto; padding-top:20px; border-top:1px solid var(--line);
  font-size:15px; color:var(--ink-2);
}
.card__from b{
  font-size:24px; font-weight:700; color:var(--ink); letter-spacing:-.02em;
  /* моноширинные цифры: иначе 900 и 1 200 набраны знаками разной ширины
     и четыре цены в сетке не выстраиваются в ровную колонку */
  font-variant-numeric:tabular-nums;
}

/* ═══ КАК РАБОТАЕМ ═══ */
.steps{ display:grid; grid-template-columns:repeat(4,1fr); gap:34px; }
.steps__i{ position:relative; }
.steps__n{
  display:flex; align-items:center; justify-content:center;
  width:52px; height:52px; margin-bottom:18px;
  background:var(--acc); color:var(--white);
  border-radius:50%; font-size:21px; font-weight:700;
  /* без line-height:1 цифра садится ниже центра кружка на пару пикселей */
  line-height:1;
  transition:transform .35s var(--ease), box-shadow .35s var(--ease);
}
.steps__i:hover .steps__n{ transform:scale(1.12); box-shadow:0 12px 26px -10px rgba(29,99,224,.8); }
/* top = центр кружка (26px) минус половина толщины линии, иначе линия проходит
   на 1px ниже его оси */
.steps__i::after{
  content:''; position:absolute; top:25px; left:64px; right:-22px; height:2px;
  background:linear-gradient(90deg, var(--acc), rgba(29,99,224,.15));
  transform:scaleX(0); transform-origin:0 50%;
  transition:transform .7s var(--ease) .25s;
}
.steps__i.is-in::after{ transform:scaleX(1); }
/* У последнего шага линия тоже нужна, иначе цепочка обрывается на четвёртом
   кружке и весь график оказывается на ~100px левее центра заголовка.
   right:0 — доводим её ровно до края контейнера, а не в межколоночный зазор. */
.steps__i:last-child::after{ right:0; }
.steps__h3{ font-size:20px; font-weight:700; letter-spacing:-.015em; margin-bottom:10px; }
.steps__i p{ font-size:16px; color:var(--ink-2); }

/* ═══ ЦИФРЫ ═══ */
.stats{ background:var(--navy); color:var(--white); }
.stats__in{ display:grid; grid-template-columns:repeat(4,1fr); gap:32px; padding-block:64px; }
.stat b{
  display:block; font-size:clamp(34px,4vw,48px); font-weight:700;
  letter-spacing:-.035em; line-height:1.1; font-variant-numeric:tabular-nums;
}
.stat span{ font-size:15.5px; color:rgba(255,255,255,.72); }

/* ═══ ЦЕНЫ ═══ */
.price{ background:var(--white); border:1px solid var(--line); border-radius:var(--r); overflow:hidden; box-shadow:var(--sh); }
.price__tabs{ display:flex; flex-wrap:wrap; border-bottom:1px solid var(--line); }
.price__tab{
  flex:1 1 auto; position:relative; padding:19px 20px; cursor:pointer;
  background:var(--white); border:0;
  font-size:16px; font-weight:500; color:var(--ink-2); white-space:nowrap;
  transition:color .2s, background-color .2s;
}
.price__tab::after{
  content:''; position:absolute; left:0; right:0; bottom:0; height:3px; background:var(--acc);
  transform:scaleX(0); transition:transform .3s var(--ease);
}
.price__tab:hover{ color:var(--ink); background:var(--soft); }
.price__tab.is-on{ color:var(--acc); font-weight:600; }
.price__tab.is-on::after{ transform:scaleX(1); }

/* table-layout:fixed — ширины колонок берутся из <th> и не пересчитываются по
   содержимому. С auto колонки «Срок» и «Цена» прыгали на 15–30px при каждом
   переключении вкладки, потому что в разных разделах разной длины тексты. */
.price__tbl{ width:100%; border-collapse:collapse; table-layout:fixed; }
.price__tbl th:nth-child(1){ width:54%; }
.price__tbl th:nth-child(2){ width:23%; }
.price__tbl th:nth-child(3){ width:23%; }
.price__tbl th{
  text-align:left; padding:14px 26px;
  font-weight:600; font-size:13px; color:var(--ink-2);
  background:var(--soft); border-bottom:1px solid var(--line);
}
.price__tbl th:last-child, .price__tbl td:last-child{ text-align:right; }
.price__tbl td{ padding:17px 26px; font-size:16px; border-bottom:1px solid var(--line); }
.price__tbl tr:last-child td{ border-bottom:0; }
.price__tbl tbody tr{ animation:rowIn .45s var(--ease) both; transition:background-color .18s; }
.price__tbl tbody tr:hover{ background:var(--acc-soft); }
.price__tbl tbody tr:nth-child(1){ animation-delay:.02s } .price__tbl tbody tr:nth-child(2){ animation-delay:.06s }
.price__tbl tbody tr:nth-child(3){ animation-delay:.10s } .price__tbl tbody tr:nth-child(4){ animation-delay:.14s }
.price__tbl tbody tr:nth-child(5){ animation-delay:.18s } .price__tbl tbody tr:nth-child(6){ animation-delay:.22s }
.price__tbl tbody tr:nth-child(7){ animation-delay:.26s } .price__tbl tbody tr:nth-child(8){ animation-delay:.30s }
@keyframes rowIn{ from{ opacity:0; transform:translateY(10px); } to{ opacity:1; transform:none; } }

.price__job{ font-weight:500; }
.price__time{ font-size:14px; color:var(--ink-2); white-space:nowrap; font-variant-numeric:tabular-nums; }
.price__val{ font-weight:700; font-size:16.5px; white-space:nowrap; font-variant-numeric:tabular-nums; }

.price__note{
  display:flex; gap:10px; align-items:flex-start;
  padding:16px 26px; background:var(--soft); border-top:1px solid var(--line);
  font-size:14px; color:var(--ink-2);
}
.price__note .ico{ width:18px; height:18px; margin-top:2px; }

/* ═══ ГАРАНТИЯ ═══ */
.warranty{ display:grid; grid-template-columns:1fr 1fr; gap:60px; align-items:center; }
.warranty__list{ margin:26px 0 32px; }

.voucher{
  background:var(--white); border:1px solid var(--line);
  border-radius:var(--r); padding:28px 28px 0; overflow:hidden;
  box-shadow:var(--sh-lg);
  transition:transform .35s var(--ease);
}
.voucher:hover{ transform:translateY(-6px) rotate(-.6deg); }
.voucher__top{
  display:flex; justify-content:space-between; align-items:baseline; gap:12px;
  padding-bottom:16px; border-bottom:2px solid var(--navy);
  font-size:13px; font-weight:600;
}
.voucher__top span:last-child{ font-weight:500; color:var(--ink-2); font-variant-numeric:tabular-nums; }
.voucher__rows div{ display:flex; gap:16px; padding-block:14px; border-bottom:1px dashed var(--line); }
.voucher__rows dt{ font-size:15px; color:var(--ink-2); width:88px; flex:none; }
.voucher__rows dd{ font-size:16px; font-weight:600; margin-inline-start:auto; text-align:right; }
.voucher__seal{
  display:flex; justify-content:space-between; align-items:center; gap:16px;
  margin:16px -28px 0; padding:20px 28px;
  background:var(--navy); color:var(--white);
}
.voucher__seal-lab{ font-size:15px; color:rgba(255,255,255,.72); }
.voucher__seal-val{ font-size:20px; font-weight:700; font-variant-numeric:tabular-nums; }

/* ═══ ОТЗЫВЫ ═══ */
.revs{ display:grid; grid-template-columns:repeat(3,1fr); gap:26px; }
.rev{
  display:flex; flex-direction:column;
  background:var(--white); border:1px solid var(--line); border-radius:var(--r); padding:30px 28px;
  transition:transform .35s var(--ease), box-shadow .35s var(--ease);
}
.rev:hover{ transform:translateY(-6px); box-shadow:var(--sh); }
.rev__stars{ color:var(--star); font-size:17px; letter-spacing:.14em; margin-bottom:16px; }
.rev blockquote{ font-size:16px; margin-bottom:22px; }
.rev figcaption{ display:flex; flex-direction:column; gap:2px; margin-top:auto; padding-top:18px; border-top:1px solid var(--line); }
.rev figcaption b{ font-weight:600; font-size:16px; }
.rev figcaption span{ font-size:14px; color:var(--ink-2); }

/* ═══ ВОПРОСЫ ═══ */
.faq{ max-width:840px; }
.faq__list{ display:flex; flex-direction:column; gap:12px; }
.q{
  background:var(--white); border:1px solid var(--line); border-radius:var(--r);
  transition:border-color .25s, box-shadow .25s;
}
.q:hover{ border-color:#C9D6E4; }
/* Оформление раскрытого вопроса висит на классе .is-open, а не на атрибуте [open]:
   скрипт снимает класс сразу, а сам [open] — только после анимации закрытия,
   иначе рамка и крестик схлопывались бы раньше, чем уедет текст. */
.q.is-open{ border-color:var(--acc); box-shadow:var(--sh); }
.q__s{
  display:flex; align-items:center; gap:18px; cursor:pointer; list-style:none;
  padding:22px 26px; font-weight:600; font-size:18px;
}
.q__s::-webkit-details-marker{ display:none; }
.q__i{
  width:32px; height:32px; padding:6px; flex:none; margin-inline-start:auto;
  background:var(--acc-soft); color:var(--acc); border-radius:50%;
  transition:transform .35s var(--ease), background-color .25s, color .25s;
}
.q.is-open .q__i{ transform:rotate(135deg); background:var(--acc); color:var(--white); }
.q__a{ padding:0 26px 24px; }
.q__a p{ font-size:16.5px; color:var(--ink-2); max-width:68ch; }
@keyframes answerIn{ from{ opacity:0; transform:translateY(-8px); } to{ opacity:1; transform:none; } }

/* ═══ ЗАЯВКА ═══ */
.order__grid{ display:grid; grid-template-columns:1fr 1fr; gap:60px; align-items:start; }
.order__h2{
  font-weight:700; font-size:clamp(28px,3.2vw,38px);
  line-height:1.14; letter-spacing:-.028em; margin-bottom:16px;
}
.order__sub{ font-size:17.5px; color:var(--ink-2); margin-bottom:32px; }
.contacts li{ display:flex; gap:20px; align-items:baseline; padding-block:16px; border-top:1px solid var(--line); }
.contacts li:last-child{ border-bottom:1px solid var(--line); }
.contacts__lab{ font-size:15px; color:var(--ink-2); width:96px; flex:none; }
.contacts__val{ font-size:16.5px; font-weight:600; }
a.contacts__val{ color:var(--acc); }
a.contacts__val:hover{ text-decoration:underline; }

.bigform{ background:var(--white); border:1px solid var(--line); border-radius:var(--r); padding:32px; box-shadow:var(--sh); }
.bigform__body{ display:flex; flex-direction:column; gap:18px; }
.bigform__row{ display:grid; grid-template-columns:1fr 1fr; gap:16px; }
.bigform__done{ text-align:center; padding:38px 8px; animation:answerIn .4s var(--ease) both; }
.bigform__done h3{ font-size:24px; font-weight:700; margin-bottom:8px; }
.bigform__done p{ color:var(--ink-2); }
.done__ico{ width:60px; height:60px; color:var(--acc); margin:0 auto 18px; }
/* длины взяты из геометрии: окружность r=22 → 138.2, ломаная галочки → 29.4 */
.done__ico circle{ --len:139; stroke-dasharray:139; animation:draw .7s var(--ease) both; }
.done__ico path{ --len:30; stroke-dasharray:30; animation:draw .45s var(--ease) .5s both; }
@keyframes draw{ from{ stroke-dashoffset:var(--len); } to{ stroke-dashoffset:0; } }

.fld{ display:block; }
.fld__lab{ display:block; font-size:15px; font-weight:500; margin-bottom:8px; }
.fld__opt{ font-weight:400; color:var(--ink-2); }
.fld__in{
  width:100%; padding:15px 16px;
  background:var(--white); border:1px solid var(--line); border-radius:var(--r-s);
  font-size:16px;
  transition:border-color .18s, box-shadow .18s;
}
.fld__in::placeholder{ color:#98A1AB; }
.fld__in:focus{ outline:none; border-color:var(--acc); box-shadow:0 0 0 4px var(--acc-soft); }
.fld__in--sel{ appearance:none; cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1.5 7 7.5l6-6' fill='none' stroke='%2358626D' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 16px center; padding-right:44px;
}
.fld__in--area{ resize:vertical; min-height:104px; line-height:1.5; }
.fld.has-err .fld__in{ border-color:var(--err); animation:shake .35s; }
@keyframes shake{ 25%{ transform:translateX(-5px) } 50%{ transform:translateX(5px) } 75%{ transform:translateX(-3px) } }
.fld__err{ display:block; margin-top:7px; font-size:14px; color:var(--err); }

.agree{ display:flex; gap:var(--check-gap); align-items:flex-start; font-size:14px; color:var(--ink-2); cursor:pointer; }
/* Системную галочку браузер рисует не по центру квадрата — при увеличении видно,
   что она смещена вверх-вправо и выглядит косой. Рисуем свою.
   margin-top подобран так, чтобы центр квадрата совпал с оптическим центром
   строки: (22.4px строка − 18px квадрат) / 2 ≈ 2px. */
.agree input{
  appearance:none; -webkit-appearance:none;
  flex:none; width:18px; height:18px; margin:2px 0 0;
  background:var(--white); border:1.5px solid #C3CCD6; border-radius:5px;
  cursor:pointer;
  transition:background-color .16s, border-color .16s;
}
.agree input:checked{
  background:var(--acc) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12'%3E%3Cpath d='M2.6 6.1 4.9 8.4 9.4 3.5' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center / 12px 12px no-repeat;
  border-color:var(--acc);
}
.agree:hover input:not(:checked){ border-color:#9FAEBE; }

/* ═══ ФУТЕР ═══ */
.ftr{ background:var(--navy); color:#9FB3C6; padding-block:64px 26px; }
.ftr .brand{ color:var(--white); }
.ftr .brand__text{ color:var(--white); }
.ftr .brand__num{ color:#7FB0F5; }
.ftr__grid{ display:grid; grid-template-columns:1.7fr 1fr 1fr 1.1fr; gap:40px; padding-bottom:42px; }
.ftr__col{ display:flex; flex-direction:column; gap:12px; align-items:flex-start; }
.brand--ftr{ margin-bottom:6px; }
.ftr__about{ font-size:15px; max-width:36ch; }
.ftr__h3{ font-size:16px; font-weight:600; color:var(--white); margin-bottom:4px; }
.ftr__col a{ font-size:15px; transition:color .18s, transform .18s var(--ease); }
.ftr__col a:hover{ color:var(--white); transform:translateX(3px); }
.ftr__tel{ font-size:20px !important; font-weight:700; color:var(--white); font-variant-numeric:tabular-nums; }
.ftr__note{ font-size:15px; }
.ftr__legal{
  display:flex; flex-wrap:wrap; justify-content:space-between; gap:10px 30px;
  padding-top:24px; border-top:1px solid rgba(255,255,255,.12);
  font-size:14px;
}
.ftr__legal a{ text-decoration:underline; }
.ftr__legal a:hover{ color:var(--white); }

/* ═══ МОБИЛЬНАЯ ПАНЕЛЬ ═══ */
.dock{
  display:none; position:fixed; left:0; right:0; bottom:0; z-index:90;
  gap:10px; padding:10px var(--gut) calc(10px + env(safe-area-inset-bottom));
  background:var(--white); border-top:1px solid var(--line);
  box-shadow:0 -6px 24px -14px rgba(14,46,77,.5);
}
.dock__btn{
  flex:1; display:inline-flex; align-items:center; justify-content:center; gap:8px;
  padding:15px 12px; border-radius:var(--r-s); font-weight:600; font-size:16px;
}
.dock__btn--tel{ background:var(--white); color:var(--ink); border:1px solid var(--line); }
.dock__btn--cta{ background:var(--acc); color:var(--white); }

/* ═══ ОНЛАЙН-ЧАТ JIVO ═══
   Виджет вставляет свои элементы <jdiv> прямо в body и вешает кнопку
   в правый нижний угол — ровно туда, где на телефоне стоит наша панель
   «Позвонить / Вызвать мастера». Приподнимаем кнопку над ней.
   Классы внутри виджета Jivo генерирует случайно, поэтому цепляемся за тег.
   Если вёрстка виджета изменится, надёжнее задать отступ в кабинете:
   Управление → Каналы связи → настройки виджета → положение и отступы. */
@media (max-width:860px){
  body > jdiv{ bottom:78px !important; }
}

/* ═══ ПОЯВЛЕНИЕ ПРИ ПРОКРУТКЕ ═══ */
/* Всё завязано на .js-anim у <html>: класс ставит инлайновый скрипт в <head>.
   Нет JS — нет и скрытия, страница видна целиком. */
.js-anim .reveal{
  opacity:0; transform:translateY(26px);
  transition:opacity .7s var(--ease), transform .7s var(--ease);
}
.js-anim .reveal--l{ transform:translateX(-34px); }
.js-anim .reveal--r{ transform:translateX(34px); }
.js-anim .reveal--z{ transform:scale(.94); }
.js-anim .reveal.is-in{ opacity:1; transform:none; }

/* лесенка внутри групп */
.cards > :nth-child(2), .perks__grid > :nth-child(2), .steps > :nth-child(2), .revs > :nth-child(2){ transition-delay:.10s; }
.cards > :nth-child(3), .perks__grid > :nth-child(3), .steps > :nth-child(3), .revs > :nth-child(3){ transition-delay:.20s; }
.cards > :nth-child(4), .perks__grid > :nth-child(4), .steps > :nth-child(4){ transition-delay:.30s; }

/* появление текста на первом экране */
.hero__txt > *{ animation:heroIn .8s var(--ease) both; }
.hero__txt > :nth-child(1){ animation-delay:.05s }
.hero__txt > :nth-child(2){ animation-delay:.15s }
.hero__txt > :nth-child(3){ animation-delay:.25s }
.hero__txt > :nth-child(4){ animation-delay:.35s }
.hero__txt > :nth-child(5){ animation-delay:.45s }
@keyframes heroIn{ from{ opacity:0; transform:translateY(26px); } to{ opacity:1; transform:none; } }

@media (prefers-reduced-motion:reduce){
  html{ scroll-behavior:auto; }
  *,*::before,*::after{ animation:none !important; transition-duration:.01ms !important; }
  /* !important нужен: ниже по файлу есть адаптивные правила для .reveal--l/--r
     с такой же специфичностью, и без него они бы перебили этот сброс. */
  .js-anim .reveal{ opacity:1 !important; transform:none !important; }
  .steps__i::after{ transform:scaleX(1); }
  .hero__txt > *{ opacity:1; transform:none; }
}

/* ═══ АДАПТИВ ═══ */

/* Контейнер широкий (1400px), поэтому на десктопе увеличиваем и поля по бокам —
   иначе на ноутбуке 1440px содержимое почти липнет к краям экрана. */
@media (min-width:1200px){
  :root{ --gut:32px; }
}

/* Меню и бургер переключаются в одной точке: если развести их по разным
   брейкпоинтам, между ними появится полоса ширин совсем без навигации. */
@media (max-width:1080px){
  .burger{ display:block; }
  .nav{
    display:none; position:absolute; top:100%; left:0; right:0;
    flex-direction:column; gap:0; margin:0;
    background:var(--white); border-bottom:1px solid var(--line);
    padding:8px var(--gut) 16px;
    box-shadow:0 14px 30px -18px rgba(14,46,77,.5);
  }
  .nav.is-open{ display:flex; animation:answerIn .28s var(--ease) both; }
  .nav__link{ padding:14px 0; border-bottom:1px solid var(--line); font-size:17px; color:var(--ink); }
  .nav__link::after{ display:none; }
}

@media (max-width:1000px){
  .sec{ padding-block:72px; }
  .perks{ padding-block:56px; }

  .hero__grid{ grid-template-columns:1fr; min-height:0; padding-block:44px 52px; gap:32px; }
  .hero__media{
    position:relative; inset:auto; order:-1;
    aspect-ratio:16/10; border-radius:var(--r); overflow:hidden;
  }
  /* фото стало отдельным блоком — растворять его левый край больше не нужно */
  .hero__ph{ -webkit-mask-image:none; mask-image:none; }
  .hero__btns{ margin-bottom:26px; }

  /* колонки схлопнулись в одну — выезд вбок больше не читается, появляемся снизу */
  .js-anim .reveal--l, .js-anim .reveal--r{ transform:translateY(26px); }

  .split{ grid-template-columns:1fr; gap:44px; }
  .frame{ max-width:560px; }
  .stats__in{ grid-template-columns:repeat(2,1fr); gap:28px; padding-block:48px; }
  .steps{ grid-template-columns:repeat(2,1fr); }
  .steps__i:nth-child(2)::after{ right:0; }   /* последний в ряду — до края контейнера */
  .warranty{ grid-template-columns:1fr; gap:40px; }
  .voucher{ max-width:480px; }
  .revs{ grid-template-columns:1fr; }
  .order__grid{ grid-template-columns:1fr; gap:40px; }
  .ftr__grid{ grid-template-columns:1fr 1fr; gap:34px; }
}

@media (max-width:860px){
  html{ scroll-padding-top:76px; }
  .hdr__tel-hint{ display:none; }
  .hdr__in{ height:66px; gap:14px; }
  .hdr.is-scrolled .hdr__in{ height:62px; }
  .hdr .btn--sm{ display:none; }

  .dock{ display:flex; }
  body{ padding-bottom:80px; }

  .cards{ grid-template-columns:1fr; gap:24px; }
  .sec__head{ margin-bottom:38px; }
}

@media (max-width:620px){
  :root{ --gut:16px; }

  /* ── ШАПКА ──
     Номер вернулся: логотип стал текстовым, и место под него освободилось.
     Раскладка при 375px: логотип 95 + номер с иконкой 161 + бургер 44
     + отступы и зазоры 52 = 352px, помещается с запасом. */
  .hdr__in{ gap:10px; }
  .hdr__act{ gap:10px; }
  .brand__text{ font-size:19px; }
  .hdr__tel-num{ font-size:15px; }
  .hdr__tel-ico{ width:16px; height:16px; }

  /* ── ПЕРВЫЙ ЭКРАН ── */
  .hero__grid{ padding-block:20px 40px; gap:24px; }
  /* строка «Выезд по Краснодару и краю · ежедневно 8:00–23:00» при 15px
     не влезала и рвалась пополам — уменьшаем, чтобы легла в одну */
  .hero__top{ font-size:13.5px; margin-bottom:12px; }
  .hero__h1{ font-size:clamp(32px,8.6vw,42px); margin-bottom:14px; }
  .hero__sub{ font-size:16.5px; margin-bottom:24px; }
  .hero__media{ aspect-ratio:4/3; }        /* было 16/10 — мастер читался мелко */
  .hero__btns{ gap:10px; margin-bottom:0; }
  .hero__btns .btn{ flex:1 1 100%; }

  .perks{ padding-block:44px; }
  .perks__grid{ grid-template-columns:1fr; gap:14px; }
  .perk{ padding:20px; gap:5px 16px; }
  .sec{ padding-block:54px; }
  .sec__head{ margin-bottom:30px; }
  .stats__in{ grid-template-columns:1fr; gap:22px; padding-block:40px; }
  .stat{ display:flex; align-items:baseline; gap:14px; }
  .stat b{ font-size:32px; }

  /* ── ШАГИ: вертикальная лента ──
     В колонку кружки просто висели друг под другом. Сдвигаем их влево,
     текст — вправо, и соединяем вертикальной линией. */
  .steps{ grid-template-columns:1fr; gap:26px; }
  .steps__i{ padding-left:58px; min-height:44px; }
  .steps__n{ position:absolute; left:0; top:0; width:44px; height:44px; font-size:18px; margin-bottom:0; }
  .steps__i::after{
    display:block; left:21px; top:52px; bottom:-34px;
    right:auto; width:2px; height:auto;
    background:linear-gradient(180deg, var(--acc), rgba(29,99,224,.15));
    transform:scaleY(0); transform-origin:50% 0;
  }
  .steps__i.is-in::after{ transform:scaleY(1); }
  .steps__i:last-child::after{ display:none; }
  .steps__h3{ font-size:18.5px; margin-bottom:7px; }

  .cards{ gap:18px; }
  .card__body{ padding:20px 18px 18px; }
  .card__h3{ font-size:20px; margin-bottom:12px; }
  .card__list{ gap:7px; margin-bottom:18px; }
  .card__list li{ font-size:15.5px; }
  .card__img{ aspect-ratio:16/10; }
  .frame{ padding:16px 16px 0 0; }
  .bigform{ padding:22px 20px; }
  .bigform__row{ grid-template-columns:1fr; }
  .ftr__grid{ grid-template-columns:1fr; gap:28px; }
  .voucher{ padding:22px 20px 0; }
  .voucher__seal{ margin-inline:-20px; padding-inline:20px; }
  .q__s{ padding:18px 18px; font-size:16.5px; }
  .q__a{ padding:0 18px 20px; }
  .contacts li{ flex-direction:column; gap:2px; }
  .contacts__lab{ width:auto; }

  /* таблица цен → карточки */
  .price__tabs{ overflow-x:auto; flex-wrap:nowrap; -webkit-overflow-scrolling:touch; }
  .price__tab{ flex:0 0 auto; padding-inline:18px; }
  .price__tbl thead{ display:none; }
  .price__tbl tr{ display:grid; grid-template-columns:1fr auto; gap:2px 14px; padding:15px 18px; border-bottom:1px solid var(--line); }
  .price__tbl td{ padding:0; border:0; }
  .price__job{ grid-column:1; }
  .price__time{ grid-column:1; }
  .price__val{ grid-column:2; grid-row:1 / span 2; align-self:center; text-align:right; }
  .price__note{ padding:14px 18px; }

  /* нижняя панель: кнопка звонка была белой на белом фоне и терялась */
  .dock{ gap:8px; padding-top:9px; }
  .dock__btn{ padding:14px 10px; font-size:15.5px; }
  .dock__btn--tel{ background:var(--acc-soft); color:var(--acc); border-color:transparent; }
}

/* Очень узкие экраны (старые iPhone SE, 320px): ужимаем шапку,
   чтобы номер остался на месте и ничего не переносилось. */
@media (max-width:374px){
  .brand__text{ font-size:18px; }
  .hdr__tel-num{ font-size:14px; }
  .hdr__tel-ico{ display:none; }
  .hdr__in{ gap:8px; }
  .hdr__act{ gap:8px; }
}
