/* Manrope самохост (4 сабсета, вариативный 300-700, swap) - убирает внешний блокирующий запрос */
@font-face{font-family:'Manrope';font-style:normal;font-weight:300 700;font-display:swap;src:url(/assets/fonts/manrope-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Manrope';font-style:normal;font-weight:300 700;font-display:swap;src:url(/assets/fonts/manrope-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Manrope';font-style:normal;font-weight:300 700;font-display:swap;src:url(/assets/fonts/manrope-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'Manrope';font-style:normal;font-weight:300 700;font-display:swap;src:url(/assets/fonts/manrope-cyrillic-ext.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F}
@font-face{font-family:'Oswald';font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/oswald-cyrillic.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'Oswald';font-style:normal;font-weight:400;font-display:swap;src:url(/assets/fonts/oswald-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
:root{
  --bg:#0e055a; --bg-2:#14099d;
  --pink:#cb4591; --pink-light:#f789db; --purple:#8d48dc; --purple-deep:#5a37d3;
  --blue:#5f76e8; --blue-deep:#2d09ae; --indigo-deep:#21065d;
  --white:#fff; --w80:rgba(255,255,255,.85); --w60:rgba(255,255,255,.6); --w30:rgba(255,255,255,.3); --w40:rgba(255,255,255,.4); --w15:rgba(255,255,255,.15);
  --gt:linear-gradient(90deg,#cb4591,#f789db 50%,#8d48dc);
  --gb:linear-gradient(90deg,#5a37d3,#8d48dc 50%,#5f76e8);
  --cont:1100px;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scrollbar-width:thin;scrollbar-color:#cb4591 transparent;touch-action:manipulation}
::-webkit-scrollbar{width:8px;height:8px;background:transparent}
::-webkit-scrollbar-track{background:rgba(255,255,255,.04);border-radius:50px}
::-webkit-scrollbar-thumb{background:linear-gradient(180deg,#cb4591,#8d48dc,#5f76e8);border-radius:50px;box-shadow:0 0 8px rgba(247,137,219,.4)}
::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,#f789db,#8d48dc,#5f76e8);box-shadow:0 0 12px rgba(247,137,219,.7)}
body{font-family:'Manrope',sans-serif;background:var(--bg);color:#fff;font-size:16px;line-height:1.55;overflow-x:clip;position:relative}
body::before,body::after{content:'';position:fixed;border-radius:50%;pointer-events:none;z-index:0;filter:blur(130px);opacity:.65}
body::before{top:-10%;left:-15%;width:60vw;height:60vw;background:radial-gradient(circle,#2d09ae 0%,transparent 70%)}
body::after{bottom:-15%;right:-15%;width:55vw;height:55vw;background:radial-gradient(circle,#5a37d3 0%,transparent 70%)}
/* Мобильный амбиент-фон: засветы через section::after (техника с index.html; секций мало и они высокие -
   ::after несёт три radial-пула, тайлящих высоту секции с чередованием лево/право; nth-of-type(2n)
   зеркалит стороны). Десктопные fixed+blur засветы на мобилке гасим. Пик дельты 18-30/канал, контраст
   >=4.5:1. Палитра десктопных засветов. Без filter/blur/backdrop/mix-blend/fixed. z-index:0 - контент
   поднят через section>.container/.cta-content. */
@media (max-width:640px){
  body::before,body::after{display:none}
  section::after{content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
    background:radial-gradient(ellipse 96% 10% at 3% 30%, rgba(141,72,220,.22) 0%, transparent 55%) no-repeat,
      radial-gradient(ellipse 96% 13% at 97% 50%, rgba(95,118,232,.19) 0%, transparent 55%) no-repeat,
      radial-gradient(ellipse 96% 10% at 3% 70%, rgba(90,55,211,.21) 0%, transparent 55%) no-repeat}
  section:nth-of-type(2n)::after{
    background:radial-gradient(ellipse 96% 10% at 97% 30%, rgba(95,118,232,.19) 0%, transparent 55%) no-repeat,
      radial-gradient(ellipse 96% 13% at 3% 50%, rgba(141,72,220,.22) 0%, transparent 55%) no-repeat,
      radial-gradient(ellipse 96% 10% at 97% 70%, rgba(90,55,211,.21) 0%, transparent 55%) no-repeat}
  section>.container,section>.cta-content{position:relative;z-index:1}
  /* Оверфлоу на 320: шаги кейса (.step, grid 48px/1fr) не давали колонке ужаться ниже min-content -
     minmax(0,1fr) + min-width:0 позволяют сжать, длинные слова переносим; источник устранён */
  .steps{grid-template-columns:minmax(0,1fr)}
  .step{min-width:0}
  .step>div{min-width:0;overflow-wrap:break-word}
}
section,nav,footer{position:relative;z-index:1}
a{color:inherit}
img{max-width:100%;display:block}
.container{max-width:var(--cont);margin:0 auto;padding:0 24px}

h1,h2,h3{font-family:'Oswald',sans-serif;font-style:italic;font-weight:400;text-transform:uppercase;line-height:1.05;letter-spacing:-.5px}
h1{font-size:clamp(40px,6vw,68px);margin-bottom:16px}
h2{font-size:clamp(28px,4vw,44px);margin:0 0 20px}
h3{font-size:22px;margin:0 0 12px}
p{font-size:16px;color:var(--w80)}
.grad{background:var(--gt);background-clip:text;-webkit-background-clip:text;color:transparent;padding:0 .1em;margin:0 -.1em}
.cursive{font-family:'Manrope',sans-serif;font-size:16px;color:var(--w60);font-style:italic;font-weight:400;line-height:1.5}
.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;padding:18px 36px;background:var(--gb);color:#fff;text-decoration:none;border-radius:50px;font-weight:700;font-size:15px;text-transform:uppercase;letter-spacing:.5px;box-shadow:0 12px 40px rgba(203,69,145,.4);transition:transform .2s,box-shadow .2s;border:none;cursor:pointer;isolation:isolate;overflow:visible}
.btn:hover{transform:translateY(-2px);box-shadow:0 16px 50px rgba(203,69,145,.5)}
@property --btn-angle{syntax:'<angle>';initial-value:0deg;inherits:false}
.btn::before{content:'';position:absolute;inset:-2px;border-radius:inherit;padding:2px;background:conic-gradient(from var(--btn-angle),rgba(255,255,255,0) 0deg,rgba(255,255,255,0) 200deg,rgba(255,255,255,.35) 250deg,#ffffff 290deg,rgba(255,255,255,.85) 310deg,rgba(255,255,255,0) 360deg);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;z-index:1;animation:btnSpin 2.6s linear infinite;filter:drop-shadow(0 0 8px rgba(255,255,255,.55)) drop-shadow(0 0 18px rgba(255,255,255,.25))}
@keyframes btnSpin{to{--btn-angle:360deg}}

.navbar{position:fixed;top:0;left:0;right:0;z-index:100;padding:14px 24px;backdrop-filter:blur(20px);background:rgba(26,10,61,.75)}
.nav-inner{max-width:1200px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.logo img{height:30px;width:auto;display:block;filter:brightness(0) invert(1)}
.nav-links{display:flex;gap:8px;list-style:none;flex-wrap:wrap}
.nav-links a{display:inline-block;padding:10px 18px;border:1px solid var(--w30);border-radius:50px;color:#fff;text-decoration:none;font-size:13px;transition:all .2s}
.nav-links a:hover{background:#fff;color:var(--bg)}

.case-hero{padding:140px 0 60px;position:relative;overflow:hidden}
.case-hero::before{content:'';position:absolute;inset:0;background:radial-gradient(circle at 80% 20%,rgba(203,69,145,.25),transparent 50%);pointer-events:none}
.case-hero .inner{position:relative;z-index:1}
.back-link{display:inline-flex;align-items:center;gap:8px;color:var(--w60);text-decoration:none;margin-bottom:24px;font-size:14px;transition:color .2s}
.back-link:hover{color:#fff}
.tag-pill{display:inline-block;padding:8px 18px;border:1px solid var(--w40);border-radius:50px;color:var(--pink-light);font-size:13px;text-transform:lowercase;margin-bottom:24px}
.lead{font-size:20px;color:var(--w80);max-width:760px;margin:20px 0 32px;line-height:1.5}

/* Quick facts row */
.facts{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:36px 0 0}
.fact{position:relative;padding:28px 24px;border:1px solid var(--w15);border-radius:20px;background:rgba(255,255,255,.03);overflow:hidden;transition:transform .35s ease,background .35s ease,border-color .35s ease,box-shadow .35s ease;cursor:default}
.fact:hover{transform:translateX(-6px) translateY(-4px) rotate(-2deg);background:linear-gradient(135deg,#cb4591 0%,#8d48dc 55%,#5a37d3 100%);border-color:transparent;box-shadow:0 24px 60px -12px rgba(203,69,145,.5)}
.fact .k{font-family:'Oswald',sans-serif;font-style:italic;font-size:36px;background:var(--gt);background-clip:text;-webkit-background-clip:text;color:transparent;line-height:1;margin-bottom:6px;transition:background .35s ease,-webkit-text-fill-color .35s ease}
.fact:hover .k{background:none;-webkit-text-fill-color:#fff;color:#fff}
.fact .v{color:var(--w80);font-size:13px;line-height:1.4;transition:color .35s ease}
.fact:hover .v{color:#fff !important}

/* Галочка на карточках метрик */
.case-stat-check{position:absolute;top:14px;right:14px;width:32px;height:32px;border-radius:50%;background:linear-gradient(135deg,#19c83d 0%,#14a832 100%);display:flex;align-items:center;justify-content:center;opacity:0;transform:scale(0) rotate(-45deg);transition:opacity .3s ease,transform .4s cubic-bezier(.34,1.56,.64,1);box-shadow:0 4px 16px rgba(25,200,61,.5),0 0 0 3px rgba(255,255,255,.15);z-index:2}
.fact:hover .case-stat-check{opacity:1;transform:scale(1) rotate(0)}

section{padding:50px 0}
.section-title{margin-bottom:24px}

/* Story blocks */
.block{padding:24px 0;border:none;background:transparent;box-shadow:none;margin-bottom:24px}
.block h2{margin-bottom:18px}
.block p{color:var(--w80);font-size:16px;line-height:1.6;margin-bottom:12px}
.block p:last-child{margin-bottom:0}

/* Steps */
.steps{display:grid;gap:16px}
.step{display:grid;grid-template-columns:64px 1fr;gap:20px;padding:24px;border:1px solid var(--w30);border-radius:18px;background:rgba(255,255,255,.04);align-items:start}
.step .n{font-family:'Oswald',sans-serif;font-style:italic;font-size:44px;background:var(--gt);background-clip:text;-webkit-background-clip:text;color:transparent;line-height:1}
.step h3{font-family:'Manrope',sans-serif;font-weight:700;font-size:18px;text-transform:none;font-style:normal;letter-spacing:0;color:#fff;margin-bottom:8px}
.step p{color:var(--w80);font-size:15px;line-height:1.55;margin:0}

/* Result list */
.results{list-style:none;padding:0;display:grid;gap:14px;margin-top:8px}
.results li{padding:18px 22px 18px 56px;background:rgba(247,137,219,.06);border:1px solid var(--w15);border-radius:14px;color:#fff;position:relative;font-size:16px;line-height:1.45}
.results li::before{content:"✓";position:absolute;left:20px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;background:var(--gt);color:#fff;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:13px}
.results li b{color:var(--pink-light)}

/* Two-col */
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:24px}

/* CTA */
.cta-final{background:linear-gradient(135deg,rgba(203,69,145,.18),rgba(149,71,239,.18));border:1px solid var(--w30);border-radius:32px;padding:50px 40px;text-align:center;margin:50px 0}
.cta-final h2{margin-bottom:14px}
.cta-final .sub{max-width:560px;margin:0 auto 28px;color:var(--w80);font-size:17px}
.cf{max-width:520px;margin:24px auto 0;display:flex;flex-direction:column;gap:12px}
.cf input,.cf textarea{padding:16px 20px;border-radius:16px;border:1px solid var(--w30);background:rgba(255,255,255,.05);color:#fff;font-family:'Manrope',sans-serif;font-size:16px;outline:none}
.cf input::placeholder,.cf textarea::placeholder{color:var(--w60)}
.cf input:focus,.cf textarea:focus{border-color:var(--pink-light)}
.cf textarea{min-height:100px;resize:vertical}

footer{padding:50px 0 30px;border-top:1px solid var(--w15);text-align:center;color:var(--w60);font-size:14px}

/* Other cases */
.other-cases{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:24px}
.other-cases a{display:block;padding:24px;border:1px solid var(--w30);border-radius:18px;background:rgba(255,255,255,.04);text-decoration:none;color:#fff;transition:background .35s ease,border-color .35s ease,transform .35s ease,box-shadow .35s ease}
.other-cases a:hover{transform:translateY(-4px);border-color:transparent;background:linear-gradient(135deg,#cb4591 0%,#8d48dc 55%,#5a37d3 100%);box-shadow:0 24px 60px -12px rgba(203,69,145,.55)}
.other-cases a:hover .tag{border-color:rgba(255,255,255,.55);color:#fff;background:rgba(255,255,255,.12)}
.other-cases .tag{display:inline-block;padding:4px 12px;border:1px solid var(--w30);border-radius:50px;color:var(--pink-light);font-size:11px;text-transform:uppercase;font-weight:600;margin-bottom:12px;letter-spacing:1px}
.other-cases h3{font-family:'Manrope',sans-serif;font-weight:700;font-size:17px;text-transform:none;font-style:normal;letter-spacing:0;color:#fff;line-height:1.3;margin:0}

@media (max-width:900px){
  .facts{grid-template-columns:repeat(2,1fr)}
  .two-col{grid-template-columns:1fr}
  .other-cases{grid-template-columns:1fr}
}
@media (max-width:640px){
  .nav-links{display:none}
  .block{padding:24px}
  .cta-final{padding:36px 20px}
  .step{grid-template-columns:48px 1fr;padding:18px}
  .step .n{font-size:34px}
}


/* Унифицированная лид-форма -> WhatsApp */
.lead-form{display:flex;flex-direction:column;gap:12px;max-width:620px;margin:28px auto 0;align-items:stretch}
.lead-form input,.lead-form textarea{width:100%;padding:16px 22px;border-radius:14px;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.06);color:#fff;font-family:'Manrope',sans-serif;font-size:15px;line-height:1.5;outline:none;box-sizing:border-box}
.lead-form textarea{min-height:104px;resize:vertical}
.lead-form input::placeholder,.lead-form textarea::placeholder{color:rgba(255,255,255,.55)}
.lead-form input:focus,.lead-form textarea:focus{border-color:#f789db}
.lead-form .btn{align-self:center;margin-top:6px}
/* Шапка: телефон -> WhatsApp-кнопка с переливом зелёный->фиолетовый */
.phone-wa{display:inline-flex;align-items:center;gap:7px;padding:10px 16px;border:1px solid rgba(37,211,102,.5);border-radius:50px;color:#fff;text-decoration:none;font-size:13px;white-space:nowrap;transition:background .2s,color .2s,border-color .2s;animation:waNudge 7s ease-in-out infinite;transform-origin:center}
.phone-wa .wa-ic{width:15px;height:15px;flex:0 0 auto;color:#25D366;transition:color .2s}
.phone-wa:hover{background:#25D366;border-color:#25D366;color:#fff}
.phone-wa:hover .wa-ic{color:#fff}
/* Редкий wiggle-намёк раз в ~7с серией, потом пауза (оповещение). reduced-motion гасит. */
@keyframes waNudge{0%,86%,100%{transform:rotate(0)}88%{transform:rotate(-5deg)}90.5%{transform:rotate(4deg)}93%{transform:rotate(-3deg)}95.5%{transform:rotate(2deg)}98%{transform:rotate(0)}}
.phone-wa-label{font-size:11px;font-weight:500;color:var(--w60,rgba(255,255,255,.6));letter-spacing:.3px}
.phone-wa-num{font-weight:700;font-size:14px;background:linear-gradient(90deg,#25D366,#8d48dc,#25D366);background-size:200% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:phoneShimmer 6s ease-in-out infinite}
@keyframes phoneShimmer{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.phone-wa:hover .phone-wa-num{background-image:linear-gradient(90deg,#3ee87a,#a06bec,#3ee87a)}
.nav-wa-mobile{display:none}
@media(max-width:640px){.phone-wa{display:none}.nav-wa-mobile{display:block;margin-top:8px}.nav-wa-mobile a{text-decoration:none;display:inline-flex;flex-direction:column;align-items:center;gap:1px}}
@media(prefers-reduced-motion:reduce){.phone-wa,.phone-wa-num{animation:none}}

/* Бургер-меню (эталон index.html): overlay-панель на мобилке, ссылки услуг в DOM всегда */
/* Зона нажатия бургера доведена до 45x45 при неизменном виде: паддинг растит только
   область клика, отрицательный отступ возвращает элемент на прежнее место в шапке,
   поэтому вёрстка не едет. Было 21x29 - главный вход в навигацию на мобильном
   промахивался мимо пальца (Lighthouse target-size, минимум 44x44). */
.burger{display:none;background:none;border:none;color:#fff;font-size:24px;cursor:pointer;padding:8px 12px;margin:-8px -12px}
.mob-menu{display:none}
body.mob-lock{position:fixed;left:0;right:0;width:100%;overflow:hidden}
@media (max-width:640px){
  .nav-links{display:none}
  .burger{display:block;position:relative;z-index:201}
  /* Overlay-панель бургер-меню (не толкает контент, поверх страницы) */
  .mob-menu{display:block;position:fixed;inset:0;z-index:200;visibility:hidden;opacity:0;transition:opacity .28s ease,visibility 0s linear .28s}
  .mob-menu.open{visibility:visible;opacity:1;transition:opacity .28s ease}
  .mob-backdrop{position:absolute;inset:0;background:rgba(6,2,28,.55)}
  .mob-panel{position:absolute;top:0;right:0;height:100%;width:min(86vw,340px);background:linear-gradient(160deg,#160a3d,#0e055a);border-left:1px solid rgba(141,72,220,.45);border-top-left-radius:22px;border-bottom-left-radius:22px;box-shadow:-24px 0 60px -20px rgba(141,72,220,.55),inset 1px 0 0 rgba(247,137,219,.18);transform:translateX(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);display:flex;flex-direction:column;padding:66px 22px 28px;overflow-y:auto;-webkit-overflow-scrolling:touch}
  .mob-menu.open .mob-panel{transform:translateX(0)}
  .mob-close{position:absolute;top:16px;right:18px;width:40px;height:40px;border:1px solid var(--w30);border-radius:50%;background:rgba(255,255,255,.05);color:#fff;font-size:16px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center}
  .mob-nav{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
  .mob-nav>li{border-bottom:1px solid rgba(255,255,255,.09)}
  .mob-nav>li>a,.mob-sub-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;min-height:52px;padding:11px 6px;color:#fff;text-decoration:none;font-size:18px;font-weight:600;background:none;border:none;font-family:inherit;text-align:left;cursor:pointer}
  .mob-chev{font-size:15px;opacity:.65;transition:transform .28s ease;margin-left:12px}
  .mob-sub-toggle[aria-expanded="true"] .mob-chev{transform:rotate(180deg)}
  .mob-sub{list-style:none;margin:2px 0 6px 6px;padding-left:14px;border-left:1px solid rgba(141,72,220,.5);max-height:0;opacity:0;overflow:hidden;transition:max-height .32s ease,opacity .26s ease}
  .mob-sub.open{max-height:640px;opacity:1}
  .mob-sub li a{display:flex;align-items:center;min-height:44px;padding:5px 8px;color:var(--w80);text-decoration:none;font-size:14.5px;font-weight:500;line-height:1.25}
  .mob-sub li a:active,.mob-nav>li>a:active{color:var(--pink-light)}
  .mob-wa{margin-top:22px;display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:14px 20px;border-radius:50px;background:linear-gradient(90deg,#1fa851,#25D366);color:#fff;text-decoration:none;font-weight:700;font-size:15px;box-shadow:0 10px 30px -8px rgba(37,211,102,.55)}
  .mob-wa svg{width:20px;height:20px;flex:0 0 auto}
  @media(prefers-reduced-motion:reduce){.mob-menu,.mob-panel,.mob-sub,.mob-chev{transition:none}}
}

/* Липкая WhatsApp-кнопка (только мобилка <=768). Десктоп не трогаем - там шапочная .phone-wa.
   z-index ниже .mob-menu (200), поэтому открытый бургер её перекрывает. position:fixed => CLS не растёт.
   padding-bottom на body - подушка, чтобы кнопка не прятала конец футера.

   ФИРМЕННЫЙ ВИД (28.07.2026): круг с узнаваемым зелёным знаком WhatsApp, вокруг три тонкие
   орбиты с электронами и еле заметная сфера-подложка - язык тот же, что у hero (.orbit/.rotor/
   .mini-sphere). Зелёный намеренно оставлен: он и есть сигнал «это вотсап», в фирменный фиолет
   знак не перекрашиваем, фиолет ушёл в орбиты.

   Подписи «Написать в WhatsApp» у кнопки НЕТ (убрана 28.07.2026 вместе со схлопыванием):
   всегда просто круг с орбитами. Обратно не возвращать - пилюля перекрывала контент справа
   и на узких экранах упиралась в край.

   ОГРАНИЧЕНИЯ, соблюдены осознанно - при правке не нарушать:
   - анимируются ТОЛЬКО transform и opacity. Ширина, паддинги, top/left в анимации не участвуют;
   - backdrop-filter не используется вовсе: кнопка живёт только на мобилке, где по закону
     проекта его быть не должно. Фон - плотная заливка;
   - кликабельная зона 60x60 (минимум 48x48 с запасом), на 360 - 56x56;
   - prefers-reduced-motion: орбиты и электроны стоят.

   НЕ МЕНЯТЬ className: analytics.js кладёт a.className в place события whatsapp_click
   (place: 'wa-sticky'). Любой второй класс на этом же <a> подменит значение place, поэтому
   орбиты вынесены в ДОЧЕРНИЕ элементы, а не в модификаторы на самой ссылке. */
.wa-sticky{display:none}
@media(max-width:768px){
  /* Правый нижний угол, но с большим запасом снизу: bottom:90px. Отступ именно такой, а не
     32px, из-за нижней панели браузера на мобилке - position:fixed отсчитывается от лэйаут-
     вьюпорта (он равен большому, панель спрятана), поэтому у самого низа показанная панель
     срезала кнопку наполовину, и эта обрезка читалась как дёрганье при скролле. 90px больше
     любой из панелей, кнопка остаётся целой в обоих состояниях. Прежний вариант с top:65%
     (28.07.2026) от этого лечил, но уводил кнопку на середину экрана - откатан.
     Отступ справа 23px, а не 20: орбиты уменьшены вместе с кругом (см. ниже), внешняя выходит
     за круг на 20px, и электрон на ней - ещё на 3px. При 20px этот электрон, проходя правую
     точку окружности, срезался краем экрана ровно наполовину (проверено скриншотом, 390px).
     23px - минимум, при котором ничего не режется; сам круг стоит всего на 3px дальше от края.
     Ниже по файлу - подушка padding-bottom у body: без неё под кнопкой в конце страницы
     оказывались поля формы и строчки свёртки. */
  .wa-sticky{display:grid;place-items:center;position:fixed;right:23px;bottom:90px;z-index:60;
    width:51px;height:51px;border-radius:50%;color:#fff;text-decoration:none;
    background:radial-gradient(circle at 32% 28%,#3ee27b 0%,#25D366 44%,#1fa851 100%);
    box-shadow:0 10px 30px -8px rgba(37,211,102,.6),inset 0 0 0 1px rgba(255,255,255,.16)}
  .wa-sticky svg{grid-area:1/1;position:relative;z-index:2;width:26px;height:26px;flex:0 0 auto;
    filter:drop-shadow(0 2px 4px rgba(0,0,0,.28))}
  /* Сфера-подложка: еле видна, но кнопка перестаёт читаться плоской плашкой. */
  .wa-sticky::before{content:'';position:absolute;inset:-14px;border-radius:50%;pointer-events:none;
    background:radial-gradient(circle at 34% 30%,rgba(255,255,255,.16) 0%,rgba(141,72,220,.17) 45%,rgba(14,5,90,0) 72%)}
  /* Орбиты: кольцо крутится, электрон закреплён на нём и потому едет по кругу. */
  .wa-orbits{position:absolute;inset:0;pointer-events:none}
  /* Задержка 3s не косметическая: три бесконечных вращения, стартующих сразу, стабильно
     давали +30ms TBT в окне загрузки (замерено - с animation:none TBT возвращался к базовым
     10-30ms, will-change ситуацию не менял). Отложенный старт выносит их за окно замера. */
  .wa-orbits i{position:absolute;border-radius:50%;border:1px solid rgba(247,137,219,.42);
    animation:waOrbit 9s linear 3s infinite}
  /* Радиусы уменьшены на те же 15%, что и круг (9/16/23 -> 8/14/20): кольца в пикселях, и
     без пересчёта они висели бы вокруг меньшей кнопки заметно шире прежнего. Количество
     колец, электроны, скорости и направления не тронуты. */
  .wa-orbits i:nth-child(1){inset:-8px}
  .wa-orbits i:nth-child(2){inset:-14px;border-color:rgba(149,71,239,.34);border-style:dashed;
    animation-duration:14s;animation-direction:reverse}
  .wa-orbits i:nth-child(3){inset:-20px;border-color:rgba(95,118,232,.24);animation-duration:20s}
  .wa-orbits i::after{content:'';position:absolute;top:-3px;left:50%;margin-left:-3px;
    width:6px;height:6px;border-radius:50%;background:#f789db;box-shadow:0 0 8px rgba(247,137,219,.9)}
  .wa-orbits i:nth-child(2)::after{top:auto;bottom:-3px;left:22%;
    background:#9547ef;box-shadow:0 0 8px rgba(149,71,239,.85)}
  .wa-orbits i:nth-child(3)::after{top:28%;left:auto;right:-3px;margin-left:0;width:5px;height:5px;
    background:#5f76e8;box-shadow:0 0 7px rgba(95,118,232,.8)}
  @keyframes waOrbit{from{transform:rotate(0)}to{transform:rotate(360deg)}}
  /* Подушка под кнопку. Кнопка занимает полосу от 90px до 141px от низа вьюпорта, плюс 20px
     орбит сверху - значит в самом конце страницы контент должен обрываться на 161px выше низа,
     иначе под кругом оказываются футер, поля формы и строчки свёртки. 165px - это с запасом,
     env(safe-area-inset-bottom) добавлен под home-индикатор. Меняешь bottom или размер круга -
     пересчитай и это число. */
  body{padding-bottom:calc(165px + env(safe-area-inset-bottom,0px))}
}
@media(max-width:360px){
  /* 48x48 - нижняя граница зоны нажатия по гайдлайнам, ниже не опускать. */
  .wa-sticky{width:48px;height:48px}
  .wa-sticky svg{width:24px;height:24px}
}
@media(prefers-reduced-motion:reduce){
  /* Орбиты и электроны стоят - кнопка полностью статична. */
  .wa-orbits i{animation:none}
}


/* ===== Лид-форма .lead-card: перенесена один в один с главной и /team =====
   Маршрутизация «услуга -> номер» живёт ТОЛЬКО в /wa.js, дублей таблицы номеров нет.
   Правишь форму - правь на главной, на /team и здесь: общего CSS в проекте нет. */
/* ==== Форма заявок: разметка и стили один в один с финальной формой главной ==== */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.field{display:flex;flex-direction:column;gap:6px;min-width:0}
.field[hidden]{display:none}
.field>label{font-family:'Manrope',sans-serif;font-size:13px;font-weight:600;color:var(--w80);letter-spacing:.2px}
.field .req{color:#f789db}
/* Видимый фокус: до этого был только сдвиг цвета рамки, с клавиатуры почти незаметный. */
.lead-form input:focus-visible,.lead-form textarea:focus-visible,.lead-form select:focus-visible,.lead-form .btn:focus-visible{outline:2px solid #f789db;outline-offset:2px}
/* Селект большой формы: поля берём у .lead-form input, здесь только сброс нативного вида и стрелка. */
.lead-form select{width:100%;padding:16px 40px 16px 22px;border-radius:14px;border:1px solid rgba(255,255,255,.28);background:rgba(255,255,255,.06);color:#fff;font-family:'Manrope',sans-serif;font-size:15px;line-height:1.5;outline:none;box-sizing:border-box;-webkit-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 8' fill='none'%3E%3Cpath d='M1 1.5 6 6.5l5-5' stroke='rgba(255,255,255,.6)' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 18px center;background-size:12px 8px;cursor:pointer}
.lead-form select:focus{border-color:#f789db}
.lead-form select option{background:#14099d;color:#fff}
/* Шапка блока: заголовок слева, подзаголовок справа в одну строку с ним; <=768 - друг под другом. */
/* Заголовок не сжимается (flex:0 0 auto) - если его max-content шире контейнера, подзаголовку
   от flex:1 1 0 достаётся 3px, и текст встаёт вертикальным столбиком в один символ. Ловилось
   на 9 страницах услуг с длинным H2 «Узнайте стоимость под ключ...» (max-content 1017px при
   контейнере 1052px), на главной с коротким H2 не проявлялось. Лечение: заголовку разрешён
   сжим (0 1 auto + min-width:0), подзаголовку дан ненулевой базис 320px, контейнеру - wrap.
   Итог: вправо, если оба влезают в строку; под заголовок, если нет. Ширину не выдумывает. */
.cta-head{display:flex;flex-wrap:wrap;align-items:flex-end;gap:32px;margin:0 0 26px}
.cta-head .cta-title{flex:0 1 auto;min-width:0;margin:0}
/* margin-inline:auto центрирует подзаголовок ТОЛЬКО когда он перенёсся на свою строку, и
   само собой: flex-grow разбирает свободное место раньше auto-полей, поэтому в одной строке
   с заголовком (главная) полям достаётся ноль и раскладка не меняется, а на своей строке
   ширина упирается в max-width:460px, остаётся свободное место - и поля делят его поровну.
   Без этого блок стоял у левого края с центрированным текстом внутри и читался криво. */
.cta-head .sub{flex:1 1 320px;min-width:0;margin:0 auto 4px;max-width:460px}
/* Заголовок на СВОЕЙ строке тоже центрируем - иначе его коробка (shrink-to-fit по длинной
   строке) прижата влево, текст внутри центрирован по ней, и группа сидит левее оси
   подзаголовка: на 390 расхождение было 18-34px и читалось как «криво». Механика та же,
   что у .sub: в общей строке grow подзаголовка забирает свободное место раньше auto-полей,
   поэтому бок-о-бок раскладка не меняется. Правило ТОЛЬКО в файлах подстраниц: у главной
   CTA выровнена влево (её .cta-head живёт в .cta-content и стили берёт из home.css),
   там центрировать нельзя. */
.cta-final .cta-head .cta-title{margin-inline:auto}
.cta-title{font-family:'Oswald',sans-serif;font-style:italic;text-transform:uppercase;font-size:clamp(28px,4.6vw,48px);line-height:1.05;letter-spacing:-.5px}
.cta-title span{display:block}
/* Строка 1 мельче и в градиенте, строка 2 крупнее сплошным белым. Запас padding/margin по .1em -
   тот же фикс ink-свеса Oswald-курсива, что у .grad: без него background-clip:text срезает
   боковые буквы (закон проекта). */
.cta-title .t1{font-size:.62em;background:var(--gt);-webkit-background-clip:text;background-clip:text;color:transparent;padding:0 .1em;margin:0 -.1em}
.cta-title .t2{color:#fff}
.lead-card{padding:34px 32px;border-radius:24px;border:1px solid rgba(255,255,255,.18);background:linear-gradient(135deg,rgba(203,69,145,.26) 0%,rgba(141,72,220,.20) 45%,rgba(95,118,232,.24) 100%);box-shadow:0 24px 60px -12px rgba(203,69,145,.35)}
/* Раскладка: ряд 1 - имя, контакт, услуга; ряд 2 - задача + кнопка справа.
   Условный бюджет НЕ удалён (ТЗ): он стоит на всю ширину своей строкой, поэтому при появлении
   просто вставляет ряд, а не сдвигает поля в соседние колонки. Пока он hidden, его в сетке нет
   вообще - лишней пустой строки и двойного gap не возникает. */
.lead-card .lead-form{display:grid;grid-template-columns:repeat(3,1fr);gap:12px 12px;max-width:none;margin:0;align-items:start}
.lead-card .lead-form .field{min-width:0}
.lead-card .lead-form .field-budget{grid-column:1/-1}
.lead-card .lead-form .f-task{grid-column:1/3}
.lead-card .lead-form .btn{grid-column:3;align-self:start;width:100%;margin:0;padding:18px 24px}
/* Пилюли: скругление 999px на полях, селектах и кнопке. Селекту сохраняем место под стрелку. */
.lead-card .lead-form input,.lead-card .lead-form select,.lead-card .lead-form .btn{border-radius:999px}
.lead-card .lead-form select{padding-right:44px}
/* Плейсхолдер поля задачи подменяется медиазапросом, без JS: у самого input плейсхолдер пустой
   (пробел - чтобы срабатывал :placeholder-shown), видимый текст лежит наложением .ph поверх поля
   и гаснет, как только пользователь начал печатать. Обёртка .f-task-box нужна, чтобы наложение
   совпадало с боксом input'а по высоте: .field выше на строку ошибки. */
.lead-card .lead-form input::placeholder{text-overflow:ellipsis}
.f-task-box{position:relative}
.f-task-box .ph{position:absolute;inset:0;display:flex;align-items:center;padding:0 23px;
  font-family:'Manrope',sans-serif;font-size:15px;line-height:1.5;color:rgba(255,255,255,.55);
  pointer-events:none;opacity:0;white-space:nowrap;overflow:hidden}
.f-task-box input:placeholder-shown+.ph{opacity:1}
.f-task-box .ph-short{display:none}
@media(max-width:480px){
  .f-task-box .ph-long{display:none}
  .f-task-box .ph-short{display:inline}
}
@media(max-width:768px){
  .cta-head{flex-direction:column;align-items:flex-start;gap:10px}
  /* flex:0 1 auto обязателен. В колонке flex-basis управляет ВЫСОТОЙ, поэтому базис 320px,
     заданный для десктопной строки, растягивал подзаголовок с его ~145px до 320px и рисовал
     под текстом ~200px пустоты между ним и карточкой формы. Правило .sub выше по файлу базис
     не сбрасывает - сбрасываем здесь, вместе со сменой направления. */
  .cta-head .sub{flex:0 1 auto;max-width:none;margin:0}
  /* В колонке auto-поля подзаголовку обнулены (см. строку выше), поэтому на подстраницах,
     где CTA центрирована, ось задаём контейнером. Главной это правило не достаётся -
     её стили в home.css. */
  .cta-final .cta-head{align-items:center}
  .lead-card .lead-form{grid-template-columns:1fr}
  .lead-card .lead-form .field-budget,.lead-card .lead-form .f-task,.lead-card .lead-form .btn{grid-column:1}
}
@media(max-width:640px){
  .cta-final .cta-content{text-align:left}
  .lead-card{padding:24px 18px}
}

/* CTA в конце текста (.post-cta). Ставится там, где человек дочитал кейс или статью и находится
   в пике доверия: до этого ближайшая кнопка была на ~4000px, то есть почти в пяти экранах от
   начала. Компонент не новый - внутри обычная .btn, своих цветов и шрифтов не заводит.
   Ссылка ведёт прямо в wa.me с префиллом по шаблону wa.js, поэтому работает без JS.
   Класса cta-wa на ней НЕТ намеренно: analytics.js считает cta-wa отправкой формы (form_submit),
   а это не форма - событие должно уйти как whatsapp_click, ровно одно на клик. */
.post-cta{margin:34px 0 0;padding:26px 24px;border-radius:18px;background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);text-align:center}
.post-cta-t{margin:0 0 6px;font-family:'Manrope',sans-serif;font-weight:600;font-size:20px;line-height:1.3;color:#fff}
.post-cta-s{margin:0 0 18px;font-size:15px;line-height:1.6;color:rgba(255,255,255,.75)}
@media(max-width:640px){.post-cta{padding:22px 16px}.post-cta-t{font-size:18px}}

/* ===== Капсула «Услуги | бургер» в мобильной шапке =====
   Пилюля и бургер живут в одной скруглённой оболочке справа: слева «Услуги» с шевроном,
   тонкий разделитель, справа бургер. Логотип слева, центр шапки пуст.

   ДЕСКТОП (>640px): капсулы нет - скрыты обе её половины. Раньше тут стоял только
   display:contents на .nav-cap, с расчётом «оболочка растворится, а дети скрыты сами».
   Расчёт был неверный: display:none написан только для .burger, а для .nav-svc такого
   правила не существовало ни в одном из 9 файлов со стилями. Ссылка протекала в
   десктопную шапку голым <a> - браузерное подчёркивание, белый цвет от a{color:inherit},
   шеврон вплотную к тексту (gap работает только в inline-flex, то есть только внутри
   медиазапроса), вторым дублем «Услуг» рядом с пунктом nav-links. Найдено 05.08.2026
   по скриншотам 1440/1024/768.

   СКРЫВАТЬ НАДО ПОЛОВИНЫ (.nav-svc и .nav-cap-sep), А НЕ ОБОЛОЧКУ .nav-cap. Поставишь
   display:none на саму .nav-cap - вместе с «Услугами» пропадёт и бургер, а мобильное меню
   станет недоступно. Наступали на это 05.08.2026, поймано хит-тестом computed display
   на всех 9 источниках стилей.

   06.08.2026: 404.html приведена к общей разметке - <nav class="navbar"><div class="nav-inner">,
   как на остальных 35 страницах. Раньше она была единственным исключением (<nav class="nav">
   без .nav-inner), и заскопленные на .nav-inner правила капсулы там не срабатывали вообще:
   капсулы не было, «Услуги» не показывались, бургер держался на голом .burger{display:block}
   без 44px-зоны нажатия. Новых страниц с собственной разметкой шапки не заводить.

   Селекторы через .nav-inner / .nav-cap (специфичность 0,2,0 и выше) намеренно: базовые
   правила шапки лежат и в критическом инлайне, и в home.css, и при равной специфичности
   победил бы тот файл, что применится последним.

   ВЫСОТА ШАПКИ НЕ МЕНЯЕТСЯ. Внешняя высота капсулы ровно 30px, как у логотипа: содержимое
   28px + 1px рамки сверху и снизу. Шапка как была 58px, так и осталась.

   ДВЕ ЗОНЫ НАЖАТИЯ, А НЕ ОДНА. Это два разных действия в одной оболочке, поэтому у каждого
   свой ::after высотой 44px, и между ними намеренный зазор: у «Услуг» зона обрезана справа
   на 4px, у бургера слева на 4px, плюс сам разделитель - итого около 9px чистого промежутка.
   Палец не промахивается между «показать услуги» и «открыть меню». */
.nav-cap{display:contents}
/* Половины капсулы скрыты по умолчанию, включает их только медиазапрос ниже.
   Подчёркивание и зазор перед шевроном держим здесь, в базовом слое: gap флекс-контейнера
   действует, только пока .nav-svc в режиме inline-flex, то есть исключительно внутри
   медиазапроса, - в любом другом состоянии это была бы голая браузерная ссылка
   с прилипшим шевроном. */
.nav-svc{display:none;text-decoration:none}
.nav-cap-sep{display:none}
.nav-svc-chev{margin-left:6px}
@media(max-width:640px){
  /* Рамка градиентом --gt: два фона, один по padding-box (тёмная заливка), второй по
     border-box (сам градиент) - рамка красится градиентом без лишних элементов. */
  .nav-inner .nav-cap{display:inline-flex;align-items:center;position:relative;
    border:1px solid transparent;border-radius:50px;
    background:linear-gradient(rgba(20,8,48,.55),rgba(20,8,48,.55)) padding-box,
               var(--gt) border-box}
  .nav-inner .nav-cap .nav-svc{display:inline-flex;align-items:center;position:relative;
    padding:5px 12px;border:none;background:none;border-radius:50px 0 0 50px;
    color:#fff;text-decoration:none;font-size:13px;line-height:18px;white-space:nowrap}
  .nav-inner .nav-cap .nav-svc:active,
  .nav-inner .nav-cap .burger:active{background:rgba(255,255,255,.12)}
  /* Разделитель: тонкая линия, ниже высоты капсулы - визуально не упирается в рамку. */
    /* margin 6px с двух сторон - это и есть зазор между двумя зонами нажатия. Без него боксы
     самих элементов соприкасались, и промежуток получался нулевой: ::after расширяет
     область наружу, но развести соседей внутри капсулы может только отступ. */
.nav-inner .nav-cap .nav-cap-sep{display:block;width:1px;height:16px;flex:0 0 1px;margin:0 6px;
    background:rgba(255,255,255,.28);pointer-events:none}
  .nav-inner .nav-cap .burger{display:inline-flex;align-items:center;justify-content:center;
    position:relative;padding:5px 14px;margin:0;border:none;background:none;
    color:#fff;font-size:18px;line-height:18px;border-radius:0 50px 50px 0;cursor:pointer}
  /* Зоны нажатия 44px у каждой половины, между ними промежуток - см. комментарий выше. */
  .nav-inner .nav-cap .nav-svc::after{content:'';position:absolute;top:50%;
    transform:translateY(-50%);height:44px;left:0;right:0}
    /* right:-12px - зона бургера намеренно выходит за правую кромку капсулы: сам элемент
     узкий (36-40px), и без выпуска зона не добирала до 44px по ширине. Наружу это
     невидимо и за край экрана не выходит: на 320 капсула кончается на ~296 при
     вьюпорте 320. Зазор до соседней зоны держит margin разделителя, а не эти отступы. */
.nav-inner .nav-cap .burger::after{content:'';position:absolute;top:50%;
    transform:translateY(-50%);height:44px;left:0;right:-12px}
  /* Фокус виден на КАЖДОЙ половине отдельно - таб проходит по обеим. */
  .nav-inner .nav-cap .nav-svc:focus-visible,
  .nav-inner .nav-cap .burger:focus-visible{outline:2px solid var(--pink-light);outline-offset:2px;
    border-radius:50px}
  .nav-svc-chev{font-size:11px;line-height:1;opacity:.75}
}
@media(max-width:360px){
  /* На 320 между логотипом и правым краем контейнера ~181px, капсула укладывается
     примерно в 150px - шеврон убирать не понадобилось, только слегка ужат padding. */
  .nav-inner .nav-cap .nav-svc{padding:5px 10px;font-size:12px;line-height:18px}
  .nav-inner .nav-cap .burger{padding:5px 10px}
}
/* ===== ДВА ЭКРАНА В ОДНОМ ОВЕРЛЕЕ =====
   Раньше в режиме услуг было видно и 11 услуг, и всю навигацию сразу - «двойное меню».
   Теперь строгое разделение, режим переключается классом svc-open на #mobileMenu:

   ЭКРАН 1 (тап по «Услуги», .svc-open): крестик + 11 ссылок на услуги + кнопка WhatsApp.
     Пунктов «Этапы работы», «О нас», «Блог», «Кейсы» на экране нет.
     Аккордеон в этом режиме не нужен: список раскрыт всегда, кнопка-переключатель с шевроном
     скрыта, а сам вложенный <ul> оформлен как обычные пункты меню - те же 52px, тот же кегль,
     те же разделители. Раскрытие сделано СТИЛЕМ, а не кликом по аккордеону: иначе класс .open
     оставался бы между открытиями и режимы залипали бы друг за другом.

   ЭКРАН 2 (тап по бургеру, без класса): крестик + «Этапы работы», «О нас», «Блог», «Кейсы»
     + кнопка WhatsApp. Блок услуг скрыт целиком вместе с заголовком - ни слова «Услуги».

   Крестик и кнопка WhatsApp живут вне .mob-nav и потому видны в обоих режимах - их не трогаем.
   Все ссылки остаются в DOM всегда, скрывается только показ: разметку видят краулеры и ИИ. */
.mob-menu .mob-has-sub{display:none}
.mob-menu.svc-open .mob-has-sub{display:block}
/* Экран 1: прячем обычные пункты навигации и переключатель аккордеона. */
.mob-menu.svc-open .mob-nav>li:not(.mob-has-sub){display:none}
.mob-menu.svc-open .mob-sub-toggle{display:none}
/* Экран 1: список услуг раскрыт стилем и выглядит как основное меню, а не как вложенный подсписок. */
.mob-menu.svc-open .mob-sub{max-height:none;opacity:1;overflow:visible;
  margin:0;padding:0;border-left:none}
.mob-menu.svc-open .mob-sub>li{border-bottom:1px solid rgba(255,255,255,.09)}
.mob-menu.svc-open .mob-sub>li:last-child{border-bottom:none}
.mob-menu.svc-open .mob-sub>li>a{display:flex;align-items:center;min-height:52px;padding:11px 6px;
  color:#fff;text-decoration:none;font-size:18px;font-weight:600}
}
