/* botdev · landing-v2 · база: шрифты, сброс, типографика, nav, фактура */
@font-face{font-family:"Unbounded";font-weight:300;font-display:swap;src:url("../fonts/unbounded-300-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Unbounded";font-weight:300;font-display:swap;src:url("../fonts/unbounded-300-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Unbounded";font-weight:400;font-display:swap;src:url("../fonts/unbounded-400-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Unbounded";font-weight:400;font-display:swap;src:url("../fonts/unbounded-400-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Unbounded";font-weight:500;font-display:swap;src:url("../fonts/unbounded-500-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Unbounded";font-weight:500;font-display:swap;src:url("../fonts/unbounded-500-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Unbounded";font-weight:800;font-display:swap;src:url("../fonts/unbounded-800-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Unbounded";font-weight:800;font-display:swap;src:url("../fonts/unbounded-800-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Manrope";font-weight:400;font-display:swap;src:url("../fonts/manrope-400-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Manrope";font-weight:400;font-display:swap;src:url("../fonts/manrope-400-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Manrope";font-weight:600;font-display:swap;src:url("../fonts/manrope-600-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Manrope";font-weight:600;font-display:swap;src:url("../fonts/manrope-600-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"JetBrains Mono";font-weight:400;font-display:swap;src:url("../fonts/jetbrainsmono-400-cyrillic.woff2") format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"JetBrains Mono";font-weight:400;font-display:swap;src:url("../fonts/jetbrainsmono-400-latin.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Unbounded Fallback";src:local("Arial"),local("Roboto"),local("Segoe UI");size-adjust:112%;ascent-override:95%}

*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:auto;-webkit-text-size-adjust:100%}
@media(prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}
body{margin:0;background:var(--s0);color:var(--text);font:400 var(--fs-body)/var(--lh-body) var(--f-body);-webkit-font-smoothing:antialiased;overflow-x:hidden}
img,svg,video{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
.container{width:min(var(--container),100% - 2*var(--gutter));margin-inline:auto}
.nw{white-space:nowrap}
.vh{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* — типографика: контраст весов — */
h1,h2,h3{margin:0;text-wrap:balance}
h1{font:400 var(--fs-h1)/var(--lh-tight) var(--f-head);letter-spacing:var(--ls-head)}
h1 .acc{font-weight:800;color:var(--accent-deep)}
h2{font:400 var(--fs-h2)/var(--lh-head) var(--f-head);letter-spacing:-.02em}
h3{font:600 var(--fs-h3)/1.3 var(--f-body)}
.lead{font-size:var(--fs-lead);color:var(--text-70);max-width:34ch;margin:0}
.mono{font-family:var(--f-mono);font-size:var(--fs-xs);letter-spacing:var(--ls-mono);color:var(--text-45)}
.mono b{color:var(--text-70);font-weight:400}
.mono .a{color:var(--accent-ink)}
.eyebrow{font-family:var(--f-mono);font-size:var(--fs-xs);letter-spacing:var(--ls-mono);color:var(--accent-ink);margin:0 0 18px}
.display{font:300 var(--fs-display)/1 var(--f-head);letter-spacing:-.04em;color:var(--text-28)}

/* — кнопки: коралл = CTA (роль 1) — */
.btn{display:inline-flex;align-items:center;gap:10px;min-height:48px;padding:12px 22px;border-radius:12px;font:600 1rem/1 var(--f-body);transition:transform var(--t-fast) var(--ease),background var(--t-fast),border-color var(--t-fast)}
.btn-primary{background:linear-gradient(180deg,var(--accent),var(--accent-deep));color:var(--ink-on-accent)}
.btn-primary svg{transition:transform var(--t-fast) var(--ease)}
.btn-ghost{border:1px solid var(--line-2);color:var(--text);background:var(--ghost)}
.btn:active{transform:translateY(1px) scale(.99)}
@media(hover:hover) and (pointer:fine){
  .btn-primary:hover{background:linear-gradient(180deg,var(--accent-2),var(--accent))}
  .btn-primary:hover svg{transform:translateX(3px)}
  .btn-ghost:hover{border-color:var(--accent-line);background:var(--ghost-hover)}
}

/* — nav — */
.nav{position:sticky;top:0;z-index:20;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);background:var(--nav-bg);border-bottom:1px solid transparent;transition:border-color var(--t-base)}
.nav.scrolled{border-bottom-color:var(--line)}
.nav .container{display:flex;align-items:center;justify-content:space-between;gap:24px;height:68px}
.logo{display:inline-flex;align-items:center;gap:10px;flex-shrink:0;font:400 1.05rem var(--f-mono);color:var(--text)}
.logo .mark{display:grid;place-items:center;width:32px;height:32px;border-radius:9px;background:linear-gradient(180deg,var(--accent),var(--accent-deep));color:var(--ink-on-accent);font:800 .9rem var(--f-mono)}
.nav-links{display:flex;gap:26px;margin:0;padding:0;list-style:none}
.nav-links a{font-size:var(--fs-sm);color:var(--text-70);padding:10px 0;border-bottom:1px solid transparent;white-space:nowrap}
.nav-links a[aria-current]{color:var(--text);border-bottom-color:var(--accent)}
@media(hover:hover){.nav-links a:hover{color:var(--text)}}
.nav-cta{display:inline-flex;align-items:center;flex-shrink:0;white-space:nowrap;padding:10px 16px;min-height:44px;border-radius:10px;border:1px solid var(--accent-line);font:600 .9rem var(--f-body);color:var(--text)}
/* 981–1180: компактное меню в одну строку; ≤980: пункты скрыты, остаются лого и CTA (ничего не переносится) */
@media(max-width:1180px){.nav .container{gap:16px}.nav-links{gap:16px}.nav-links a{font-size:.8125rem}.nav-cta{padding:10px 14px;font-size:.85rem}}
@media(max-width:980px){.nav-links{display:none}}

/* — фактура: сетка точек (CSS) и зерно — */
.dots{position:absolute;inset:0;pointer-events:none;background-image:radial-gradient(var(--dot) var(--dot-size),transparent var(--dot-size));background-size:var(--dot-gap) var(--dot-gap);opacity:.55;-webkit-mask-image:radial-gradient(ellipse 80% 70% at 50% 20%,#000 30%,transparent 100%);mask-image:radial-gradient(ellipse 80% 70% at 50% 20%,#000 30%,transparent 100%)}
.grain{position:absolute;inset:0;pointer-events:none;opacity:.05;mix-blend-mode:multiply;background-size:160px 160px;background-image:url("data:image/svg+xml;utf8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%27160%27 height=%27160%27%3E%3Cfilter id=%27n%27%3E%3CfeTurbulence type=%27fractalNoise%27 baseFrequency=%27.9%27 numOctaves=%272%27 stitchTiles=%27stitch%27/%3E%3C/filter%3E%3Crect width=%27100%25%27 height=%27100%25%27 filter=%27url(%23n)%27/%3E%3C/svg%3E")}

/* — motion-политика — */
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}
}

/* ===== живая подложка: одна на весь сайт, закреплена на экране; страница «перетекает» поверх неё =====
   Бумага + точечная сетка + два тёплых световых поля. Где браузер умеет scroll-timeline, свет и сетка смещаются по мере скролла
   (день «перетекает» сверху-справа вниз-влево); где не умеет — медленный дрейф по времени. Только transform/opacity. */
.backdrop{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;background:var(--s0)}
.bd-dots{position:absolute;inset:-80px 0 -80px 0;background-image:radial-gradient(var(--dot) var(--dot-size),transparent var(--dot-size));background-size:var(--dot-gap) var(--dot-gap);opacity:.75;-webkit-mask-image:radial-gradient(ellipse 95% 85% at 50% 45%,#000 40%,transparent 100%);mask-image:radial-gradient(ellipse 95% 85% at 50% 45%,#000 40%,transparent 100%)}
.bd-glow{position:absolute;border-radius:50%;will-change:transform}
.bd-g1{width:78vmax;height:78vmax;right:-26vmax;top:-30vmax;background:radial-gradient(closest-side,rgba(255,106,69,.17),rgba(255,106,69,.06) 45%,rgba(255,106,69,0) 72%)}
.bd-g2{width:70vmax;height:70vmax;left:-28vmax;bottom:-34vmax;background:radial-gradient(closest-side,rgba(255,176,128,.16),rgba(255,176,128,.05) 45%,rgba(255,176,128,0) 72%)}
@media(prefers-reduced-motion:no-preference){
  .bd-g1{animation:bd-drift1 46s ease-in-out infinite alternate}
  .bd-g2{animation:bd-drift2 58s ease-in-out infinite alternate}
}
@keyframes bd-drift1{to{transform:translate(-9vmax,7vmax) scale(1.08)}}
@keyframes bd-drift2{to{transform:translate(8vmax,-6vmax) scale(1.1)}}
@supports (animation-timeline:scroll()){
  @media(prefers-reduced-motion:no-preference){
    .bd-g1{animation:bd-flow1 linear both;animation-timeline:scroll(root)}
    .bd-g2{animation:bd-flow2 linear both;animation-timeline:scroll(root)}
    .bd-dots{animation:bd-dots linear both;animation-timeline:scroll(root)}
  }
}
@keyframes bd-flow1{0%{transform:translate(0,0) scale(1)}35%{transform:translate(-46vw,22vh) scale(1.15)}70%{transform:translate(-18vw,58vh) scale(.95)}100%{transform:translate(-62vw,74vh) scale(1.2)}}
@keyframes bd-flow2{0%{transform:translate(0,0) scale(1)}40%{transform:translate(52vw,-30vh) scale(1.1)}75%{transform:translate(24vw,-66vh) scale(1.25)}100%{transform:translate(70vw,-48vh) scale(1)}}
@keyframes bd-dots{to{transform:translateY(-68px)}}
html.hidden .bd-glow{animation-play-state:paused}
.bd-net{position:absolute;inset:0;width:100%;height:100%;height:100lvh;display:block} /* живая нейросеть, рисует js/live.js; лежит над сеткой точек, под световыми полями. Размер задаёт CSS (холст тянется при ресайзе, js перерисовывает); 100lvh — на телефоне высота не меняется, когда прячется адресная строка, и сеть не дёргается */

/* ===== сквозной «провод»: одно ребро через всю страницу; импульс едет по нему вместе со скроллом, узлы секций загораются =====
   Без JS: головка импульса — position:sticky, узлы — :has(.in) от уже существующего reveal. */
main{position:relative}
.spine{position:absolute;top:0;bottom:0;left:max(13px,calc((100vw - var(--container))/2 - 30px));width:1px;z-index:1;pointer-events:none;background:repeating-linear-gradient(180deg,var(--line-2) 0 4px,transparent 4px 9px)}
.spine-head{position:sticky;top:44vh;display:block;width:9px;height:9px;margin-left:-4px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 5px rgba(255,106,69,.16)}
.spine-head::before{content:"";position:absolute;left:4px;bottom:100%;width:1px;height:44vh;background:linear-gradient(180deg,rgba(255,106,69,0),var(--accent))}
.sec::before{content:"";position:absolute;z-index:2;left:max(13px,calc((100vw - var(--container))/2 - 30px));top:calc(var(--sp-sec) + var(--fs-display)*.42);width:9px;height:9px;margin-left:-4px;border-radius:50%;background:var(--s0);border:1px solid var(--line-2);transition:background var(--t-slow),border-color var(--t-slow),box-shadow var(--t-slow)}
.sec:has([data-reveal].in)::before{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 5px rgba(255,106,69,.14)}
@media(max-width:720px){.spine,.sec::before{display:none}}

/* 2026-10-01 (ревью L4): мобильное меню. До 980px список ссылок скрыт; кнопка-«бургер» раскрывает его панелью под шапкой.
   Без JS кнопки нет (html.js) — ссылки на разделы и страницы остаются в футере. */
.nav-toggle{display:none}
.nav-links .nav-page{display:none}
@media(max-width:980px){
  .nav .container{gap:10px}
  .nav-cta{margin-left:auto}
  html.js .nav-toggle{display:inline-grid;place-items:center;flex-shrink:0;width:44px;height:44px;padding:0;border:1px solid var(--line);border-radius:10px;background:transparent;color:var(--text);cursor:pointer}
  .nav-toggle svg{width:22px;height:22px}
  .nav-toggle .cross,.nav.open .nav-toggle .bars{display:none}
  .nav.open .nav-toggle .cross{display:inline}
  .nav.open{background:var(--s0);border-bottom-color:var(--line)}
  .nav.open .nav-links{display:flex;flex-direction:column;gap:0;position:absolute;top:100%;left:0;right:0;max-height:calc(100vh - 68px);max-height:calc(100dvh - 68px);overflow-y:auto;padding:4px var(--gutter) 12px;background:var(--s0);border-bottom:1px solid var(--line);box-shadow:0 22px 32px -22px rgba(20,22,27,.28)}
  .nav.open .nav-links li{display:block}
  .nav.open .nav-links a{display:block;padding:14px 0;font-size:1rem;color:var(--text);border-bottom:1px solid var(--line);white-space:normal}
  .nav.open .nav-links li:last-child a{border-bottom:0}
  .nav.open .nav-links .nav-page a{color:var(--accent-2)}
  .nav.open .nav-links a[aria-current]{color:var(--accent-2);font-weight:600}
}
@media(max-width:359px){.nav .logo{font-size:0;gap:0}}  /* уже 360px логотип + кнопка + меню не помещаются: остаётся знак */
