/* Шрифты (10.10, рецепт скорости): по одному файлу на семейство, только знаки сайта (Google Fonts text=, OFL); optional — без подмены после отрисовки.
   Новые знаки на сайте — пересобрать файл: studio/NAVYKI.md «Шрифты сайта». Старые geologica-cyr/lat и marck-script-* остаются на сервере для анкет. */
@font-face{font-family:"Marck Script";src:url(fonts/marck-kv.woff2) format("woff2");font-weight:400;font-display:optional}
@font-face{font-family:"Geologica";src:url(fonts/geologica-kv.woff2) format("woff2");font-weight:300 800;font-display:optional}

:root{
  --ink:#16181B;       /* тёплый графит — текст и тёмные поля */
  --ink-2:#4A4E55;     /* второстепенный текст */
  --line:#E4E5E1;      /* разлиновка */
  --paper:#FFFFFF;
  --field:#F4F4F1;     /* подложка секций */
  --act:#C93B09;       /* действие: кнопки, ссылки-действия */
  --act-hi:#F2541B;    /* сигнал «новая заявка» */
  --done:#1A7A43;      /* статус «готово» */
  --todo:#FFE58A;
  --r:6px;
  --wrap:1200px;
  --pad:clamp(16px,4vw,40px);
  --gap-sec:clamp(72px,10vw,128px);
  --ease:cubic-bezier(.16,1,.3,1);
}
@supports not (width:clamp(1px,1vw,2px)){:root{--pad:16px;--gap-sec:72px}}  /* переменные: в старом браузере clamp() в var() не сработал бы */
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--paper);color:var(--ink);font:400 17px/1.55 "Geologica",system-ui,sans-serif;font-feature-settings:"tnum" 0}
::selection{background:var(--ink);color:#fff}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-underline-offset:.2em;text-decoration-thickness:1px}
a:hover{color:var(--act)}
:focus-visible{outline:2px solid var(--act);outline-offset:3px;border-radius:2px}
h1,h2,h3{margin:0;font-weight:600;letter-spacing:-.02em;text-wrap:balance}
h2{font-size:30px;font-size:clamp(30px,3.6vw,46px);line-height:1.08;margin-bottom:28px}
h3{font-size:19px;line-height:1.3}
p{margin:0}
.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--pad)}
mark.todo{background:var(--todo);color:#3d2e00;padding:.05em .35em;border-radius:3px;font-size:.86em;font-weight:500;white-space:nowrap}
.todo-note{font-size:14px;color:var(--ink-2);margin:0 0 24px;max-width:70ch}
.todo-note mark{margin-right:.4em}

/* Кнопки */
.btn{display:inline-flex;align-items:center;gap:10px;white-space:nowrap;min-height:52px;padding:0 24px;border-radius:var(--r);font:600 16px/1 "Geologica",sans-serif;text-decoration:none;border:1.5px solid transparent;cursor:pointer;transition:background .2s,color .2s,border-color .2s,transform .2s var(--ease)}
.btn svg{width:20px;height:20px;fill:currentColor;flex:none}
.btn-main{background:var(--act);color:#fff}
.btn-main:hover{background:#A92F05;color:#fff}
.btn-main:active{transform:translateY(1px)}
.btn-line{border-color:var(--ink);color:var(--ink)}
.btn-line:hover{background:var(--ink);color:#fff}
.btn-sm{min-height:42px;padding:0 16px;font-size:15px}

/* Шапка */
.top{position:-webkit-sticky;position:sticky;top:0;z-index:10;background:rgba(255,255,255,.94);-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--line)}
.top-in{display:flex;align-items:center;gap:32px;min-height:68px}
.brand{display:flex;flex-direction:column;text-decoration:none;line-height:1.15}
.brand-name{font:400 25px/1 "Marck Script",cursive;white-space:nowrap;letter-spacing:.02em;transform:rotate(-1.5deg)}
.brand-sub{font-size:9.5px;letter-spacing:.09em;text-transform:uppercase;color:#6B6F76;white-space:nowrap;margin-top:4px}
.nav{display:flex;gap:20px;margin-left:auto}
.nav a{text-decoration:none;font-size:14.5px;color:var(--ink-2);white-space:nowrap}
.nav a:hover{color:var(--ink)}
.top-act{display:flex;align-items:center;gap:8px}
.icon-btn{display:grid;place-items:center;width:42px;height:42px;border:1px solid var(--line);border-radius:var(--r)}
.icon-btn svg{width:20px;height:20px;fill:var(--ink)}
.icon-btn:hover{border-color:var(--ink)}
@media (max-width:1120px){.nav{display:none}.top-act{margin-left:auto}}
@media (max-width:520px){.brand-sub{display:none}.top-in{gap:12px;min-height:60px}.top-more{display:none}.top-act .btn{padding:0 14px}}  /* 10.10: телефон и Telegram в шапке скрыты — на телефоне остаётся кнопка «Обсудить задачу» */

/* Первый экран */
.hero{padding:40px 0 var(--gap-sec);padding:clamp(40px,6vw,88px) 0 var(--gap-sec)}
.hero-in{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,1fr);gap:32px;gap:clamp(32px,5vw,72px);align-items:start}  /* 20.10: справа связка остаётся на виду (sticky ниже) */
/* 20.10 (Константин): «можно расширить первый экран и право лево разделить … с картинкой сделать больше и выровнять»; «Пример: форма на сайте — оставить такой размер».
   Шапка и первый экран шире остальных блоков (края у них общие); справа связка прежних 504 px, слева картинка до ~820 px — как слайд кафе в «Примерах» */
.top .wrap,.hero .wrap{max-width:1460px}
@media (min-width:1200px){.hero-in{grid-template-columns:minmax(0,1fr) 504px;gap:56px}}
.hero h1{font-size:36px;font-size:clamp(36px,4.5vw,60px);line-height:1.02;letter-spacing:-.03em;font-weight:650}
.lead{font-size:17px;font-size:clamp(17px,1.4vw,20px);color:var(--ink-2);margin-top:24px;max-width:36em}
.hero-cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}
/* 20.10: картинка слева у текста первого экрана (Константин) */
.hero-pic{display:flex;flex-direction:column;gap:8px;margin:0 0 24px;color:var(--ink-2);font-size:14px;text-decoration:none}
.hero-pic img{width:100%;height:auto}  /* 20.10 (Константин): «картинка крупнее размер примерно как на слайде демо кафе» — на всю колонку */
.hero-pic:hover{color:var(--ink)}
@media (max-width:640px){.hero-pic{margin-bottom:18px}}
.facts{list-style:none;padding:0;margin:28px 0 0;display:flex;flex-wrap:wrap;gap:8px 20px;font-size:14px;color:var(--ink-2)}
.facts li{display:flex;align-items:center;gap:8px}
.facts li::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--done)}
@media (max-width:900px){.hero-in{grid-template-columns:1fr}}

/* Связка: сайт → Telegram → почта */
.flow{margin:0}
@media (min-width:901px){.flow{position:-webkit-sticky;position:sticky;top:96px}}
.flow-stage{position:relative;background:var(--field);border:1px solid var(--line);border-radius:10px;padding:28px;min-height:640px;overflow:hidden}
/* 20.10 (Константин): «как демо приходит заявка может как то сделать поярче … я подумал что это форма вначале потом понял что это анимация и на моб анимации почему то нет».
   Окна лежат на подложке чуть темнее белого с точками (сначала был яркий оранжевый — Константин: «цвет не тот просто может чуть темнее чем белый сделать а не такой яркий»), как снимок экрана, — так видно, что это картинка, а не форма страницы. Сверху метка «Живой пример»
   и шаги «Сайт → Telegram → Почта», они загораются по ходу; курсор нажимает «Отправить». Без JS и при reduced-motion — конечное состояние, всё горит */
.flow-stage.is-live{background:#ECEBE6;background-image:radial-gradient(rgba(22,24,27,.07) 1px,transparent 1.6px);background-size:18px 18px;border:0;border-radius:14px;min-height:688px}
.f-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 12px;margin-bottom:18px}
.f-live{display:inline-flex;align-items:center;gap:8px;background:#fff;color:var(--ink);border-radius:999px;padding:6px 12px 6px 10px;font-size:12px;font-weight:600;line-height:1.2;box-shadow:0 6px 14px -8px rgba(22,24,27,.35)}
.f-live::before{content:"";width:8px;height:8px;border-radius:50%;background:#E5260F;box-shadow:0 0 0 0 rgba(229,38,15,.5)}
.f-steps{display:flex;align-items:center;gap:4px;list-style:none;margin:0;padding:0;font-size:12px;font-weight:600;line-height:1.2}
.f-steps li{display:flex;align-items:center;gap:4px}
.f-steps li+li::before{content:"→";color:rgba(22,24,27,.4);font-weight:400}
.f-steps span{border-radius:999px;padding:5px 10px;background:var(--ink);color:#fff}
.f-head ~ .f-tg{top:92px}
.is-live .f-site,.is-live .f-mail,.is-live .f-tg{border:0;box-shadow:0 16px 32px -16px rgba(22,24,27,.32)}
.f-site{width:62%;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 18px -12px rgba(22,24,27,.3)}
.f-bar{display:flex;align-items:center;gap:6px;padding:10px 12px;border-bottom:1px solid var(--line);font-size:12px;color:var(--ink-2)}
.f-bar i{width:8px;height:8px;border-radius:50%;background:var(--line)}
.is-live .f-bar i{background:#FF5F57}.is-live .f-bar i+i{background:#FEBC2E}.is-live .f-bar i+i+i{background:#28C840}
.f-bar span{margin-left:8px}
.f-form{padding:16px 18px 18px;display:grid;gap:10px}
.f-title{font-weight:600;font-size:16px}
.f-form label{display:grid;gap:4px;font-size:11px;color:var(--ink-2)}
.f-in{display:block;border:1px solid var(--line);border-radius:4px;padding:8px 10px;font-size:14px;color:var(--ink)}
.f-send{justify-self:start;background:var(--ink);color:#fff;border-radius:4px;padding:9px 16px;font-size:13px;font-weight:600}
.f-send{position:relative}
.f-cur{position:absolute;left:68%;top:52%;width:22px;height:22px;pointer-events:none}
.f-cur svg{display:block;width:100%;height:100%;fill:var(--ink);stroke:#fff;stroke-width:1.6;stroke-linejoin:round;filter:drop-shadow(0 2px 3px rgba(0,0,0,.3))}
.f-tg{position:absolute;top:44px;right:24px;width:44%;background:#fff;border-radius:12px 12px 12px 4px;padding:14px 16px;font-size:13px;line-height:1.45;box-shadow:0 10px 22px -12px rgba(22,24,27,.35);border:1px solid var(--line)}
.f-tg p+p{margin-top:6px}
.f-tg-app{display:flex;align-items:center;gap:6px;font-size:11px;color:var(--ink-2);margin-bottom:6px}
.f-tg-app::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--act-hi)}
.is-live .f-tg-app::before{width:10px;height:10px;background:#2AABEE}  /* цвет Telegram — узнаётся с первого взгляда */
.f-src{font-size:11px;color:var(--ink-2)}
/* 20.10: почта — окно почтового клиента: слева входящие, справа открытое письмо (на телефоне — только письмо) */
.f-mail{position:absolute;left:24px;right:24px;bottom:24px;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 8px 18px -12px rgba(22,24,27,.3);overflow:hidden}
.f-mail-in{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.4fr)}
.f-mail-list{list-style:none;margin:0;padding:0;border-right:1px solid var(--line);background:var(--field)}
.f-mail-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 8px;padding:9px 12px;border-bottom:1px solid var(--line);font-size:12px;line-height:1.35}
.f-mail-list b{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.f-mail-list span{grid-column:1/-1;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.f-mail-list em{grid-row:1;grid-column:2;font-style:normal;font-size:11px;color:var(--ink-2)}
.f-mail-list .is-new{background:#fff;box-shadow:inset 3px 0 0 var(--act-hi)}
.f-mail-list .is-new b::before{content:"";display:inline-block;width:6px;height:6px;margin-right:6px;border-radius:50%;background:var(--act-hi);vertical-align:1px}
.f-mail-list .f-mail-dir{display:flex;justify-content:space-between;align-items:center;padding:7px 12px;font-size:11px}
.f-mail-dir em{background:var(--act-hi);color:#fff;border-radius:9px;padding:0 6px;font-weight:600}
.f-letter{min-width:0;padding:12px 16px 14px;display:grid;gap:8px;align-content:start}
.f-subj{font-weight:600;font-size:14px;line-height:1.3}
.f-from{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding-bottom:8px;border-bottom:1px solid var(--line);font-size:12px;line-height:1.3}
.f-from small{display:block;font-size:11px;color:var(--ink-2)}
.f-from em{font-style:normal;font-size:11px;color:var(--ink-2)}
.f-ava{width:26px;height:26px;border-radius:50%;background:var(--ink);color:#fff;display:grid;place-items:center;font-size:12px;font-weight:600}
.f-letter dl{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 14px;margin:0;font-size:13px;line-height:1.35}
.f-letter dt{color:var(--ink-2)}
.f-letter dd{margin:0;font-weight:500}
.flow figcaption{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-top:12px;font-size:13px;color:var(--ink-2)}
.flow figcaption span{flex:1;min-width:0}
.replay{flex:none;white-space:nowrap;background:none;border:0;padding:0;font:500 13px "Geologica",sans-serif;color:var(--ink);text-decoration:underline;text-underline-offset:.2em;cursor:pointer}
.replay:hover{color:var(--act)}
/* проигрывание — только когда JS добавил .run */
.flow.run .f-in{animation:type .5s var(--ease) both}
.flow.run label:nth-of-type(1) .f-in{animation-delay:.2s}
.flow.run label:nth-of-type(2) .f-in{animation-delay:.55s}
.flow.run label:nth-of-type(3) .f-in{animation-delay:.9s}
.flow.run .f-send{animation:press .5s var(--ease) 1.45s both}
.flow.run .f-tg{animation:pop .7s var(--ease) 1.9s both}
.flow.run .f-mail{animation:drop .7s var(--ease) 2.7s both}
/* 20.10: курсор подъезжает к «Отправить» и нажимает, шаги в метке загораются по ходу, у входящих подпрыгивает «1» */
.flow.run .f-cur{animation:cur 1.1s cubic-bezier(.45,0,.25,1) .5s both}  /* доезжает, когда допечатано третье поле */
.flow.run .f-send{animation:press .5s var(--ease) 1.45s both,ring .7s ease-out 1.5s both}
.flow.run .f-steps span{animation:lit .35s var(--ease) both}
.flow.run .f-steps li:nth-child(1) span{animation-delay:.1s}
.flow.run .f-steps li:nth-child(2) span{animation-delay:1.9s}
.flow.run .f-steps li:nth-child(3) span{animation-delay:2.7s}
.flow.run .f-mail-dir em{animation:bump .5s var(--ease) 3.3s both}
.flow.run .f-live::before{animation:live 1.4s ease-out 3}  /* пульс точки — только пока идёт показ, без бесконечного мигания */
/* перед повтором и пока блок не на экране: окна и поля погашены — JS ставит .out */
.flow.out .f-tg,.flow.out .f-mail,.flow.out .f-in,.flow.out .f-cur{opacity:0;transition:opacity .3s}
.flow.out .f-steps span{background:rgba(22,24,27,.08);color:rgba(22,24,27,.45);transition:background-color .3s,color .3s}
@keyframes cur{0%{opacity:0;transform:translate(70px,60px)}25%{opacity:1}85%{transform:none}92%{transform:scale(.82)}100%{opacity:1;transform:none}}
@keyframes ring{from{box-shadow:0 0 0 0 rgba(242,84,27,.6)}to{box-shadow:0 0 0 16px rgba(242,84,27,0)}}
@keyframes lit{from{background:rgba(22,24,27,.08);color:rgba(22,24,27,.45);transform:scale(.92)}to{background:var(--ink);color:#fff;transform:none}}
@keyframes bump{40%{transform:scale(1.35)}}
@keyframes live{70%{box-shadow:0 0 0 7px rgba(229,38,15,0)}100%{box-shadow:0 0 0 0 rgba(229,38,15,0)}}
@keyframes type{from{color:transparent;clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes press{0%,60%{transform:none}30%{transform:scale(.94);background:var(--act)}}
@keyframes pop{from{opacity:0;transform:translateY(14px) scale(.96);filter:blur(4px)}to{opacity:1;transform:none;filter:none}}
@keyframes drop{from{opacity:0;transform:translateY(-18px)}to{opacity:1;transform:none}}
@media (max-width:560px){
  .flow-stage{padding:16px;min-height:0;display:grid;gap:12px}
  .flow-stage.is-live{min-height:0}
  .f-head{margin-bottom:0}
  .f-form{gap:8px}
  .f-site,.f-tg{width:100%;position:static}
  .f-mail{position:static}
  .f-mail-in{grid-template-columns:1fr}
  .f-mail-list{display:none}
  .flow figcaption{flex-direction:column;gap:6px}
}

/* Секции */
section{scroll-margin-top:80px}
.sec-head{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.8fr);gap:24px 64px;align-items:end;margin-bottom:32px}
.sec-head h2{margin:0}
.sec-head p{color:var(--ink-2);max-width:48ch}
@media (max-width:860px){.sec-head{grid-template-columns:1fr}}

/* Кому подойду */
.fit{padding-bottom:var(--gap-sec)}
.fit-grid{display:grid;grid-template-columns:1fr 1fr;gap:0;border-top:1px solid var(--ink)}
.fit-grid>div{padding:28px 32px 0 0}
.fit-grid>div+div{padding-left:32px;border-left:1px solid var(--line)}
.yes,.no{display:flex;align-items:center;gap:10px;margin-bottom:16px}
.yes::before,.no::before{content:"";width:10px;height:10px;border-radius:50%}
.yes::before{background:var(--done)}
.no::before{background:var(--ink);border-radius:2px}
.ticks,.crosses{list-style:none;margin:0;padding:0;display:grid;gap:12px;max-width:52ch}
.ticks li,.crosses li{padding-left:22px;position:relative;color:var(--ink-2)}
.ticks li::before,.crosses li::before{content:"";position:absolute;left:0;top:.72em;width:10px;height:1.5px;background:var(--ink)}
@media (max-width:760px){.fit-grid{grid-template-columns:1fr}.fit-grid>div+div{padding-left:0;border-left:0;border-top:1px solid var(--line);margin-top:28px}}

/* Работы */
.works{padding:var(--gap-sec) 0;background:var(--field)}
.work-lead{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:24px;gap:clamp(24px,4vw,56px);align-items:start;background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px;padding:clamp(16px,3vw,32px);margin-bottom:24px}
.work-shot{position:relative;display:block}
.work-shot>img:first-child{border-radius:6px;border:1px solid var(--line);aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%}
.work-phone{position:absolute;right:-14px;bottom:-18px;width:22%;border-radius:14px;border:4px solid var(--ink);box-shadow:0 18px 30px -16px rgba(22,24,27,.5);aspect-ratio:390/760;object-fit:cover;object-position:top}
.work-body h3{font-size:22px;font-size:clamp(22px,2vw,28px);line-height:1.15}
.work-niche{color:var(--ink-2);margin-top:6px}
.work-done{margin:20px 0;padding:0;list-style:none;display:grid;gap:10px;font-size:15px}
.work-done li{padding-left:22px;position:relative}
.work-done li::before{content:"";position:absolute;left:0;top:.7em;width:10px;height:1.5px;background:var(--act)}
.work-meta{display:flex;gap:28px;margin:0 0 20px;font-size:14px;border-top:1px solid var(--line);padding-top:14px}
.work-meta dt{color:var(--ink-2);font-size:12px}
.work-meta dd{margin:2px 0 0;display:flex;align-items:center;gap:6px}
.dot{width:8px;height:8px;border-radius:50%;border:1.5px solid var(--ink-2);display:inline-block;flex:none}
.work-links{display:flex;flex-wrap:wrap;gap:10px}
.work-small{font-size:13px;color:var(--ink-2);margin-top:12px}
.work-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:24px}
.work-grid .work{grid-column:span 2;display:flex;flex-direction:column;gap:10px}
.work-grid .work-shot img{border-radius:6px;border:1px solid var(--line);aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%;transition:transform .5s var(--ease),box-shadow .5s var(--ease)}
.work-grid .work-shot:hover img{transform:translateY(-4px);box-shadow:0 18px 32px -20px rgba(22,24,27,.45)}
.work-grid h3{margin-top:6px}
.work-grid .work p{font-size:15px;color:var(--ink-2)}
.work-row{display:flex;justify-content:flex-end;align-items:center;gap:12px;margin-top:auto;padding-top:10px;border-top:1px solid var(--line);font-size:14px!important}
.work-row>span{display:flex;align-items:center;gap:6px}
.work-row a{color:var(--act);font-weight:600;text-decoration:none}
.work-row a:hover{text-decoration:underline}
@media (max-width:900px){.work-lead{grid-template-columns:1fr}.work-grid{grid-template-columns:1fr 1fr}.work-grid .work{grid-column:span 1}}
@media (max-width:600px){.work-grid{grid-template-columns:1fr}.work-phone{right:-6px;bottom:-12px;width:24%}}

/* Цены */
.prices{padding:var(--gap-sec) 0}
.price-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:40px}
.pgroup h3{font-size:22px;padding-bottom:14px;border-bottom:2px solid var(--ink);display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:4px 12px}
.per{font-size:14px;font-weight:400;color:var(--ink-2)}
.ptable{width:100%;border-collapse:collapse;font-size:15px}
.ptable thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.ptable th,.ptable td{padding:14px 0;border-bottom:1px solid var(--line);vertical-align:top;text-align:left}
.ptable th[scope=row]{font-weight:500;padding-right:12px}
.ptable small{display:block;font-weight:400;font-size:13px;line-height:1.4;color:var(--ink-2);margin-top:4px}
.ptable .n{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums;font-weight:600}
.ptable .n s{font-weight:400;color:var(--ink-2);margin-right:4px}
/* 21.10: ссылка «Пример: …» под строкой цены открывает демо в окне (okno.js, data-okno) */
.ptable .pex{display:inline-block;margin-top:6px;padding:4px 0;font-size:13px;font-weight:600;color:var(--act);text-decoration:none}
.ptable .pex:hover{text-decoration:underline}
/* 21.10: подзаголовок «Варианты сайтов» внутри таблицы цен, под ним пометка про «от» */
.ptable .psub th{padding:28px 0 12px;font-size:17px;font-weight:600;border-bottom:2px solid var(--ink)}
.ptable .psub small{font-size:13px}
.ptable .pex .ic{width:13px;height:13px;margin-left:1px}
.ptable .pex .nw{white-space:nowrap}
.ptable td.n+td.n{color:var(--ink-2);font-weight:400;padding-left:14px;min-width:4.5em}
.plink{display:table;margin-top:12px;font-weight:600;color:var(--act);text-decoration:none}
.plink:hover{text-decoration:underline}
.works-all{margin-top:32px}  /* 22.10: «Посмотреть все сайты» под примерами */
.incl{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:40px;margin-top:56px;padding:32px;background:var(--field);border-radius:10px}
.incl h3{margin-bottom:10px}
.incl p{color:var(--ink-2);max-width:60ch}
/* 20.10 (Константин): «Входит в каждый сайт - нужно красиво списком» — галочки в две колонки; «Считается отдельно» — точки */
.incl-list{list-style:none;margin:0;padding:0;display:grid;gap:10px;font-size:16px;line-height:1.45;color:var(--ink-2)}
.incl-list.is-in{grid-template-columns:1fr 1fr;gap:12px 32px;color:var(--ink)}
.incl-list li{position:relative;padding-left:24px}
.incl-list li::before{content:"";position:absolute;left:3px;top:.6em;width:6px;height:6px;border-radius:50%;background:var(--ink-2)}
.incl-list.is-in li::before{left:4px;top:.22em;width:6px;height:11px;border-radius:0;background:none;border:solid var(--done);border-width:0 2px 2px 0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}
@media (max-width:980px){.incl{grid-template-columns:1fr}}
@media (max-width:560px){.incl-list.is-in{grid-template-columns:1fr;gap:10px}}
@media (max-width:1020px){.price-cols{grid-template-columns:1fr 1fr}.pgroup:last-child{grid-column:span 2}}
@media (max-width:720px){.price-cols{grid-template-columns:1fr}.pgroup:last-child{grid-column:auto}.incl{grid-template-columns:1fr;padding:22px}}
/* Цены карточками, как «Примеры» (21.10, Константин: «Цены предлагаю сделать блоками примерно так как устроены примеры»);
   раздел на тёмном фоне, макеты видов сайтов блоками, карточки переворачиваются — база работ («нужно что бы блок с ценам заметно отличался от всего сайта…», 21.10) */
.prices{background:var(--ink);color:#fff}
.prices .sec-head h2{color:#fff}
.prices .psub-head h3{color:#fff;border-bottom-color:rgba(255,255,255,.85)}
.prices .psub-head p{color:rgba(255,255,255,.72)}
.prices .plink{color:var(--act-hi)}
.prices .plink:hover{color:#fff}
.prices .incl{background:#fff;color:var(--ink)}
.pcard{position:relative;display:flex;flex-direction:column;gap:10px;background:#fff;color:var(--ink);border-radius:10px;padding:16px}
.pgroup .pcard h3{display:block;padding:0;border:0;font-size:22px;font-size:clamp(22px,2vw,28px);line-height:1.15}
.pcard h4{margin:6px 0 0;font-size:19px;font-weight:600;line-height:1.25;letter-spacing:-.02em;text-wrap:balance}
.pcard p{font-size:15px;color:var(--ink-2)}
.mk{display:block;width:100%;height:auto;aspect-ratio:16/10;border-radius:6px;border:1px solid var(--line)}
.mk .w{fill:#fff}.mk .f{fill:var(--field)}.mk .l{fill:var(--line)}.mk .d{fill:#C9CBC6}.mk .k{fill:var(--ink)}.mk .a{fill:var(--act)}
.pcard .flip-front{gap:8px}
.pcard .flip-back{gap:12px;padding:20px 18px 16px;background:var(--field);border-color:var(--field)}
.pcard .flip-back h4{margin:0 44px 0 0;color:var(--ink)}
.pcard .flip-back .work-done{margin:0;gap:8px;font-size:15px;color:var(--ink)}
.pcard .pcard-more{margin-top:auto;font-size:13px}
.pcard .flip-hint{margin-top:2px}
.pcard .pex{align-self:flex-start;padding:2px 0;font-size:14px;font-weight:600;color:var(--act);text-decoration:none}
.pcard .pex:hover{text-decoration:underline}
.pcard .pex .ic{width:13px;height:13px;margin-left:1px}
.pcard .pex .nw{white-space:nowrap}
.pcard-row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 12px;margin-top:auto;padding-top:12px;border-top:1px solid var(--line)}
.pcard-row small{font-size:13px;color:var(--ink-2)}
.pcard .pcard-price{font-size:22px;font-weight:600;line-height:1.2;white-space:nowrap;font-variant-numeric:tabular-nums;color:var(--ink)}
.pcard-price s{font-size:.7em;font-weight:400;color:var(--ink-2);margin-right:6px}
.pcard-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}
.pcard-lead{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:24px;gap:24px clamp(24px,4vw,56px);align-items:center;padding:clamp(16px,3vw,32px)}
.pcard-lead .flip-back{justify-content:center}
.pcard-lead .flip-back .work-done{grid-template-columns:1fr 1fr;gap:8px 20px;font-size:14px}
.pcard-lead .pcard-body>.work-done{margin:18px 0 20px}
.pcard-buy{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;padding:18px 20px;background:var(--field);border-radius:8px}
.pcard-buy .pcard-price{font-size:32px;font-size:clamp(30px,3vw,40px)}
.pcard-lead .flip-hint{margin-top:12px}
.psub-head{margin:56px 0 24px}
.psub-head p{margin-top:10px;font-size:15px}
.pcard-sm{padding:20px}
.pcard-sm h4{margin:0}
.pcard-wide{grid-column:span 2}
.pgroup .plink{margin-top:24px}
@media (max-width:900px){.pcard-lead{grid-template-columns:1fr}.pcard-grid{grid-template-columns:1fr 1fr}}
@media (max-width:600px){.pcard-grid{grid-template-columns:1fr}.pcard-wide{grid-column:auto}.pcard-lead .flip-in{position:relative}.pcard-lead .flip-shot .flip-back{position:absolute;inset:0;overflow:auto;justify-content:flex-start;padding:16px 14px}.pcard-lead .flip-back .work-done{grid-template-columns:1fr;font-size:13.5px;gap:5px}.pcard-buy .btn{flex:1 1 100%;justify-content:center}}

/* Этапы */
.process{padding:var(--gap-sec) 0;background:var(--ink);color:#fff}
.process .sec-head p,.process .todo-note{color:#B9BCC2}
/* 20.10, Константин: шаги «везде так связано можно анимацией красивой» — номер на линии, от него стрелка к следующему номеру;
   у последнего в ряду стрелка уходит к краю. Без JS — прямые стрелки из CSS ниже, сразу нарисованы.
   Константин: «стрелки какие то живые сделай не прямые» — с JS вместо них изогнутые .st-a, скрипт внизу страницы;
   «внизу заканчивается текст живая стрелка в верх» — стрелка от конца текста шага, под текстом место для неё (padding-bottom 48).
   «значки сделай» и «линии бы не такие яркие … как бы ты сам сделал» — ярко горят только значки этапов (от оранжевого «Начала»
   к зелёному «Готово»), номера и стрелки — спокойные серые: связки не спорят с содержимым */
.steps{list-style:none;margin:16px 0 32px;padding:0;display:grid;grid-template-columns:repeat(4,1fr);gap:0;counter-reset:s;border-top:1px solid #3A3D43}
.steps li{counter-increment:s;padding:40px 24px 48px 0;border-bottom:1px solid #3A3D43;position:relative}
.steps li:not(:nth-child(4n+1)){padding-left:24px}
.steps li::before{content:counter(s);position:absolute;top:-16px;left:0;box-sizing:border-box;width:32px;height:32px;border:1px solid #5A5E66;border-radius:50%;background:#24272C;color:#fff;font-size:13px;font-weight:600;line-height:30px;text-align:center;font-variant-numeric:tabular-nums}
.steps li:not(:nth-child(4n+1))::before{left:24px}
.steps li::after{content:"";position:absolute;top:-6px;left:40px;right:-18px;height:11px;pointer-events:none;
  background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 7 11'%3E%3Cpath d='M1 1l4.5 4.5L1 10' fill='none' stroke='%236B6F77' stroke-width='2'/%3E%3C/svg%3E") right center/7px 11px no-repeat,linear-gradient(#6B6F77,#6B6F77) left center/calc(100% - 1.5px) 2px no-repeat}
.steps li:not(:nth-child(4n+1))::after{left:64px}
.steps li:nth-child(4n)::after{right:0}
.steps li:last-child::after{display:none}
.steps h3{font-size:20px;margin-bottom:10px}
.steps p{font-size:15px;color:#C9CCD1}
.steps .get{margin-top:12px;color:#fff;font-weight:500}
.steps .when{margin-top:8px;font-size:13px;color:#8F939A}
.steps .arr{display:inline-block;margin-left:.3em;color:#8F939A}
/* значок этапа: плитка цвета этапа, рисунок графитом; цвета идут от оранжевого к зелёному */
.steps .st-ic{display:grid;place-items:center;width:48px;height:48px;margin-bottom:18px;border-radius:14px;background:var(--c);color:var(--ink);box-shadow:0 10px 26px -12px var(--c)}
.steps .st-ic svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.steps li:nth-child(1){--c:#F2541B}.steps li:nth-child(2){--c:#FF7A2E}.steps li:nth-child(3){--c:#FFA126}.steps li:nth-child(4){--c:#FFC93C}
.steps li:nth-child(5){--c:#E3E04A}.steps li:nth-child(6){--c:#B5DC4E}.steps li:nth-child(7){--c:#7FD36A}.steps li:nth-child(8){--c:#45C274}
/* «начало и готово в конце»: «Начало» на линии у номера 1, «Готово» — кружок с галочкой на нижней линии под шагом 8 */
.steps .st-go,.steps .st-done{position:absolute;z-index:1;background:var(--ink);font-size:12px;line-height:18px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}
.steps .st-go{top:-9px;left:32px;padding:0 8px;color:var(--act-hi)}
.steps .st-done{bottom:-16px;left:24px;display:flex;align-items:center;gap:8px;padding-right:8px;color:#fff}
.steps .st-done::before{content:"";flex:none;box-sizing:border-box;width:32px;height:32px;border:1px solid #2A9D5C;border-radius:50%;
  background:var(--done) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 14 14'%3E%3Cpath d='M2.5 7.5l3 3 6-7' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/14px 14px no-repeat}
/* живые стрелки: класс curvy и svg .st-a ставит скрипт — дуга .st-l от конца текста к следующему номеру и наконечник .st-h; значок → не нужен */
.steps.curvy li::after,.steps.curvy .arr{display:none}
.steps .st-a{position:absolute;left:0;top:0;width:1px;height:1px;overflow:visible;pointer-events:none}
.steps .st-a path{fill:none;stroke:#6B6F77;stroke-width:1.75;stroke-linecap:round;stroke-linejoin:round}
/* анимация: класс anim ставит скрипт, li.on — по очереди, когда шаг виден; стрелка дорисовывается к следующему номеру */
.steps.anim li:not(.on)::before{background:var(--ink);border-color:#3A3D43;color:#6B6F77}
.steps.anim li:not(.on) .st-ic{background:#24272C;color:#5A5E66;box-shadow:0 10px 26px -12px transparent}
.steps.anim .st-l{stroke-dasharray:1 2;stroke-dashoffset:1}
.steps.anim li:not(.on) .st-h{opacity:0;transform:scale(.2)}
.steps.anim li.on::before{transition:background-color .25s,border-color .25s,color .25s}
.steps.anim li.on .st-ic{transition:background-color .3s .05s,color .3s .05s,box-shadow .4s .05s;animation:st-pop .45s var(--ease) .05s}
.steps.anim li.on .st-l{stroke-dashoffset:0;transition:stroke-dashoffset .4s cubic-bezier(.45,0,.25,1) .06s}
.steps.anim li.on .st-h{transition:opacity .1s .38s,transform .35s var(--ease) .38s}
/* «Готово» загорается, когда к нему дорисовалась стрелка шага 8 */
.steps.anim li:last-child:not(.on) .st-done{color:#5A5E66}
.steps.anim li:last-child:not(.on) .st-done::before{background-color:var(--ink);border-color:#5A5E66;background-size:0 0}
.steps.anim li:last-child.on .st-done{transition:color .25s .5s}
.steps.anim li:last-child.on .st-done::before{transition:background-color .25s .5s,border-color .25s .5s,background-size .3s var(--ease) .55s;animation:st-pop .45s var(--ease) .5s}
@keyframes st-pop{40%{transform:scale(1.18)}}
@media (max-width:980px){.steps{grid-template-columns:1fr 1fr}.steps li:not(:nth-child(4n+1)){padding-left:0}.steps li:not(:nth-child(4n+1))::before{left:0}
  .steps li:nth-child(2n){padding-left:24px}.steps li:nth-child(2n)::before{left:24px}
  .steps li:nth-child(2n+1)::after{left:40px;right:-18px}.steps li:nth-child(2n)::after{left:64px;right:0}}
/* телефон: шаги столбиком, без JS — стрелка вниз от номера к номеру, с JS — от конца текста к следующему номеру;
   «Готово» — девятым кружком под шагом 8 */
@media (max-width:600px){.steps{grid-template-columns:1fr;margin-top:0;margin-bottom:64px}
  .steps li:nth-child(n){padding:24px 0 24px 52px;border-bottom:0}
  .steps li:nth-child(n)::before{top:20px;left:0}
  .steps li:nth-child(n)::after{top:60px;bottom:-14px;left:10px;right:auto;width:12px;height:auto;
    background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 7'%3E%3Cpath d='M1 1l4.5 4.5L10 1' fill='none' stroke='%236B6F77' stroke-width='2'/%3E%3C/svg%3E") center bottom/11px 7px no-repeat,linear-gradient(#6B6F77,#6B6F77) center top/2px calc(100% - 1.5px) no-repeat}
  .steps li:last-child::after{display:none}
  .steps .arr{transform:rotate(90deg)}
  .steps .st-go{left:0;padding-left:0}
  .steps .st-ic{position:absolute;top:18px;right:0;width:44px;height:44px;margin:0;border-radius:13px}
  .steps h3{padding-right:56px}
  .steps .st-done{top:calc(100% + 20px);bottom:auto;left:0;gap:20px}}

/* Условия */
.terms{padding:var(--gap-sec) 0 0}
.terms-grid{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border-top:1px solid var(--ink)}
.terms-grid>div{padding:22px 24px 24px 0;border-bottom:1px solid var(--line)}
.terms-grid>div:not(:nth-child(4n+1)){padding-left:24px;border-left:1px solid var(--line)}
.terms-grid dt{font-weight:600;margin-bottom:8px}
.terms-grid dd{margin:0;color:var(--ink-2);font-size:15px}
.terms-foot{margin-top:24px;color:var(--ink-2);max-width:70ch}
.terms-foot a{color:var(--ink)}
@media (max-width:900px){.terms-grid{grid-template-columns:1fr 1fr}.terms-grid>div:not(:nth-child(4n+1)){padding-left:0;border-left:0}.terms-grid>div:nth-child(2n){padding-left:24px;border-left:1px solid var(--line)}}
@media (max-width:520px){.terms-grid{grid-template-columns:1fr}.terms-grid>div:nth-child(2n){padding-left:0;border-left:0}}

/* Обещания */
.promise{padding:var(--gap-sec) 0}
.promise-in{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.3fr);gap:32px;gap:clamp(32px,5vw,80px)}
.promise-lead{color:var(--ink-2);font-size:18px;max-width:34ch}
.promise-cols{display:grid;grid-template-columns:1fr 1fr;gap:32px;border-top:1px solid var(--ink);padding-top:28px}
@media (max-width:900px){.promise-in,.promise-cols{grid-template-columns:1fr}}

/* Кто делает */
.me{padding:0 0 var(--gap-sec)}
.me-in{display:grid;grid-template-columns:minmax(0,.55fr) minmax(0,1fr);gap:24px;gap:clamp(24px,5vw,72px);align-items:center;background:var(--field);border-radius:10px;padding:20px;padding:clamp(20px,4vw,48px)}
.me-photo{aspect-ratio:4/5;border-radius:8px;background:#E9E9E5;border:1.5px dashed #BDBEB8;display:grid;place-items:center}
.me-photo.is-art{background:#fff;border:1px solid var(--line);overflow:hidden;display:block}
.me-photo.is-art svg{display:block;width:100%;height:100%}
.me-text p{color:var(--ink-2);max-width:56ch}
.me-text p+p{margin-top:14px}
@media (max-width:760px){.me-in{grid-template-columns:1fr}.me-photo{max-width:260px}}

/* Вопросы */
.faq{padding:0 0 var(--gap-sec)}
.faq-in{display:grid;grid-template-columns:minmax(0,.7fr) minmax(0,1.3fr);gap:24px;gap:clamp(24px,5vw,80px)}
.faq-list{border-top:1px solid var(--ink)}
.faq details{border-bottom:1px solid var(--line)}
.faq summary{list-style:none;cursor:pointer;padding:20px 40px 20px 0;font-weight:500;font-size:18px;position:relative}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"";position:absolute;right:6px;top:50%;width:12px;height:12px;border-right:1.5px solid var(--ink);border-bottom:1.5px solid var(--ink);transform:translateY(-70%) rotate(45deg);transition:transform .3s var(--ease)}
.faq details[open] summary::after{transform:translateY(-30%) rotate(225deg)}
.faq details p{padding:0 0 22px;color:var(--ink-2);max-width:62ch}
@media (max-width:860px){.faq-in{grid-template-columns:1fr}}

/* Заявка */
.contact{padding:var(--gap-sec) 0;background:var(--field);border-top:1px solid var(--line)}
.contact-in{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:32px;gap:clamp(32px,5vw,80px);align-items:start}
.contact-text>p{color:var(--ink-2);font-size:18px;max-width:40ch}
.contact-text .alt{font-size:15px;margin-top:16px}
.contact-text .alt a{color:var(--ink);font-weight:500}
.lead-form{background:#fff;border:1px solid var(--line);border-radius:10px;padding:20px;padding:clamp(20px,3vw,32px);display:grid;gap:18px}
.lead-form>label:first-child{font-weight:600}
.lead-form input[type=text]{width:100%;height:54px;border:1.5px solid #C9CAC5;border-radius:var(--r);padding:0 16px;font:400 17px "Geologica",sans-serif;color:var(--ink);caret-color:var(--act);margin-top:-8px}
.lead-form input[type=text]::placeholder{color:#8A8E94}
.lead-form input[type=text]:focus{outline:none;border-color:var(--ink)}
.lead-form fieldset{border:0;padding:0;margin:0}
.lead-form legend{font-size:14px;color:var(--ink-2);margin-bottom:8px}
.seg{display:grid;grid-template-columns:repeat(3,1fr);border:1.5px solid #C9CAC5;border-radius:var(--r);overflow:hidden}
.seg label{position:relative}
.seg input{position:absolute;opacity:0}
.seg span{display:grid;place-items:center;height:46px;font-size:15px;cursor:pointer;transition:background .2s,color .2s}
.seg label+label span{border-left:1px solid #C9CAC5}
.seg input:checked+span{background:var(--ink);color:#fff}
.seg input:focus+span{outline:2px solid var(--act);outline-offset:-4px}
.seg input:focus:not(:focus-visible)+span{outline:0}  /* старые браузеры не знают :focus-visible и пропускают это правило — рамка остаётся */
.agree{display:flex;gap:10px;align-items:flex-start;font-size:14px;color:var(--ink-2)}
.agree input{width:18px;height:18px;margin:2px 0 0;accent-color:var(--ink);flex:none}
.lead-form .btn{justify-self:start}
.form-msg{font-size:14px;min-height:1.2em}
.form-msg.err{color:#B3261E}
.lead-form .todo-note{margin:0}
.lead-form textarea{width:100%;border:1.5px solid #C9CAC5;border-radius:var(--r);padding:12px 16px;font:400 17px/1.5 "Geologica",sans-serif;color:var(--ink);caret-color:var(--act);margin-top:-8px;resize:vertical}
.lead-form textarea:focus{outline:none;border-color:var(--ink)}
.pd-form>label{font-weight:600}
.pd-form .opts{display:grid;gap:8px}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
@media (max-width:860px){.contact-in{grid-template-columns:1fr}.lead-form .btn{justify-self:stretch;justify-content:center}}

/* Подвал */
.foot{padding:40px 0 48px;border-top:1px solid var(--line);font-size:14px;color:var(--ink-2)}
.foot-in{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap}
.foot-name{color:var(--ink);font-weight:600;margin-bottom:4px}
.foot-links{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px 24px}

/* Иконки-стрелки в ссылках */
.ic{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;vertical-align:-2px;flex:none}
.btn .ic{width:15px;height:15px}
/* Пустые контакты до уточнения — видно сразу */
a[data-todo]:not(.icon-btn)::after{content:"уточнить";background:var(--todo);color:#3d2e00;font:600 11px/1.6 "Geologica",sans-serif;padding:0 6px;border-radius:3px;margin-left:8px;white-space:nowrap}
.icon-btn{position:relative}
.icon-btn[data-todo]{border:1.5px dashed #D9A900;background:#FFF8DB}
/* Подпись под скриншотом CRM и факты работы */
.shot-cap{grid-column:1;grid-row:2;margin-top:26px;font-size:13px;color:var(--ink-2);max-width:62ch}
.work-lead{grid-template-rows:auto 1fr}
.work-lead .work-body{grid-column:2;grid-row:1/span 2}
@media (max-width:900px){.shot-cap{grid-row:auto;margin-top:16px}.work-lead .work-body{grid-column:auto;grid-row:auto}}
.work-mini{display:flex;flex-wrap:wrap;gap:6px 16px;margin:4px 0 0;font-size:13px}
.work-mini div{display:flex;gap:6px;white-space:nowrap}
.work-mini dt{color:var(--ink-2)}
.work-mini dd{margin:0;font-weight:500}
.work-meta{flex-wrap:wrap}
/* Частник и агентство */
.diff{grid-column:1/-1;margin-top:32px;margin-top:clamp(32px,5vw,56px)}
.diff h3{font-size:22px;margin-bottom:16px}
.diff-grid{display:grid;grid-template-columns:repeat(4,1fr);margin:0;border-top:1px solid var(--ink)}
.diff-grid>div{padding:20px 24px 0 0}
.diff-grid>div+div{padding-left:24px;border-left:1px solid var(--line)}
.diff-grid dt{font-weight:600;margin-bottom:8px}
.diff-grid dd{margin:0;color:var(--ink-2);font-size:15px}
@media (max-width:900px){.diff-grid{grid-template-columns:1fr 1fr}.diff-grid>div:nth-child(3){padding-left:0;border-left:0}}
@media (max-width:560px){.diff-grid{grid-template-columns:1fr}.diff-grid>div+div{padding-left:0;border-left:0;border-top:1px solid var(--line);margin-top:16px}}
@media (max-width:520px){.hero-cta .btn{width:100%;justify-content:center}.per{flex-basis:100%}}
.work-lead .work-phone{width:30%;aspect-ratio:520/747;border-width:5px;border-radius:16px}
/* Факты работы — две ровные пары, ломаются одинаково во всех карточках */
.work-mini{display:grid;grid-template-columns:auto 1fr auto 1fr;gap:4px 10px}
.work-mini div{display:contents}
.work-mini dd{white-space:nowrap}
@media (max-width:600px){.work-lead .work-phone{position:static;width:62%;margin:16px auto 0;display:block}}

/* Рукописная подпись в блоке «кто делает» */
.sign{margin-top:28px;display:inline-flex;flex-direction:column;gap:2px}
.sign-name{font:400 42px/1.05 "Marck Script",cursive;font:400 clamp(42px,4vw,58px)/1.05 "Marck Script",cursive;color:var(--ink);transform:rotate(-2.5deg);letter-spacing:.01em}
.sign svg{width:min(240px,70%);height:10px;margin-left:6px}
.sign svg path{fill:none;stroke:var(--act);stroke-width:2.2;stroke-linecap:round}

/* Подпись в подвале */
.foot-sign{font:400 34px/1 "Marck Script",cursive;color:var(--ink);transform:rotate(-2deg);margin:0 0 8px;transform-origin:left}
/* Страницы услуг */
.crumbs{font-size:13px;color:var(--ink-2);margin-bottom:18px}
.crumbs a{text-decoration:none;color:var(--ink-2)}
.crumbs a:hover{color:var(--act)}
.page-hero{padding:32px 0 40px;padding:clamp(32px,5vw,64px) 0 clamp(40px,6vw,80px)}
.page-hero h1{font-size:32px;font-size:clamp(32px,4vw,52px);line-height:1.05;letter-spacing:-.025em;max-width:22ch}
.page-hero .lead{max-width:52ch}
.svc{padding-bottom:var(--gap-sec)}
.svc .ptable{max-width:820px}
.svc .ptable thead{position:static;width:auto;height:auto;clip:auto;overflow:visible}
.svc .ptable thead th{font-size:12px;font-weight:600;color:var(--ink-2);text-transform:none;border-bottom:2px solid var(--ink);padding:0 0 8px}
.cta{padding:48px 0;padding:clamp(48px,7vw,88px) 0;background:var(--field);border-top:1px solid var(--line)}
.cta-in{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:24px}
.cta h2{margin:0}
.cta .hero-cta{margin:0}
/* Значок-монограмма у имени */
.brand{flex-direction:row;align-items:center;gap:10px}
.brand-tx{display:flex;flex-direction:column;line-height:1.15}
.brand-ic{border-radius:6px;flex:none;width:34px;height:34px}
.foot-brand{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.foot-brand img{border-radius:6px;flex:none}
.foot-brand .foot-sign{margin:0}
@media (max-width:560px){.brand-name{font-size:22px}.brand-ic{width:30px;height:30px}}
@media (max-width:420px){.brand-ic{display:none}}  /* 10.10: имя и кнопка «Обсудить» в одну строку на телефоне */

/* Согласия в форме заявки на главной: «Выбрать все», две обязательные галочки и одна по желанию; «Отправить» неактивна, пока не отмечены две обязательные */
.consents{display:grid;gap:10px}
.agree-all{padding-bottom:10px;border-bottom:1px solid var(--line);color:var(--ink);font-weight:600}
.agree span{min-width:0}
.agree a{color:var(--ink)}
.agree a:hover{color:var(--act)}
.agree small{display:block;margin-top:2px;font-size:12.5px}
.send{display:grid;gap:10px}
.send-hint{font-size:13.5px;color:var(--ink)}
.send .btn[aria-disabled=false]+.send-hint{display:none}
.btn[aria-disabled=true]{opacity:.45;cursor:not-allowed}
.btn-main[aria-disabled=true]:hover{background:var(--act)}
.btn[aria-disabled=true]:active{transform:none}

/* Подвал: «Настройки cookie» — кнопка вида ссылки; скрыта, пока cookie.js не знает номер счётчика */
.foot-set{padding:0;border:0;background:none;color:inherit;font:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.2em;cursor:pointer}
.foot-set:hover{color:var(--act)}
.foot-links li:has(>[data-cookie][hidden]){display:none}

/* Страницы документов (политика, согласия) — studio/yurdoki/docs_to_html.py */
.legal{padding:32px 0 var(--gap-sec);padding:clamp(32px,5vw,64px) 0 var(--gap-sec)}
.legal h1{font-size:28px;font-size:clamp(28px,3.4vw,42px);line-height:1.1;letter-spacing:-.025em;max-width:28ch;margin-bottom:28px}
.prose h2{font-size:22px;font-size:clamp(22px,2.4vw,28px);line-height:1.2;margin:40px 0 14px;scroll-margin-top:84px}
.prose h3{font-size:18px;margin:26px 0 10px}
.prose p,.prose ul,.prose ol{margin:0 0 14px;max-width:74ch}
.prose ul,.prose ol{padding-left:24px}
.prose li{margin:6px 0}
.prose hr{border:0;border-top:1px solid var(--line);margin:32px 0}
.prose mark.todo{white-space:normal}
.prose p,.prose li,.prose td{overflow-wrap:anywhere}  /* длинные адреса не раздвигают страницу на телефоне */
.tbl{overflow-x:auto;margin:0 0 20px}
.prose table{width:100%;border-collapse:collapse;font-size:15px}
.prose th,.prose td{padding:10px 14px 10px 0;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.prose thead th{font-size:12.5px;font-weight:600;color:var(--ink-2);border-bottom:2px solid var(--ink)}
.prose tbody th{font-weight:600}
@media (max-width:760px){  /* строка таблицы — карточка, над каждой ячейкой подпись столбца */
  .prose thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .prose table,.prose tbody,.prose tr,.prose th,.prose td{display:block}
  .prose tr{padding:14px 0;border-bottom:1px solid var(--line)}
  .prose th,.prose td{border:0;padding:0 0 6px}
  .prose td[data-label]::before{content:attr(data-label);display:block;font-size:12.5px;font-weight:600;color:var(--ink-2)}
}

/* 10.10 — всплывающая заявка (forma.js): выбор из трёх вариантов, коротко, по шагам */
.fm{width:580px;max-width:calc(100vw - 24px);width:min(580px,calc(100vw - 24px));max-height:92vh;max-height:min(92vh,900px);max-height:min(92dvh,900px);padding:0;border:1px solid var(--line);border-radius:10px;background:#fff;color:var(--ink);box-shadow:0 10px 22px -12px rgba(22,24,27,.35);overflow:auto}
.fm::backdrop{background:rgba(22,24,27,.55)}
.fm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1;display:flex;align-items:center;gap:16px;padding:20px 24px 14px;background:#fff;border-bottom:1px solid var(--line)}
.fm-top h2{font-size:22px;line-height:1.2;margin:0}
.fm-x{margin-left:auto;width:40px;height:40px;flex:none;border:1px solid var(--line);border-radius:var(--r);background:#fff;font-size:24px;line-height:1;color:var(--ink-2);cursor:pointer}
.fm-x:hover{border-color:var(--ink);color:var(--ink)}
.fm-body{display:grid;gap:12px;padding:18px 24px 24px}
.fm-body>label,.fm-two label{font-weight:600;font-size:15px}
.fm-body label small{font-weight:400;color:var(--ink-2)}
.fm-body input[type=text],.fm-body input[type=tel],.fm-body input[type=email],.fm-body textarea{width:100%;border:1.5px solid #C9CAC5;border-radius:var(--r);padding:12px 14px;font:400 16px/1.4 "Geologica",sans-serif;color:var(--ink);caret-color:var(--act);margin-top:-6px;background:#fff}
.fm-body textarea{resize:vertical}
.fm-body input:focus,.fm-body textarea:focus{outline:none;border-color:var(--ink)}
.fm-body fieldset{border:0;padding:0;margin:4px 0 0}
.fm-body legend{font-size:14px;color:var(--ink-2);margin-bottom:8px}
.fm-two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fm-two>div{display:grid;gap:12px;align-content:start}
.fm-note{font-size:13px;color:var(--ink-2);margin-top:-4px}
.seg4{grid-template-columns:repeat(4,1fr)}
.seg2{grid-template-columns:1fr 1fr}
.seg-sm span{height:36px;font-size:14px}  /* 20.10: MAX и Telegram — «поменьше под полем телефон» */
.fm-body .fm-via{margin:0}
.fm-body .fm-via legend{font-size:13px;margin-bottom:6px}
.fm-keep button{border:0;background:none;padding:0;font:inherit;color:var(--ink);text-decoration:underline;cursor:pointer}
.fm-keep button:hover{color:var(--act)}
.fm-checks{display:grid;gap:10px}
.fm-demo{font-size:14px;color:var(--ink-2)}
.fm-demo a,.fm-done a,.fm-alt a{color:var(--act);font-weight:600;text-decoration:none}
.fm-demo a:hover,.fm-done a:hover,.fm-alt a:hover{text-decoration:underline}
.fm-vars{display:grid;border-top:2px solid var(--ink)}
.fm-var{display:grid;grid-template-columns:1fr auto;gap:4px 16px;align-items:baseline;width:100%;padding:16px 0;border:0;border-bottom:1px solid var(--line);background:none;font:inherit;text-align:left;color:var(--ink);text-decoration:none;cursor:pointer}
.fm-var b{font-size:19px;font-weight:600}
.fm-var span{grid-column:1;font-size:15px;color:var(--ink-2)}
.fm-var em{grid-column:2;grid-row:1;font-style:normal;font-size:13px;color:var(--ink-2);white-space:nowrap}
.fm-var:hover b{color:var(--act)}
.fm-var:focus-visible b{color:var(--act)}  /* отдельно: старый браузер отбросил бы весь список */
.fm-alt{font-size:14px;color:var(--ink-2)}
.fm-step{position:relative;font-size:13px;color:var(--ink-2);padding-bottom:10px;border-bottom:1px solid var(--line);margin-bottom:4px}
.fm-step span{position:absolute;left:0;bottom:-1px;height:2px;background:var(--act)}
.fm-acts{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:6px}
.fm-back{border:0;background:none;font:inherit;font-size:15px;color:var(--ink-2);cursor:pointer;padding:8px 0}
.fm-back:hover{color:var(--ink)}
.fm-done{color:var(--ink-2)}
/* 22.10 — окно «Спасибо» после заявки (Константин: «сделай везде красивую всплывашку спасибо»): галочка, заголовок и текст по центру */
.fm-ok .fm-top{flex-direction:column;gap:16px;padding:40px 56px 4px;border-bottom:0;text-align:center}
.fm-ok .fm-top::before{content:"";width:64px;height:64px;border-radius:50%;background:var(--done) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23fff' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/32px no-repeat;animation:fm-ok .5s var(--ease) both}
.fm-ok .fm-top h2{font-size:30px;font-weight:650}
.fm-ok .fm-x{position:absolute;top:12px;right:12px;margin:0}
.fm-ok .fm-body{justify-items:center;gap:8px;padding:6px 32px 32px;text-align:center}
.fm-ok .fm-done{max-width:30em;font-size:16px}
.fm-ok .fm-ok-id{color:var(--ink);font-size:18px}
.fm-ok .fm-ok-sm{font-size:14px}
.fm-ok .fm-acts{justify-content:center;margin-top:16px}
.fm-ok .btn-line:not(:hover){background:#fff}
.fm-nw{white-space:nowrap}
@keyframes fm-ok{from{transform:scale(.6);opacity:0}}
@media (prefers-reduced-motion:reduce){.fm-ok .fm-top::before{animation:none}}
.fm .consents{margin-top:4px}
html.forma-open{overflow:hidden}
@media (max-width:600px){
  .fm{width:100vw;max-width:100vw;max-height:94vh;max-height:94dvh;margin:auto 0 0;border-radius:10px 10px 0 0}
  .fm-two{grid-template-columns:1fr}
  .seg4{grid-template-columns:1fr 1fr}.seg4 label:nth-child(3) span{border-left:0}.seg4 label:nth-child(n+3) span{border-top:1px solid #C9CAC5}
  .fm-acts .btn{flex:1;justify-content:center}
  .fm-ok .fm-top{padding:36px 48px 4px}.fm-ok .fm-body{padding:6px 20px 24px}.fm-ok .fm-acts{justify-self:stretch}
}

/* 10.10 — витрина «Демо по нишам» (/demo/) и просмотр демо с панелью сверху (/demo/primer/) */
.demo-page{padding:40px 0 var(--gap-sec);padding:clamp(40px,6vw,72px) 0 var(--gap-sec);background:var(--field)}
.demo-page h1{font-size:36px;font-size:clamp(36px,4.5vw,60px);line-height:1.02;letter-spacing:-.03em;font-weight:650}
.demo-find{margin:8px 0 0;border-top:1px solid var(--ink);padding-top:20px;display:grid;gap:12px}
.demo-find label{font-weight:600}
.demo-find input{width:100%;max-width:560px;height:54px;border:1.5px solid #C9CAC5;border-radius:var(--r);padding:0 16px;font:400 17px "Geologica",sans-serif;color:var(--ink);caret-color:var(--act);background:#fff}
.demo-find input:focus{outline:none;border-color:var(--ink)}
.demo-tags{display:flex;flex-wrap:wrap;gap:8px}
.demo-tags button{border:1px solid #C9CAC5;border-radius:20px;background:#fff;padding:7px 14px;font:400 14px "Geologica",sans-serif;color:var(--ink);cursor:pointer}
.demo-tags button:hover,.demo-tags button[aria-pressed=true]{border-color:var(--ink);background:var(--ink);color:#fff}
.demo-count{font-size:14px;color:var(--ink-2)}
.demo-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:36px 24px;margin-top:32px}
.demo{display:flex;flex-direction:column;gap:6px}
.demo[hidden]{display:none}
.demo .work-shot img{border-radius:6px;border:1px solid var(--line);aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%;transition:transform .5s var(--ease),box-shadow .5s var(--ease)}
.demo .work-shot:hover img{transform:translateY(-4px);box-shadow:0 18px 32px -20px rgba(22,24,27,.45)}
.demo h3{margin-top:8px;font-size:18px}
.demo .dname{font-size:14px;color:var(--ink-2)}
.demo .live{font-size:14.5px;color:var(--ink-2);line-height:1.5}
.demo .work-row{justify-content:space-between}
.demo-more{display:flex;justify-content:center;margin-top:40px}
.demo-more[hidden]{display:none}
.demo-none{margin-top:28px;padding:24px;border:1px solid var(--line);border-radius:10px;background:#fff;display:grid;gap:14px;justify-items:start}
.demo-none[hidden]{display:none}
.works-more{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px;margin-top:40px;padding-top:24px;border-top:1px solid var(--line)}
.works-more p{color:var(--ink-2);max-width:60ch}
@media (max-width:980px){.demo-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:520px){.demo-grid{grid-template-columns:1fr}}
.viewer{margin:0;height:100vh;height:100dvh;display:flex;flex-direction:column;background:var(--ink)}
.viewer-bar{flex:none;display:flex;align-items:center;gap:16px;min-height:60px;padding:8px 12px;padding:8px clamp(12px,3vw,24px);background:#fff;border-bottom:1px solid var(--line)}
.viewer-bar a.back{color:var(--ink-2);text-decoration:none;font-size:15px;white-space:nowrap}
.viewer-bar a.back:hover{color:var(--act)}
.viewer-bar .t{min-width:0;font-size:15px;line-height:1.3}
.viewer-bar .t b{display:block;font-weight:600}
.viewer-bar .t span{color:var(--ink-2);font-size:13px}
.viewer-bar .btn{margin-left:auto}
.viewer iframe{flex:1;width:100%;border:0;background:#fff}
@media (max-width:600px){.viewer-bar a.back span,.viewer-bar .t span{display:none}.viewer-bar .btn{padding:0 14px}}
.top-btn{min-height:46px}
.fm-vars-box{gap:20px}
.fm-vars-box .btn{justify-self:start}
@media (max-width:520px){.top-act .top-btn{min-height:42px}}
/* 11.10 — окно описания демо на витрине (нажатие на снимок) */
.demo-dlg .fm-body p{color:var(--ink-2);font-size:15.5px;line-height:1.55}
.demo-dlg .fm-body p b{color:var(--ink);font-weight:600}
.demo-dlg .dd-name{font-size:14px!important;margin-top:-4px}
.demo-speed{padding-top:10px;border-top:1px solid var(--line);font-size:14px!important}
.demo-speed span{color:var(--ink-2);white-space:nowrap}
.demo-speed a{color:var(--act);font-weight:600;text-decoration:none;white-space:nowrap}
.demo .work-shot{cursor:zoom-in}

/* 20.10: карточки демо переворачиваются (оборот — описание и оценка Google), окно демо и документов — okno.js */
.flip{position:relative}
.flip-in{display:grid;transition:transform .6s var(--ease);transform-style:preserve-3d;cursor:pointer}
.flip-face{grid-area:1/1;-webkit-backface-visibility:hidden;backface-visibility:hidden;display:flex;flex-direction:column;gap:10px;min-width:0}
.flip-back{transform:rotateY(180deg);background:#fff;border:1px solid var(--line);border-radius:6px;padding:20px 20px 16px;font-size:15px;color:var(--ink-2)}
.flip-back h3{color:var(--ink);margin:0 44px 0 0}
.flip.on .flip-in{transform:rotateY(180deg)}
.flip-tgl{position:absolute;top:10px;right:10px;z-index:3;width:38px;height:38px;border-radius:50%;border:1px solid var(--line);background:#fff;display:grid;place-items:center;cursor:pointer;color:var(--ink)}
.flip-tgl svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;transition:transform .6s var(--ease)}
.flip.on .flip-tgl svg{transform:rotate(-180deg)}
.flip-tgl:hover{border-color:var(--ink)}
.flip-hint{font-size:13px!important;color:var(--ink-2)}
.gscore{margin-top:auto;border-top:1px solid var(--line);padding-top:12px}
.gscore p{font-size:13px!important;margin:0 0 6px}
.gscore dl{display:flex;gap:24px;margin:0}
.gscore dt{font-size:12px}
.gscore dd{margin:0;font:650 28px/1.1 "Geologica",sans-serif;color:var(--done)}
.work-row .btn{white-space:nowrap}
.flip-shot .flip-front{position:relative;display:block}
.flip-shot .flip-front>img:first-child{border-radius:6px;border:1px solid var(--line);aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%}
.flip-shot .flip-back{justify-content:center}
/* 21.10 Константин: «на этой карточке как то сделать подсказку что нужно кликнуть что бы узнать» — лендинг в «Ценах» и кафе в «Примерах» (класс .flip-cue).
   Кнопка переворота — оранжевой плашкой «↻ Нажмите — …» с пульсом; на экране карточка покачивается, будто начинает поворачиваться (okno.js, до 3 раз);
   на ПК при наведении наклоняется. После первого переворота плашка сворачивается в обычный кружок */
.flip-cue{perspective:1600px}
.flip-cue .flip-tgl{display:flex;align-items:center;justify-content:center;width:auto;min-width:38px;padding:0 9px;gap:0;border-radius:999px;font:600 13px/1 "Geologica",sans-serif;white-space:nowrap;transition:padding .5s var(--ease),gap .5s var(--ease),background-color .3s,border-color .3s,color .3s}
.flip-cue-t{max-width:0;overflow:hidden;transition:max-width .5s var(--ease)}
.flip-cue:not(.on):not(.cue-done) .flip-tgl{padding:0 15px 0 11px;gap:7px;background:var(--act);border-color:var(--act);color:#fff;animation:cue-ring 2.2s ease-out infinite}
.flip-cue:not(.on):not(.cue-done) .flip-tgl:hover{background:#A93107;border-color:#A93107}
.flip-cue:not(.on):not(.cue-done) .flip-cue-t{max-width:16em}
.flip-cue.peek:not(.on) .flip-in{animation:cue-peek 1.5s var(--ease)}
.flip-cue.peek:not(.on) .flip-tgl svg{animation:cue-spin 1.5s var(--ease)}
@media (hover:hover){.flip-cue:not(.on):hover .flip-in{transform:rotateY(-10deg)}}
@keyframes cue-ring{0%{box-shadow:0 8px 18px -8px rgba(201,59,9,.8),0 0 0 0 rgba(242,84,27,.55)}70%,100%{box-shadow:0 8px 18px -8px rgba(201,59,9,.8),0 0 0 12px rgba(242,84,27,0)}}
@keyframes cue-peek{0%{transform:none}30%{transform:rotateY(-24deg)}58%{transform:rotateY(6deg)}78%{transform:rotateY(-2deg)}100%{transform:none}}
@keyframes cue-spin{to{transform:rotate(-360deg)}}
@media (prefers-reduced-motion:reduce){.flip-cue .flip-tgl,.flip-cue .flip-tgl svg,.flip-cue .flip-in{animation:none!important}}
dialog.ok{width:min(1240px,94vw);height:92vh;max-width:none;max-height:none;padding:0;border:0;border-radius:10px;overflow:hidden;background:#fff}
dialog.ok[open]{display:flex;flex-direction:column}
dialog.ok::backdrop{background:rgba(22,24,27,.6)}
.ok-top{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 10px 8px 20px;border-bottom:1px solid var(--line);background:#fff;flex:none}
.ok-h{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.ok-acts{display:flex;gap:8px;flex:none}
.ok-want[hidden]{display:none}
.ok-f{flex:1;width:100%;border:0;display:block;background:#fff}
html.ok-open{overflow:hidden}
@media (max-width:640px){dialog.ok{width:100vw;height:100vh;height:100dvh;border-radius:0;margin:0}.ok-top{padding:8px 8px 8px 14px}.ok-h{font-size:14px}.ok-acts .btn{padding:0 12px}}
@media (prefers-reduced-motion:reduce){.flip-in,.flip-tgl svg{transition:none}}

/* 20.10: страница-документ во всплывающем окне (iframe okno.js) — только текст: класс v-okno ставит скрипт в head */
.v-okno .top,.v-okno .foot,.v-okno .crumbs{display:none}
.v-okno .kv-ck{display:none!important}
.v-okno .legal{padding-top:24px}
