
/* ============ SKERRY · спільний каркас. Скін перевизначає лише токени ============ */
*{box-sizing:border-box;margin:0}
html{scroll-behavior:smooth}

/* ---- смуга прокрутки ----
   Стандартна сіра смуга Windows лягала поверх бірюзи чужим шматком.
   Колір беремо з --ink через color-mix, тому одні й ті самі три рядки
   працюють і на світлих скінах, і на темних: повзунок завжди трохи
   темніший (світліший) за фон, а не сірий сам по собі.
   Firefox розуміє тільки scrollbar-width/scrollbar-color — там смуга
   виходить тонкою без стрілок; Chrome і Edge беруть ::-webkit-*,
   де ще й радіус із відступом від краю. Доріжка прозора в обох:
   під нею видно фон сторінки, а не білу канавку. */
html{scrollbar-width:thin;
  scrollbar-color:color-mix(in srgb,var(--ink) 26%,transparent) transparent}
::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-track{background:transparent}
/* перший background — запасний, на випадок якщо браузер не рахує color-mix
   усередині псевдоелемента смуги: тоді лишиться нейтральний напівпрозорий
   повзунок, а не порожнеча, в якій не видно, де ти на сторінці */
::-webkit-scrollbar-thumb{border-radius:999px;
  background-color:rgba(128,128,128,.42);
  background-color:color-mix(in srgb,var(--ink) 26%,transparent);
  border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background-color:rgba(128,128,128,.62);
  background-color:color-mix(in srgb,var(--ink) 42%,transparent)}
::-webkit-scrollbar-corner{background:transparent}
body{background:var(--bg);color:var(--ink);font-family:var(--body);font-size:16px;line-height:1.62;
  -webkit-font-smoothing:antialiased;overflow-x:hidden;position:relative;isolation:isolate}
img{max-width:100%;display:block}
a{color:inherit}
button{font:inherit;color:inherit}
h1,h2,h3,h4{font-family:var(--disp);font-weight:var(--dw,700);line-height:1.09;letter-spacing:var(--dls,-.025em);text-wrap:balance}
p{color:var(--ink2)}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
/* 27.08: вміст був на 1120px і на широкому моніторі читався вузькою
   колонкою посеред порожнечі — «шаблонно посередині», як сказала
   власниця, тоді як у конкурентів сторінка йде ближче до країв.
   Тепер вміст, шапка й підвал живуть на одній ширині: картки стають
   у край з логотипом, а не всередині нього.
   Довгі рядки тексту від цього не постраждали: проза має власні
   стелі (.lead 58ch, .sub, .note, .ctanote), тож ширшає саме те, що
   від ширини виграє, — сітки карток, таблиці й галереї. */
.w{width:min(var(--maxw,1480px),100%);margin:0 auto;
  padding-left:clamp(18px,3.6vw,64px);padding-right:clamp(18px,3.6vw,64px)}
.hd .w{width:min(var(--maxwide,1480px),100%)}
/* Підвал ширший за решту шаблону (28.08, прохання власниці): він тримає
   три колонки посилань і велике слово, і на 1480 вони тіснились. */
footer .w{width:min(var(--maxfoot,1780px),100%)}
/* Поля з 1280px, де зʼявляються бічні рейки, задані нижче — одним
   правилом на шапку, вміст і підвал, поруч із самими рейками. */
.wn{width:min(1040px,100%);margin:0 auto;padding:0 clamp(18px,4vw,44px)}
.eyebrow{font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mut);display:block}
.lead{font-size:clamp(15.5px,1.7vw,18.5px);color:var(--ink2);max-width:58ch}
section{padding:clamp(44px,7vw,104px) 0}
section.tight{padding-top:0}
h1{font-size:clamp(32px,5.4vw,62px)}
h2{font-size:clamp(23px,3.4vw,38px)}
h3{font-size:17px}
.sub{margin-top:12px;max-width:58ch;font-size:15px}
.hr{height:1px;background:var(--line);border:0}

/* ---- шапка ---- */
.hd{position:sticky;top:0;z-index:90;background:var(--hdbg,var(--bg));border-bottom:1px solid var(--line);
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  transition:background .35s,border-color .35s,backdrop-filter .35s}
/* поки сторінка не зрушила — шапка прозора й лежить на першому екрані */
.hd.top{background:transparent;border-bottom-color:transparent;
  -webkit-backdrop-filter:none;backdrop-filter:none}
/* поки шапка прозора — і кружечки теж напівпрозорі, лише зі скла */
.hd.top .ctrls .s3{background:var(--panel);box-shadow:inset 0 0 0 1px var(--line);opacity:.72;
  -webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}
.hd.top .ctrls .th.in{box-shadow:inset 0 0 0 1px var(--acc)}
.hd.top .ctrls .s3:hover{opacity:1}
.ctrls .s3{transition:background .35s,box-shadow .35s,opacity .35s}
/* Шапка тонка: вона лежить поверх першого екрана, тож кожен зайвий
   піксель тут зʼїдає герой. Висота ще трохи росте з шириною екрана,
   але стеля низька — смуга має лишатись смугою.
   Тільки padding-top/bottom - горизонтальні поля лишаються за .hd .w,
   інакше скорочений запис padding знову їх затре. */
.hd .in{display:flex;align-items:center;gap:clamp(12px,1.2vw,22px);
  /* 27.08: шрифт у шапці підріс, а сама смуга рости не мусить — власниця
   окремо просила її звузити. Тому поля навколо стиснуті рівно на те,
   на що погладшав вміст: висота лишається та сама. */
  padding-top:clamp(7px,0.5vw,11px);padding-bottom:clamp(7px,0.5vw,11px)}
/* Зона натискання логотипа - на всю висоту шапки, а не 24px по літерах:
   промазати повз "SKERRY" було легше, ніж влучити. Відʼємні поля тримають
   верстку на місці, тобто росте тільки клікабельна площа. */
.hd .lg{padding:14px 10px;margin:-14px 0 -14px -10px}
/* 27.08: логотип у шапці підріс — на широкому екрані 15px губились
   поруч із меню. У підвалі .lg лишається як був, тому правка scoped. */
.hd .lg{font-size:18.5px;gap:11px}
.hd .lg svg{width:24px;height:24px}
.lg{display:flex;align-items:center;gap:9px;font-family:var(--disp);font-weight:800;font-size:15px;
  letter-spacing:-.02em;text-decoration:none;flex:0 0 auto}
.lg svg{width:19px;height:19px;overflow:visible}
.lg polygon{fill:var(--acc)}
/* горизонт під скелею: тонший і тихіший за сам знак, щоб читався як
   вода, а не як підкреслення. Товщина в одиницях viewBox: 3.2 з 64 —
   це приблизно піксель на екрані, тобто волосина, а не смуга. */
.lg .hz{fill:none;stroke:var(--ink2);stroke-width:3.2;stroke-linecap:round;opacity:.45}
.hd nav{display:flex;gap:2px;margin-left:auto}
/* бічні пункти шапки (27.08): «Статті»+«Про мене» зліва, «Кейси» справа.
   .hacc — акцентне виділення, як просили «жовтим» */
.hside{display:flex;gap:4px;align-items:center}
.hside a,.hcase{font-size:13.5px;color:var(--ink2);text-decoration:none;
  padding:8px 12px;border-radius:var(--rs,8px);white-space:nowrap}
.hside a:hover,.hcase:hover{color:var(--ink);background:var(--hov)}
.hside .hacc{color:var(--acc);font-weight:700}
.hcase{flex:0 0 auto}
.hd nav a.mo{display:none}
@media(max-width:900px){
  .hside,.hcase{display:none}
  .hd nav a.mo{display:block}
}
.hd nav a{font-size:15px;color:var(--ink2);text-decoration:none;padding:8px 13px;border-radius:var(--rs,8px);
  transition:color .2s,background .2s}
.hd nav a:hover{color:var(--ink);background:var(--hov)}
/* друга мова лежить під першою й тримає ширину — шапка не стрибає */
/* .hside/.hcase лежать поза <nav>, тож старі правила їх не діставали —
   і друга мова малювалась поруч із першою: «СтаттіArticles». */
.hd nav a,.btn.cta,.hside a,.hcase{display:grid;justify-items:center;align-items:center}
.hd nav a>span,.hd nav a>i,.btn.cta>span,.btn.cta>i,
.hside a>span,.hside a>i,.hcase>span,.hcase>i{grid-area:1/1}
.hd nav a>i,.btn.cta>i,.hside a>i,.hcase>i{visibility:hidden;font-style:normal;pointer-events:none;height:0}
.hd nav a.on{color:var(--ink);font-weight:600;background:transparent}
/* Пігулка їде під активний пункт замість того, щоб зникати й зʼявлятись.
   Позицію задає скрипт змінними --px/--py/--pw/--ph; ширина й зсув анімуються
   окремо, тому перехід між пунктами різної довжини не смикається. */
#nav{position:relative}
.npill{position:absolute;left:0;top:var(--py,0);width:var(--pw,0);height:var(--ph,0);
  border-radius:var(--rs,8px);background:var(--hov);pointer-events:none;opacity:0;
  transform:translateX(var(--px,0));
  transition:transform .34s cubic-bezier(.16,.84,.28,1),
             width .34s cubic-bezier(.16,.84,.28,1),opacity .22s}
.npill.on{opacity:1}
.hd nav a{position:relative;z-index:1}
/* на наведення пігулка вже під курсором - власне тло пункту тут зайве */
.hd nav a:hover{background:transparent}
@media(prefers-reduced-motion:reduce){.npill{transition:opacity .22s}}
.hd .cta{flex:0 0 auto}
.hd .btn.cta{padding-top:8px;padding-bottom:8px}
/* .btn.sm ставить 13px усім дрібним кнопкам; у шапці кнопка головна,
   тож вона йде на одну сходинку з пунктами меню. Три класи — щоб
   перебити .btn.sm, яке стоїть нижче по файлу з тією ж вагою. */
.hd .btn.cta{font-size:14.5px;padding-left:17px;padding-right:17px}
.burg{display:none;margin-left:auto;background:none;border:1px solid var(--line);border-radius:var(--rs,8px);
  padding:8px 11px;cursor:pointer}
.burg span{display:block;width:16px;height:1.5px;background:var(--ink);margin:3px 0}
@media(max-width:900px){
  /* вертикальний список під бургером: підсвітку малює сам пункт */
  .npill{display:none}
  .hd nav a.on{background:var(--hov)}
  .hd nav a:hover{background:var(--hov)}
  .hd nav{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;
    background:var(--bg);border-bottom:1px solid var(--line);padding:8px 0}
  .hd nav.open{display:flex}
  .hd nav a{padding:12px clamp(18px,4vw,44px);border-radius:0}
  .burg{display:block}
  .hd .cta{display:none}
}

/* ---- кнопки ---- */
.btn{display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-size:14.5px;font-weight:600;
  background:none;color:var(--ink);
  cursor:pointer;padding:var(--bpad,12px 22px);border-radius:var(--brad,10px);border:1px solid transparent;
  transition:transform .32s cubic-bezier(.16,.8,.3,1),background .22s,color .22s,border-color .22s,box-shadow .22s}
.btn{position:relative}
/* невидимий запас: не дає кнопці вислизнути з-під курсора на підйомі */
.btn::after{content:'';position:absolute;inset:-4px;border-radius:inherit}
.btn>*{position:relative;z-index:1}
.btn:hover{transform:translateY(-2px)}
.btn.p{background:var(--btnbg,var(--ink));color:var(--btnfg,var(--bg))}
.btn.s{border-color:var(--line);color:var(--ink)}
/* Темна суцільна кнопка (04.09, макет власниці): не помаранчева й не
   прозора з рамкою, а на тон темніша за саму сторінку. Колір рахуємо
   від --bg, а не вписуємо шістнадцятковим: інакше в кожній із шести тем
   довелось би підбирати свій, і в світлій кнопка стала б чорною плямою. */
.btn.d{background:color-mix(in srgb,var(--bg) 82%,#000);color:var(--ink);border-color:transparent}
.btn.d:hover{background:color-mix(in srgb,var(--bg) 72%,#000)}
.btn.sm{font-size:13px;padding:9px 15px}
.bt{display:flex;gap:10px;flex-wrap:wrap;margin-top:26px}

/* ---- сітки й картки ---- */
.g2{display:grid;gap:var(--gap,16px);grid-template-columns:1fr 1fr}
.g3{display:grid;gap:var(--gap,16px);grid-template-columns:repeat(3,1fr)}
.g4{display:grid;gap:var(--gap,16px);grid-template-columns:repeat(4,1fr)}
.mt{margin-top:34px}
@media(max-width:900px){.g3,.g4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.g2,.g3,.g4{grid-template-columns:1fr}}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--rad);padding:var(--cpad,24px);
  position:relative;box-shadow:var(--shadow,none)}
.card .n{font-family:var(--mono);font-size:11px;color:var(--acc);letter-spacing:.06em}
.card h3{margin:12px 0 8px}
.card p{font-size:14.4px}
.num b{display:block;font-family:var(--disp);font-size:clamp(26px,3.6vw,38px);line-height:1;font-variant-numeric:tabular-nums}
.num span{display:block;margin-top:9px;font-size:13.2px;color:var(--ink2)}

/* ---- герой ---- */
.hero{position:relative;overflow:hidden;display:flex;align-items:center;
 /* герой підлазить під прозору шапку — перший екран цілий */
 margin-top:calc(-1 * var(--hdh,68px));
 padding:calc(var(--hdh,68px) + clamp(48px,7vw,104px)) 0 clamp(40px,6vw,88px);
 min-height:100svh}
@supports not (height:100svh){.hero{min-height:100vh}}
.hero canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;
  -webkit-mask-image:linear-gradient(180deg,#000 0,#000 54%,rgba(0,0,0,.55) 78%,rgba(0,0,0,.16) 92%,transparent 100%);
  mask-image:linear-gradient(180deg,#000 0,#000 54%,rgba(0,0,0,.55) 78%,rgba(0,0,0,.16) 92%,transparent 100%)}
/* низ героя розчиняється сам — маскою на полотні; будь-яка непрозора
   заливка тут дає видимий шов об підсвічений фон сторінки */
.hero .hin{position:relative;z-index:3}
.hero h1{margin-top:16px;max-width:17ch;font-size:clamp(29px,4.3vw,50px)}
.hero .lead{margin-top:20px}
.hmeta{display:flex;flex-wrap:wrap;gap:8px;margin-top:26px}
.hmeta span{font-family:var(--mono);font-size:12px;color:var(--ink2);border:1px solid var(--line);
  border-radius:999px;padding:6px 13px}

/* ---- пісок у блоці «Звʼязатись зі мною» ---- */
.card.sandbox{position:relative;overflow:hidden}
.card.sandbox>*{position:relative;z-index:2}
.card.sandbox canvas{position:absolute;inset:0;z-index:0;width:100%;height:100%;opacity:.62;
 /* дюна лежить унизу, тому гасимо полотно вгору — інакше видно його межу */
 -webkit-mask-image:linear-gradient(0deg,#000 0,rgba(0,0,0,.5) 55%,transparent 88%);
 mask-image:linear-gradient(0deg,#000 0,rgba(0,0,0,.5) 55%,transparent 88%)}
@media(prefers-reduced-motion:reduce){.card.sandbox canvas{opacity:.4}}

/* ---- CTA у підвалі: знову картка з рамкою, пісок усередині неї
   (28.08, прохання власниці). Полотно — прямий нащадок картки, тому
   fx.js міряє курсор саме по ній. ---- */
/* Суцільна лінія на всю ширину відділяє CTA від колонок підвалу */
.fcta{padding:clamp(34px,5vw,64px) 0 clamp(30px,4.4vw,56px);text-align:center;
 border-bottom:1px solid var(--line)}
/* Ширина картки — та, що була до розширення сайту на рейки 1480:
   стара колонка 1120 мінус поля 44 = 1032. У широкому підвалі
   картка через це стоїть вужчою смугою по центру. */
.fctac{text-align:center;padding:clamp(28px,4.6vw,52px);
 max-width:1032px;margin-left:auto;margin-right:auto}
.fctain{position:relative;z-index:2}
.fcta .sub{margin-left:auto;margin-right:auto}
.fcta h2{margin-top:6px}

/* ---- смуга прокрутки з двійкових цифр (28.08) ----
   Рідну смугу ховаємо тільки там, де малюємо свою: з 1025px.
   Нижче лишається звична системна. */
@media(min-width:1025px){html{scrollbar-width:none}
 html::-webkit-scrollbar{width:0;height:0;display:none}}
.mxb{position:fixed;top:0;right:0;width:18px;height:100vh;z-index:95;
 display:flex;flex-direction:column;align-items:center;overflow:hidden;padding:2px 0;
 background:color-mix(in srgb,var(--bg) 55%,transparent);
 -webkit-backdrop-filter:blur(12px) saturate(120%);backdrop-filter:blur(12px) saturate(120%);
 border-left:1px solid color-mix(in srgb,var(--acc) 14%,transparent);
 cursor:pointer;touch-action:none;-webkit-user-select:none;user-select:none}
.mxbd{font-family:var(--mono);font-size:7px;line-height:1.35;text-align:center;width:100%;
 color:color-mix(in srgb,var(--acc) 55%,transparent);opacity:0;transform:translateY(-3px);
 transition:opacity .3s,transform .3s,color .5s;pointer-events:none}
.mxbd.vis{opacity:1;transform:none}
.mxbd.new{color:var(--acc);text-shadow:0 0 10px color-mix(in srgb,var(--acc) 60%,transparent)}
.mxbdot{position:absolute;top:0;right:2px;width:4px;height:4px;border-radius:50%;
 background:var(--acc);box-shadow:0 0 8px var(--acc);transition:transform .1s linear;
 will-change:transform;pointer-events:none}
@media(max-width:1024px){.mxb{display:none}}
@media(prefers-reduced-motion:reduce){.mxbd{transition:none}.mxbdot{transition:none}}

/* ---- одна дія на всю ширину ---- */
.bt.one{justify-content:center;margin-top:clamp(26px,3.6vw,42px)}
.btn.wide{font-size:16px;padding:17px 34px;gap:11px}
/* Стрілка в будь-якій кнопці, а не лише в широкій. Правило довго стояло
   як .btn.wide svg — і всюди, де стрілку поставили в звичайну кнопку,
   вона малювалась розміром 46 px і чорною заливкою: у svg немає своїх
   розмірів, а шлях намальований лінією, не фігурою. 27.08. */
.btn svg{width:17px;height:17px;flex:0 0 auto;fill:none;stroke:currentColor;stroke-width:1.9;
 stroke-linecap:round;stroke-linejoin:round;transition:transform .3s cubic-bezier(.16,.8,.3,1)}
.btn:hover svg{transform:translateX(3px)}
@media(max-width:560px){.btn.wide{width:100%;justify-content:center}}
@media(prefers-reduced-motion:reduce){.btn svg{transition:none}}

/* Кнопка «Дивитись кейси» в блоці переваг: обведення без наведення,
   на наведення — фірмова заливка, що розкривається з середини. Раніше
   вона тільки підстрибувала: колір не мінявся взагалі, і на тлі карток
   поруч кнопка читалась як неактивна. */
.aint .btn.s{position:relative;isolation:isolate;padding:14px 27px;font-size:15px;
 border-color:color-mix(in srgb,var(--ink) 26%,transparent)}
.aint .btn.s::before{content:'';position:absolute;inset:0;z-index:-1;border-radius:inherit;
 background:var(--acc);transform:scale(.9);opacity:0;
 transition:transform .38s cubic-bezier(.2,.7,.2,1),opacity .28s}
.aint .btn.s:hover,.aint .btn.s:focus-visible{color:var(--onacc);border-color:var(--acc)}
.aint .btn.s:hover::before,.aint .btn.s:focus-visible::before{transform:scale(1);opacity:1}
@media(prefers-reduced-motion:reduce){.aint .btn.s::before{transition:opacity .2s}}

/* Підказка в полі. Своїм кольором браузер малює її сірим по темному
   склу — не прочитати. Беремо приглушений колір теми й трохи гасимо:
   має читатись, але не вдавати введений текст */
::placeholder{color:var(--mut);opacity:.62}
textarea::placeholder{line-height:1.55}
:focus::placeholder{opacity:.4}

/* Кнопка в формі — комірка сітки, тому вона на всю ширину. Текст у ній
   лишався притиснутим уліво: inline-flex без вирівнювання по головній осі.
   Кнопка широка навмисно, а от напис має стояти посередині */
.form>.btn{justify-content:center}

/* ---- вкладення до заявки ---- */
.drop .lb i{font-style:normal;color:var(--mut);font-weight:400;letter-spacing:.02em}
.dz{display:flex;align-items:center;justify-content:center;gap:10px;
 margin-top:9px;padding:18px 16px;border-radius:var(--frad,14px);cursor:pointer;
 border:1px dashed var(--line);color:var(--ink2);font-size:14px;text-align:center;
 transition:border-color .22s,color .22s,background .22s}
.dz:hover,.drop.over .dz{border-color:var(--acc);color:var(--ink);background:var(--hov)}
.dz svg{width:18px;height:18px;flex:0 0 auto;fill:none;stroke:currentColor;
 stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.drop.bad .dz{border-color:#E4572E}
.flist{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.flist li{display:flex;align-items:center;gap:10px;font-size:13.4px;
 padding:8px 10px;border-radius:10px;background:var(--panel)}
.flist b{font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.flist span{margin-left:auto;color:var(--mut);font-family:var(--mono);font-size:11.6px}
.flist button{flex:0 0 auto;width:22px;height:22px;border:0;border-radius:999px;
 background:transparent;color:var(--mut);font-size:17px;line-height:1;cursor:pointer;
 transition:color .2s,background .2s}
.flist button:hover{color:var(--ink);background:var(--hov)}
@media(prefers-reduced-motion:reduce){.dz,.flist button{transition:none}}

/* ---- портрет на «Про мене» ---- */
#app{position:relative}
.abhero{display:grid;grid-template-columns:1.15fr 1fr;
 gap:clamp(24px,4vw,64px);align-items:center}
/* шар значків: накритий на всю сторінку, сам кліків не ловить */
.stlayer{position:absolute;inset:0;z-index:6;pointer-events:none}
.stlayer .astick{pointer-events:auto}
/* картка відсунута від правого краю: значок медалі має лягати під шию */
.aphoto{margin:0;padding:12px;max-width:430px;justify-self:end}
.aphoto img{display:block;width:100%;height:auto;border-radius:calc(var(--rad,14px) - 4px)}
.card.flute.solo{max-width:680px;margin-inline:auto}
@media(max-width:1080px){.aphoto{max-width:360px;margin-right:24px}}
@media(max-width:860px){.abhero{grid-template-columns:1fr}
 .aphoto{justify-self:center;max-width:320px;margin-right:0}}
/* ---- значки на «Про мене»: самі емодзі, без кіл ---- */
/* стартова розкидка — у CSS: сторінка приходить із запеченої версії
   вже з розкиданими значками, JS лише переставляє збережені */
.astick{position:absolute;translate:-50% -50%;z-index:6;width:74px;height:74px;
 display:flex;align-items:center;justify-content:center;
 cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;
 transform:perspective(500px)
  rotateX(calc(var(--cy,0) * -16deg)) rotateY(calc(var(--cx,0) * 18deg))
  translateY(calc(var(--lit,0) * -4px));
 transition:transform .4s cubic-bezier(.16,.8,.3,1)}
.astick i{font-style:normal;font-size:58px;line-height:1;pointer-events:none;
 font-family:'Segoe UI Emoji','Apple Color Emoji','Noto Color Emoji',sans-serif;
 filter:drop-shadow(0 7px 12px rgba(0,0,0,.42))}
.astick svg{width:56px;height:56px;pointer-events:none;
 filter:drop-shadow(0 7px 12px rgba(0,0,0,.42))}
.astick.hold{cursor:grabbing;z-index:9;transform:scale(1.22)}
.astick.hold i,.astick.hold svg{filter:drop-shadow(0 18px 24px rgba(0,0,0,.5))}
[data-st="buoy"]{left:36.1%;top:265px}
[data-st="sakura"]{left:72.2%;top:224px}
[data-st="gold"]{left:80%;top:419px}
[data-st="ua"]{left:11.4%;top:521px}
[data-st="wheat"]{left:27.7%;top:523px}
[data-st="bub"]{left:24.6%;top:720px}
[data-st="dolf"]{left:55.5%;top:725px}
[data-st="targ"]{left:86.1%;top:725px}
@media(max-width:860px){.astick{width:56px;height:56px}
 .astick i{font-size:42px}.astick svg{width:42px;height:42px}
 /* вужчий екран: розкидка тісніша і нижча — герой тут у два поверхи */
 [data-st="wheat"]{left:14%;top:150px}
 [data-st="sakura"]{left:80%;top:196px}
 [data-st="bub"]{left:46%;top:262px}
 [data-st="targ"]{left:86%;top:330px}
 [data-st="dolf"]{left:16%;top:392px}
 [data-st="ua"]{left:62%;top:440px}
 [data-st="buoy"]{left:26%;top:520px}
 [data-st="gold"]{left:78%;top:560px}}

/* ---- плашка про cookie ---- */
.cbar{position:fixed;z-index:110;left:16px;right:16px;bottom:18px;margin:0 auto;
 max-width:640px;display:flex;align-items:center;gap:16px;
 padding:15px 18px 15px 16px;border-radius:18px;border:1px solid var(--line);
 background:var(--bg);box-shadow:0 1px 0 rgba(255,255,255,.06) inset,0 30px 60px -30px rgba(0,0,0,.85);
 animation:cbarin .6s cubic-bezier(.16,.8,.3,1) both}
@keyframes cbarin{from{opacity:0;transform:translateY(26px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.cbar{animation:none}}
/* печенька піксельна: квадрати без згладжування, легке погойдування */
.cbar .cpix{flex:0 0 auto;width:38px;height:38px;image-rendering:pixelated;
 animation:cnib 5s ease-in-out infinite}
@keyframes cnib{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(7deg)}}
@media(prefers-reduced-motion:reduce){.cbar .cpix{animation:none}}
.cbar p{margin:0;font-size:13.2px;color:var(--ink2);line-height:1.5;text-align:left}
.cbar a{color:var(--acc)}
.cbar .btn{flex:0 0 auto}
@media(max-width:640px){.cbar{flex-direction:column;text-align:center}
 .cbar p{text-align:center}.cbar .btn{align-self:center}}

/* ---- бирка «домен і хостинг 0 грн» біля конструктора ---- */
.calchead{display:flex;align-items:center;gap:16px;flex-wrap:wrap;position:relative;z-index:50}
.calchead h2{margin:0}
.birka{position:relative}
.birka summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;
 padding:8px 14px;border:1px dashed var(--acc);border-radius:999px;
 font-family:var(--mono);font-size:12.5px;letter-spacing:.05em;text-transform:uppercase;
 color:var(--acc);transition:background .22s,color .22s}
.birka summary::-webkit-details-marker{display:none}
.birka summary i{font-style:normal;font-weight:700}
.birka summary:hover,.birka[open] summary{background:var(--acc);color:var(--bg)}
/* умови випадають карткою під биркою, поверх сторінки */
.birka .bcard{position:absolute;z-index:40;top:calc(100% + 10px);right:0;
 width:min(430px,calc(100vw - 48px));padding:18px 20px;border-radius:var(--rad,14px);
 border:1px solid var(--line);background:var(--bg);
 box-shadow:0 26px 54px -28px rgba(0,0,0,.8)}
.birka .bcard>b{display:block;font-size:15px;margin-bottom:4px}
.birka .bcard p{margin-top:10px;font-size:13.6px;color:var(--ink2);line-height:1.55}
.birka .bcard p b{color:var(--ink);font-weight:600}
.birka .bcard /* Рядок «обраний пакет» над формою: людина прийшла з картки й має
   бачити, з чим прийшла, до того, як почне писати */
.fpack{display:flex;flex-wrap:wrap;gap:6px;align-items:baseline;margin:0 0 20px;
 padding:11px 14px;border:1px solid var(--line);border-radius:12px;
 font-size:13.4px;line-height:1.5;color:var(--ink2);background:var(--bg2, transparent)}
.fpack span{font-family:var(--mono);font-size:10.6px;letter-spacing:.07em;
 text-transform:uppercase;color:var(--mut)}
.fpack b{font-weight:600;color:var(--ink)}
.bnote{color:var(--mut);font-size:12.8px}
@media(max-width:640px){.birka .bcard{position:static;width:auto;margin-top:10px}}

/* ---- «Що далі?» на контактах ---- */
.nsteps{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--gap,16px);margin-top:34px}
.nsteps>div{position:relative;padding-top:6px}
/* лінія між кроками: від номера до номера, останній без хвоста */
.nsteps>div:not(:last-child)::after{content:'';position:absolute;top:20px;
 left:44px;right:calc(-1*var(--gap,16px) + 6px);height:1px;background:var(--line)}
.nno{display:inline-flex;align-items:center;justify-content:center;
 width:30px;height:30px;border-radius:999px;border:1px solid var(--acc);
 color:var(--acc);font-family:var(--mono);font-size:13px}
.nsteps p{margin-top:12px;font-size:14.6px;color:var(--ink2);max-width:24ch}
@media(max-width:900px){.nsteps{grid-template-columns:1fr 1fr}
 .nsteps>div:nth-child(2)::after{display:none}}
@media(max-width:540px){.nsteps{grid-template-columns:1fr}
 .nsteps>div::after{display:none}}

/* ---- пояс із маяком на контактах ---- */
.chero{position:relative;overflow:hidden;display:flex;align-items:center;
 margin-top:calc(-1 * var(--hdh,68px));
 padding:calc(var(--hdh,68px) + clamp(38px,5vw,66px)) 0 clamp(34px,4.6vw,62px);
 min-height:min(52svh,430px)}
@supports not (height:100svh){.chero{min-height:430px}}
.chero canvas{position:absolute;inset:0;width:100%;height:100%;z-index:0;
 -webkit-mask-image:linear-gradient(180deg,#000 0,#000 76%,rgba(0,0,0,.62) 91%,transparent 100%);
 mask-image:linear-gradient(180deg,#000 0,#000 76%,rgba(0,0,0,.62) 91%,transparent 100%)}
.chero .hin{position:relative;z-index:3}
.chero h1{max-width:15ch}
.chero .lead{max-width:46ch}

/* ---- пакети ---- */
/* Назва пакета більша (27.08, прохання власниці): у картці це головне
   слово, а стояло воно 17-м кеглем — дрібніше за ціну і майже врівень
   з дрібним текстом під ним. Тепер це заголовок, а не підпис. */
.pack h3{font-size:clamp(21px,2.3vw,27px);line-height:1.12}
.pack{display:flex;flex-direction:column;gap:0}
.pack .who{font-size:13.4px;color:var(--mut);margin-top:6px;min-height:3em}
.pack .pr{font-family:var(--disp);font-size:clamp(24px,3vw,31px);margin-top:16px;font-variant-numeric:tabular-nums}
.pack .usd{font-family:var(--mono);font-size:12px;color:var(--mut);margin-top:2px}
.pack .tm{font-family:var(--mono);font-size:12.5px;color:var(--acc);margin-top:10px;
  padding-top:10px;border-top:1px solid var(--line)}
.pack ul{list-style:none;padding:0;margin:16px 0 22px;display:grid;gap:8px}
.pack li{font-size:13.6px;color:var(--ink2);padding-left:19px;position:relative}
.pack li::before{content:"";position:absolute;left:2px;top:.62em;width:7px;height:7px;border-radius:50%;
  border:1.5px solid var(--acc)}
.pack .btn{align-self:flex-start;margin-top:auto}
.pack.star{border-color:var(--acc)}
.flag{position:absolute;top:-1px;right:18px;font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;
  text-transform:uppercase;background:var(--acc);color:var(--onacc,#fff);padding:4px 10px;border-radius:0 0 6px 6px}

/* ---- таби ---- */
.tabs{display:flex;gap:6px;flex-wrap:wrap;margin-top:26px}
.tabs button{border:1px solid var(--line);background:none;font-size:13.5px;padding:9px 16px;
  border-radius:var(--brad,10px);cursor:pointer;color:var(--ink2);transition:.2s}
.tabs button:hover{color:var(--ink);background:var(--hov)}
.tabs button.on{background:var(--ink);color:var(--bg);border-color:var(--ink);font-weight:600}
.panel{display:none;margin-top:22px}
.panel.on{display:block;animation:fade .4s cubic-bezier(.16,.8,.3,1)}
@keyframes fade{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* ---- роботи ---- */
.wgrid{display:grid;gap:var(--gap,16px);grid-template-columns:1fr 1fr;margin-top:28px}
@media(max-width:720px){.wgrid{grid-template-columns:1fr}}
.wcard{border:1px solid var(--line);border-radius:var(--rad);overflow:hidden;background:var(--panel);
  cursor:pointer;text-align:left;padding:0;width:100%;display:block;box-shadow:var(--shadow,none);
  transition:transform .4s cubic-bezier(.16,.8,.3,1),box-shadow .3s,border-color .3s}
.wcard:hover{transform:translateY(-4px);border-color:var(--acc)}
.wcard .ph{height:172px;position:relative}
.wcard .ph em{position:absolute;left:14px;bottom:12px;font-style:normal;font-family:var(--mono);font-size:11px;
  background:rgba(255,255,255,.86);color:#14181C;padding:4px 10px;border-radius:999px}
.wcard .in2{padding:20px 22px 24px}
.wcard p{font-size:13.8px;margin-top:6px}
.wcard .r{display:inline-block;margin-top:14px;font-family:var(--mono);font-size:12px;color:var(--acc);font-weight:700}
.chips{display:flex;gap:7px;flex-wrap:wrap;margin-top:22px}
.chips button{border:1px solid var(--line);background:none;font-size:12.5px;padding:7px 14px;border-radius:999px;
  cursor:pointer;color:var(--ink2);transition:.2s}
.chips button.on{background:var(--ink);color:var(--bg);border-color:var(--ink)}

/* ---- кейс ---- */
.cover{height:clamp(200px,30vw,380px);border-radius:var(--rad);margin-top:26px;
 overflow:hidden;position:relative}
/* знімок сайту показуємо цілим і з полем: раніше він упирався в рамку */
.cover{padding:14px;background-clip:padding-box}
.cover img{position:absolute;inset:14px;width:auto;height:auto;max-width:calc(100% - 28px);
 max-height:calc(100% - 28px);margin:auto;object-fit:contain;object-position:top;
 border-radius:calc(var(--rad) - 8px)}
.wcard .phimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:top}
/* Довгий знімок поверх статичного кадру: зʼявляється, коли завантажився,
   і гортає сайт зверху вниз, поки курсор на картці. Рухається
   object-position, а не сам елемент, — тоді не треба знати ні висоту
   знімка, ні висоту кадру: 100% означає «низом до низу». */
.wcard .phlong{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
 object-position:50% 0;opacity:0;z-index:2;transition:opacity .4s}
.wcard .ph.longon:hover .phlong,.wcard:hover .ph.longon .phlong{opacity:1;object-position:50% 100%;
 transition:opacity .4s,object-position 9s ease-in-out .3s}
@media(prefers-reduced-motion:reduce){
 .wcard:hover .ph.longon .phlong{object-position:50% 0;transition:opacity .4s}}

/* ---- справжні знімки в кейсі ---- */
.shot{margin:34px 0 0;border-radius:var(--rad);overflow:hidden;
 border:1px solid var(--line);background:var(--panel)}
.shot img{display:block;width:100%;height:auto}
.shot figcaption{padding:12px 16px;font-size:13.4px;color:var(--mut);
 border-top:1px solid var(--line)}
.cstory{margin-top:40px}
.cstory h2{max-width:26ch}
.cstory .sub{max-width:64ch}
.cstory .sub+.sub{margin-top:12px}
/* ---- друга лінія ціни розкривається карткою ----
   «індивідуальний підхід — 83 000 ₴» у рядку ціни це не примітка, а окремий
   пакет тієї ж категорії. Тепер під ним відкривається його склад. */
.indiv{position:relative;display:inline-block}
.indiv>button{font:inherit;color:var(--acc);background:none;border:0;padding:0;
  cursor:help;text-decoration:underline;text-decoration-style:dotted;
  text-underline-offset:3px;text-decoration-thickness:1px}
.indiv>button:hover,.indiv.on>button{color:var(--ink)}
.indiv>button:focus-visible{outline:2px solid var(--acc);outline-offset:3px;border-radius:3px}
.ipop{position:absolute;left:0;top:calc(100% + 10px);z-index:60;
  width:min(340px,78vw);max-height:min(52vh,380px);overflow:auto;
  display:flex;flex-direction:column;gap:8px;
  padding:16px 18px;border:1px solid var(--line);border-radius:14px;
  background:var(--hdbg,var(--bg));box-shadow:0 26px 50px -26px rgba(0,0,0,.75);
  font-family:var(--body);color:var(--ink2);text-align:left;white-space:normal;
  opacity:0;visibility:hidden;translate:0 -6px;
  transition:opacity .18s,translate .22s cubic-bezier(.16,.84,.28,1),visibility 0s .22s}
.indiv.on .ipop{opacity:1;visibility:visible;translate:0 0;transition-delay:0s}
/* картка ширша за свій рядок, тож біля правого краю вона їде вліво */
.kv>div:last-child .ipop,.indiv.rt .ipop{left:auto;right:0}
.ipop>b{font-family:var(--disp);font-weight:400;font-size:16px;color:var(--ink)}
.ipop .isum{font-family:var(--mono);font-size:12.5px;color:var(--acc)}
.ipop .iwho{font-size:13.4px;line-height:1.55}
.ipop .irows{display:grid;gap:5px;padding-top:9px;border-top:1px dashed var(--line)}
.ipop .irows>span{display:flex;justify-content:space-between;gap:12px;
  font-family:var(--mono);font-size:12.4px}
.ipop .irows i{font-style:normal;color:var(--mut)}
.ipop .irows b{font-weight:500;color:var(--ink);white-space:nowrap}
.ipop .iinc{display:grid;gap:6px;padding-top:9px;border-top:1px dashed var(--line);
  font-size:13px;line-height:1.5}
.ipop .iinc>span{padding-left:15px;position:relative}
.ipop .iinc>span::before{content:"";position:absolute;left:1px;top:.62em;
  width:6px;height:6px;border-radius:50%;border:1.5px solid var(--acc)}
.ipop .iinc>span:first-child{padding-left:0;color:var(--mut)}
.ipop .iinc>span:first-child::before{display:none}
/* картка живе всередині картки пакета, а та в деяких скінах ріже вміст */
.card:has(.indiv){overflow:visible}
@media(max-width:560px){.ipop{width:min(300px,86vw)}}
@media(prefers-reduced-motion:reduce){.ipop{transition:opacity .15s,visibility 0s}}

.kv{display:grid;gap:0;margin-top:26px}
.kv div{display:flex;gap:16px;align-items:baseline;padding:13px 0;border-bottom:1px solid var(--line)}
.kv span{font-size:13px;color:var(--mut);min-width:150px;flex:0 0 auto}
.kv b{font-weight:600;font-size:14.6px}
.ol{list-style:none;padding:0;margin:20px 0 0;display:grid;gap:14px;counter-reset:s}
.ol li{position:relative;padding-left:38px;font-size:15px;color:var(--ink2);counter-increment:s}
.ol li::before{content:counter(s,decimal-leading-zero);position:absolute;left:0;top:.05em;font-family:var(--mono);
  font-size:12px;color:var(--acc)}
.res{display:grid;gap:var(--gap,16px);grid-template-columns:repeat(3,1fr);margin-top:26px}
@media(max-width:620px){.res{grid-template-columns:1fr}}

/* ---- калькулятор ---- */
.calc{display:grid;grid-template-columns:1.35fr .95fr;gap:var(--gap,16px);margin-top:30px;align-items:start}
@media(max-width:860px){.calc{grid-template-columns:1fr}}
.opt{display:flex;align-items:center;gap:13px;padding:13px 0;border-bottom:1px solid var(--line);cursor:pointer}
.opt:last-child{border-bottom:0}
.opt input{position:absolute;opacity:0;pointer-events:none}
.opt .bx{width:19px;height:19px;border:1.5px solid var(--line);border-radius:5px;flex:0 0 auto;position:relative;
  transition:.2s}
.opt .bx::after{content:"";position:absolute;inset:4px;border-radius:2px;background:var(--acc);
  transform:scale(0);transition:transform .22s cubic-bezier(.16,.8,.3,1)}
.opt input:checked+.bx{border-color:var(--acc)}
.opt input:checked+.bx::after{transform:scale(1)}
.opt .tx{font-size:14.4px}
.opt .pp{margin-left:auto;font-family:var(--mono);font-size:12.5px;color:var(--mut)}
.opt input:focus-visible+.bx{outline:2px solid var(--acc);outline-offset:3px}
/* Тепле — від жовтого до помаранчевого. Це не --acc/--btnbg: у світлій темі
   вони розходяться в різні боки, а купон і повзунок мають лишатись теплими
   на обох тлах. */
.calc{--sl1:#F0BE5C;--sl2:#E4572E;--slrail:rgba(255,255,255,.16);--sltint:rgba(240,190,92,.14)}
html[data-theme="light"] .calc{--sl1:#E0A03A;--sl2:#C2451F;
  --slrail:rgba(22,35,46,.13);--sltint:rgba(224,160,58,.16)}

/* Тип сайту — купонами. Пігулка на 999px різала два рядки тексту по кутах;
   купон дає прямі поля, надрив по боках і перфорацію під назвою. */
.seg{display:flex;gap:12px;margin-top:10px;flex-wrap:wrap}
.seg button{flex:1 1 190px;position:relative;text-align:left;
  padding:14px 18px;border-radius:14px;border:1px dashed var(--line);
  background:var(--panel);font-size:13.6px;color:var(--ink2);
  transition:border-color .2s,color .2s,background .2s,transform .2s;
  /* дві виїмки з боків — саме вони роблять прямокутник купоном.
     Маска, а не накладені кружечки: під купоном градієнт, і будь-яка
     непрозора заливка дала б видиму пляму. */
  --notch:8px;
  -webkit-mask:radial-gradient(circle var(--notch) at 0 50%,transparent 99%,#000 100%),
    radial-gradient(circle var(--notch) at 100% 50%,transparent 99%,#000 100%);
  mask:radial-gradient(circle var(--notch) at 0 50%,transparent 99%,#000 100%),
    radial-gradient(circle var(--notch) at 100% 50%,transparent 99%,#000 100%);
  -webkit-mask-composite:source-in;mask-composite:intersect}
.seg button:hover{border-color:var(--sl1);color:var(--ink)}
.seg button.on{border-style:solid;border-color:var(--sl1);color:var(--ink);font-weight:600;
  background:var(--sltint)}
/* маска зрізала б outline, тому фокус показуємо кільцем усередині */
.seg button:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--sl1)}
/* перфорація купона: назва зверху, умови під надривом */
.seg button b{display:block;margin-top:9px;padding-top:9px;border-top:1px dashed var(--line);
  font-family:var(--mono);font-size:11.5px;color:var(--mut);font-weight:400}
.seg button.on b{color:var(--ink2);border-top-color:var(--sl1)}
@media(prefers-reduced-motion:reduce){.seg button{transition:none}}

/* Повзунок кількості. Поділок усього пʼять, тож рідний бігунець перестрибував
   між ними миттєво — рух читався як смикання. Рідний бігунець анімувати не
   можна, тому справжній повзунок лежить зверху прозорим і ловить руку, а
   доріжку й бігунець малюємо самі: вони їдуть до нової поділки за 0.42 с,
   однією й тією ж кривою — заливка й кружечок ніколи не розʼїжджаються. */
.rngw{position:relative;display:block;height:24px;margin-top:16px;--k:0}
.rng{position:absolute;inset:0;width:100%;height:100%;margin:0;z-index:2;
  opacity:0;-webkit-appearance:none;appearance:none;background:none}
.rngt{position:absolute;left:0;right:0;top:8px;height:8px;
  border-radius:999px;background:var(--slrail);pointer-events:none}
/* Заливка лежить на всю доріжку, а видно з неї стільки, скільки лишає
   clip-path. Так рух не чіпає розкладку — і градієнт прибитий до доріжки,
   тобто колір показує, наскільки далеко ви від'їхали: біля пʼятірки він
   жовтий і доходить до помаранчевого аж на останній поділці. */
.rngt::before{content:"";position:absolute;inset:0;border-radius:999px;
  background:linear-gradient(90deg,var(--sl1),var(--sl2));
  clip-path:inset(0 calc(100% - 11px - var(--k) * (100% - 22px)) 0 0 round 999px);
  transition:clip-path .42s cubic-bezier(.22,.82,.26,1)}
/* Бігунець їде через left, а не transform: у transform відсоток рахується
   від самого кружечка (22px), а поїхати він має по ширині доріжки. */
.rngt i{position:absolute;top:50%;
  left:calc(11px + var(--k) * (100% - 22px));
  translate:-50% -50%;
  width:22px;height:22px;border-radius:50%;
  background:radial-gradient(circle at 50% 32%,#fff,var(--sl1) 76%);
  border:2px solid var(--sl2);box-shadow:0 3px 10px rgba(0,0,0,.3);
  transition:left .42s cubic-bezier(.22,.82,.26,1),
    scale .18s cubic-bezier(.16,.8,.3,1),box-shadow .18s}
.rngw:hover .rngt i{scale:1.09}
.rng:active~.rngt i{scale:.95;box-shadow:0 1px 5px rgba(0,0,0,.32)}
/* сам повзунок невидимий, тому кільце фокуса малюємо на своєму бігунці */
.rng:focus-visible{outline:0}
.rng:focus-visible~.rngt i{box-shadow:0 0 0 4px var(--sltint),0 3px 10px rgba(0,0,0,.3)}
@media(prefers-reduced-motion:reduce){
  .rngt::before,.rngt i{transition:none}
}
.card.total{position:sticky;top:calc(var(--hdh,68px) + 18px)}
/* перехід за якорем не має ховати заголовок під липкою шапкою */
section[id]{scroll-margin-top:calc(var(--hdh,68px) + 16px)}
.total .big{font-family:var(--disp);font-size:clamp(28px,4vw,42px);font-variant-numeric:tabular-nums;line-height:1}
.total .row{display:flex;justify-content:space-between;gap:12px;font-size:13.4px;color:var(--ink2);
  padding:8px 0;border-bottom:1px solid var(--line)}
.total .row:last-of-type{border-bottom:0}

/* ---- акордеон: відповідь витікає з питання ----
   Колір плям виводимо з токенів, тому працює і на світлих скінах:
   трохи чорнила, підмішаного у фон, — суцільний, як того вимагає
   поріг альфи у фільтрі (напівпрозоре він би зжер). */
.acc.goo{border-top:0;margin-top:26px;display:grid;gap:10px;--goo:color-mix(in srgb,var(--ink) 16%,var(--bg))}
.acc.goo details{border-bottom:0;position:relative}
.acc.goo summary{position:relative;z-index:1;padding:17px clamp(18px,2vw,26px);gap:18px}
.acc.goo summary::after{align-self:center}
.acc.goo .qw{position:relative;z-index:1;overflow:hidden}
.acc.goo.js .qw{height:0}
.acc.goo .bd{padding:2px clamp(18px,2vw,26px) 22px;max-width:70ch}
.acc.goo .gl{position:absolute;inset:0;z-index:0;pointer-events:none}
.acc.goo .gl i{position:absolute;left:0;right:0;display:block;background:var(--goo)}
.acc.goo .gp{top:0;height:var(--ph,58px);border-radius:var(--brad,999px)}
/* панель заходить під таблетку — без перекриття плями не мають чого злити */
.acc.goo .gb{top:calc(var(--ph,58px) - 20px);left:15%;right:15%;height:0;border-radius:var(--rad,22px)}
.acc.goo details[open] .gb{left:0;right:0}
.acc.goo .anim.shut .gb{left:15%;right:15%}
/* у спокої: пляма розтягнута top/bottom; під час руху її веде висота з JS */
.acc.goo details[open]:not(.anim) .gb{height:auto;bottom:0}
/* фільтр — лише поки триває рух */
.acc.goo .anim .gl{filter:url(#skgoof)}
.acc.goo .anim .qw{transition:height .46s cubic-bezier(.35,.02,.24,1) .12s}
.acc.goo .anim .gb{transition:height .56s cubic-bezier(.3,.02,.24,1.14),left .34s cubic-bezier(.2,.8,.3,1),right .34s cubic-bezier(.2,.8,.3,1)}
/* закриття спокійніше: текст не хитається перед тим, як зникнути */
.acc.goo .anim.shut .qw{transition:height .34s cubic-bezier(.4,0,.2,1)}
.acc.goo .anim.shut .gb{transition:height .38s cubic-bezier(.4,0,.2,1) .06s,left .28s ease .06s,right .28s ease .06s}
.acc.goo .bd{opacity:0;transform:translateY(7px);transition:opacity .3s .26s,transform .3s .26s}
.acc.goo details[open] .bd{opacity:1;transform:none}
.acc.goo .anim.shut .bd{opacity:0;transform:translateY(4px);transition:opacity .18s,transform .18s}
@media(prefers-reduced-motion:reduce){
 .acc.goo.js .qw{height:auto}
 .acc.goo .gb{height:auto;bottom:0;top:calc(var(--ph,58px) - 20px)}
 .acc.goo details:not([open]) .gb{display:none}
 .acc.goo .bd{opacity:1;transform:none;transition:none}
 .acc.goo .gl{filter:none}}

/* ---- акордеон ---- */
.acc{border-top:1px solid var(--line);margin-top:28px}
.acc details{border-bottom:1px solid var(--line)}
.acc summary{list-style:none;cursor:pointer;padding:19px 0;display:flex;gap:16px;align-items:flex-start;
  font-size:16px;font-weight:600;font-family:var(--disp);letter-spacing:-.015em}
.acc summary::-webkit-details-marker{display:none}
.acc summary::after{content:"+";margin-left:auto;font-family:var(--mono);font-weight:400;color:var(--acc);
  font-size:19px;line-height:1;transition:transform .3s}
.acc details[open] summary::after{transform:rotate(45deg)}
.acc .bd{padding:0 0 20px;max-width:70ch;font-size:14.6px;color:var(--ink2)}

/* ---- статті ---- */
.art{display:block;width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--line);
  padding:22px 0;cursor:pointer}
.art:last-child{border-bottom:1px solid var(--line)}
.art .mt2{font-family:var(--mono);font-size:11.5px;color:var(--mut);display:flex;gap:14px}
.art h3{margin:9px 0 7px;font-size:20px;transition:transform .34s cubic-bezier(.16,.8,.3,1)}
.art:hover h3{transform:translateX(7px)}
.art p{font-size:14.2px;max-width:70ch}
.prose h2{font-size:clamp(20px,2.4vw,26px);margin:34px 0 12px}
.prose p{font-size:16.4px;margin-top:14px;color:var(--ink2)}
.prose blockquote{margin:28px 0;padding:20px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line);
  font-family:var(--disp);font-size:clamp(17px,2.1vw,21px);line-height:1.4;color:var(--ink);letter-spacing:-.015em}
#prog{position:fixed;top:0;left:0;height:2px;background:var(--acc);width:100%;transform-origin:0 50%;
  transform:scaleX(0);z-index:120;transition:transform .1s linear}

/* ---- форма ---- */
.form{display:grid;gap:14px;margin-top:26px}
.fld label{display:block;font-size:12.5px;color:var(--mut);margin-bottom:6px;font-family:var(--mono);
  letter-spacing:.06em;text-transform:uppercase}
.fld input,.fld textarea,.fld select{width:100%;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--frad,14px);padding:13px 15px;font:inherit;font-size:15px;color:var(--ink);transition:border-color .2s}
.fld textarea{min-height:130px;resize:vertical}
.fld input:focus,.fld textarea:focus,.fld select:focus{outline:none;border-color:var(--acc)}
.fld.bad input,.fld.bad textarea{border-color:#D6503C}
.fld .err{font-size:12.5px;color:#D6503C;margin-top:6px;display:none}
.fld.bad .err{display:block}
.ok{display:none;margin-top:16px;padding:15px 18px;border:1px solid var(--acc);border-radius:var(--rad);
  font-size:14.4px}
.ok.on{display:block}

/* ---- підвал ---- */
/* Лінії над CTA підвалу немає (28.08): блок «Розкажіть про проєкт»
   переходить із сторінки без розділювача — межу тримає повітря. */
/* Нижнього відступу немає: останнім у підвалі стоїть смуга зі словом-
   логотипом, і вона має впиратись у край сторінки. Відступ, який тут
   був (40px), лишав під літерами порожню полосу. 04.09. */
footer{padding:56px 0 0;margin-top:20px}
footer .fcta+.w{padding-top:clamp(36px,4.8vw,62px)}
footer .cols{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:30px 28px}
@media(max-width:1080px){footer .cols{grid-template-columns:1fr 1fr;gap:28px 24px}}
@media(max-width:720px){footer .cols{grid-template-columns:1fr;gap:22px}}
footer .cols p{font-size:13.6px;margin-top:10px;max-width:38ch}
footer h4{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--mut);
  font-weight:400;margin-bottom:12px}
footer nav{display:grid;gap:8px}
footer nav a{font-size:13.8px;color:var(--ink2);text-decoration:none}
footer nav a:hover{color:var(--ink)}
/* ---- велике слово-логотип унизу підвалу ---- */
/* Лінії над словом немає (04.09, рішення власниці): розділювач лишився
   один — той, що над рядком з копірайтом. */
footer .fbig{margin-top:clamp(26px,3.4vw,44px);padding-top:clamp(26px,3.4vw,44px);
 overflow:hidden}
/* Слово розкладене по літерах і розтягнуте на всю ширину: літери
   стоять рівномірно (space-between), тому слово тримає ширину підвалу
   без розтягування самих знаків. Кожна проявляється по черзі під час
   прокрутки — див. .chap нижче. */
/* Слово-логотип стоїть упритул до нижнього краю сторінки (макет
   власниці, 04.09): літери не обрізані, вони саме торкаються краю.
   Просто так це не виходить — під літерами лишається порожнє місце
   рядка (нижні виносні, яких у SKERRY немає). Відʼємний нижній
   відступ прибирає цей залишок і ще трохи згори: 0.0763em — заміряна
   відстань від базової лінії до низу рядка, тобто рівно «впритул»;
   у коді стоїть 0.16em, бо власниця просила опустити слово нижче —
   різниця й дає зріз приблизно на 11% висоти літери. Рівняємось саме на базову лінію,
   а не на найнижчу точку слова: у «S» є овершут — кругла літера
   навмисне заходить трохи нижче за пласкі, щоб оптично здаватись
   такою ж. Якщо впирати в край її, решта пʼять зависають на 4,8 px
   вище, і слово виглядає косим. Тому вниз іде базова лінія: K, E, R,
   R, Y лягають рівно на край, а хвостик «S» зрізається — так це й
   має працювати. Величина в частках кегля, тому впритул лишається
   впритул на будь-якій ширині екрана.

   Слово ширше за екран і вирівняне по центру, тому крайні літери
   заходять за обидва краї. Через це center, а не space-between:
   інакше все зайве вилазило б тільки праворуч. */
footer .fbigw{--fcrop:.16em;display:flex;justify-content:center;align-items:flex-end;
 font-family:var(--disp);font-weight:800;font-size:21.5vw;
 line-height:.9;letter-spacing:-.03em;color:var(--ink);opacity:.1;
 margin-bottom:calc(var(--fcrop) * -1)}
html[data-theme="light"] footer .fbigw{opacity:.12}
/* --fcrop у частках кегля, тому працює однаково на всіх ширинах */
/* лінія лишається одна: розділювач переїхав на слово */
/* слово тепер після рядка з копірайтом, тому власна лінія .btm лишається */
@media(max-width:560px){footer .fbig{margin-top:30px;padding-top:28px}}
/* «Залишились питання?» у підвалі (28.08) */
footer .fask{margin-top:clamp(30px,4vw,46px)}

footer .btm{display:flex;gap:14px;flex-wrap:wrap;margin-top:34px;padding-top:18px;border-top:1px solid var(--line);
  font-size:12.5px;color:var(--mut)}

/* ---- сторінки й поява ---- */
.pg{display:none}
.pg.on{display:block}
.rv{opacity:0;transform:translateY(18px);transition:opacity .74s cubic-bezier(.16,.8,.3,1),transform .74s cubic-bezier(.16,.8,.3,1)}
.rv.in{opacity:1;transform:none}
.st1{transition-delay:.06s}.st2{transition-delay:.12s}.st3{transition-delay:.18s}.st4{transition-delay:.24s}
:focus-visible{outline:2px solid var(--acc);outline-offset:3px}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}
  .rv{opacity:1;transform:none}}

/* ---- перемикачі теми й мови (обʼєм задає скін через --s3*) ---- */
.ctrls{display:flex;align-items:center;gap:10px;flex:0 0 auto}
.ctrls .s3{border:0;background:var(--s3bg,var(--panel));border-radius:999px;color:var(--ink2);
  box-shadow:var(--s3sh,none)}
.ctrls .th{width:37px;height:37px;display:grid;place-items:center;cursor:pointer;font-size:16.5px;line-height:1;
  padding:0;transition:box-shadow .2s,transform .2s,color .2s}
.ctrls .th:hover{color:var(--ink)}
.ctrls .th:active{box-shadow:var(--s3in,none);transform:translateY(1px)}
/* стан «не за замовчуванням» лишається вдавленим */
.ctrls .th.in{box-shadow:var(--s3in,none);color:var(--acc)}
/* телеграм: та сама кругла кнопка, тільки посилання й знак усередині */
/* ---- «написати» в нижньому правому куті ----
   Кнопка, що росте з кружечка в підпис. У згорнутому стані займає рівно
   стільки, скільки значок; підпис виїжджає під курсором, з клавіатури
   і один раз сам, коли кнопка щойно зʼявилась. */
.tgd{position:fixed;z-index:96;
  right:clamp(16px,2.4vw,26px);
  bottom:calc(clamp(16px,2.4vw,26px) + env(safe-area-inset-bottom,0px));
  display:flex;align-items:center;gap:0;
  height:54px;padding:0 16px;
  border-radius:999px;border:1px solid transparent;
  background:var(--btnbg);color:var(--btnfg);text-decoration:none;
  box-shadow:0 18px 34px -18px rgba(0,0,0,.7),0 2px 8px rgba(0,0,0,.22);
  /* поки герой на екрані — кнопки немає: там своя головна дія */
  opacity:0;visibility:hidden;translate:0 14px;
  transition:opacity .28s,translate .34s cubic-bezier(.16,.84,.28,1),
    visibility 0s .34s,gap .3s cubic-bezier(.16,.84,.28,1),
    box-shadow .25s,scale .18s cubic-bezier(.16,.84,.28,1)}
.tgd.on{opacity:1;visibility:visible;translate:0 0;transition-delay:0s}
.tgd .ic{display:grid;place-items:center;width:22px;height:22px;flex:0 0 auto}
.tgd svg{width:21px;height:21px;display:block;fill:currentColor}
/* Підпис не ховаємо display:none — інакше зникає з дерева доступності.
   Ширина 0 з overflow:hidden лишає його читаним для програм озвучення. */
.tgd .lb{max-width:0;overflow:hidden;white-space:nowrap;
  font-size:14.6px;font-weight:600;line-height:1;
  transition:max-width .34s cubic-bezier(.16,.84,.28,1)}
.tgd:hover,.tgd:focus-visible,.tgd.hint{gap:10px}
.tgd:hover .lb,.tgd:focus-visible .lb,.tgd.hint .lb{max-width:15em}
.tgd:hover{box-shadow:0 22px 40px -18px rgba(0,0,0,.75),0 3px 10px rgba(0,0,0,.26)}
.tgd:active{scale:.96}
.tgd:focus-visible{outline:none;border-color:var(--btnfg)}
@media(max-width:600px){
  /* на телефоні кружечок і лишається кружечком: підпис забирав би
     півекрана й накривав те, що людина читає */
  .tgd{height:50px;padding:0 14px}
  .tgd:hover .lb,.tgd.hint .lb{max-width:0}
  .tgd:hover,.tgd.hint{gap:0}
}
@media(prefers-reduced-motion:reduce){
  .tgd,.tgd .lb{transition:opacity .2s,visibility 0s}
  .tgd{translate:0 0}
}
.ctrls .th.lg1{font-family:var(--mono);font-size:12.5px;font-weight:700;letter-spacing:.06em}
/* на телефоні: знак і назва першими, значки одразу за ними, бургер скраю */
@media(max-width:900px){.ctrls{margin-left:auto}.burg{order:1;margin-left:8px}}

/* ---- міні-сторінка в браузер-фреймі ---- */
.wcard .ph{overflow:hidden}
.wcard .ph em{z-index:3}
.wcard .ph .mini{position:absolute;left:0;right:0;top:0;display:grid;gap:7px;align-content:start;
  padding:12px 14px 18px;z-index:1;
  transition:transform 1.6s cubic-bezier(.22,.75,.25,1)}
.wcard:hover .ph .mini{transform:translateY(-30%)}
.mini>span{display:block;border-radius:4px}
.mini .mbar{height:15px;display:flex;align-items:center;gap:5px;padding:0 7px;border-radius:5px;
  background:rgba(255,255,255,.5)}
.mini .mbar i{display:block;width:13px;height:4px;border-radius:2px;background:rgba(255,255,255,.72)}
.mini .mbar i:first-child{width:24px;background:rgba(255,255,255,.96)}
.mini .mh{height:11px;width:66%;background:rgba(255,255,255,.9);margin-top:7px}
.mini .mh.s{height:8px;width:44%;background:rgba(255,255,255,.6)}
.mini .mbtns{display:flex;gap:6px;margin-top:3px}
.mini .mbtns i{display:block;width:46px;height:12px;border-radius:999px;background:rgba(255,255,255,.42)}
.mini .mbtns i.p{background:rgba(255,255,255,.94)}
.mini .mg3,.mini .mg2{display:grid;gap:6px;margin-top:4px}
.mini .mg3{grid-template-columns:repeat(3,1fr)}
.mini .mg2{grid-template-columns:repeat(2,1fr)}
.mini .mg3 i,.mini .mg2 i{display:block;height:38px;border-radius:6px;background:rgba(255,255,255,.32)}
.mini .mwide{height:26px;background:rgba(255,255,255,.22)}

/* ---- превʼю конфігурації в калькуляторі ---- */
.cprev{grid-column:1/-1}
.cprev .phint{font-size:13px;color:var(--mut);margin-top:8px;max-width:56ch}
.cprev .frame{position:relative;margin-top:18px;padding-top:34px;border-radius:14px;overflow:hidden;
  background:var(--chrome,rgba(255,255,255,.06));border:1px solid var(--chrome2,var(--line))}
.cprev .dots{position:absolute;top:13px;left:14px;display:flex;gap:5px;z-index:2}
.cprev .dots i{width:8px;height:8px;border-radius:50%;background:var(--chrome2,var(--line))}
.cprev .dots i:first-child{background:var(--acc);opacity:.8}
.cprev .url{position:absolute;top:9px;left:54px;right:14px;z-index:2;font-style:normal;
  font-family:var(--mono);font-size:10.5px;color:var(--mut);background:var(--chip,var(--panel));
  border-radius:999px;padding:3px 12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.cprev .scr{height:300px;overflow:hidden;background:var(--s3bg,var(--panel));
  border-top:1px solid var(--chrome2,var(--line))}
.cprev .mini{position:relative;transition:transform 2.6s cubic-bezier(.22,.75,.25,1)}
.cprev .frame:hover .mini{transform:translateY(var(--sc,0))}
.mini{display:grid;gap:7px;align-content:start;padding:12px 14px 18px}
.mini .mtabs{display:flex;gap:4px}
.mini .mtabs i{display:block;height:9px;width:34px;border-radius:3px;background:rgba(255,255,255,.24)}
.mini .mtabs i.on{background:rgba(255,255,255,.62)}
.mini .mbar i.lg{width:16px;background:var(--acc);opacity:.85;margin-left:auto}
.mini .mg4{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:4px}
.mini .mg4 i{display:block;height:30px;border-radius:6px;background:rgba(255,255,255,.3)}
.mini .mquiz{display:grid;gap:5px;padding:9px;border-radius:8px;background:rgba(255,255,255,.16);margin-top:4px}
.mini .mquiz i{display:block;height:9px;border-radius:999px;background:rgba(255,255,255,.4)}
.mini .mquiz i:first-child{width:52%;background:var(--acc);opacity:.75}
.mini .mblog{display:grid;gap:5px;margin-top:4px}
.mini .mblog i{display:block;height:14px;border-radius:4px;background:rgba(255,255,255,.26)}
.mini .mpay{display:flex;justify-content:flex-end;height:26px;align-items:center;border-radius:6px;
  background:rgba(255,255,255,.18);padding:0 8px;margin-top:4px}
.mini .mpay i{display:block;width:54px;height:12px;border-radius:999px;background:var(--acc);opacity:.8}
.mini .mform{display:grid;gap:6px;margin-top:6px}
.mini .mform i{display:block;height:14px;border-radius:5px;background:rgba(255,255,255,.22)}
.mini .mform i.p{width:64px;height:13px;border-radius:999px;background:rgba(255,255,255,.9)}
.mini .mfoot{height:22px;border-radius:5px;background:rgba(255,255,255,.14);margin-top:6px}
@media(max-width:760px){.cprev .scr{height:240px}}

/* ===== нові блоки: таблиці, списки, примітки ===== */
.tbl{margin-top:24px;overflow-x:auto;-webkit-overflow-scrolling:touch;
 border:1px solid var(--line);border-radius:var(--rad);background:var(--panel)}
.tbl table{border-collapse:collapse;width:100%;min-width:640px;font-size:13.6px}
.tbl th,.tbl td{padding:13px 16px;text-align:left;vertical-align:top;
 border-bottom:1px solid var(--line)}
.tbl thead th{font-family:var(--mono);font-size:11px;letter-spacing:.06em;
 text-transform:uppercase;color:var(--mut);font-weight:500;white-space:nowrap}
.tbl tbody th{font-weight:500;color:var(--ink);width:26%;min-width:170px}
.tbl td{color:var(--ink2)}
.tbl td.me{color:var(--ink);font-weight:500}
.tbl tbody tr:last-child th,.tbl tbody tr:last-child td{border-bottom:0}
.tbl tbody tr:hover{background:var(--hov)}
.tbl:focus-visible{outline:2px solid var(--acc);outline-offset:3px}
.note{margin-top:16px;font-size:13.4px;line-height:1.62;color:var(--mut);max-width:74ch}
/* дрібний рядок під кнопками фінального блоку: безкоштовність і час
   відповіді. Стоїть під дією, а не в заголовку — там йому місце. */
/* Дорога до статті з таблицями: окремий рядок, відбитий згори лінією.
   Лінія стоїть далеко від тексту навмисно — це кінець думки, а не її
   продовження. Підкреслення жовте: рядок має читатись як перехід. */
.gridln{margin-top:38px;padding-top:22px;border-top:1px solid var(--line)}
.gridln a.glink{color:var(--ink2);text-decoration:underline;
  text-decoration-color:var(--acc);text-decoration-thickness:1.5px;
  text-underline-offset:4px;
  transition:color .2s,text-decoration-color .2s}
.gridln a.glink:hover{color:var(--acc)}
/* Рядок під кнопками тримаємо в один рядок (28.08, прохання власниці):
   стеля в 46 символів ламала його навпіл, хоча в картці є місце.
   На вузькому екрані він однаково перенесеться — там інакше не буває. */
.card .ctanote,.fcta .ctanote{margin:14px auto 0;font-size:13px;line-height:1.6;color:var(--mut);
 max-width:min(100%,64ch)}
/* Панель підтримки під блоком «що входить»: окрема послуга з ціною,
   тому вона й виглядає як окрема пропозиція — своя цифра, своя кнопка.
   Ліворуч розмова, праворуч число й дія.
   Обводки немає (28.08, прохання власниці) — замість неї обʼєм: панель
   підведена над сторінкою тінню, згори тонке світло, знизу темніший
   край. Так вона читається як окремий предмет, а не як рамка. */
.cslab{margin-top:clamp(30px,3.8vw,44px);padding:clamp(22px,2.8vw,34px);
 border:0;border-radius:var(--rad);background:var(--panel);
 display:grid;grid-template-columns:minmax(0,1fr) auto;gap:clamp(20px,3vw,40px);
 align-items:center}
.cslab.big{position:relative;isolation:isolate;
 background:linear-gradient(180deg,
   color-mix(in srgb,var(--ink) 5%,var(--panel)),
   var(--panel) 42%,
   color-mix(in srgb,#000 6%,var(--panel)));
 box-shadow:0 1px 0 color-mix(in srgb,var(--ink) 12%,transparent) inset,
   0 -1px 0 color-mix(in srgb,#000 22%,transparent) inset,
   0 26px 48px -26px rgba(0,0,0,.6),
   0 6px 14px -10px rgba(0,0,0,.45);
 transition:transform .35s cubic-bezier(.16,.84,.28,1),box-shadow .35s}
.cslab.big:hover{transform:translateY(-3px);
 box-shadow:0 1px 0 color-mix(in srgb,var(--ink) 14%,transparent) inset,
   0 -1px 0 color-mix(in srgb,#000 24%,transparent) inset,
   0 34px 60px -28px rgba(0,0,0,.66),
   0 8px 18px -12px rgba(0,0,0,.5)}
@media(prefers-reduced-motion:reduce){.cslab.big{transition:none}
 .cslab.big:hover{transform:none}}
.cslab h3{margin:11px 0 0;font-size:clamp(20px,2.3vw,27px)}
.cslab p{margin:12px 0 0;max-width:62ch;font-size:14.6px;line-height:1.62;color:var(--ink2)}
.cslabr{display:grid;justify-items:end;gap:9px;text-align:right}
.cslabpr{font-family:var(--disp);font-size:clamp(23px,2.7vw,31px);
 font-variant-numeric:tabular-nums;white-space:nowrap}
.cslabtm{font-family:var(--mono);font-size:12.4px;color:var(--acc)}
.cslabr .btn{margin-top:7px}
/* Другий такий блок поспіль читався б як повтор, тому правовий іде
   без заливки й без цифри: та сама рамка, інша вага. */
.cslab.law,.cslab.soc,.cslab.shr,.cslab.seo,.cslab.cal{background:transparent}
/* Сітка винесених пунктів: головний блок лишається на всю ширину, ці
   йдуть по два в ряд. Усередині клітинки текст стоїть над ілюстрацією —
   на половині ширини дві колонки перетворили б абзац на стовпчик. */
.cslabgrid{margin-top:clamp(24px,3vw,34px);display:grid;gap:14px;
 grid-template-columns:repeat(auto-fit,minmax(390px,1fr))}
.cslabgrid .cslab{margin-top:0;grid-template-columns:1fr;align-items:start;
 gap:clamp(16px,2vw,22px)}
.cslabgrid .cslabr{justify-items:start;text-align:left}
@media(max-width:430px){.cslabgrid{grid-template-columns:1fr}}

/* Дві кнопки, що стоять на телефоні внизу екрана: намальовані, тому
   без href і без фокуса — це ілюстрація, а не діючі кнопки. */
.cbtns{display:flex;gap:9px;flex-wrap:wrap}
.cbtns i{font-style:normal;font-family:var(--body);font-size:13.4px;font-weight:600;
 padding:11px 20px;border-radius:999px;border:1px solid var(--line);color:var(--ink2)}
.cbtns i.p{background:var(--acc);border-color:var(--acc);color:var(--onacc)}
/* Рядок видачі: намальований, не знятий з пошуковика. Кольори свої,
   тому це приклад того, чим керують title і description, а не підробка
   під чужий інтерфейс. */
.serp{width:320px;max-width:100%;padding:14px 16px;border:1px solid var(--line);
 border-radius:12px;background:var(--panel)}
.serp i{display:block;font-style:normal;font-family:var(--mono);font-size:11px;color:var(--mut)}
.serp b{display:block;margin-top:6px;font-size:15px;line-height:1.3;color:var(--acc);font-weight:600}
.serp span{display:block;margin-top:6px;font-size:12.6px;line-height:1.5;color:var(--ink2)}
/* Картка, якою розкривається посилання в месенджері: намальована, а не
   знята з чужого застосунку — жодного чужого інтерфейсу й логотипа. */
.shcard{width:268px;max-width:100%;border:1px solid var(--line);border-radius:12px;
 overflow:hidden;background:var(--panel)}
.shimg{height:104px;display:grid;place-items:center;
 background:linear-gradient(135deg,color-mix(in srgb,var(--acc) 16%,transparent),transparent 62%),var(--bg2,var(--bg))}
.shimg .lg svg{width:38px;height:38px}
.shtx{padding:11px 13px 13px;border-top:1px solid var(--line)}
.shtx b{display:block;font-size:13.2px;line-height:1.35;font-weight:600}
.shtx i{display:block;margin-top:5px;font-style:normal;font-family:var(--mono);
 font-size:11px;color:var(--mut)}
/* Знаки соцмереж праворуч у блоці: не посилання, а ілюстрація того,
   куди вони стануть на сайті замовника — тому без href і без фокуса. */
.socrow{display:flex;gap:10px}
.socrow i{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;
 border:1px solid var(--line);color:var(--ink2)}
.socrow svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.5;
 stroke-linecap:round;stroke-linejoin:round}
.cslab.law p{max-width:70ch}
@media(max-width:820px){
 .cslab{grid-template-columns:1fr}
 .cslabr{justify-items:start;text-align:left}
 .cslabr .btn{width:100%;justify-content:center}}

/* Технічна база: сітка коротких плиток замість списку з крапками.
   Мова та сама, що в карток вище — рамка, радіус, іконка ліворуч, —
   але без абзацу: це перелік, а не шість окремих обіцянок. */
.baselist{list-style:none;padding:0;margin:20px 0 0;display:grid;gap:10px;
 /* 330, а не 258: так у широкому вікні стає три колонки — рівно як у
    карток вище, і дев'ять плиток лягають рівним квадратом 3×3 */
 grid-template-columns:repeat(auto-fit,minmax(330px,1fr))}
.baselist li{display:flex;align-items:center;gap:11px;min-width:0;
 padding:13px 15px;border:1px solid var(--line);border-radius:12px;
 font-size:14px;line-height:1.45;color:var(--ink2);
 transition:border-color .22s,transform .22s,background .22s}
.baselist li:hover{border-color:color-mix(in srgb,var(--acc) 52%,var(--line));
 transform:translateY(-2px)}
/* Мітка «з якого пакета» всередині плитки: окремим рядком під текстом,
   моноширинним, кольором акценту — щоб читалась як умова, а не як
   продовження фрази. */
.baselist span b{display:block;margin-top:3px;font-family:var(--mono);font-size:11px;
 font-weight:500;letter-spacing:.04em;color:var(--acc)}
.baselist svg{flex:0 0 auto;width:19px;height:19px;fill:none;stroke:var(--acc);
 stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
@media(prefers-reduced-motion:reduce){.baselist li:hover{transform:none}}
ul.dots{list-style:none;padding:0;margin:18px 0 0;display:grid;gap:9px}
ul.dots li{font-size:14.2px;color:var(--ink2);padding-left:19px;position:relative}
ul.dots li::before{content:"";position:absolute;left:2px;top:.62em;width:7px;height:7px;
 border-radius:50%;border:1.5px solid var(--acc)}
.cities{margin-top:10px;font-size:14.6px;line-height:1.9;color:var(--ink2)}
.swipe{display:none;margin-top:9px;font-family:var(--mono);font-size:11px;
 letter-spacing:.05em;color:var(--mut)}
@media(max-width:720px){.swipe{display:block}}
@media(max-width:640px){.tbl table{font-size:13px}.tbl th,.tbl td{padding:11px 13px}}

/* ===== лейаути: рядки, смуга, рейка, колонки, заява ===== */

/* --- нумеровані рядки: індекс | заголовок | текст, розділені лінійками --- */
.rows{margin-top:clamp(24px,3.6vw,42px);border-top:1px solid var(--line)}
.rows .row{display:grid;grid-template-columns:52px minmax(0,.8fr) minmax(0,1.45fr);
 gap:clamp(14px,2.6vw,38px);align-items:start;
 padding:clamp(20px,2.5vw,30px) clamp(6px,1vw,14px);
 border-bottom:1px solid var(--line);transition:background .35s}
.rows .row:hover{background:var(--hov)}
.rows .ix{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;color:var(--acc);
 padding-top:.5em}
.rows .row h3{margin:0;font-size:clamp(18px,1.9vw,23px);line-height:1.18;letter-spacing:var(--dls,-.01em)}
.rows .row p{margin:0;color:var(--ink2);font-size:15px;line-height:1.65}
@media(max-width:820px){
 .rows .row{grid-template-columns:1fr;gap:9px;padding-left:0;padding-right:0}
 .rows .ix{padding-top:0}
}

/* --- смуга цифр: без коробок, тільки лінійки --- */
.band{margin-top:clamp(20px,3vw,34px);display:grid;grid-template-columns:repeat(4,1fr);
 border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.band.n2{grid-template-columns:repeat(2,1fr)}
.band.n3{grid-template-columns:repeat(3,1fr)}
.band.n5{grid-template-columns:repeat(5,1fr)}
.band>div{position:relative;padding:clamp(24px,3.2vw,36px) clamp(16px,2vw,26px) clamp(22px,3vw,34px) 0;
 border-right:1px solid var(--line)}
/* відступ від розділювача: раніше цифри стояли до нього впритул */
.band>div+div{padding-left:clamp(18px,2.2vw,30px)}
.band>div:last-child{border-right:0}
.band b.num{display:flex;align-items:baseline;gap:.14em;
 font-family:var(--disp);font-weight:400;
 font-size:clamp(40px,5.4vw,72px);line-height:1.08;letter-spacing:-.045em}
/* Загальне правило карток «.num span» дотягувалось і сюди: саме число ставало
   13px і йшло з нового рядка, а дрібне «від» лишалось великим — виходило
   рівно навпаки. Тому обидві частини описані тут явно й сильнішим селектором. */
.band .num .pre{display:block;font-size:.36em;line-height:1;color:var(--mut);
 letter-spacing:.02em;margin:0;vertical-align:baseline}
.band .num .dc{display:block;margin:0;font-size:inherit;line-height:inherit;color:inherit;
 perspective:360px}
/* листки календаря: цифра падає з верхнього шарніра, ловлячи світло */
.band .fd,.band .fs{display:inline-block;font:inherit;letter-spacing:inherit;
 font-variant-numeric:tabular-nums}
.band .fd{transform-origin:50% 6%;backface-visibility:hidden}
.band .fd.go{animation:fdflip .17s cubic-bezier(.3,.7,.4,1)}
@keyframes fdflip{
 0%{transform:rotateX(-86deg);filter:brightness(1.7)}
 62%{filter:brightness(.9)}
 100%{transform:none;filter:none}}
@media(prefers-reduced-motion:reduce){.band .fd.go{animation:none}}
/* саме число лишається для читалок і пошуку, показується ж стрічка розрядів */
.band .num em{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.band .roll{display:flex;align-items:flex-start;font:inherit;letter-spacing:inherit}
.band .roll u,.band .roll i,.band .roll s{font:inherit;letter-spacing:inherit}
.band .roll u,.band .roll i{display:block;text-decoration:none;font-style:normal}
.band .roll i{height:1.08em;overflow:hidden}
.band .roll s{display:block;text-decoration:none;
 transition:transform 1.35s cubic-bezier(.16,.84,.28,1);transition-delay:var(--d,0ms)}
.band .roll s b{display:block;height:1.08em;line-height:1.08em;font:inherit;letter-spacing:inherit}
.band.in .roll s{transform:translateY(calc(var(--t) * -1.08em))}
@media(prefers-reduced-motion:reduce){.band .roll s{transition:none}}
.band .cap{display:block;margin-top:15px;font-size:13.2px;line-height:1.5;color:var(--mut);max-width:24ch}
@media(max-width:820px){
 .band,.band.n3,.band.n5{grid-template-columns:1fr 1fr}
 .band>div+div{padding-left:0}
 .band>div:nth-child(2n){padding-left:clamp(14px,4vw,22px)}
 .band>div:nth-child(2n){border-right:0}
 .band>div:nth-child(-n+2){border-bottom:1px solid var(--line)}
}

/* --- колонки, розділені вертикальними лінійками --- */
.cols3{margin-top:clamp(24px,3.6vw,42px);display:grid;grid-template-columns:repeat(3,1fr);
 border-top:1px solid var(--line)}
.cols3>div{padding:clamp(22px,2.8vw,32px) clamp(20px,2.4vw,30px) clamp(22px,2.8vw,32px) 0;
 border-right:1px solid var(--line)}
.cols3>div:last-child{border-right:0;padding-right:0}
.cols3 h3{margin:0;font-size:clamp(17px,1.8vw,21px);line-height:1.2}
.cols3 p{margin:11px 0 0;color:var(--ink2);font-size:14.6px;line-height:1.65}
@media(max-width:820px){
 .cols3{grid-template-columns:1fr}
 .cols3>div{border-right:0;border-bottom:1px solid var(--line);padding:22px 0}
 .cols3>div:last-child{border-bottom:0}
}

/* --- рейка етапів: вертикальна лінія з крапками --- */
.rail{margin-top:clamp(24px,3.6vw,42px);position:relative;padding-left:38px}
.rail::before{content:"";position:absolute;left:9px;top:14px;bottom:14px;width:1px;
 background:var(--line)}
.rail .st{position:relative;padding:clamp(18px,2.2vw,26px) 0}
.rail .st+.st{border-top:1px solid var(--line)}
.rail .st::before{content:"";position:absolute;left:-33.5px;top:calc(clamp(18px,2.2vw,26px) + 4px);
 width:9px;height:9px;border-radius:50%;background:var(--bg);
 border:1.5px solid var(--acc);box-shadow:0 0 0 4px var(--bg)}
.rail .st .mt2{font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;color:var(--mut)}
.rail .st h3{margin:9px 0 0;font-size:clamp(19px,2.1vw,25px);line-height:1.16}
.rail .st p{margin:10px 0 0;color:var(--ink2);max-width:72ch;line-height:1.66}
@media(max-width:820px){.rail{padding-left:26px}.rail::before{left:4px}.rail .st::before{left:-26.5px}}

/* --- заява на всю ширину: одне велике число --- */
.stmt{margin-top:clamp(20px,3vw,34px);padding:clamp(32px,5vw,64px) 0;text-align:center;
 border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.stmt b{display:block;margin-top:14px;font-family:var(--disp);font-weight:400;
 font-size:clamp(52px,9vw,104px);line-height:.9;letter-spacing:-.05em}
.stmt b i{font-style:normal;font-size:.3em;letter-spacing:-.01em;margin-left:.18em;
 vertical-align:.9em;color:var(--mut)}
.stmt p{margin:clamp(18px,2.4vw,26px) auto 0;max-width:64ch;color:var(--ink2);
 font-size:15.4px;line-height:1.68}

/* --- цитата на всю ширину --- */
.pull{margin:clamp(20px,3vw,34px) 0 0;padding:clamp(26px,4vw,48px) 0;
 border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
/* цитата стоїть по центру блоку */
.pull{text-align:center}
.pull blockquote{position:relative;margin:0 auto;font-family:var(--disp);font-weight:400;
 font-size:clamp(22px,3.4vw,40px);line-height:1.16;letter-spacing:-.03em;max-width:34ch}
/* колір вмикається колом навколо курсора: другий шар того самого тексту
   вирізано маскою, центр якої їде за --cx/--cy від FX.track */
.qspot{position:relative}
.qspot>span{display:block}
.qhi{position:absolute;inset:0;color:var(--acc);pointer-events:none;
 opacity:var(--lit,0);transition:opacity .35s;
 -webkit-mask-image:radial-gradient(circle 120px at calc(50% + var(--cx,0)*100%) calc(50% + var(--cy,0)*100%),#000 0 55%,rgba(0,0,0,.35) 75%,transparent 100%);
 mask-image:radial-gradient(circle 120px at calc(50% + var(--cx,0)*100%) calc(50% + var(--cy,0)*100%),#000 0 55%,rgba(0,0,0,.35) 75%,transparent 100%)}
@media(prefers-reduced-motion:reduce){.qhi{display:none}}
/* переклад під цитатою: тихіший за неї, але не примітка дрібним шрифтом */
.pull .qtr{margin:16px auto 0;max-width:46ch;font-size:14.4px;line-height:1.6;color:var(--ink2)}
.pull figcaption{margin-top:18px;font-family:var(--mono);font-size:11.5px;
 letter-spacing:.06em;color:var(--mut)}
@media(max-width:820px){.pull blockquote{max-width:none}}

/* --- гривня є не в кожному моноширинному шрифті --- */
.hmeta span,.mono,.tm,.pr{font-variant-numeric:tabular-nums}
.hmeta span{font-family:var(--body)}

/* --- чотири колонки з лінійками --- */
.cols4{margin-top:clamp(24px,3.6vw,42px);display:grid;grid-template-columns:repeat(4,1fr);
 border-top:1px solid var(--line)}
.cols4>div{padding:clamp(20px,2.6vw,30px) clamp(16px,2vw,26px) clamp(20px,2.6vw,30px) 0;
 border-right:1px solid var(--line)}
.cols4>div:last-child{border-right:0;padding-right:0}
.cols4 h3{margin:0;font-size:clamp(15px,1.5vw,17px);line-height:1.2;color:var(--acc);
 font-family:var(--mono);font-weight:500;letter-spacing:.02em}
.cols4 p{margin:10px 0 0;color:var(--ink2);font-size:14.4px;line-height:1.6}
@media(max-width:900px){
 .cols4{grid-template-columns:1fr 1fr}
 .cols4>div:nth-child(2n){border-right:0;padding-right:0}
 .cols4>div:nth-child(-n+2){border-bottom:1px solid var(--line)}
}
@media(max-width:560px){
 .cols4{grid-template-columns:1fr}
 .cols4>div{border-right:0;padding-right:0;border-bottom:1px solid var(--line)}
 .cols4>div:last-child{border-bottom:0}
}

/* --- ціна і строк рядком під ліда, замість трьох значків --- */
.hprice{margin-top:clamp(16px,2.2vw,24px);margin-bottom:clamp(22px,3vw,30px);max-width:52ch;
 font-size:clamp(14.6px,1.5vw,16.4px);line-height:1.6;color:var(--ink);
 padding-left:16px;border-left:2px solid var(--acc)}
@media(max-width:640px){.hprice{padding-left:13px}}

/* --- «усе з попереднього пакета» — підпис над переліком --- */
.pack ul li.lbl{list-style:none;padding-left:0;margin-top:2px;margin-bottom:2px;
 font-family:var(--mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;
 color:var(--mut)}
.pack ul li.lbl::before,.pack ul li.lbl::marker{content:none;display:none}

/* --- картка пакета: три поля з підписами (граматика MaxWeb) --- */
.pmeta{margin:14px 0 0;display:grid;grid-template-columns:auto;gap:0}
.pmeta dt{font-family:var(--mono);font-size:10.6px;letter-spacing:.07em;
 text-transform:uppercase;color:var(--mut);margin-top:11px}
.pmeta dt:first-child{margin-top:0}
.pmeta dd{margin:3px 0 0;font-size:14.2px;line-height:1.5;color:var(--ink2)}
.pack .pmeta+.pr{margin-top:18px}

/* --- результат етапу і момент оплати в одному рядку --- */
.stres{margin-top:14px;display:flex;flex-wrap:wrap;gap:8px 26px}
.stres span{font-size:13.6px;line-height:1.5;color:var(--ink2);max-width:46ch}
.stres i{display:block;font-family:var(--mono);font-style:normal;font-size:10.6px;
 letter-spacing:.07em;text-transform:uppercase;color:var(--mut);margin-bottom:2px}
.stres .pay span,.stres .pay{color:var(--ink)}
.stres .pay i{color:var(--acc)}

/* --- pack: name = what people search, caption = what it is --- */
.pack .psub{margin-top:5px;font-size:13.4px;line-height:1.4;color:var(--mut)}
.pack .psub+.pmeta{margin-top:16px}

/* --- значок «чому» в таблиці доплат: details, а не тултип, бо телефон --- */
.ihint{display:inline-block;margin-left:8px;vertical-align:baseline}
.ihint summary{display:inline-flex;align-items:center;justify-content:center;
 width:17px;height:17px;border-radius:50%;border:1px solid var(--line);
 font-family:var(--mono);font-size:10.5px;line-height:1;color:var(--mut);
 cursor:pointer;list-style:none;transition:border-color .25s,color .25s}
.ihint summary::-webkit-details-marker{display:none}
.ihint summary:hover,.ihint[open] summary{border-color:var(--acc);color:var(--acc)}
.ihint span{display:block;margin-top:10px;max-width:46ch;font-size:13px;
 line-height:1.6;color:var(--ink2);font-weight:400;white-space:normal}

/* текст не має вдавати поле для набору */
body{cursor:default}
input,textarea,select,[contenteditable]{cursor:text}
a,button,label,summary,.opt,.blk,.rng{cursor:pointer}
.rng{cursor:ew-resize}

/* ===== перенесено з гілки дизайну ===== */
.total.rcp{font-family:var(--mono)}
.total.rcp .rhead{font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--mut);text-align:center}
.total.rcp .dash{border-top:1px dashed var(--line);margin:12px 0}
.total.rcp .big{font-family:var(--disp);text-align:right}
.total.rcp [data-term]{text-align:right}
.total.rcp .row{border-bottom:0;padding:3px 0;font-size:13px}
.total.rcp .row b{font-weight:500}
.total.rcp [data-rows] .row{border-bottom:1px dashed var(--line)}
.total.rcp [data-rows] .row:last-of-type{border-bottom:0}
.total.rcp .stamp{margin-top:14px;text-align:center;font-size:11px;letter-spacing:.14em;
  color:var(--acc);border:1px dashed var(--acc);border-radius:6px;padding:6px;
  transform:rotate(-1.2deg);opacity:.9}
.total.rcp::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:9px;pointer-events:none;
  background:repeating-linear-gradient(135deg,var(--bg) 0 8px,transparent 8px 16px)}
.total.rcp .bt{margin-top:16px}
/* чотири варіанти калькулятора поруч */
.cvar{margin-top:44px}
.cvar .calc{margin-top:22px}
.picks{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.picks button{font:inherit;font-size:14px;padding:10px 16px;border-radius:var(--brad);
 background:var(--btnbg);border:1px solid var(--line);color:var(--ink2);transition:background .2s,color .2s,border-color .2s}
.picks button:hover{color:var(--ink)}
.picks button.on{background:var(--acc);border-color:var(--acc);color:var(--onacc);font-weight:600}
.ctot{display:flex;align-items:baseline;gap:14px;flex-wrap:wrap;margin-top:26px;padding-top:20px;
 border-top:1px solid var(--line)}
.ctot b{font-family:var(--disp);font-size:clamp(26px,3.6vw,38px);font-variant-numeric:tabular-nums;line-height:1}
.ctot span{font-family:var(--mono);font-size:12.5px;color:var(--acc)}
/* варіант «мʼяка форма» */
.soft3{margin-top:22px;border-radius:26px;padding:clamp(20px,3vw,32px);
 background:var(--s3bg,var(--panel));box-shadow:var(--s3sh,var(--shadow))}
.soft3 .row2{display:grid;grid-template-columns:1fr 1fr;gap:26px}
@media(max-width:760px){.soft3 .row2{grid-template-columns:1fr}}
.soft3 .sp{border:0;background:var(--s3bg,var(--panel));color:var(--ink2);font:inherit;font-size:14.2px;
 padding:13px 19px;border-radius:16px;box-shadow:var(--s3sh,var(--shadow));transition:color .24s,box-shadow .24s}
.soft3 .sp:hover{color:var(--ink)}
.soft3 .sp.on{color:var(--acc);font-weight:600;box-shadow:var(--s3in,inset 0 2px 6px rgba(0,0,0,.3))}
.soft3 .pills{display:flex;gap:10px;flex-wrap:wrap;margin-top:10px}
.soft3 .pills.two{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
.soft3 .pills.two .sp{text-align:left;padding:15px 18px}
.soft3 .sp b{display:block;font-family:var(--mono);font-size:11.5px;color:var(--mut);
 font-weight:400;margin-top:6px}
.soft3 .sp.on b{color:var(--ink2)}
.soft3 .sgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(184px,1fr));gap:10px;margin-top:10px}
.soft3 .tot{margin-top:26px;border-radius:22px;padding:26px;text-align:center;
 box-shadow:var(--s3in,inset 0 2px 6px rgba(0,0,0,.3))}
.soft3 .tot b{display:block;font-family:var(--disp);font-size:clamp(28px,4vw,40px);line-height:1;
 font-variant-numeric:tabular-nums}
.soft3 .tot span{font-family:var(--mono);font-size:12.5px;color:var(--acc);display:block;margin-top:9px}

/* бічні рейки */
/* Обидві рейки однакової висоти, а риски приколоті до її країв: інакше
   кожна рейка центрувалась по своєму вмісту, і риска ліворуч висіла на
   47 px нижче за праву — око це ловить, бо вони на одній лінії погляду
   (28.08). Слова лишаються по центру екрана. */
.srail{position:fixed;top:50%;transform:translateY(-50%);z-index:80;display:none;
 flex-direction:column;align-items:center;justify-content:center;gap:22px;
 height:min(92vh,520px)}
.srail .ln{position:absolute;left:50%;margin-left:-.5px}
.srail .ln:first-child{top:0}
.srail .ln:last-child{bottom:0}
/* Поперечна риска над стовпчиком слів — та сама, що була на сайті
   раніше: тоді її малював border-top від класу acc, і стояла вона над
   «Порахувати мій сайт». Тепер це свій елемент, по одному в кожній
   рейці, з таким самим відступом 28 px, як був у старому вигляді. */
/* поперечні риски обіймають стовпчик слів з обох боків: над першим
   словом і під останнім, в обох рейках (прохання власниці 28.08) */
.srail .ln.in{position:static;margin:0;width:100%;height:1px}
/* показуємо тільки там, де поля сторінки ширші за рейку */
@media(min-width:1280px){.srail{display:flex}}
/* з 1280px обабіч зʼявляються вертикальні рейки — шапка, вміст і підвал
   мусять їх обходити, інакше логотип чи картка лягає просто на рейку.
   27.08: правило поширене з шапки й підвалу на весь вміст — той теж
   поїхав до країв — і поле піднято до 84px, щоб усі три краї збіглись
   в одну лінію: 20 (відступ рейки) + 38 (сама рейка) + 26 повітря. */
@media(min-width:1280px){.w,.hd .w,footer .w{padding-left:84px;padding-right:84px}}
.srail.lft{left:20px}
.srail.rgt{right:20px}
.srail .ln{width:1px;height:58px;background:var(--line)}
.srail a{writing-mode:vertical-rl;font-family:var(--mono);font-size:13.5px;letter-spacing:.2em;
 text-transform:uppercase;color:var(--mut);text-decoration:none;padding:12px 8px;
 transition:color .25s}
.srail.lft a{transform:rotate(180deg)}
.srail a:hover,.srail a.on{color:var(--ink)}
.srail a.sacc{color:var(--acc)}
.srail a.sacc:hover{color:var(--ink)}
@media(prefers-reduced-motion:reduce){.srail a{transition:none}}

/* смужка їде за прокруткою; крапка залита, коли смужка пройшла її центр */
.rail{position:relative}
.rfill{position:absolute;left:9px;top:14px;width:1px;height:0;background:var(--acc);z-index:1}
.rail .st::before{transition:background .3s,border-color .3s,transform .3s}
.rail .st.done::before{background:var(--acc);border-color:var(--acc)}
.rail .st.now::before{transform:scale(1.25)}
@media(max-width:820px){.rfill{left:4px}}
@media(prefers-reduced-motion:reduce){.rail .st::before{transition:none}}

/* ---- піксельна пляма за курсором (тільки блог) ---- */
.cur{position:fixed;left:0;top:0;z-index:120;pointer-events:none;opacity:0;
  transition:opacity .25s}
/* поява й зникнення плавні: курсор тепер вмикається лише над
   блоком переваг, і без переходу він блимав би на межі. 04.09 */
.cur{transition:opacity .18s}
.cur.on{opacity:.92}
/* Над самими картками системну стрілку ховаємо — там працює власний
   курсор-коло. Перелік має збігатися з CUR_CARDS у core.js.
   Тільки на пристроях із мишею: на тачскріні :hover не існує, а
   cursor:none там нічого не значить. 04.09. */
@media(pointer:fine){
 .card.ac,.card.ac *,
 .card.pack,.card.pack *{cursor:none}
 /* кнопку всередині картки не виключаємо: два курсори одночасно —
    коло й системна рука — виглядають як помилка. Що кнопка натискна,
    видно з її власної зміни при наведенні. */
}
@media (max-width:900px){.cur{display:none}}

/* ---- підказка «гортати» під першим екраном ---- */
.sdown{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:4;
  display:flex;flex-direction:column;align-items:center;gap:10px;
  font-family:var(--mono);font-size:11px;letter-spacing:.2em;text-transform:uppercase;
  color:var(--mut);background:none;border:0;padding:8px 12px;
  transition:color .25s,opacity .4s}
.sdown:hover{color:var(--ink)}
.sdown i{position:relative;display:block;width:1px;height:34px;background:var(--line);overflow:hidden}
.sdown i::after{content:"";position:absolute;left:0;top:0;width:1px;height:13px;background:var(--acc);
  animation:sdrop 2.1s cubic-bezier(.4,0,.25,1) infinite}
.sdown u{display:block;width:7px;height:7px;border-right:1px solid currentColor;
  border-bottom:1px solid currentColor;transform:rotate(45deg);margin-top:-4px}
.sdown.gone{opacity:0;pointer-events:none}
@keyframes sdrop{0%{transform:translateY(-15px);opacity:0}
  25%{opacity:1}100%{transform:translateY(34px);opacity:0}}
@media(prefers-reduced-motion:reduce){.sdown i::after{animation:none}}
@media(max-width:700px){.sdown{display:none}}

/* ---- 404: цифри малюються контуром, як лінія знака ---- */
.nf{min-height:calc(100svh - 74px);display:flex;align-items:center;position:relative}
@supports not (height:100svh){.nf{min-height:calc(100vh - 74px)}}
.nfnum{font-family:var(--disp);font-weight:800;line-height:.86;letter-spacing:-.05em;
  font-size:clamp(96px,20vw,240px);color:transparent;margin:0;
  -webkit-text-stroke:1.5px var(--acc);text-stroke:1.5px var(--acc)}
.nfnum span{display:inline-block}
.nfnum span.mid{color:var(--acc);-webkit-text-stroke:0}
.nfh{margin-top:6px}
.nf .lead{max-width:56ch}
.nflinks{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--gap,16px);margin-top:34px;max-width:760px}
.nflinks a{display:block;padding:20px 22px;border:1px solid var(--line);border-radius:var(--rad,16px);
  text-decoration:none;color:var(--ink);transition:border-color .25s,transform .35s cubic-bezier(.16,.8,.3,1)}
.nflinks a:hover{border-color:var(--acc);transform:translateY(-2px)}
.nflinks b{display:block;font-size:15.5px;font-weight:600}
.nflinks span{display:block;margin-top:6px;font-size:13.5px;color:var(--ink2);line-height:1.5}
.nfnote{margin-top:30px;font-size:13.5px;color:var(--mut);max-width:60ch}
@media(max-width:700px){.nflinks{grid-template-columns:1fr}}

/* робота, чий кейс ще не опубліковано: підпис не вдає результат */
.wcard .r.soon{color:var(--mut);font-style:normal;opacity:.9}

/* ---- блок автоматизації: значки, які перетягуються в кнопку ---- */
.autob{position:relative}
.autob .sub{max-width:64ch}
.autob .note{max-width:60ch;margin-top:14px}
/* блок відцентровано цілком: текст, ряд плиток і кнопка */
.autob{text-align:center}
.autob .sub{margin-inline:auto}
.achips{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:26px;
 max-width:820px;margin-inline:auto}
/* рідке скло: напівпрозора лінза, що піднімає насиченість того, що за
   нею, зі світлим верхнім ребром і відблиском, який їздить за курсором */
.achip{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:9px;
  padding:11px 15px 11px 13px;border-radius:999px;color:var(--ink);
  border:1px solid rgba(255,255,255,.22);
  background:linear-gradient(155deg,rgba(255,255,255,.16),rgba(255,255,255,.03) 55%,rgba(255,255,255,.09));
  -webkit-backdrop-filter:blur(16px) saturate(1.5);backdrop-filter:blur(16px) saturate(1.5);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.34),inset 0 -1px 0 rgba(0,0,0,.18),
   0 10px 26px -14px rgba(0,0,0,.55);
  font:inherit;font-size:13.6px;cursor:grab;touch-action:none;user-select:none;
  transform:perspective(600px)
   rotateX(calc(var(--cy,0) * -10deg)) rotateY(calc(var(--cx,0) * 12deg))
   translateY(calc(var(--lit,0) * -3px));
  transition:border-color .25s,color .25s,transform .45s cubic-bezier(.16,.8,.3,1),opacity .3s}
.achip>*{position:relative;z-index:2}
/* Поява значків чергою. Рухаємо translate і opacity, а не transform:
   transform у .achip уже зайнятий нахилом за курсором, і перебити його
   означало б зламати «скло». Контейнер сам не їде — їдуть діти. */
.achips.rv{opacity:1;transform:none}
.achips>.achip{opacity:0;translate:0 14px;
  transition:opacity .6s cubic-bezier(.16,.8,.3,1) calc(var(--i,0) * 70ms),
   translate .6s cubic-bezier(.16,.8,.3,1) calc(var(--i,0) * 70ms),
   border-color .25s,color .25s,transform .45s cubic-bezier(.16,.8,.3,1)}
.achips.in>.achip{opacity:1;translate:none}
/* підказка про перетягування: до 28.08 вона лежала в текстах і не малювалась */
.ahint{max-width:62ch;margin:18px auto 0;font-size:13.6px;line-height:1.55;color:var(--mut)}
.achip:hover{border-color:rgba(255,255,255,.42)}
/* світла тема: скло молочніше, ребра темні, тінь легша */
html[data-theme="light"] .achip{border-color:rgba(22,35,46,.14);
  background:linear-gradient(155deg,rgba(255,255,255,.72),rgba(255,255,255,.38) 55%,rgba(255,255,255,.56));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -1px 0 rgba(22,35,46,.08),
   0 10px 24px -16px rgba(30,50,60,.45)}
html[data-theme="light"] .achip:hover{border-color:rgba(22,35,46,.3)}
/* у польоті під пальцем нахил вимкнено: перекошена плитка тягнеться погано */
.achip.lift{transform:none}
.achip:active{cursor:grabbing}
.achip svg{width:19px;height:19px;fill:none;stroke:var(--acc);stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round;flex:0 0 auto}
/* що всмокталось у кнопку — зникає з ряду, поки не прибрати хрестиком */
.achip.used{display:none}
.achip.lift{position:fixed;z-index:130;margin:0;cursor:grabbing;
  border-color:var(--acc);box-shadow:var(--shadow,0 18px 40px -22px rgba(0,0,0,.7));
  transition:none;will-change:transform}
.achip.fly{transition:transform .33s cubic-bezier(.4,0,.2,1),opacity .33s}
/* порожнє місце в ряду, поки значок у руці */
.aslot{display:inline-block;border-radius:999px;border:1px dashed var(--line);
  transition:width .3s cubic-bezier(.4,0,.2,1),margin .3s,opacity .3s}
/* копія, що летить за пальцем */
.adrop{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:14px;margin-top:30px}
/* Кнопка більша за звичайну (27.08): вона не тільки кнопка, а й ціль,
   у яку тягнуть картки, — у малу важче влучити пальцем на телефоні. */
.adrop .btn.p{position:relative;padding:18px 34px;font-size:16.4px;
 transition:transform .25s,box-shadow .25s}
.adrop.over .btn.p{transform:scale(1.06)}
.adrop .btn.p b{display:inline-grid;place-items:center;min-width:25px;height:25px;margin-left:12px;
  border-radius:999px;background:var(--onacc);color:var(--acc);font-size:12px;font-weight:700;
  font-family:var(--mono)}
.adrop .btn.p b:empty{display:none}
.apicked{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.apicked .atag{display:inline-flex;align-items:center;gap:8px;padding:7px 9px 7px 13px;
  border:1px solid var(--line);border-radius:999px;font-size:12.8px;color:var(--ink2)}
.apicked .atag button{border:0;background:none;color:var(--mut);cursor:pointer;font:inherit;
  line-height:1;padding:2px 3px}
.apicked .atag button:hover{color:var(--ink)}
/* Підказка словами лишається в розмітці — але не на екрані: замість неї
   те саме показує анімація нижче. Повертається, коли анімацію вимкнено. */
/* Поки нічого не обрано, список обраного не займає місця в рядку:
   інакше він із проміжком зсував кнопку від центру на пів проміжку.
   Сам підпис лишається в розмітці — його читають програми для незрячих. */
.apicked.empty{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
.apicked .hint{font-size:12.8px;color:var(--mut)}
/* Копія справжньої картки, що летить у кнопку. Клас .achip лишається,
   тому копія виглядає точно як оригінал; тут тільки виймаємо її з
   потоку, щоб політ нічого не зсував. */
.agfly{position:absolute;z-index:6;margin:0;pointer-events:none;
  box-sizing:border-box;justify-content:center;transform-origin:50% 50%;
  will-change:transform,opacity}
/* кнопка коротко відгукується, коли в неї щось прилетіло */
/* Відповідь кнопки на влучання — світлове кільце, а не зміна розміру
   (28.08, прохання власниці: «не збільшуй анімацією кнопку»). Кнопка
   лишається на місці й того самого розміру, але видно, що влучили. */
@keyframes adrophit{0%{box-shadow:0 0 0 0 rgba(255,255,255,.55)}
 55%{box-shadow:0 0 0 9px rgba(255,255,255,0)}
 100%{box-shadow:0 0 0 0 rgba(255,255,255,0)}}
.adrop.pulse .btn.p{animation:adrophit .52s cubic-bezier(.3,.8,.3,1)}
@keyframes ashake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
.adrop.no .btn.p{animation:ashake .32s}
@media(prefers-reduced-motion:reduce){.adrop.no .btn.p{animation:none}
 .apicked.empty{position:static;width:auto;height:auto;clip-path:none}}

/* ---- власний список замість системного select ---- */
.fld .lb{display:block;font-size:12.5px;color:var(--mut);margin-bottom:6px;font-family:var(--mono);
  letter-spacing:.11em;text-transform:uppercase}
.sel{position:relative}
.selbtn{width:100%;display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:13px 15px;text-align:left;font:inherit;color:var(--ink);cursor:pointer;
  background:var(--s3bg,var(--panel));border:1px solid transparent;border-radius:var(--frad,10px);
  box-shadow:var(--s3in,none);transition:border-color .2s}
.sel.open .selbtn,.selbtn:focus-visible{border-color:var(--acc);outline:none}
.selbtn i{width:8px;height:8px;flex:0 0 auto;border-right:1.5px solid var(--mut);
  border-bottom:1.5px solid var(--mut);transform:translateY(-2px) rotate(45deg);transition:transform .25s}
.sel.open .selbtn i{transform:translateY(2px) rotate(-135deg)}
.selist{position:absolute;left:0;right:0;top:calc(100% + 8px);z-index:30;
  margin:0;padding:6px;list-style:none;border:1px solid var(--line);border-radius:var(--rad,14px);
  background:var(--s3bg,var(--bg));box-shadow:0 26px 54px -28px rgba(0,0,0,.8);
  -webkit-backdrop-filter:blur(22px);backdrop-filter:blur(22px);
  /* власна прокрутка, як у системного select: інакше довгий список
     вилазить за нижній край і останні пункти нічим дістати */
  max-height:min(46vh,292px);overflow-y:auto;overscroll-behavior:contain;
  scrollbar-width:thin}
.selist::-webkit-scrollbar{width:8px}
.selist::-webkit-scrollbar-thumb{background:var(--line);border-radius:999px;
  border:0;background-clip:border-box}
/* знизу не влазить — розкриваємо вгору */
.sel.up .selist{top:auto;bottom:calc(100% + 8px)}
.selist li{padding:11px 13px;border-radius:999px;color:var(--ink2);font-size:14px;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:10px;transition:background .18s,color .18s}
.selist li:hover,.selist li:focus{background:var(--hov);color:var(--ink);outline:none}
.selist li.on{color:var(--acc)}
.selist li.on::after{content:"✓";font-size:12px}
@media(prefers-reduced-motion:reduce){.selbtn i,.selist li{transition:none}}

/* --- смуга-питання: одне питання на всю ширину --- */
.qband{position:relative;overflow:hidden;background:#0B3437;color:#fff;
 padding:clamp(40px,6.4vw,84px) 0;margin:clamp(34px,5vw,64px) 0}
.qband::before{content:'';position:absolute;inset:0;
 background-image:radial-gradient(circle,rgba(255,255,255,.15) 1.1px,transparent 1.3px);
 background-size:13px 13px}
.qband::after{content:'';position:absolute;inset:-30% -10% auto -10%;height:170%;
 background:radial-gradient(60% 90% at 18% 40%,rgba(32,144,137,.5),transparent 62%),
  radial-gradient(55% 85% at 88% 55%,rgba(228,87,46,.34),transparent 64%);
 mix-blend-mode:screen;pointer-events:none}
/* Приклад і кнопка стоять однією колонкою праворуч, вирівняні по
   верху смуги (прохання власниці 28.08: «приклад трохи вище і правіше,
   а під ним кнопку»). Текст ліворуч лишається на місці. */
.qbandin{position:relative;z-index:2;display:flex;align-items:flex-start;
 justify-content:space-between;gap:clamp(20px,3vw,44px);flex-wrap:wrap}
.qbandtx{flex:1 1 460px;min-width:0;container-type:inline-size}
.qband .eyebrow{color:rgba(255,255,255,.62)}
/* Заголовок смуги: 68 px великими літерами читались як плакат, а не як
   речення (прохання власниці 27.08 — менш жирний). Ставимо 600, і це
   саме та вага, яка є у файлі шрифта: у теці лежать лише 400, 600 і 800,
   тож попереднє «700» браузер округляв угору й малював 800 — найважче
   накреслення Unbounded. 600 — справжній крок униз, а не назва ваги.
   Трекінг трохи відпущено: у легшого накреслення великі літери злипаються. */
.qband h2{margin:14px 0 0;font-size:clamp(22px,5.6vw,52px);line-height:1.03;
 font-weight:600;letter-spacing:-.012em;text-transform:uppercase;color:#fff;
 text-wrap:balance}
/* Підсвічені слова в заголовку смуги: <i> тут не курсив, а акцентний
   колір — так у макеті власниці (04.09). */
.qband h2 i{font-style:normal;color:var(--acc)}
/* Розмір рахується від ширини СВОЄЇ колонки, а не від ширини екрана
   (28.08). Причина конкретна: у новому заголовку є слово
   «РЕКОМЕНДУВАТИМУТЬ» — на 68 px воно 1029 px завширшки, а колонка
   тексту 819, тож слово лізло на приклад праворуч, а на телефоні його
   просто обрізало краєм смуги. Прив'язка до колонки тримає найдовше
   слово всередині на будь-якій ширині. */
@supports (font-size:1cqw){.qband h2{font-size:clamp(22px,6.4cqw,52px)}}
.qband p{margin:18px 0 0;max-width:56ch;font-size:14.5px;line-height:1.6;
 color:rgba(255,255,255,.78)}
/* Приклад відповіді ШІ у смузі: світлий екран усередині темної смуги —
   так він читається як окремий кадр, а не як ще один абзац. */
/* «Читати детальніше» — текстове посилання, а не друга кнопка: у смузі
   вже є головна дія, і другий прямокутник поруч сперечався б із нею. */
.bmore{display:inline-flex;align-items:center;gap:7px;margin-top:16px;
 font-size:14px;font-weight:600;color:#5FB3C9;text-decoration:none;
 border-bottom:1px solid rgba(95,179,201,.38);padding-bottom:2px;
 transition:color .22s,border-color .22s,gap .22s}
.bmore:hover,.bmore:focus-visible{color:#fff;border-color:#fff;gap:11px}
.bmore svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;
 stroke-linecap:round;stroke-linejoin:round}
/* Кнопка стоїть під підписом лівим краєм, а не по правому краю колонки
   (28.08, прохання власниці: «трохи лівіше, щоб прям під текстом»).
   Сама колонка як була притиснута до правого краю смуги, так і лишилась —
   рухається тільки кнопка всередині неї. */
.qbandrt{flex:0 1 400px;min-width:0;margin-left:auto;
 display:flex;flex-direction:column;align-items:flex-start;gap:22px}
/* смуга без прикладу (там сама кнопка): кнопка лишається знизу, як була,
   інакше вона висить у порожнечі навпроти першого рядка заголовка */
/* смуга без прикладу: там немає підпису, під який рівняти кнопку, тож
   вона лишається біля правого краю — інакше висить посеред порожнечі */
.qbandrt.nod{align-self:flex-end;align-items:flex-end}
.qbanddemo{width:100%;min-width:0}
/* Картка відповіді в темних тонах (27.08, прохання власниці: «як у
   гугл»): майже чорна поверхня з тонкою світлою межею — так виглядають
   темні теми асистентів. Кольори задані числами, а не змінними теми:
   смуга темна в обох темах, і картка має лишатись однаковою.
   Світлий текст на #10191A — контраст близько 12:1. */
.aichat{background:#10191A;border:1px solid rgba(255,255,255,.14);
 border-radius:14px;padding:15px 16px;
 box-shadow:0 20px 46px rgba(0,0,0,.42)}
.aiq{display:flex;justify-content:flex-end}
.aiq span{max-width:90%;padding:8px 12px;border-radius:13px 13px 4px 13px;
 background:rgba(255,255,255,.09);color:#E4EDEC;font-size:13.2px;line-height:1.5}
.qband .aia{margin-top:13px}
.qband .aia b{display:block;font-family:var(--mono);font-size:10.2px;letter-spacing:.08em;
 text-transform:uppercase;color:#8CA0A1;font-weight:500}
.qband .aia p{margin:7px 0 0;max-width:none;color:#DEE8E7;font-size:13.2px;line-height:1.55}
.ailist{list-style:none;margin:11px 0 0;padding:0;display:grid;gap:9px}
.ailist li{display:flex;gap:9px;align-items:flex-start;
 color:#DEE8E7;font-size:13.2px;line-height:1.5}
.ailist li i{flex:0 0 auto;width:5px;height:5px;border-radius:50%;
 background:rgba(255,255,255,.26);margin-top:7px}
.ailist .me i{background:#5FB3C9}
.ailist .me b{color:#8FD3E4;font-weight:600}
.aiskel{display:block;flex:1 1 auto;height:9px;border-radius:5px;
 background:rgba(255,255,255,.12);margin-top:5px}
.aiskel.s{max-width:72%}
.qband .aicap{margin:13px 0 0;max-width:42ch;font-size:12.4px;line-height:1.55;
 color:rgba(255,255,255,.66)}
@media(max-width:980px){.qbandrt{flex:1 1 100%;margin-left:0}}
.qbandbt{flex:0 0 auto}
/* Кнопка смуги більша за звичайну і при наведенні заливається жовтим
   зліва направо: смуга — єдине темне місце сторінки, і кнопка в ній має
   читатись як головна дія, а не як ще одне посилання. Заливка йде
   псевдоелементом під текстом (isolation створює свій контекст, тому
   z-index:-1 лягає над білим тлом, але під підписом), а не зміною
   background: так її видно як рух, а не як перемикання кольору. */
/* Помаранчева (28.08, прохання власниці). Колір не новий для смуги:
   у її підсвітці вже світиться rgba(228,87,46) — беремо той самий тон,
   але темніший, #C9481C: на ньому білий підпис дає контраст 4.7:1,
   на світлішому — 3.9, тобто нижче норми. */
.qband .btn.p{position:relative;isolation:isolate;
 padding:17px 32px;font-size:15.6px;background:#C9481C;color:#fff;border-color:#C9481C}
/* кути ріже сам псевдоелемент, а не overflow:hidden — інакше зникає
   невидимий запас .btn::after, який тримає курсор на підйомі кнопки.

   Заливка йде зрізом (clip-path), а не stiscaleX. Кнопка — таблетка з
   радіусом 999px: розтягування по X ліпило з круглих торців сплюснуті
   еліпси, і рух читався як «ломаний». Зріз лишає форму недоторканою,
   рухається тільки межа заливки.

   Колір заливки заданий числом, а не var(--acc): смуга темна в обох
   темах, а світлий акцент (#2E7E96) під темним підписом дав би
   нечитабельну пару. #5FB3C9 — той самий брендовий акцент із темної
   теми, на ньому підпис читається. */
.qband .btn.p::before{content:'';position:absolute;inset:0;z-index:-1;
 border-radius:inherit;background:#fff;
 clip-path:inset(0 100% 0 0);
 transition:clip-path .5s cubic-bezier(.2,.7,.2,1)}
.qband .btn.p:hover,.qband .btn.p:focus-visible{background:#C9481C;color:#0B3437;border-color:#fff}
.qband .btn.p:hover::before,.qband .btn.p:focus-visible::before{clip-path:inset(0 0 0 0)}
@media(prefers-reduced-motion:reduce){.qband .btn.p::before{transition:none}}
@media(max-width:760px){.qbandrt{align-items:stretch}.qbandbt{width:100%}
 .qband .btn.p{width:100%;justify-content:center}}

/* --- бирка з умовою біля кнопок героя --- */
.htag{display:inline-flex;align-items:center;gap:9px;margin-top:20px;
 padding:9px 15px;border:1px dashed var(--acc);border-radius:999px;
 font-family:var(--mono);font-size:12.4px;line-height:1;color:var(--ink)}
.htag svg{width:15px;height:15px;flex:0 0 auto;fill:none;stroke:var(--acc);
 stroke-width:1.7;stroke-linejoin:round;stroke-linecap:round}
.htag sup{font-size:10px;margin-left:2px;color:var(--acc)}
.bnote{margin-top:13px;font-size:12.8px;line-height:1.55;color:var(--mut);max-width:52ch}
.hnote{margin-top:11px;font-size:12.6px;line-height:1.55;color:var(--mut);max-width:52ch}
.hnote sup{color:var(--acc)}
@media(max-width:560px){.htag{font-size:11.6px;padding:8px 13px}}

/* --- що входить у ціну --- */
/* Гнучка розкладка замість жорстких трьох колонок: неповний останній
   ряд стає по центру, а не притискається до лівого краю. Ширина обмежена
   третиною, тому повний ряд виглядає так само, як у сітці */
.incl{display:flex;flex-wrap:wrap;justify-content:center}
.incl>.card{flex:1 1 290px;max-width:calc((100% - 2*var(--gap,16px))/3)}
@media(max-width:900px){.incl>.card{max-width:calc((100% - var(--gap,16px))/2)}}
@media(max-width:600px){.incl>.card{max-width:100%}}
.incl .card{display:flex;flex-direction:column}
.incl h3{margin:16px 0 0;font-size:17px}
.incl .iic{width:26px;height:26px;fill:none;stroke:var(--acc);stroke-width:1.5;
 stroke-linecap:round;stroke-linejoin:round}
.incl .ilead{margin:10px 0 0;color:var(--acc);font-weight:500}
.incl p+p{margin-top:7px;font-size:14.2px;color:var(--ink2)}

/* ---- плаваюча кнопка «назад» ---- */
/* стоїть посеред лівого поля: (ширина екрана - колонка)/2 це поле,
   ділимо навпіл і віднімаємо півкнопки. Вузький екран — притискаємо до краю */
.bk{position:fixed;left:max(18px,calc((100vw - var(--maxw,1480px))/4 - 66px));
  top:calc(var(--hdh,68px) + 14px);z-index:95;
  display:none;align-items:center;gap:10px;padding:12px 20px 12px 15px;
  border:1px solid var(--line);border-radius:999px;color:var(--ink2);
  background:var(--hdbg,var(--bg));cursor:pointer;font:inherit;font-size:14.3px;
  /* без backdrop-filter: кнопка постійно рухається (магніт + гойдання),
     і розмиття тла перераховувалось щокадру — звідси відчуття лагу */
  box-shadow:0 16px 34px -22px rgba(0,0,0,.8);
  /* два рухи одночасно: transform — тяга до курсора, translate — власне гойдання */
  transform:translate(var(--bx,0px),var(--by,0px)) scale(var(--bs,1));
  animation:bkfloat 5.6s ease-in-out infinite;
  /* коротший хвіст: 340 мс тяглися за курсором і читались як затримка */
  transition:color .22s,border-color .22s,box-shadow .3s,
    transform .13s cubic-bezier(.22,.85,.3,1)}
.bk.on{display:inline-flex}
/* невидимий обідок: курсор ловиться ще на підльоті, і клік поруч теж рахується */
/* невидимий обідок: промазати повз кнопку важче, але він не з'їдає
   пів-екрана — 44px ловили кліки, яких людина кнопці не адресувала */
.bk::before{content:'';position:absolute;inset:-20px;border-radius:999px}
.bk.near{transition-duration:.22s,.22s,.3s,.09s;color:var(--ink)}
/* сяйво живе окремим шаром: --k рахує близькість курсора від 0 до 1.
   Без кільця в 1px і без --acc: акцентна обводка читалась як жовта рамка,
   а тут потрібне мʼяке світло — тому колір тексту, розчинений до серпанку */
.bk::after{content:'';position:absolute;inset:-1px;border-radius:inherit;pointer-events:none;
  box-shadow:0 0 30px -6px color-mix(in srgb,var(--ink) 38%,transparent),
    inset 0 0 16px -10px color-mix(in srgb,var(--ink) 30%,transparent);
  opacity:var(--k,0);transition:opacity .25s}
.bk:hover,.bk.hot{color:var(--ink);border-color:color-mix(in srgb,var(--ink) 30%,var(--line));
  box-shadow:0 22px 42px -20px rgba(0,0,0,.85)}
/* Натиск - підсвітка, а не рух: обводка акцентом і кільце світла навколо.
   Кнопка нікуди не сідає й не міняє розмір, тому це не читається як
   «прожимання», але видно, що натиск прийнято. */
.bk.press{border-color:var(--acc);color:var(--ink)}
.bk.press::after{opacity:1;
  box-shadow:0 0 0 3px color-mix(in srgb,var(--acc) 30%,transparent),
    0 0 34px -4px color-mix(in srgb,var(--acc) 55%,transparent)}
.bk.hot i{translate:-3px 0}
/* Натиску як анімації немає навмисно. Кнопка сідала на 6% і ховала тінь
   під себе - разом із підростанням біля курсора це читалось як «прожимання»,
   а не як тяга. Єдиний рух, який тут потрібен, - присмоктування до курсора;
   решту прибрано, щоб вона його не забивала. */
.bk:focus-visible{outline:none;color:var(--ink);border-color:var(--acc)}
.bk:focus-visible::after{opacity:1}
/* Стрілка на наведення йде ВЛІВО, у бік «назад», і нікуди не опускається.
   Раніше зсув писався всередину transform уже поверненого на 45° квадрата:
   у його власних осях translate(2px,2px) - це рівно вниз по екрану, тому
   стрілка й «падала». Тепер зсув задає окрема властивість translate, яка
   рахується в екранних осях, а transform лишається чистим поворотом. */
.bk i{transition:translate .3s cubic-bezier(.18,.9,.28,1)}
.bk:hover i{translate:-3px 0}
@keyframes bkfloat{0%,100%{translate:0 0}50%{translate:0 -5px}}
.bk i{width:9px;height:9px;flex:0 0 auto;border-left:1.6px solid currentColor;
  border-bottom:1.6px solid currentColor;transform:rotate(45deg);margin-left:3px}
/* на вузьких екранах лишається сама стрілка */
@media(max-width:640px){.bk{padding:13px;gap:0}.bk span{display:none}}
@media(prefers-reduced-motion:reduce){.bk{transition:none;animation:none;transform:none}
  .bk::after{transition:none}}

/* підсвічене в заголовку героя — кольором знака, без курсиву */
.hero h1 .hl{font-style:normal;color:var(--acc)}
/* Знак під словом SKERRY у першому екрані прибрано 28.08 разом із
   лінією під логотипом — стилі .hbrand/.hhz зняті як мертві. */

/* ---- нішеві конфігурації на сторінці цін (content-extra26) ---- */
.ng{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:clamp(26px,4vw,40px);align-items:start}
@media(max-width:980px){.ng{grid-template-columns:1fr 1fr}}
@media(max-width:640px){.ng{grid-template-columns:1fr}}
.ncfg{display:flex;flex-direction:column;gap:10px}
.ncfg .nhead{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.ncfg h3{margin:0;font-size:18.5px;line-height:1.2}
.ncfg .nb{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--mut);
  border:1px solid var(--line);border-radius:999px;padding:4px 10px;white-space:nowrap;flex-shrink:0}
.ncfg .nfor{font-size:13.6px;color:var(--ink2);margin:0}
/* підйом для карток цін і підписки: рухливо, але без 3D-повороту —
   perspective на склі з backdrop-filter перерастеризовує текст і він мутніє */
.card.lift{transition:transform .3s cubic-bezier(.16,.8,.3,1),box-shadow .3s}
.card.lift:hover{transform:translateY(-4px)}

/* ================= 28.08.2026 · пояснення, переваги, звʼязок =================
   Термін підкреслено крапками; при наведенні (або з клавіатури) спливає
   картка з поясненням. Зсув --tx рахує tipFit() у core.js, щоб картка
   не вилазила за край екрана на вузьких сторінках. */
/* скіни ставлять .card{overflow:hidden} — картці з підказкою це не можна:
   пояснення спливає за її межі. Специфічність у двох класах, тому працює
   незалежно від порядку підключення скіна (28.08) */
.card.ncfg,.card.ac,.card.ask,.card.hcard,.card.tipok{overflow:visible}
.tip{position:relative;border-bottom:1.6px dotted var(--acc);cursor:help;
  outline:none;transition:color .2s}
.tip:hover,.tip:focus-visible{color:var(--acc)}
/* Копія всередині тексту — тільки джерело слів і те, що читає екранний
   диктор: сховане від очей, але не з дерева доступності. Видима картка
   одна на сторінку й висить на <body> (див. tipBox у core.js). */
.tip>.tipc{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;
  overflow:hidden;clip-path:inset(50%);opacity:0;box-shadow:none}
.tip>.tipc::after,.tip>.tipc::before{display:none}
body>.tipc{position:fixed;left:0;top:0;z-index:140;
  width:min(290px,74vw);padding:16px 18px;border-radius:16px;
  background:var(--bg);border:1px solid var(--line);color:var(--ink);
  font-family:var(--body,inherit);font-size:13.2px;line-height:1.55;font-weight:400;
  font-style:normal;letter-spacing:0;text-align:left;text-transform:none;
  box-shadow:0 24px 70px rgba(10,16,20,.22);
  opacity:0;visibility:hidden;pointer-events:none;
  transform:scale(.72);
  transform-origin:var(--ax,50%) 108%;transition:opacity .22s ease,transform .22s ease,visibility .22s}
/* стрілка дивиться на саме слово, а не на середину картки: біля краю
   екрана картка зсувається, слово лишається на місці */
body>.tipc::after{content:'';position:absolute;top:100%;left:var(--ax,50%);
  margin-left:-7px;border:7px solid transparent;border-top-color:var(--line)}
body>.tipc::before{content:'';position:absolute;top:calc(100% - 1px);left:var(--ax,50%);
  margin-left:-6px;border:6px solid transparent;border-top-color:var(--bg);z-index:1}
/* угорі не лишилось місця — картка стає під словом, стрілка перевертається */
body>.tipc.below{transform-origin:var(--ax,50%) -8%}
body>.tipc.below::after{top:auto;bottom:100%;border-top-color:transparent;border-bottom-color:var(--line)}
body>.tipc.below::before{top:auto;bottom:calc(100% - 1px);border-top-color:transparent;border-bottom-color:var(--bg)}
body>.tipc.on{opacity:1;visibility:visible;transform:scale(1)}
@media(prefers-reduced-motion:reduce){body>.tipc{transition:opacity .01s}}

/* список «що входить» — з галочкою кольору акценту */
ul.incl{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:8px}
ul.incl li{position:relative;padding-left:26px;font-size:13.6px;line-height:1.5;color:var(--ink2)}
ul.incl li::before{content:'';position:absolute;left:2px;top:.42em;width:11px;height:6px;
  border-left:2px solid var(--acc);border-bottom:2px solid var(--acc);
  transform:rotate(-45deg)}
/* домен і хостинг: ринкова ціна перекреслена, наша умова — акцентом */
ul.incl.own{margin-top:12px;padding-top:12px;border-top:1px dashed var(--line)}
ul.incl.own li{color:var(--ink)}
ul.incl.own b{font-weight:500}
ul.incl.own s{color:var(--mut);text-decoration-thickness:1.5px;margin:0 4px}
ul.incl.own em{font-style:normal;color:var(--acc);font-weight:500;white-space:nowrap}

/* ---- переваги ---- */
/* Картки переваг стоять у три стовпці, а не в два (28.08, прохання
   власниці: «більш вертикальні або квадратні»). Було 418×163 — майже
   смуга; стало близько 305×248, тобто майже квадрат. Нижня межа висоти
   вирівнює їх між собою: тексти різної довжини не роблять із ряду
   драбину. */
.adv{display:grid;grid-template-columns:minmax(240px,1fr) repeat(3,1fr);gap:14px;align-items:stretch}
.aint{grid-column:1;grid-row:1 / span 2;position:sticky;top:calc(var(--hdh,68px) + 20px);align-self:start}
.aint h2{margin:12px 0 0}
.aint .sub{margin-top:14px}
/* 29.08: картка переваги = значок, заголовок, текст. Значок став
   малим і став у ряд із заголовком, як на макеті власниці: великий
   квадрат 58px відсував текст на третину картки. */
.card.ac{--cpad:24px;display:flex;flex-direction:column;gap:0;
  min-height:238px;justify-content:flex-start}
.card.ac .aicn{width:26px;height:26px;flex:0 0 auto;fill:none;stroke:var(--acc);
  stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.card.ac h3{margin:14px 0 0;font-size:17px;line-height:1.25}
.card.ac p{margin:10px 0 0;font-size:14.2px;line-height:1.55;color:var(--ink2)}
.card.ac h3+p{color:var(--ink2)}
/* Значки в картках переваг більші (27.08, прохання власниці): 46→58,
   сам малюнок 23→30. Товщина лінії трохи менша — на більшому розмірі
   стара робила значок жирнішим за текст поруч.
   Значки в блоці «Залишились питання?» лишаються меншими: там вони
   стоять у рядку з текстом, а не над абзацом. */
.aic{width:58px;height:58px;flex:0 0 auto;display:grid;place-items:center;border-radius:16px;
  background:color-mix(in srgb,var(--acc) 14%,transparent);color:var(--acc)}
.aic svg{width:30px;height:30px;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
/* вужче за 1180 підводка йде на всю ширину, картки лишаються по три;
   далі по два, а на телефоні — стовпчиком, і там нижню межу висоти
   знімаємо: у картки на всю ширину два рядки тексту й порожнеча під ними */
@media(max-width:1180px){
  .adv{grid-template-columns:repeat(3,1fr)}
  .aint{grid-column:1 / -1;grid-row:auto;position:static}
}
@media(max-width:860px){.adv{grid-template-columns:1fr 1fr}}
@media(max-width:560px){.adv{grid-template-columns:1fr}
  .card.ac{min-height:0;justify-content:flex-start}}

/* ---- «Залишились питання?» ---- */
.card.ask,.fask{--cpad:clamp(24px,3.6vw,40px);display:grid;grid-template-columns:1.05fr 1fr;
  gap:clamp(20px,3vw,40px);align-items:center}
.askt h2{margin:0}
.askt .sub{margin-top:12px}
/* Картки каналів стоять не стовпчиком, а сходинками — кожна зсунута
   вбік і трохи находить на попередню (макет власниці, 04.09). Зсув у
   відсотках, тому сходинка тримається на будь-якій ширині колонки.
   Порядок у розмітці й дає перекриття: нижня картка малюється пізніше,
   отже лежить зверху. */
/* Обгортка навколо картки: у ній саме посилання й кнопка копіювання.
   Сходинки, гойдання й ширина «під вміст» живуть тут, а не на картці —
   інакше кнопка не мала б до чого прив'язатись. 04.09. */
.askl{display:flex;flex-direction:column;align-items:flex-start}
.askw{position:relative;width:max-content;max-width:100%}
.askw.st1{margin-left:0}
.askw.st2{margin-left:14%;margin-top:-10px}
.askw.st3{margin-left:27%;margin-top:-10px}
.askw.st4{margin-left:14%;margin-top:-10px}
/* Легке погойдування: у кожної картки свій період і зсув фази, інакше
   вони хитаються синхронно й це читається як смикання сторінки, а не
   як «висять у повітрі». Тінь дає їм відірватись від фону. */
@keyframes askfloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-9px)}}
.askw{animation:askfloat 6.4s ease-in-out infinite}
.askw.st2{animation-duration:7.6s;animation-delay:-2.3s}
.askw.st3{animation-duration:8.4s;animation-delay:-4.7s}
.askw.st4{animation-duration:6.9s;animation-delay:-1.4s}
@media(prefers-reduced-motion:reduce){.askw{animation:none}}
/* Картка каналу — це посилання, а не .card, тому обводку, скло й
   заокруглення виписуємо тут: інакше в підвалі висить голий текст без
   контуру (05.09). Токени ті самі, що в .card, щоб картка жила зі
   скіном і темою. */
.askc{display:flex;align-items:center;gap:14px;width:100%;
  padding:16px 48px 16px 18px;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--rad);
  color:inherit;text-decoration:none;
  box-shadow:0 10px 26px -14px rgba(0,0,0,.45);
  transition:transform .3s cubic-bezier(.16,.8,.3,1),border-color .3s,background .3s}
.askc:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--acc) 45%,var(--line))}
.askc:focus-visible{outline:2px solid var(--acc);outline-offset:3px}
@media(prefers-reduced-motion:reduce){.askc{transition:border-color .3s,background .3s}
  .askc:hover{transform:none}}

/* Кнопка «копіювати»: тримається праворуч у картці, зʼявляється при
   наведенні й завжди видима з клавіатури. Два значки один поверх
   одного — аркуш і галочка; після кліку на 1,4 с показуємо галочку. */
.askcp{position:absolute;right:10px;top:50%;transform:translateY(-50%);
  display:grid;place-items:center;width:32px;height:32px;padding:0;
  border:1px solid transparent;border-radius:10px;background:none;
  color:var(--mut);cursor:pointer;opacity:0;transition:opacity .18s,color .18s,border-color .18s}
.askw:hover .askcp,.askcp:focus-visible{opacity:1}
.askcp:hover{color:var(--ink);border-color:var(--line)}
.askcp svg{grid-area:1/1;width:17px;height:17px;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;transition:opacity .18s}
.askcp .cpo{opacity:0}
.askcp.ok{opacity:1;color:var(--acc)}
.askcp.ok .cpi{opacity:0}
.askcp.ok .cpo{opacity:1}
.askcp.no{opacity:1;color:#d9455f}

/* На вузькому екрані сходинки нема куди робити: картки стають у ряд,
   а кнопка копіювання видима завжди — наведення на телефоні немає. */
@media(max-width:820px){.askw,.askw.st1,.askw.st2,.askw.st3,.askw.st4{
  width:100%;margin-left:0;margin-top:10px}
 .askw.st1{margin-top:0}
 .askcp{opacity:1}}
.askc .aic{width:40px;height:40px;border-radius:11px}
.askc .aic svg{width:20px;height:20px}
.askn{display:flex;flex-direction:column;gap:2px;min-width:0}
.askn b{font-size:12px;font-family:var(--mono);letter-spacing:.1em;text-transform:uppercase;
  color:var(--mut);font-weight:400}
.askn i{font-style:normal;font-size:15px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* пошта прямо у футері: коротка форма замість кнопки на сторінку контактів */
.askf{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:18px}
.askf input{flex:1 1 200px;min-width:0;padding:13px 18px;border-radius:999px;
  border:1px solid var(--line);background:var(--panel);color:var(--ink);
  font:inherit;font-size:15px}
.askf input::placeholder{color:var(--mut)}
.askf input:focus{outline:none;border-color:var(--acc)}
.askf.bad input{border-color:#e2574c}
.askf .btn{flex:0 0 auto}
.askok{flex:1 0 100%;font-size:13.5px;color:var(--mut);opacity:0;transition:opacity .25s}
.askok.on{opacity:1}
@media(max-width:520px){.askf input{flex:1 1 100%}.askf .btn{width:100%;justify-content:center}}
@media(max-width:820px){.card.ask,.fask{grid-template-columns:1fr}}

/* «наведіть, щоб дізнатися більше»: іконка-капсула пульсує, опис
   розгортається сіткою 0fr→1fr (рекомендований спосіб анімувати висоту).
   На пристроях без курсора підказка зникає, а текст видно одразу */
.hcard .hint{display:flex;align-items:center;gap:10px;margin-top:16px;
  font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink2);
  transition:opacity .3s}
.hcard .hint i{width:11px;height:17px;flex:0 0 auto;border:1.5px solid var(--acc);
  border-radius:7px;position:relative;animation:hintpulse 2s ease-in-out infinite}
.hcard .hint i::after{content:'';position:absolute;left:50%;top:3px;width:1.5px;height:4px;
  background:var(--acc);transform:translateX(-50%)}
@keyframes hintpulse{0%,100%{opacity:1}50%{opacity:.35}}
@media (hover:hover) and (pointer:fine){
  .hcard .hmore{display:grid;grid-template-rows:0fr;
    transition:grid-template-rows .5s cubic-bezier(.16,.8,.3,1)}
  .hcard .hmore>div{overflow:hidden}
  .hcard:hover .hmore{grid-template-rows:1fr}
  .hcard:hover .hint{opacity:0}
  .hcard:focus-within .hmore{grid-template-rows:1fr}

}
@media not ((hover:hover) and (pointer:fine)){
  .hcard .hint{display:none}
}
@media(prefers-reduced-motion:reduce){
  .hcard .hmore{transition:none}.hcard .hint i{animation:none}
}
/* рядок обсягу під назвою типу: «одна сторінка», «до 5 сторінок» */
.ncfg .ntag{margin:4px 0 0;font-size:12.6px;color:var(--mut);
 letter-spacing:.04em;text-transform:lowercase}
.ncfg .nprice .pr{font-family:var(--disp);font-size:25px;font-variant-numeric:tabular-nums}
.ncfg .nprice .tm{font-family:var(--mono);font-size:11.5px;color:var(--acc);margin-top:4px}
.ncfg details{margin-top:auto;border-top:1px solid var(--line)}
.ncfg summary{list-style:none;cursor:pointer;padding:12px 0 2px;color:var(--acc);font-size:13.5px;display:flex;align-items:center}
.ncfg summary::-webkit-details-marker{display:none}
.ncfg summary::after{content:"+";margin-left:auto;font-family:var(--mono);color:var(--acc)}
.ncfg details[open] summary::after{content:"\2212"}
.ncfg .brk{display:grid;gap:8px;margin:12px 0 4px}
.ncfg .brow{display:grid;grid-template-columns:1fr auto auto;gap:8px;font-size:13px;color:var(--ink2);
  border-bottom:1px dashed var(--line);padding-bottom:8px}
.ncfg .brow b{font-weight:600;color:var(--ink);text-align:right;font-variant-numeric:tabular-nums}
.ncfg .brow i{font-style:normal;font-family:var(--mono);font-size:10.5px;color:var(--mut);text-align:right}
.ncfg .bsum{display:flex;justify-content:space-between;gap:10px;font-size:13.6px;font-weight:700;padding-top:2px}
.ncfg .bsum b{font-variant-numeric:tabular-nums;white-space:nowrap}
.ncfg .ninc{font-family:var(--mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin:14px 0 6px}
.ncfg details ul{margin:0 0 12px;padding-left:17px;font-size:13.2px;color:var(--ink2);display:grid;gap:5px}
.ncfg .nnote{font-size:12.8px;color:var(--mut);margin:0 0 12px}

.ngh{margin-top:clamp(30px,4.6vw,52px);font-size:clamp(19px,2.3vw,24px)}
.ngh:first-of-type{margin-top:clamp(24px,3.6vw,40px)}


/* ---- 27.08.2026: теги, стек, позначка навчального кейса ------------- */

.tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
.tags i{font-style:normal;font-family:var(--mono);font-size:11.5px;letter-spacing:.03em;
 color:var(--ink2);background:var(--bg2,rgba(127,127,127,.08));border:1px solid var(--line);
 border-radius:999px;padding:4px 10px;white-space:nowrap}

/* ---- стек: просто текст і перелік марок (05.09, рішення власниці) ----
   Була темна панель у будь-якій темі з плитками-картками; тепер це
   звичайна секція сторінки. Старі правила .stackx/.sxcard/.sxtabs зняті
   разом із розміткою — вони більше нікуди не чіплялись. */
.sxint{max-width:62ch}
.sxint h2{margin:12px 0 0}
.sxint .sub{margin-top:14px}
/* Перелік тече рядками, а не стоїть сіткою: марки різної довжини, і в
   колонках половина клітинок лишалась би порожньою. */
.sxg{display:flex;flex-wrap:wrap;gap:10px 12px;list-style:none;padding:0;
  margin:clamp(22px,3vw,32px) 0 0}
.sxit{display:flex;align-items:center;gap:9px;padding:9px 14px 9px 11px;
  border:1px solid var(--line);border-radius:999px;background:var(--panel);
  font-size:13.6px;line-height:1;white-space:nowrap;
  transition:border-color .2s,color .2s}
.sxit:hover{border-color:color-mix(in srgb,var(--acc) 55%,var(--line))}
/* Лого марок ідуть заливкою, власні значки — лінією; тому два набори
   атрибутів, а не один. Колір успадковується, тож у світлій і темній
   темі значок лишається читабельним без окремих палітр. */
.sxi{width:19px;height:19px;flex:0 0 auto;color:var(--acc)}
.sxi:not(.fill){fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}
.sxi.fill{fill:currentColor;stroke:none}
/* запасний варіант, якщо значка для марки немає: як було, буквами */
.sxit .sxm{font-family:var(--mono);font-size:12px;color:var(--acc)}
.sxg+.note{margin-top:18px}
@media(max-width:560px){.sxit{padding:8px 12px 8px 10px;font-size:12.8px}
  .sxi{width:17px;height:17px}}
.stackg{display:grid;gap:14px}
.stackr{display:grid;grid-template-columns:minmax(120px,180px) 1fr;gap:14px;align-items:start;
 padding:14px 0;border-top:1px solid var(--line)}
.stackr>span{font-family:var(--mono);font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;
 color:var(--mut);padding-top:5px}
.stackr .tags{margin-top:0}
@media(max-width:640px){.stackr{grid-template-columns:1fr;gap:8px}.stackr>span{padding-top:0}}

.demoNote{margin-top:14px;font-size:13.6px;line-height:1.55;color:var(--ink2);
 border-left:2px solid var(--acc);padding:2px 0 2px 14px;max-width:62ch}


/* ---- 27.08.2026: стаття ширша, з таблицями і картинками -------------
   Колонка була 760 px — на широкому екрані стаття виглядала вузькою
   смужкою. Але тягнути сам абзац на всю ширину не можна: рядок і так
   був 82 знаки, а далі очу важко ловити початок наступного рядка.
   Тому широким став контейнер, а не абзац: текст лишається читабельним
   (близько 74 знаків), а таблиці, схеми й картинки розтягуються на всю
   ширину статті — вони і дають відчуття широкої сторінки.            */

.prose{--measure:59ch}
.prose p,.prose h2,.prose blockquote{max-width:var(--measure)}
.prose p{font-size:17.2px;line-height:1.68}
.prose h2{font-size:clamp(21px,2.6vw,29px)}

/* таблиця і картинка — на всю ширину колонки */
.prose .tbl,.prose figure{max-width:none;width:100%;margin:30px 0 0}
.prose .tbl+.swipe{margin-top:8px}

/* «Коротко» — відповідь із цифрами в перших рядках статті: те, що
   цитують і Google, і асистент. Стоїть одразу під ліда. */
.prose .tldr{max-width:var(--measure);margin:26px 0 4px;padding:18px 20px;
  border:1px solid var(--line);border-left:2px solid var(--acc);background:var(--panel);border-radius:var(--rad,10px)}
.prose .tldr b{display:block;font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--mut);margin-bottom:8px;font-weight:400}
.prose .tldr p{margin:0;font-size:16.6px}
.prose .tldr p+p{margin-top:8px}

/* списки в статті: та сама міра, що й абзац */
.prose ul{max-width:var(--measure);margin:16px 0 0;padding:0;list-style:none}
.prose ul li{position:relative;padding-left:20px;margin-top:9px;font-size:17.2px;
  line-height:1.62;color:var(--ink2)}
.prose ul li:before{content:"";position:absolute;left:4px;top:.72em;width:5px;height:1px;
  background:var(--acc)}
.prose ul li b,.prose p b,.prose ul li strong,.prose p strong{color:var(--ink);font-weight:500}
.prose p a,.prose ul li a{color:var(--ink);text-decoration:underline;
  text-decoration-color:var(--acc);text-underline-offset:3px}
.prose p a:hover,.prose ul li a:hover{text-decoration-thickness:2px}

.pfig{margin:32px 0 0}
.pfig img,.pfig svg{display:block;width:100%;height:auto;border:1px solid var(--line);
 border-radius:var(--rad);background:var(--panel)}
.pfig figcaption{margin-top:10px;font-family:var(--mono);font-size:11.8px;letter-spacing:.03em;
 color:var(--mut);max-width:var(--measure)}

/* лід і заголовок статті теж не розтягуємо на всю ширину */
.wn>h1,.wn>.lead{max-width:20ch}
.wn>.lead{max-width:48ch}
@media(min-width:900px){.wn>h1{max-width:16ch}}

/* ---- опитування «що вам потрібно» (27.08) --------------------------- */

.quiz{border:1px solid var(--line);border-radius:var(--rad);padding:clamp(22px,3vw,34px);
 background:var(--panel);max-width:900px}
.quiz h2{margin-top:8px}
.quiz .sub{max-width:62ch}
.quiz .note{margin-top:10px}

.qbar{height:3px;background:var(--line);border-radius:3px;margin-top:22px;overflow:hidden}
.qbar i{display:block;height:100%;background:var(--acc);transform-origin:0 50%;
 transition:transform .45s cubic-bezier(.16,.8,.3,1)}
.qof{margin-top:9px;font-size:11.5px;letter-spacing:.06em;color:var(--mut)}

.qq{display:flex;gap:12px;align-items:baseline;margin-top:22px}
.qq b{color:var(--acc);font-size:12.5px}
.qq span{font-family:var(--disp);font-size:clamp(18px,2.3vw,23px);line-height:1.25;letter-spacing:-.015em}

.qopts{display:grid;gap:9px;margin-top:20px}
.qopts button{text-align:left;font:inherit;font-size:15px;color:var(--ink);cursor:pointer;
 background:transparent;border:1px solid var(--line);border-radius:var(--frad,14px);
 padding:14px 16px;transition:border-color .2s,transform .2s,background .2s}
.qopts button:hover{border-color:var(--acc);transform:translateX(4px)}
.qopts button.on{border-color:var(--acc);background:color-mix(in srgb,var(--acc) 10%,transparent)}

.qnav{display:flex;gap:10px;margin-top:20px;flex-wrap:wrap}

.qres{border:1px solid var(--acc);border-radius:var(--rad);padding:20px;margin-top:20px}
.qrh{display:flex;justify-content:space-between;align-items:baseline;gap:14px;flex-wrap:wrap}
.qrh b{font-family:var(--disp);font-size:clamp(19px,2.4vw,25px);letter-spacing:-.015em}
.qrh span{color:var(--acc);font-size:15px}
.qres .kv{margin-top:16px}

.qhints{list-style:none;padding:0;margin:18px 0 0;display:grid;gap:10px}
.qhints li{font-size:14.4px;line-height:1.6;color:var(--ink2);padding-left:15px;position:relative}
.qhints li::before{content:"";position:absolute;left:0;top:.62em;width:6px;height:6px;
 border-radius:50%;border:1.5px solid var(--acc)}

.qsend{margin-top:26px;padding-top:22px;border-top:1px solid var(--line)}
.qsend h3{font-size:clamp(17px,2vw,20px);margin:0}
.qfields{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:16px}
.qfields label{display:block}
.qfields span{display:block;font-family:var(--mono);font-size:11.5px;letter-spacing:.06em;
 text-transform:uppercase;color:var(--mut);margin-bottom:6px}
.qfields input{width:100%;background:var(--bg);border:1px solid var(--line);
 border-radius:var(--frad,14px);padding:12px 14px;font:inherit;font-size:15px;color:var(--ink)}
.qfields input:focus{outline:none;border-color:var(--acc)}
.qfields input.bad{border-color:#D6503C}
@media(max-width:640px){.qfields{grid-template-columns:1fr}}

/* Turnstile: у 98% випадків віконця немає взагалі й блок має нульову
   висоту. Коли Cloudflare щось запідозрив — спливає внизу екрана. */
.tsbox{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:80;display:flex;justify-content:center}
.tsbox:empty{display:none}

/* ================= посимвольна поява тексту (28.08) =================
   Літери не рухаються — лише проявляються одна за одною в міру
   прокрутки. Скільки саме проявилось, вирішує одне число --p, яке
   пише chaps() у core.js: CSS множить його на кількість знаків і
   порівнює з номером кожного. Жодних анімацій на елемент, тому
   довгий абзац не коштує нічого. */
/* За замовчуванням текст видимий: якщо скрипт не виконався (чи його
   вимкнено), сторінка лишається читабельною. Нуль ставить сам двигун
   перед тим, як почати рахувати прокрутку. */
.chap{--p:1}
.chap .cw{white-space:nowrap}
.chap .cc{opacity:clamp(0,calc(var(--p)*var(--n) - var(--i)),1)}
@media(prefers-reduced-motion:reduce){.chap .cc{opacity:1}}

/* 05.09: решта цін під кнопкою «Переглянути всі ціни» на сторінці цін.
   hidden лишається робочим (у core.css є [hidden]{display:none}), тут лише
   відступ, щоб розкритий блок не злипався з кнопкою. */
.nrest{margin-top:clamp(18px,2.4vw,30px)}
.nrest[hidden]{display:none}


/* ---- перший екран крупніше (05.09, прохання власниці) ----
   Заголовок стояв на clamp(29px,4.3vw,50px) — на широкому екрані це
   50 px при висоті екрана 900+, тобто половина першого екрана лишалась
   порожньою під кнопками. Множник узятий від ширини, а не фіксованим кеглем:
   на телефоні нижня межа навіть трохи менша за стару, щоб рядок
   «SKERRY — створення сайтів» не ламався на три рядки.
   Разом із заголовком підростають лід, рядок строку й кнопки —
   інакше велика шапка висить над дрібним текстом. */
/* Кегль рахується і від ширини, і від висоти: на ноутбуці 1280×720 самої
   ширини вистачило б на 79 px, і чотири рядки заголовка виштовхували
   кнопки за межі першого екрана. min() бере те, що менше, тому обіцянка
   «перший екран цілий» лишається на будь-якому вікні. */
.hero h1{margin-top:clamp(18px,2.4vw,26px);max-width:19ch;
  font-size:clamp(31px,min(6.2vw,8.6vh),74px);line-height:1.02}
.hero .lead{margin-top:clamp(22px,2.6vw,30px);max-width:56ch;
  font-size:clamp(16px,1.9vw,21px)}
.hero .eyebrow{font-size:clamp(11px,1vw,12.5px)}
.hero .hprice{font-size:clamp(14.5px,1.55vw,17.5px)}
.hero .bt .btn{font-size:clamp(14.5px,1.35vw,16.5px);padding:14px 26px}
.hero .bnote{font-size:clamp(12.8px,1.15vw,14px)}
@media(max-width:560px){.hero h1{max-width:none}}

/* Низькі вікна (ноутбуки 1366×768 і менші): підбираємо відступи, щоб
   рядок під кнопками і стрілка «гортай» лишались над згином. */
@media(max-height:800px){
  .hero{padding-bottom:clamp(24px,3vw,44px)}
  .hero .lead{margin-top:clamp(14px,1.8vh,22px);font-size:clamp(15.5px,1.6vw,18px)}
  .hero h1{margin-top:clamp(12px,1.6vh,18px)}
  .hero .hprice{margin-top:clamp(12px,1.7vh,18px);margin-bottom:clamp(16px,2.2vh,24px)}
}

/* ===== скін: Течія ===== */
:root{--disp:Unbounded,system-ui,sans-serif;--body:Onest,system-ui,sans-serif;--mono:"JetBrains Mono",ui-monospace,monospace;
 --bg:#14565A;--ink:#F2F6F4;--ink2:#C3D8D4;--mut:#98B4B0;--line:rgba(255,255,255,.2);
 --acc:#F0BE5C;--onacc:#0E4044;--panel:rgba(255,255,255,.1);--rad:22px;--brad:999px;--rs:999px;
 --hov:rgba(255,255,255,.13);--shadow:0 30px 60px -38px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.28);
 --hdbg:rgba(20,86,90,.8);--btnbg:#E4572E;--btnfg:#fff;--gap:16px;--dls:-.032em;--cpad:26px;
 --g1:#1C7C74;--g2:#8E5A34;--g3:#209089;--g4:#0D4448;--fx:#7FE3D6;--grain:.34;--gmix:overlay;
 --gd1:rgba(255,255,255,.5);--gd2:rgba(0,0,0,.55);
 --chrome:rgba(255,255,255,.08);--chrome2:rgba(255,255,255,.16);--chip:rgba(14,64,68,.55);
 --s3bg:linear-gradient(158deg,#1B686C,#12494D);
 --s3sh:0 8px 18px -8px rgba(0,0,0,.55),6px 6px 14px rgba(0,0,0,.34),
  inset 0 1px 0 rgba(255,255,255,.12);
 --s3in:inset 3px 3px 8px rgba(0,0,0,.22),inset -3px -3px 7px rgba(255,255,255,.07);
 --veil:rgba(20,86,90,.72)}
/* світла тема — та сама течія, тільки вдень */
html[data-theme="light"]{
 --bg:#F4EFE6;--ink:#16232E;--ink2:#4C5B5E;--mut:#7C8A8B;--line:rgba(22,35,46,.16);
 --acc:#B4552B;--onacc:#fff;--panel:rgba(255,255,255,.62);
 --hov:rgba(22,35,46,.06);--shadow:0 24px 48px -40px rgba(30,50,60,.6),inset 0 1px 0 rgba(255,255,255,.8);
 --hdbg:rgba(244,239,230,.84);--btnbg:#16232E;--btnfg:#F4EFE6;
 --g1:#A9DBD4;--g2:#F1D8C2;--g3:#BCE4DC;--g4:#CFEAE6;--fx:#1C8C84;--grain:.3;--gmix:multiply;
 --gd1:rgba(120,96,64,.4);--gd2:rgba(40,60,66,.3);
 --chrome:rgba(22,35,46,.05);--chrome2:rgba(22,35,46,.12);--chip:rgba(255,255,255,.75);
 --s3bg:linear-gradient(158deg,rgba(255,255,255,.78),rgba(255,255,255,.5));
 --s3sh:6px 6px 15px rgba(58,66,74,.26),-4px -4px 11px rgba(255,255,255,.92);
 --s3in:inset 4px 4px 10px rgba(58,66,74,.22),inset -3px -3px 8px rgba(255,255,255,.92);
 --veil:rgba(244,239,230,.66)}
body{background:var(--bg)}
/* верхній шар: тепла пляма праворуч і глибока внизу */
body::before{content:"";position:fixed;inset:0;z-index:-2;pointer-events:none;
 background:radial-gradient(96% 70% at 88% 16%,var(--g2) 0%,transparent 50%),
  radial-gradient(86% 66% at 72% 54%,var(--g4) 0%,transparent 58%);
 animation:gflowA 132s ease-in-out infinite}
/* нижній шар: холодні плями зліва вгорі й по центру внизу.
   Колір сторінки лишається тут — під ним уже нічого немає */
html::before{content:"";position:fixed;inset:0;z-index:-3;pointer-events:none;
 background:radial-gradient(120% 90% at 12% 0%,var(--g1) 0%,transparent 55%),
  radial-gradient(118% 76% at 50% 128%,var(--g3) 0%,transparent 56%),var(--bg);
 animation:gflowB 168s ease-in-out infinite}
@keyframes gflowA{
 0%{transform:translate3d(0,0,0) scale(1.08)}
 50%{transform:translate3d(-3.4%,2.6%,0) scale(1.17)}
 100%{transform:translate3d(0,0,0) scale(1.08)}}
@keyframes gflowB{
 0%{transform:translate3d(0,0,0) scale(1.14)}
 50%{transform:translate3d(2.8%,-2.2%,0) scale(1.05)}
 100%{transform:translate3d(0,0,0) scale(1.14)}}
/* кому рух заважає — тому просто нерухомий фон, а не інша картинка */
@media(prefers-reduced-motion:reduce){
 body::before,html::before{animation:none}}
body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;
 opacity:var(--grain);mix-blend-mode:var(--gmix);
 background-image:radial-gradient(var(--gd1) .6px,transparent .7px),
  radial-gradient(var(--gd2) .5px,transparent .6px);
 background-size:3px 3px,4px 4px;background-position:0 0,1px 2px}
.card,.wcard{position:relative;overflow:hidden;
 background:linear-gradient(158deg,rgba(255,255,255,.13),rgba(255,255,255,.05));
 transform:translateZ(0);
 transition:border-color .3s,transform .4s cubic-bezier(.16,.8,.3,1),box-shadow .3s}
html[data-theme="light"] .card,html[data-theme="light"] .wcard{
 background:linear-gradient(158deg,rgba(255,255,255,.78),rgba(255,255,255,.5))}
.card.pack:hover{border-color:var(--acc)}
.tabs button.on,.chips button.on{background:var(--acc);border-color:var(--acc);color:var(--onacc)}
/* тло активного пункту — тільки в мобільному списку: на десктопі його малює
   ковзна пігулка, і власне тло давало два підсвічені пункти при наведенні */
@media(max-width:900px){.hd nav a.on{background:var(--hov)}}
.fld input,.fld textarea,.fld select{background:var(--s3bg,var(--panel));--frad:16px;
 border-color:transparent;box-shadow:var(--s3in)}
.fld input:focus,.fld textarea:focus,.fld select:focus{border-color:transparent;
 box-shadow:var(--s3in),0 0 0 2px var(--acc)}
.form .btn.p,.card .btn.p{border-color:transparent;box-shadow:var(--s3sh)}
.form .btn.p:active,.card .btn.p:active{box-shadow:var(--s3in)}
.hero::before{content:"";position:absolute;left:0;right:0;top:0;bottom:0;z-index:1;pointer-events:none;
 background:radial-gradient(72% 64% at 24% 46%,var(--veil),transparent 70%)}
.flag{border-radius:0 0 8px 8px}
.wcard .r,.pack .tm,.card .n{color:var(--fx)}
.btn.s:hover{border-color:var(--fx);color:var(--fx)}
.eyebrow{color:var(--fx)}

/* 38 · глянець: картка веде плечем за курсором, світло йде слідом */
.card.tilt{transform:perspective(1000px)
  rotateX(calc(var(--cy,0) * -5deg)) rotateY(calc(var(--cx,0) * 6deg))
  translateY(calc(var(--lit,0) * -3px));
 transform-style:preserve-3d;transition:transform .45s cubic-bezier(.16,.8,.3,1),border-color .3s}
.card.tilt>*{position:relative;z-index:2}

/* 32 · рифлене скло: сяйво заломлюється в ребрах */
.card.flute{background:var(--panel)}
.card.flute>*{position:relative;z-index:3}
.card.flute::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
 background:repeating-linear-gradient(90deg,
   rgba(255,255,255,.045) 0 2px,rgba(255,255,255,0) 2px 6px,
   rgba(0,0,0,.04) 6px 8px,rgba(255,255,255,0) 8px 12px)}
.card.flute::after{content:"";position:absolute;inset:0;z-index:2;pointer-events:none;
 opacity:calc(var(--lit,0) * .5);transition:opacity .5s;
 background:radial-gradient(34% 130% at calc(50% + var(--cx,0) * 100%) 50%,var(--acc),transparent 72%);
 -webkit-mask-image:repeating-linear-gradient(90deg,#000 0 2px,transparent 2px 10px);
 mask-image:repeating-linear-gradient(90deg,#000 0 2px,transparent 2px 10px);
 mix-blend-mode:screen}
html[data-theme="light"] .card.flute::after{mix-blend-mode:multiply}
/* сцени малюють глибоку смарагдову воду — у світлій темі під чорним
   текстом вона занадто темна. Не перемальовуємо шейдери: полотно просто
   просвічує світлим тлом сторінки, і той самий колір стає пастельним */
html[data-theme="light"] .hero canvas,
html[data-theme="light"] .chero canvas{opacity:.42;filter:saturate(1.25)}
html[data-theme="light"] .card.sandbox canvas{opacity:.3}

/* S19 · превʼю кейсів у браузер-фреймі */
.wcard{padding-top:34px;background:var(--panel)}
.wcard::before{content:"";position:absolute;top:0;left:0;right:0;height:34px;background:var(--chrome);
 border-bottom:1px solid var(--chrome2)}
.wcard .dots{position:absolute;top:13px;left:14px;display:flex;gap:5px;z-index:2}
.wcard .dots i{width:8px;height:8px;border-radius:50%;background:var(--chrome2)}
.wcard .dots i:first-child{background:var(--acc);opacity:.8}
.wcard .url{position:absolute;top:9px;left:54px;right:14px;z-index:2;font-style:normal;
 font-family:var(--mono);font-size:10.5px;color:var(--mut);background:var(--chip);
 border-radius:999px;padding:3px 12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.wcard .ph{margin:0 12px;border-radius:12px;overflow:hidden;
 background-size:100% 260%!important;background-position:0 0;
 transition:background-position 1.5s cubic-bezier(.22,.75,.25,1)}
.wcard:hover .ph{background-position:0 100%}
.wcard .ph em{background:var(--chip);color:var(--ink);
 -webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}

/* 38 · глянець і на картках робіт: фрейм веде за курсором */
.wcard,.wcard:hover{transform:perspective(1100px)
  rotateX(calc(var(--cy,0) * -4deg)) rotateY(calc(var(--cx,0) * 5deg))
  translateY(calc(var(--lit,0) * -5px));
 transform-style:preserve-3d;transition:transform .45s cubic-bezier(.16,.8,.3,1),border-color .3s}

/* S18 · софт-3D: мʼякі обʼємні перемикачі теми й мови */
.ctrls .s3{-webkit-backdrop-filter:none;backdrop-filter:none}

/* дешифрування на кнопці: ширина не стрибає, поки збирається */
.hero .btn.p,.hd .cta{font-variant-ligatures:none;font-feature-settings:"tnum" 1}

/* герой ламає рядки там, де стоїть перенос, а не там, де скінчилась колонка:
   базові 17ch у заголовка і 58ch у ліда різали фрази посеред думки */
.hero h1{max-width:none}
.hero .lead{max-width:none}
