@charset "UTF-8";
/* ============================================================================
   QVORIX / PUBLIC LAYER
   Светлая тема — единственная. Montserrat держит интерфейс и текст,
   Unbounded работает только на крупных заголовках, JetBrains Mono — на служебных
   подписях, номерах и статусах. Навигация вынесена в нижний док.
   ========================================================================= */

/* ── шрифты ───────────────────────────────────────────────────────────── */
@font-face{font-family:Montserrat;font-style:normal;font-weight:300 800;font-display:swap;
  src:url(/assets/fonts/mont-cyrillic.woff2) format('woff2');
  unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:Montserrat;font-style:normal;font-weight:300 800;font-display:swap;
  src:url(/assets/fonts/mont-cyrillic-ext.woff2) format('woff2');
  unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}
@font-face{font-family:Montserrat;font-style:normal;font-weight:300 800;font-display:swap;
  src:url(/assets/fonts/mont-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:Montserrat;font-style:normal;font-weight:300 800;font-display:swap;
  src:url(/assets/fonts/mont-latin-ext.woff2) format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:Unbounded;font-style:normal;font-weight:300 900;font-display:swap;
  src:url(/assets/fonts/unb-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-style:normal;font-weight:300 900;font-display:swap;
  src:url(/assets/fonts/unb-cyrillic-ext.woff2) format('woff2');
  unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}
@font-face{font-family:Unbounded;font-style:normal;font-weight:300 900;font-display:swap;
  src:url(/assets/fonts/unb-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-style:normal;font-weight:300 900;font-display:swap;
  src:url(/assets/fonts/unb-latin-ext.woff2) format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
/* ── токены ───────────────────────────────────────────────────────────── */
:root{
  color-scheme:light;
  --paper:#f4f4f3; --surface:#fff; --surface-2:#ecedec; --surface-3:#e4e5e4;
  --ink:#0e0f10; --ink-2:#34373a; --muted:#63676b; --hair:#dcdddc;
  --signal:#1b3ed4; --signal-ink:#152fa2; --signal-soft:rgba(27,62,212,.07);
  --field-a:rgba(120,160,255,.32); --field-b:rgba(255,255,255,.9); --field-c:rgba(90,110,150,.16);

  /* Две гарнитуры на весь сайт. Технические подписи набираются тем же гротеском
     капителью и разрядкой — отдельный моноширинный шрифт системе не нужен. */
  --f-ui:Montserrat,-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Arial,sans-serif;
  --f-dis:Unbounded,Montserrat,-apple-system,'Segoe UI',sans-serif;
  --f-mono:Montserrat,-apple-system,'Segoe UI',Arial,sans-serif;

  --t-display:clamp(2.15rem,.9rem + 5.4vw,5.6rem);
  --t-h1:clamp(1.75rem,1.15rem + 2.5vw,3rem);
  --t-h2:clamp(1.35rem,1.12rem + 1.1vw,1.9rem);
  --t-h3:clamp(1.05rem,1rem + .38vw,1.24rem);
  --t-lead:clamp(1.02rem,.98rem + .42vw,1.22rem);
  --t-body:1.0625rem; --t-sm:.9375rem; --t-meta:.6875rem;

  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px;
  --s7:48px; --s8:64px; --s9:96px; --s10:128px;
  --sec:clamp(64px,9vw,148px);
  --wrap:1320px; --gut:clamp(16px,4.2vw,56px); --measure:68ch;
  --r1:2px; --r2:8px; --r3:14px; --dock:74px;
  /* Тени холодные и слабые: на светлом фоне чёрная тень читается как грязь. */
  --sh-1:0 6px 16px -12px rgba(44,62,120,.28);
  --sh-2:0 14px 30px -20px rgba(44,62,120,.3);
  --sh-3:0 24px 54px -28px rgba(44,62,120,.34);
  --ease:cubic-bezier(.16,1,.3,1);
}
/* ── база ─────────────────────────────────────────────────────────────── */
*,*::before,*::after{box-sizing:border-box}
/* Место под полосу прокрутки резервируется всегда: иначе при открытии
   поверхностей с блокировкой скролла страница дёргается вбок. */
html{-webkit-text-size-adjust:100%;scrollbar-gutter:stable}
html:focus-within{scroll-behavior:smooth}
body{
  margin:0;background:var(--paper);color:var(--ink);
  font-family:var(--f-ui);font-size:var(--t-body);line-height:1.65;font-weight:400;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
  overflow-x:hidden;
  /* место под нижний док, чтобы он не перекрывал последний экран */
  padding-bottom:calc(84px + env(safe-area-inset-bottom,0px));
}
h1,h2,h3,h4,p,ul,ol,figure,blockquote,dl,dd{margin:0}
ul,ol{padding:0;list-style:none}
img,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
input,textarea{font:inherit;color:inherit}
::selection{background:var(--signal);color:#fff}
:focus-visible{outline:2px solid var(--signal);outline-offset:3px;border-radius:2px}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:absolute;left:var(--gut);top:-100px;z-index:100;background:var(--ink);color:var(--paper);
  padding:12px 18px;border-radius:var(--r1);transition:top .18s}
.skip:focus{top:12px}
.ic{flex:none}
h1,h2,h3,.hero__title,.phead__title,.art__title,.q__title,.dos__title,.prof__name,
.row__title,.qrow__title,.mstate__t,.cta__t,.feat__title{overflow-wrap:break-word;hyphens:auto}
/* Заголовки — Unbounded, плотно и уверенно. */
.hero__title,.phead__title,.art__title,.q__title,.dos__title,.prof__name,.feat__title,
.shead__t,.mstate__t,.cta__t,.n02__t,.astrip__t,.e404__t,.studio-line__x,.nextq__t,
.pin__t,.qrow__title,.ob__name,.tx__h2{
  font-family:var(--f-dis);font-weight:600;letter-spacing:-.034em
}
.hero__title{font-weight:600}
/* Служебные подписи тоже плотнее: моно на 11px читается лучше в 600. */
.mono,.tag__mark,.st__label,.phead__eyebrow,.hero__eyebrow,.mstrip__label,.topline__layer,
.fbar__l,.mk__label,.chip__mark,.rel__mark,.n02__mark,.tline__m,.prof__with,.n02__sub,
.fitem__mark,.astrip__types,.eco__note,.ipart__n,.hero__edge,.ftr__desc,.ftr__set--q a,
.card__mark,.chart__lab,.nextq__l,.nextq__m,.abox__l,.fromq__l,.fromq__m,.toc__t,
.cside__t,.dstat dt,.pin__eyebrow,.tbl th{font-weight:600}
/* ── контейнеры ───────────────────────────────────────────────────────── */
.sec,.topline__in,.ftr__in,.mstrip__in,.hero__in,.hero__scene,.art,.q,.dos,.prof,.legal{
  width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gut)
}
.sec{padding-block:var(--sec)}
.sec + .sec{padding-top:0}
.sec--index{padding-top:clamp(32px,5vw,64px)}
.bleed{width:100%;margin-inline:0}
/* ── моно-подписи ─────────────────────────────────────────────────────── */
.mono,.tag__mark,.st__label,.phead__eyebrow,.hero__eyebrow,.mr,.shead__n,.qrow__n,
.route__n,.mlist__n,.toc__n,.src__n,.rel__mark,.n02__mark,.tline__d,.tline__m,
.chip__mark,.mstrip__label,.topline__layer,.mstate__n,.e404__code,.fbar__l,.mk__label,
.crumbs,.legal__upd,.prof__with,.n02__code,.n02__sub,.dstat dd,.phead__num,.spine__n,
.fitem__mark,.fitem__meta,.astrip__n,.astrip__types,.eco__note,.ipart__n,.hero__edge,
.ftr__cr,.ftr__desc,.ftr__set--q a,.card__mark,.chart__lab,.cyc__n,.nextq__m,.nextq__l,
.abox__l,.fromq__l,.fromq__m,.toc__t,.cside__t,.dstat dt{
  font-family:var(--f-mono);font-feature-settings:'tnum' 1
}
.phead__eyebrow,.hero__eyebrow,.mstrip__label,.topline__layer,.fbar__l,.mk__label,
.tag__mark,.st__label,.chip__mark,.rel__mark,.n02__mark,.tline__m,.prof__with,.n02__sub,
.fitem__mark,.astrip__types,.eco__note,.ipart__n,.hero__edge,.ftr__desc,.ftr__set--q a,
.card__mark,.chart__lab,.nextq__l,.nextq__m,.abox__l,.fromq__l,.fromq__m,.toc__t,.cside__t,.dstat dt{
  font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.1em;font-weight:500
}
/* ── кнопки ───────────────────────────────────────────────────────────── */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  min-height:48px;padding:0 22px;border-radius:999px;position:relative;overflow:hidden;
  background:var(--ink);color:var(--paper);font-size:var(--t-sm);font-weight:500;
  transition:transform .3s var(--ease),box-shadow .3s var(--ease)
}
.btn::before{content:'';position:absolute;inset:0;background:var(--signal);
  transform:translateY(101%);transition:transform .38s var(--ease);z-index:0}
.btn:hover::before,.btn:focus-visible::before{transform:translateY(0)}
/* Текст всегда светлый поверх заливки: контраст не проседает ни в одном состоянии. */
.btn,.btn:hover,.btn:focus-visible{color:var(--paper)}
.btn > *{position:relative;z-index:1}
.btn:hover{transform:translateY(-2px);box-shadow:var(--sh-2)}
.btn:active{transform:translateY(0)}
.btn--ghost{background:transparent;color:var(--ink);box-shadow:inset 0 0 0 1px var(--hair)}
.btn--ghost:hover,.btn--ghost:focus-visible{color:var(--paper);box-shadow:inset 0 0 0 1px transparent}
.btn--sm{min-height:40px;padding:0 16px;font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.08em;font-family:var(--f-mono)}
.btn--full{width:100%}
.btn .ic{transition:transform .3s var(--ease)}
.btn:hover .ic{transform:translateX(4px)}
.ubtn{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  min-width:44px;min-height:44px;border-radius:999px;color:var(--ink-2);
  transition:color .2s,background .2s}
.ubtn:hover{color:var(--ink);background:var(--surface-2)}
.ubtn--wide{padding-inline:16px;font-size:var(--t-sm)}
/* ── загрузочный экран ─────────────────────────────────────────────────
   Показывается только при работающем JS и только пока идёт загрузка.
   Жёсткий таймаут в скрипте гарантирует, что он не останется навсегда. */
.boot{display:none}
.boot__in{display:grid;gap:22px;justify-items:center;width:min(420px,84vw)}
.boot__word{display:flex;gap:.02em}
.boot__c{display:inline-block;font-family:var(--f-dis);font-weight:600;
  font-size:clamp(2rem,8vw,3.4rem);letter-spacing:-.04em;line-height:1;
  transform-origin:50% 60%;animation:bootc .9s var(--ease) both;animation-delay:calc(var(--i)*70ms)}
}
.boot__c{transition:font-family .01s,letter-spacing .3s var(--ease),transform .45s var(--ease)}
.boot__meta{display:flex;align-items:baseline;justify-content:space-between;width:100%;
  font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.12em;
  font-weight:600;color:var(--muted)}
.boot__bar{width:100%;height:2px;background:var(--hair);overflow:hidden}
.boot__fill{display:block;height:100%;width:100%;background:var(--ink);transform:scaleX(0);
  transform-origin:left;transition:transform .35s linear}
@media (max-width:640px){.scene3d{aspect-ratio:4/3.4}}
.scene3d__field{position:absolute;inset:0;background:
  radial-gradient(58% 72% at 30% 22%,var(--field-b) 0%,transparent 62%),
  radial-gradient(46% 60% at 72% 30%,var(--field-a) 0%,transparent 68%),
  linear-gradient(168deg,var(--surface) 0%,var(--surface-3) 58%,var(--field-c) 100%)}
.scene3d__space{position:absolute;inset:0;display:grid;place-items:center;
  perspective:1200px;perspective-origin:50% 44%}
/* ── объёмный знак ────────────────────────────────────────────────────
   Форма набрана слоями по Z: передняя грань чернильная, глубина уходит
   в синий. Матовая подача, без глянцевых бликов и без обводок. */
.l3d{width:min(52%,360px);aspect-ratio:1;transform-style:preserve-3d}
.l3d__obj{position:relative;width:100%;height:100%;transform-style:preserve-3d;
  transform:rotateX(calc(-16deg + var(--my,0) * 10deg))
            rotateY(calc(18deg + var(--mx,0) * 18deg + var(--sp,0) * 46deg))
            rotateZ(calc(var(--sp,0) * -6deg));
  transition:transform .55s cubic-bezier(.2,.8,.3,1);
  animation:l3dFloat 9s ease-in-out infinite}
@keyframes l3dFloat{0%,100%{translate:0 0}50%{translate:0 -3.5%}}
.l3d__f{position:absolute;inset:0;transform:translateZ(var(--z));
  color:color-mix(in srgb,var(--ink) calc(100% - var(--d) * 62%),var(--signal));
  opacity:calc(1 - var(--d) * .12)}
.l3d__f svg{width:100%;height:100%}
.l3d__f:first-child{filter:drop-shadow(0 16px 24px rgba(44,62,120,.20))}
.l3d__glow{position:absolute;left:50%;top:56%;width:120%;aspect-ratio:1;translate:-50% -50%;
  transform:translateZ(-46px);border-radius:50%;
  background:radial-gradient(closest-side,color-mix(in srgb,var(--signal) 26%,transparent),transparent 72%);
  filter:blur(16px)}
/* объёмный знак как фон блока — за содержимым, не рядом с ним */
.bd3d{position:absolute;inset:0;display:grid;place-items:center;perspective:1000px;
  pointer-events:none;z-index:0;overflow:hidden}
.bd3d .l3d{width:min(52vw,460px);opacity:.16}
.bd3d .l3d__f:first-child{filter:none}
.bd3d .l3d__glow{display:none}
.bd3d--a{justify-items:end;padding-right:min(6vw,80px)}
.bd3d--a .l3d__obj{animation-duration:13s}
.bd3d--b{justify-items:start;padding-left:min(6vw,80px)}
.bd3d--b .l3d__obj{transform:rotateX(-22deg) rotateY(-28deg);animation-duration:16s}
.scene3d__media{position:absolute;inset:0}
.scene3d__media img,.scene3d__media canvas{width:100%;height:100%;object-fit:cover;display:block}
/* ── бегущая строка ───────────────────────────────────────────────────── */
.mq{overflow:hidden;padding-block:clamp(14px,2vw,22px);border-block:1px solid var(--hair);
  margin-top:clamp(24px,4vw,56px)}
.mq__t{display:flex;width:max-content;animation:mqm var(--sp,42s) linear infinite}
.mq__g{display:flex;align-items:center}
.mq__i{display:inline-flex;align-items:center;gap:clamp(18px,3vw,40px);padding-right:clamp(18px,3vw,40px);
  font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.16em;
  font-weight:600;color:var(--muted);white-space:nowrap}
.mq__s{width:5px;height:5px;border-radius:50%;background:var(--signal);flex:none}
@keyframes mqm{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
/* ── текст, проявляющийся по прокрутке ────────────────────────────────── */
.sec--scrub{padding-block:clamp(72px,12vw,180px)}
.scrub{font-family:var(--f-dis);font-weight:600;letter-spacing:-.035em;line-height:1.14;
  font-size:clamp(1.5rem,4.6vw,3.4rem);max-width:22ch}
.scrub__w{display:inline-block;opacity:.14;transition:opacity .45s var(--ease)}
.scrub__w.on{opacity:1}
@supports (animation-timeline:view()){
  @media (prefers-reduced-motion:no-preference){
    .scrub__w{opacity:.14;animation:wordOn linear both;animation-timeline:view();
      animation-range:entry 34% cover 46%}
    @keyframes wordOn{to{opacity:1}}
  }
}
/* ── строка состояния: где я нахожусь ────────────────────────────────────
   Не меню, а тонкая контекстная полоса. Меню живёт в «Индексе». */
/* Верхняя строка: только знак и место, где человек находится. */
.topline{padding:clamp(14px,2vw,24px) var(--gut) 0}
.topline__in{width:100%;max-width:var(--wrap);margin-inline:auto;display:flex;
  align-items:center;justify-content:space-between;gap:16px}
.brand{display:inline-flex;align-items:center;gap:9px;min-height:44px;color:var(--ink)}
.brand__name{font-family:var(--f-dis);font-weight:600;font-size:1rem;letter-spacing:.004em}
.topline__here{display:none;align-items:center;gap:9px;font-family:var(--f-mono);
  font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.12em;font-weight:600;color:var(--muted)}
.topline__dot{width:5px;height:5px;border-radius:50%;background:var(--signal);flex:none;
  animation:pulse 3.4s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.7)}}
@media (min-width:640px){.topline__here{display:inline-flex}}
/* ── док: элемент под курсором вырастает вместе с соседями ──────────────
   Размер каждого элемента считает скрипт по расстоянию до курсора,
   плавность даёт пружина в одном rAF-цикле. Без курсора всё статично. */
.dock{position:fixed;left:50%;bottom:max(16px,env(safe-area-inset-bottom,0px));
  translate:-50% 0;z-index:60;max-width:calc(100% - 20px)}
.dock__panel{display:flex;align-items:flex-end;gap:clamp(4px,.7vw,8px);
  padding:8px clamp(8px,1vw,12px);border-radius:22px;
  background:rgba(255,255,255,.78);backdrop-filter:saturate(1.6) blur(16px);
  -webkit-backdrop-filter:saturate(1.6) blur(16px);
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.08),var(--sh-3)}
.dock__sep{width:1px;height:26px;margin-inline:4px;background:var(--hair);flex:none;
  align-self:center}
.dock__i{position:relative;display:grid;place-items:center;flex:none;
  width:var(--s,46px);height:var(--s,46px);border-radius:14px;
  background:rgba(255,255,255,.9);box-shadow:inset 0 0 0 1px rgba(14,15,16,.07);
  color:var(--ink-2);transition:background .25s,color .25s,box-shadow .25s}
.dock__i:hover,.dock__i:focus-visible{color:var(--ink);background:#fff;
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.16)}
.dock__ic{display:grid;place-items:center;transition:scale .25s var(--ease)}
.dock__i:hover .dock__ic{scale:1.06}
.dock__i.is-current{color:var(--signal);box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--signal) 34%,transparent)}
.dock__i--mark{background:var(--ink);color:var(--paper);box-shadow:none}
.dock__i--mark:hover{background:var(--ink);color:#fff;box-shadow:var(--sh-2)}
.dock__i--cta{background:var(--signal);color:#fff;box-shadow:none}
.dock__i--cta:hover{background:var(--signal-ink);color:#fff;box-shadow:var(--sh-2)}
.dock__lang{font-family:var(--f-mono);font-size:var(--t-meta);font-weight:700;letter-spacing:.06em}
.dock__mark-img{width:22px;height:22px;object-fit:contain;mix-blend-mode:multiply}
/* всплывающая подпись над элементом */
.dock__lb{position:absolute;bottom:calc(100% + 10px);left:50%;translate:-50% 4px;
  padding:5px 10px;border-radius:8px;white-space:nowrap;pointer-events:none;
  background:var(--ink);color:var(--paper);
  font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.1em;font-weight:600;opacity:0;
  transition:opacity .22s var(--ease),translate .22s var(--ease)}
.dock__i:hover .dock__lb,.dock__i:focus-visible .dock__lb{opacity:1;translate:-50% 0}
.dock__i--menu{display:none}
@media (max-width:900px){
  /* на узких экранах увеличение не нужно: остаётся компактный ряд */
  .dock__panel{gap:4px;padding:6px 8px;border-radius:18px}
  .dock__i{--s:44px!important;width:44px;height:44px;border-radius:12px}
  .dock__i--menu{display:grid}
  .dock__i[href*="/questions/"],.dock__i[href*="/research/"],.dock__i[href*="/studio/"]:not(.dock__i--cta),
  .dock__i[href*="/observers/"],.dock__i[href*="/archive/"],.dock__sep{display:none}
}
/* ── «Индекс»: основная навигационная поверхность ─────────────────────── */
.idx{position:fixed;inset:0;z-index:70;background:var(--paper);overflow-y:auto;
  overscroll-behavior:contain;clip-path:inset(0 0 100% 0)}
.idx[hidden]{display:none}
/* Открытое состояние задано статически, анимация — только переход к нему.
   Если анимация почему-то не выполнится, панель всё равно останется видимой. */
.idx.is-open{clip-path:inset(0 0 0 0);animation:idxIn .55s var(--ease)}
@keyframes idxIn{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0 0 0 0)}}
/* На узких экранах clip-path по всей высоте даёт рывок: анимируем сдвиг и прозрачность —
   их браузер считает на композиторе, без перерисовки слоя. */
@media (max-width:900px){
  .idx{clip-path:none;opacity:0;transform:translateY(14px)}
  .idx.is-open{opacity:1;transform:none;animation:none;
    transition:opacity .3s var(--ease),transform .34s var(--ease)}
  .idx.is-open .idx__l{animation-duration:.4s;animation-delay:calc(var(--i)*38ms + 60ms)}
  .idx.is-open .idx__side{animation-delay:.28s}
}
.idx__in{min-height:100%;width:100%;max-width:var(--wrap);margin-inline:auto;
  padding:0 var(--gut) clamp(32px,6vh,64px);
  display:grid;gap:clamp(24px,4vh,48px);align-content:start}
.idx__head{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:62px}
.idx__eyebrow{font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.12em;font-weight:600;color:var(--muted)}
.idx__eyebrow span{color:var(--hair)}
.idx__nav{display:grid;border-top:1px solid var(--hair)}
.idx__l{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr) auto auto;
  align-items:center;gap:0 clamp(14px,2.6vw,32px);
  padding:clamp(16px,2.6vh,26px) clamp(0px,1.4vw,18px);border-bottom:1px solid var(--hair);
  transition:padding-left .4s var(--ease)}
.idx__l::before{content:'';position:absolute;inset:0;background:var(--surface);
  transform:scaleY(0);transform-origin:bottom;transition:transform .4s var(--ease);z-index:-1}
.idx__l:hover::before{transform:scaleY(1)}
.idx__l:hover{padding-left:clamp(10px,2vw,28px)}
.idx__n{font-family:var(--f-mono);font-size:var(--t-meta);letter-spacing:.1em;font-weight:600;color:var(--muted)}
.idx__t{font-family:var(--f-dis);font-weight:600;letter-spacing:-.035em;
  font-size:clamp(1.5rem,5.4vw,3.1rem);line-height:1.02;transition:color .26s var(--ease)}
.idx__c{font-family:var(--f-mono);font-size:var(--t-meta);color:var(--muted);font-weight:600;
  min-width:2.5ch;text-align:right}
.idx__go{color:var(--hair);transition:transform .3s var(--ease),color .3s}
.idx__l:hover .idx__t{color:var(--signal)}
.idx__l:hover .idx__go{transform:translate(4px,-4px);color:var(--signal)}
.idx__l.is-current .idx__t{color:var(--signal)}
.idx.is-open .idx__l{opacity:1;transform:none;
  animation:rise .55s var(--ease);animation-delay:calc(var(--i)*55ms + 120ms)}
.idx__side{display:grid;gap:clamp(24px,4vw,56px);padding-top:clamp(16px,2.4vh,28px)}
.idx.is-open .idx__side{opacity:1;transform:none;animation:rise .55s var(--ease);animation-delay:.42s}
.idx__block{display:grid;gap:14px;align-content:start}
.idx__lab{font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.1em;font-weight:600;color:var(--muted)}
.idx__more{display:flex;flex-wrap:wrap;gap:8px 22px}
.idx__more a{display:inline-flex;align-items:center;min-height:36px;font-size:var(--t-sm);
  color:var(--ink-2);transition:color .2s}
.idx__more a:hover{color:var(--signal)}
.idx__mail{display:flex;align-items:center;gap:9px;font-size:var(--t-sm);color:var(--muted)}
.idx__mail a{color:var(--signal)}
@media (min-width:900px){
  .idx__side{grid-template-columns:minmax(0,1fr) 280px;align-items:start}
}
/* ── поиск ────────────────────────────────────────────────────────────── */
.sdlg{position:fixed;inset:0;z-index:80;background:rgba(14,15,16,.32);
  display:flex;align-items:flex-start;justify-content:center;padding:var(--gut)}
.sdlg[hidden]{display:none}
.sdlg__panel{width:min(720px,100%);margin-top:clamp(24px,8vh,96px);background:var(--surface);
  border-radius:var(--r3);overflow:hidden;box-shadow:var(--sh-3);
  animation:pop .32s var(--ease) both}
@keyframes pop{from{opacity:0;transform:translateY(-10px) scale(.985)}to{opacity:1;transform:none}}
.sdlg__form{display:flex;align-items:center;gap:12px;padding:8px 8px 8px 20px}
.sdlg__ic{color:var(--muted)}
.sdlg__input,.sform__input{flex:1;min-width:0;border:0;background:none;outline:none;
  padding:16px 0;font-size:1.05rem}
.sdlg__input::placeholder,.sform__input::placeholder{color:var(--muted)}
.sdlg__results{max-height:min(60vh,520px);overflow-y:auto;border-top:1px solid var(--hair)}
.sdlg__hint,.sres__hint{padding:22px 20px;color:var(--muted);font-size:var(--t-sm)}
.sres{margin-top:var(--s6)}
.sform{display:flex;align-items:center;gap:12px;background:var(--surface);border-radius:var(--r2);
  padding-inline:20px;margin-top:var(--s6)}
.sform__ic{color:var(--muted)}
.sr-item{display:grid;gap:6px;padding:16px 20px;border-top:1px solid var(--hair)}
.sr-item:first-child{border-top:0}
.sr-item:hover,.sr-item:focus-visible{background:var(--surface-2)}
.sr-item__top{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-family:var(--f-mono);
  font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.09em;color:var(--muted)}
.sr-item__t{font-size:1.02rem;font-weight:500}
.sr-item__x{font-size:var(--t-sm);color:var(--muted)}
.sr-item mark{background:var(--signal-soft);color:inherit;border-radius:2px}
/* ── герой ──────────────────────────────────────────────────────────────
   За текстом — сетка стеклянных плиток, мерцающая волной, поверх неё
   тонкая координатная сетка и мягкое световое пятно. Всё в светлых тонах. */
.hero{position:relative;padding-top:clamp(48px,9vw,132px);padding-bottom:clamp(56px,10vw,148px);
  text-align:center;overflow:hidden}
.hero__bg{position:absolute;inset:0;z-index:0;pointer-events:none}
/* MagicRings занимает весь первый экран целиком — по ширине и по высоте.
   Никакого контейнера и никакой подложки: холст прозрачный, светится только сам эффект. */
.hero__rings{position:absolute;inset:0;pointer-events:auto;background:none}
.strands-container{position:relative;width:100%;height:100%;background:transparent}
.strands-container canvas{display:block;width:100%;height:100%;background:transparent}
.tiles{position:absolute;inset:-2%;display:grid;grid-template-columns:repeat(var(--cols,12),1fr);
  gap:clamp(6px,.9vw,12px)}
.tile{display:block;aspect-ratio:1;border-radius:clamp(4px,.6vw,9px);
  background:linear-gradient(150deg,rgba(255,255,255,.92),rgba(232,238,252,.55));
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.65);opacity:.5;
  animation:tileShine 7s var(--ease) infinite;animation-delay:calc(var(--d,0s) * -1)}
@keyframes tileShine{
  0%,100%{opacity:.34;background:linear-gradient(150deg,rgba(255,255,255,.9),rgba(232,238,252,.5))}
  50%{opacity:.72;background:linear-gradient(150deg,rgba(255,255,255,1),rgba(214,226,255,.8))}}
.hero__grid{position:absolute;inset:0;
  background-image:linear-gradient(to right,rgba(14,15,16,.055) 1px,transparent 1px),
    linear-gradient(to bottom,rgba(14,15,16,.055) 1px,transparent 1px);
  background-size:clamp(56px,6vw,96px) clamp(56px,6vw,96px);
  -webkit-mask-image:radial-gradient(ellipse 78% 58% at 50% 34%,#000 46%,transparent 100%);
  mask-image:radial-gradient(ellipse 78% 58% at 50% 34%,#000 46%,transparent 100%)}
.hero__halo{position:absolute;left:50%;top:38%;width:min(120%,1180px);aspect-ratio:2/1;
  translate:-50% -50%;border-radius:50%;
  background:radial-gradient(closest-side,rgba(255,255,255,.96) 62%,rgba(255,255,255,0));
  filter:blur(6px)}
.hero::after{content:'';position:absolute;left:0;right:0;bottom:0;height:34%;z-index:0;
  background:linear-gradient(to top,var(--paper) 12%,transparent);pointer-events:none}
.hero__in{position:relative;z-index:1;display:flex;flex-direction:column;align-items:center;
  gap:clamp(16px,2.2vw,28px)}
/* пилюля-надзаголовок */
.pill{display:inline-flex;align-items:center;gap:9px;min-height:38px;padding:0 16px;border-radius:999px;
  background:rgba(255,255,255,.72);box-shadow:inset 0 0 0 1px rgba(14,15,16,.09);
  font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.12em;
  font-weight:600;color:var(--ink-2);transition:box-shadow .25s,background .25s}
.pill:hover{background:#fff;box-shadow:inset 0 0 0 1px rgba(14,15,16,.2)}
.pill__ic{transition:transform .28s var(--ease)}
.pill:hover .pill__ic{transform:translateX(3px)}
.hero__title{font-size:var(--t-display);line-height:1;letter-spacing:-.05em;max-width:14ch;
  font-weight:800}
.hl{display:block;overflow:hidden;padding-block:.04em}
.hl__i{display:block}
.hl--sig{color:var(--signal)}
.hero__lead{max-width:56ch;font-size:var(--t-lead);color:var(--ink-2);line-height:1.6}
.hero__acts{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}
.js [data-hs]{opacity:0}
.js [data-hs="1"]{--d:0}   .js [data-hs="2"]{--d:90}  .js [data-hs="3"]{--d:170}
.js [data-hs="4"]{--d:250} .js [data-hs="5"]{--d:390} .js [data-hs="6"]{--d:470}
.js [data-hs="7"]{--d:560}
.js.is-ready [data-hs]{animation:rise .9s var(--ease) both;animation-delay:calc(var(--d)*1ms)}
.js [data-hs].hl{opacity:1}
.js [data-hs].hl .hl__i{opacity:0}
.js.is-ready [data-hs].hl{animation:none}
.js.is-ready [data-hs].hl .hl__i{animation:lift 1.05s var(--ease) both;animation-delay:calc(var(--d)*1ms)}
@keyframes rise{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@keyframes lift{from{opacity:0;transform:translateY(104%)}to{opacity:1;transform:none}}
@keyframes settle{from{opacity:0;transform:translateY(30px) scale(.975)}to{opacity:1;transform:none}}
/* ── asset slots ──────────────────────────────────────────────────────── */
.slot{margin:0}
.slot__stage{position:relative;aspect-ratio:var(--slot-ratio,16/9);border-radius:var(--r3);
  overflow:hidden;background:var(--surface-3);isolation:isolate}
.slot__layer{position:absolute;inset:0;display:block;pointer-events:none}
.slot__layer--field{background:
  radial-gradient(58% 72% at 30% 22%,var(--field-b) 0%,transparent 62%),
  radial-gradient(46% 60% at 72% 30%,var(--field-a) 0%,transparent 68%),
  linear-gradient(168deg,var(--surface) 0%,var(--surface-3) 58%,var(--field-c) 100%)}
.slot__layer--beam{background:linear-gradient(102deg,transparent 34%,rgba(255,255,255,.55) 48%,transparent 60%);
  mix-blend-mode:soft-light}
.slot__layer--form{background:radial-gradient(closest-side,rgba(64,88,160,.26),rgba(64,88,160,.05) 72%,transparent 100%);
  inset:18% 30% 6% 30%;border-radius:50% 50% 44% 44%;filter:blur(6px);opacity:.5}
.slot__layer--grid{background-image:linear-gradient(to right,var(--hair) 1px,transparent 1px);
  background-size:calc(100%/6) 100%;opacity:.18}
.slot__media{position:absolute;inset:0;display:block}
.slot__media img{width:100%;height:100%;object-fit:cover;object-position:var(--focal,50% 50%)}
.slot__cap{margin-top:12px;font-size:var(--t-sm);color:var(--muted)}
.slot--hero .slot__stage{aspect-ratio:16/8}
@media (max-width:640px){.slot--hero .slot__stage{aspect-ratio:4/3.4}}
.slot--cover{margin-block:clamp(28px,4vw,44px)}
.slot--feat .slot__stage{aspect-ratio:4/3}
@media (max-width:899px){.slot--feat .slot__stage{aspect-ratio:16/9}}
/* мягкое смещение подложки при прокрутке — только там, где браузер умеет это сам */
@supports (animation-timeline:view()){
  @media (prefers-reduced-motion:no-preference){
    .slot__layer--form{animation:drift linear both;animation-timeline:view();animation-range:entry 10% exit 90%}
    @keyframes drift{from{transform:translateY(6%) scale(.96)}to{transform:translateY(-6%) scale(1.04)}}
  }
}
.chip__mark{color:var(--muted)}
.chip__title{font-size:.94rem;font-weight:500;line-height:1.3}
.chip__n{font-family:var(--f-mono);font-size:var(--t-meta);color:var(--muted)}
.chip--a{left:clamp(-8px,1vw,26px);bottom:-16px}
.chip--b{right:clamp(-8px,1vw,26px);top:clamp(18px,4vw,52px)}
@media (max-width:760px){
  .chip{position:static;max-width:none;box-shadow:none;margin-top:10px}
}
/* ── статус контура ───────────────────────────────────────────────────── */
.mstrip{background:var(--surface-2);padding-block:clamp(26px,3.6vw,42px)}
.mstrip__in{display:grid;gap:clamp(14px,2vw,28px);align-items:start;grid-template-columns:minmax(0,1fr)}
.mstrip__label{color:var(--muted)}
.mstrip__t{font-size:var(--t-h3);font-weight:600}
.mstrip__x{margin-top:8px;color:var(--ink-2);font-size:var(--t-sm);max-width:62ch}
.mstrip__status{display:grid;gap:10px;justify-items:start}
.mstat{display:inline-flex;align-items:center;gap:9px;font-family:var(--f-mono);
  font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.09em;color:var(--ink-2)}
.mstat__dot{width:7px;height:7px;border-radius:50%;background:var(--signal);flex:none;
  animation:pulse 3.4s ease-in-out infinite}
.mstrip__cur{font-family:var(--f-mono);font-size:var(--t-meta);letter-spacing:.08em;color:var(--muted)}
@media (min-width:900px){.mstrip__in{grid-template-columns:170px minmax(0,1fr) auto;align-items:center}}
/* ── заголовки секций ─────────────────────────────────────────────────── */
.shead{display:grid;gap:12px;margin-bottom:clamp(26px,3.4vw,48px)}
.shead__l{display:flex;align-items:baseline;gap:14px}
.shead__n{color:var(--muted);font-size:var(--t-meta);letter-spacing:.1em}
.shead__t{font-size:var(--t-h2)}
.shead__lead{color:var(--muted);max-width:54ch;font-size:var(--t-sm)}
.shead__link{display:inline-flex;align-items:center;gap:8px;font-size:var(--t-sm);color:var(--ink-2);min-height:44px}
.shead__link:hover{color:var(--signal)}
.shead__link .ic{transition:transform .24s var(--ease)}
.shead__link:hover .ic{transform:translateX(4px)}
@media (min-width:900px){
  .shead{grid-template-columns:minmax(0,1fr) auto;align-items:end}
  .shead__l,.shead__lead{grid-column:1}
  .shead__link{grid-column:2;grid-row:1/3;align-self:end;justify-self:end}
}
.phead{margin-bottom:clamp(26px,3.6vw,52px)}
.phead__eyebrow{color:var(--muted);margin-bottom:14px}
.phead__row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s5);flex-wrap:wrap}
/* min-width:0 обязателен: без него флекс-элемент не даёт длинному слову переноситься. */
.phead__title{font-size:var(--t-h1);line-height:1.08;max-width:20ch;min-width:0;flex:1 1 auto}
.phead__lead{margin-top:18px;max-width:60ch;color:var(--ink-2);font-size:var(--t-lead);line-height:1.6}
.phead__count{color:var(--muted);font-size:var(--t-sm)}
.phead__num{color:var(--ink);font-size:1.1rem}
/* ── метки ────────────────────────────────────────────────────────────── */
.tag{display:inline-flex;align-items:center;gap:8px;color:var(--muted)}
.tag__ic{color:var(--ink-2)}
.st{display:inline-flex;align-items:center;gap:7px;color:var(--muted)}
.st__glyph{flex:none}
.st--signal{color:var(--signal)}
.st--ink{color:var(--ink-2)}
.mr{display:flex;flex-wrap:wrap;gap:6px 16px;color:var(--muted);font-size:var(--t-meta);letter-spacing:.05em}
.mr__i{display:inline-flex;align-items:center;gap:6px}
.mr a{color:var(--muted);text-decoration:underline;text-decoration-color:var(--hair);
  text-underline-offset:3px;display:inline-block;padding-block:4px}
.mr a:hover{color:var(--ink)}
/* ── строки материалов ────────────────────────────────────────────────── */
.rows{border-top:1px solid var(--hair)}
.row{border-bottom:1px solid var(--hair)}
.row__link{display:grid;gap:12px;padding:clamp(20px,2.4vw,32px) 0;
  grid-template-columns:minmax(0,1fr) auto;align-items:start;
  transition:padding-left .35s var(--ease)}
.row__link:hover{padding-left:10px}
.row__head{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;grid-column:1/-1}
.row__title{grid-column:1;font-size:clamp(1.08rem,1.7vw,1.38rem);font-weight:600;line-height:1.3;
  max-width:34ch;transition:color .22s var(--ease)}
.row__lead{grid-column:1;color:var(--muted);font-size:var(--t-sm);max-width:60ch}
.row .mr{grid-column:1}
.row__go{grid-column:2;grid-row:2;color:var(--muted);transition:transform .28s var(--ease),color .28s}
.row__link:hover .row__title{color:var(--signal)}
.row__link:hover .row__go{transform:translate(3px,-3px);color:var(--signal)}
.row--micro .row__title{max-width:44ch}
@media (min-width:900px){
  .row__link{grid-template-columns:190px minmax(0,1fr) 32px;gap:0 var(--s6)}
  .row__head{grid-column:1;grid-row:1/4;flex-direction:column;align-items:flex-start;gap:10px}
  .row__title{grid-column:2;grid-row:1}
  .row__lead{grid-column:2;grid-row:2;margin-top:10px}
  .row .mr{grid-column:2;grid-row:3;margin-top:14px}
  .row__go{grid-column:3;grid-row:1}
}
/* ── строки вопросов ──────────────────────────────────────────────────── */
.qrows{border-top:1px solid var(--hair)}
.qrow{border-bottom:1px solid var(--hair);position:relative;overflow:hidden}
.qrow::before{content:'';position:absolute;left:0;right:0;bottom:0;height:100%;
  background:var(--surface);transform:translateY(101%);transition:transform .42s var(--ease);z-index:0}
.qrow:hover::before{transform:translateY(0)}
.qrow__link{position:relative;z-index:1;display:grid;
  grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;
  gap:0 clamp(14px,3vw,38px);padding:clamp(22px,3vw,38px) clamp(0px,1.5vw,20px)}
.qrow__n{font-family:var(--f-mono);font-size:clamp(1rem,2.2vw,1.6rem);color:var(--hair);
  line-height:1;transition:color .32s var(--ease)}
.qrow__body{display:block;min-width:0}
.qrow__sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.qrow__title{font-family:var(--f-dis);font-weight:400;font-size:clamp(1.15rem,2.5vw,1.85rem);
  letter-spacing:-.035em;line-height:1.2;transition:color .25s var(--ease)}
.qrow__meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;margin-top:14px;
  font-family:var(--f-mono);font-size:var(--t-meta);letter-spacing:.07em;color:var(--muted);
  text-transform:uppercase}
.qrow__go{color:var(--hair);transition:transform .28s var(--ease),color .28s;align-self:center}
.qrow__link:hover .qrow__title{color:var(--signal)}
.qrow__link:hover .qrow__n{color:var(--ink-2)}
.qrow__link:hover .qrow__go{transform:translateX(5px);color:var(--signal)}
@media (max-width:600px){.qrow__go{display:none}}
/* ── простая карточка ─────────────────────────────────────────────────── */
.cards{display:grid;gap:var(--s4)}
.card{display:grid;gap:12px;padding:clamp(18px,2.2vw,26px);background:var(--surface);
  border-radius:var(--r2);transition:transform .32s var(--ease),box-shadow .32s var(--ease)}
.card:hover{transform:translateY(-3px);box-shadow:var(--sh-1)}
.card__ic{color:var(--signal)}
.card__mark{color:var(--muted)}
.card__t{font-size:var(--t-h3);font-weight:600}
.card__x{color:var(--muted);font-size:var(--t-sm)}
.card__go{display:inline-flex;align-items:center;gap:8px;font-size:var(--t-sm);color:var(--signal);
  min-height:32px}
@media (min-width:700px){.cards{grid-template-columns:repeat(2,1fr)}}
@media (min-width:1080px){.cards--3{grid-template-columns:repeat(3,1fr)}}
/* ── диаграмма цикла ──────────────────────────────────────────────────── */
.cyc{display:grid;gap:var(--s5);margin-top:var(--s5)}
.cyc__d{width:100%;height:auto;color:var(--ink)}
.cyc__ring{fill:none;stroke:var(--hair);stroke-width:1}
.cyc__arc{fill:none;stroke:var(--signal);stroke-width:1.5;stroke-linecap:round;
  stroke-dasharray:var(--len,700);stroke-dashoffset:var(--len,700)}
[data-reveal].in .cyc__arc{animation:draw 1.6s var(--ease) .2s forwards}
@keyframes draw{to{stroke-dashoffset:0}}
.cyc__node circle{fill:var(--paper);stroke:var(--ink);stroke-width:1.2}
.cyc__node text{font-family:var(--f-mono);font-size:8px;letter-spacing:.08em;fill:var(--ink);
  text-transform:uppercase}
.cyc__node{opacity:0}
[data-reveal].in .cyc__node{animation:rise .6s var(--ease) both;animation-delay:calc(var(--i)*140ms + 300ms)}
.cyc__legend{display:grid;gap:14px}
.cyc__i{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 14px}
.cyc__n{font-size:var(--t-meta);color:var(--muted);letter-spacing:.1em;padding-top:3px}
.cyc__t{font-weight:600;font-size:var(--t-sm)}
.cyc__x{grid-column:2;color:var(--muted);font-size:var(--t-sm)}
@media (min-width:900px){.cyc{grid-template-columns:minmax(0,420px) minmax(0,1fr);gap:var(--s8);align-items:center}}
/* ── столбчатая диаграмма состава архива ──────────────────────────────── */
.chart{display:grid;gap:10px;margin-top:var(--s5)}
/* Колонка подписи растягивается под самое длинное слово, но не наезжает
   на столбец: minmax не даёт ей схлопнуться, а текст переносится. */
.chart__r{display:grid;grid-template-columns:minmax(96px,auto) minmax(0,1fr) auto;
  align-items:center;gap:14px}
.chart__lab{color:var(--muted);line-height:1.25;overflow-wrap:break-word}
.chart__bar{height:8px;border-radius:999px;background:var(--surface-3);overflow:hidden}
/* Столбец по умолчанию показан на своём значении. Обнуляется он только там,
   где секция раскрывается по прокрутке, — иначе диаграмма внутри статьи
   осталась бы пустой: обёртки [data-reveal] у неё нет. */
.chart__fill{display:block;height:100%;border-radius:999px;background:var(--ink);
  transform-origin:left;transform:scaleX(var(--v,1))}
[data-reveal] .chart__fill{transform:scaleX(0)}
[data-reveal].in .chart__fill{animation:grow .9s var(--ease) both;animation-delay:calc(var(--i)*80ms)}
/* Диаграмма внутри статьи заполнена всегда: данные важнее появления.
   Анимацию входа здесь не вешаем — пустой столбец читается как ошибка. */
.tx__chart .chart__fill{transform:scaleX(var(--v,1));animation:none}
/* Синим выделяется наибольшее значение, а не первая строка: цвет должен
   что-то означать. Метка ставится в разметке атрибутом data-top. */
.chart__r[data-top] .chart__fill{background:var(--signal)}
@keyframes grow{to{transform:scaleX(var(--v,1))}}
.chart__n{font-family:var(--f-mono);font-size:var(--t-sm);color:var(--ink-2);min-width:2ch;text-align:right}
@media (max-width:600px){.chart__r{grid-template-columns:88px minmax(0,1fr) auto;gap:10px}}
/* ── закреплённая сцена цикла ─────────────────────────────────────────── */
.pin{position:relative}
.js .pin{height:380vh}
.pin__stage{padding-block:var(--sec)}
.js .pin__stage{position:sticky;top:0;min-height:100svh;display:grid;align-content:center;
  padding-block:clamp(56px,10vh,120px)}
.pin__in{position:relative;width:100%;max-width:var(--wrap);margin-inline:auto;padding-inline:var(--gut);
  display:grid;gap:clamp(28px,4vw,56px)}
.pin__in > *:not(.bd3d){position:relative;z-index:1}
.pin__eyebrow{color:var(--muted)}
.pin__lead{margin-top:10px;color:var(--ink-2);max-width:46ch}
.pin__body{display:grid;gap:clamp(28px,4vw,64px);align-items:center}
.pin__ring{position:relative;width:clamp(128px,20vw,196px);aspect-ratio:1}
.pin__ring svg{width:100%;height:100%}
.pin__track{fill:none;stroke:var(--hair);stroke-width:2}
.pin__arc{fill:none;stroke:var(--signal);stroke-width:2;stroke-linecap:round;
  stroke-dashoffset:calc(var(--len,340) * (1 - var(--p,0)))}
.pin__ic{position:absolute;inset:0;display:grid;place-items:center;color:var(--ink)}
.pin__icon{position:absolute;opacity:0;transform:scale(.8);
  transition:opacity .4s var(--ease),transform .4s var(--ease)}
.pin__steps{position:relative;min-height:clamp(150px,22vh,210px)}
.pin__s{position:absolute;inset:0;display:grid;align-content:start;gap:10px;opacity:0;
  transform:translateY(14px);transition:opacity .45s var(--ease),transform .45s var(--ease);
  pointer-events:none}
.pin__n{font-family:var(--f-mono);font-size:var(--t-meta);letter-spacing:.1em;color:var(--signal);font-weight:600}
.pin__t{font-size:clamp(1.6rem,4.6vw,3.4rem);line-height:1.04}
.pin__x{color:var(--ink-2);font-size:var(--t-lead);max-width:40ch;line-height:1.5}
.pin__dots{display:flex;gap:8px;align-items:center}
.pin__dot{flex:1;height:2px;background:var(--hair);position:relative;transition:background .3s}
.pin__dot span{position:absolute;top:10px;left:0;font-family:var(--f-mono);font-size:var(--t-meta);
  color:var(--muted);opacity:0;transition:opacity .3s;font-weight:600}
/* активное состояние выставляет data-step на секции */
.pin[data-step="0"] .pin__s[data-i="0"],.pin[data-step="1"] .pin__s[data-i="1"],
.pin[data-step="2"] .pin__s[data-i="2"],.pin[data-step="3"] .pin__s[data-i="3"],
.pin[data-step="4"] .pin__s[data-i="4"]{opacity:1;transform:none;pointer-events:auto}
.pin[data-step="0"] .pin__icon[data-i="0"],.pin[data-step="1"] .pin__icon[data-i="1"],
.pin[data-step="2"] .pin__icon[data-i="2"],.pin[data-step="3"] .pin__icon[data-i="3"],
.pin[data-step="4"] .pin__icon[data-i="4"]{opacity:1;transform:none}
.pin[data-step="0"] .pin__dot[data-i="0"],.pin[data-step="1"] .pin__dot:nth-child(-n+2),
.pin[data-step="2"] .pin__dot:nth-child(-n+3),.pin[data-step="3"] .pin__dot:nth-child(-n+4),
.pin[data-step="4"] .pin__dot{background:var(--ink)}
.pin[data-step="0"] .pin__dot[data-i="0"] span,.pin[data-step="1"] .pin__dot[data-i="1"] span,
.pin[data-step="2"] .pin__dot[data-i="2"] span,.pin[data-step="3"] .pin__dot[data-i="3"] span,
.pin[data-step="4"] .pin__dot[data-i="4"] span{opacity:1}
@media (min-width:860px){
  .pin__body{grid-template-columns:auto minmax(0,1fr);gap:clamp(40px,6vw,88px)}
}
/* без JS и при уменьшенном движении — обычный список, ничего не залипает */
html:not(.js) .pin__s,html:not(.js) .pin__icon{position:static;opacity:1;transform:none}
html:not(.js) .pin__steps{min-height:0;display:grid;gap:var(--s5)}
html:not(.js) .pin__ring{display:none}
/* ── портретный слот ──────────────────────────────────────────────────── */
.pslot{margin:0}
.pslot__stage{position:relative;display:block;aspect-ratio:1;overflow:hidden;
  border-radius:var(--r2);background:var(--surface-3);isolation:isolate}
.pslot--round .pslot__stage{border-radius:50%}
.pslot__layer{position:absolute;inset:0;display:block;pointer-events:none}
.pslot__layer--field{background:
  radial-gradient(70% 70% at 40% 25%,var(--field-b) 0%,transparent 66%),
  linear-gradient(165deg,var(--surface) 0%,var(--surface-3) 62%,var(--field-c) 100%)}
.pslot__layer--form{background:radial-gradient(closest-side,rgba(64,88,160,.22),transparent 72%);
  inset:34% 22% -12% 22%;border-radius:50% 50% 0 0;filter:blur(4px)}
.pslot__ic{position:absolute;inset:0;display:grid;place-items:center;color:var(--muted);opacity:.5}
.pslot__media{position:absolute;inset:0;display:block}
.pslot__media img{width:100%;height:100%;object-fit:cover;object-position:var(--focal,50% 40%)}
.pslot.is-filled .pslot__layer,.pslot.is-filled .pslot__ic{opacity:0}
.pslot.is-filled .pslot__stage{background:var(--surface-2)}
.pslot--sm{width:56px}.pslot--md{width:clamp(96px,14vw,132px)}.pslot--lg{width:clamp(120px,18vw,168px)}
.face{display:grid;place-items:center;background:var(--surface-3);border-radius:var(--r2);color:var(--ink)}
.face--sm{width:56px;height:56px}.face--md{width:96px;height:96px}.face--lg{width:132px;height:132px}
/* ── таблица ──────────────────────────────────────────────────────────── */
.tbl__wrap{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-size:var(--t-sm)}
.tbl__cap{caption-side:bottom;margin-top:14px;color:var(--muted);font-size:var(--t-sm);text-align:left}
.tbl th,.tbl td{padding:14px 18px 14px 0;text-align:left;vertical-align:top;
  border-bottom:1px solid var(--hair)}
.tbl thead th{font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.09em;color:var(--muted);border-bottom:1px solid var(--ink-2)}
.tbl tbody th{font-weight:600;white-space:nowrap}
.tbl tbody tr:hover{background:var(--surface)}
@media (max-width:640px){
  /* Таблица разворачивается в список пар. Флексом, а не display:block:
     иначе подпись схлопывается в узкую колонку и уезжает наверх. */
  .tbl{display:flex;flex-direction:column;width:100%}
  .tbl tbody{order:1;display:block;width:100%}
  .tbl__cap{order:2;display:block;width:100%;margin-top:16px;caption-side:unset}
  .tbl tr,.tbl td,.tbl th{display:block;width:100%}
  .tbl thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .tbl tr{padding-block:14px;border-bottom:1px solid var(--hair)}
  .tbl td,.tbl th{border:0;padding:4px 0}
  .tbl td::before{content:attr(data-l);display:block;font-family:var(--f-mono);
    font-size:var(--t-meta);text-transform:uppercase;letter-spacing:.09em;color:var(--muted);
    margin-bottom:2px;font-weight:600}
}
/* Заполненный слот: подложка не нужна, изображение занимает кадр целиком. */
.slot.is-filled .slot__layer{opacity:0}
.slot.is-filled .slot__stage{background:var(--surface-2)}
.slot__media img{width:100%;height:100%;object-fit:cover;object-position:var(--focal,50% 50%)}
/* ── хронология внутри текста ─────────────────────────────────────────── */
.tline2{margin-block:clamp(28px,4vw,48px);max-width:var(--measure)}
.tline2__list{position:relative;display:grid;gap:0;padding-left:26px}
.tline2__list::before{content:'';position:absolute;left:5px;top:10px;bottom:10px;width:1px;
  background:var(--hair)}
.tev{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 18px;
  padding:14px 0;align-items:baseline}
.tev__dot{position:absolute;left:-26px;top:20px;width:11px;height:11px;border-radius:50%;
  background:var(--paper);box-shadow:inset 0 0 0 1.6px var(--signal)}
.tev:first-child .tev__dot,.tev:last-child .tev__dot{background:var(--signal);
  box-shadow:0 0 0 3px color-mix(in srgb,var(--signal) 18%,transparent)}
.tev__y{font-family:var(--f-mono);font-size:var(--t-meta);font-weight:700;letter-spacing:.08em;
  color:var(--signal);min-width:4ch}
.tev__b{display:grid;gap:5px;min-width:0}
.tev__t{font-weight:600;letter-spacing:-.012em}
.tev__x{color:var(--muted);font-size:var(--t-sm);line-height:1.6}
@media (prefers-reduced-motion:no-preference){
  .tev{opacity:0;animation:rowIn .55s var(--ease) forwards;animation-timeline:view();
    animation-range:entry 2% cover 14%}
  @supports not (animation-timeline:view()){.tev{opacity:1;animation:none}}
}
/* ── диаграмма и карточки внутри текста ───────────────────────────────── */
.tx__chart,.tx__cards,.tx__tbl{margin-block:clamp(26px,3.6vw,44px);max-width:var(--measure)}
.tx__cap{margin-top:14px;color:var(--muted);font-size:var(--t-sm);line-height:1.55}
.chart__note{display:block;font-style:normal;font-size:var(--t-meta);color:var(--muted);
  font-weight:600;text-transform:uppercase;letter-spacing:.08em;margin-top:2px}
.tx__chart .chart__r{grid-template-columns:150px minmax(0,1fr) auto;gap:16px}
.tx__chart .chart__lab{line-height:1.25;text-wrap:balance}
.tx__chart .chart__n{text-align:right;line-height:1.2}
@media (max-width:600px){
  /* Подпись уходит над столбцом: узкая колонка рвала слова по слогам. */
  .tx__chart .chart__r{grid-template-columns:minmax(0,1fr) auto;gap:6px 14px}
  .tx__chart .chart__lab{grid-column:1;grid-row:1}
  .tx__chart .chart__n{grid-column:2;grid-row:1;align-self:baseline}
  .tx__chart .chart__bar{grid-column:1/-1;grid-row:2}
  .tx__chart .chart__note{display:inline;margin-left:8px}
}
.tx__cards .card{background:var(--surface)}
/* ── изображения внутри статьи ────────────────────────────────────────── */
.tx__fig{margin-block:clamp(28px,4vw,52px)}
.tx__fig--wide{max-width:none;width:min(100%,calc(var(--measure) + 12vw))}
.tx__fig--bleed{width:100%}
.slot--art .slot__stage{border-radius:var(--r3)}
/* ── кластер плиток: состав системы ───────────────────────────────────── */
.sysgrid{display:grid;gap:clamp(32px,5vw,72px);align-items:center}
@media (min-width:900px){
  .sysgrid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
  .sysgrid--rev > :first-child{order:2}
}
.sysgrid__b{display:grid;gap:18px;justify-items:start;max-width:46ch}
.sysgrid__t{font-family:var(--f-dis);font-weight:600;letter-spacing:-.034em;
  font-size:clamp(1.4rem,3vw,2.2rem);line-height:1.12}
.sysgrid__x{color:var(--ink-2);line-height:1.65}
.tagline{display:inline-flex;align-items:center;min-height:30px;padding:0 12px;border-radius:999px;
  background:var(--surface-2);font-family:var(--f-mono);font-size:var(--t-meta);
  text-transform:uppercase;letter-spacing:.1em;font-weight:600;color:var(--ink-2)}
.tagline--q{background:var(--signal-soft);color:var(--signal-ink)}
.tagrow{display:flex;flex-wrap:wrap;gap:8px}
/* Плитки стоят на фиксированных точках, между ними идут лучи к центру.
   Подписей нет: смысл читается по иконке, полное название — в подсказке. */
.tcluster{position:relative;width:100%;aspect-ratio:4/3;max-width:520px;margin-inline:auto}
.tcluster__glow{position:absolute;left:50%;top:50%;width:78%;aspect-ratio:1;
  translate:-50% -50%;border-radius:50%;
  background:radial-gradient(closest-side,rgba(255,255,255,.96),rgba(255,255,255,0) 74%)}
.tcluster__beams{position:absolute;inset:0;width:100%;height:100%}
.beam__base{stroke:var(--hair);stroke-width:1.2;fill:none}
.beam__run{stroke:var(--signal);stroke-width:1.6;fill:none;stroke-linecap:round;
  stroke-dasharray:26 260;stroke-dashoffset:286;
  animation:beamRun 3.4s linear infinite;animation-delay:calc(var(--i) * .42s)}
@keyframes beamRun{to{stroke-dashoffset:0}}
.tcell{position:absolute;left:var(--x);top:var(--y);translate:-50% -50%;
  display:grid;place-items:center;width:clamp(52px,13%,66px);aspect-ratio:1;
  border-radius:clamp(12px,3%,18px);background:#fff;z-index:1;
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.09),var(--sh-1);
  color:var(--ink);transition:transform .3s var(--ease),box-shadow .3s var(--ease)}
.tcell:hover{transform:translateY(-4px) scale(1.04);
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.2),var(--sh-2)}
.tcell--mark{width:clamp(64px,17%,84px);background:var(--ink);color:var(--paper);z-index:2;
  box-shadow:var(--sh-2);overflow:hidden}
/* световая кромка по контуру центральной плитки */
.tcell--mark::after{content:'';position:absolute;inset:-40%;
  background:conic-gradient(from 0deg,transparent 0 72%,rgba(120,150,255,.95) 84%,transparent 92%);
  animation:edgeSpin 4.6s linear infinite}
.tcell--mark::before{content:'';position:absolute;inset:1.5px;border-radius:inherit;
  background:var(--ink);z-index:1}
.tcell--mark .mark{position:relative;z-index:2}
@keyframes edgeSpin{to{rotate:360deg}}
/* Световая кромка как отдельная утилита: применяется к любой скруглённой
   поверхности, где нужно тихо обозначить активность. */
.bbeam{position:relative;overflow:hidden;isolation:isolate}
@media (prefers-reduced-motion:reduce){.bbeam::before,.tcell--mark::after{animation:none;opacity:.35}}
/* ── бесконечный поток материалов ─────────────────────────────────────── */
.stream{position:relative;height:var(--h,340px);overflow:hidden;border-radius:var(--r3);
  background:var(--surface);box-shadow:inset 0 0 0 1px rgba(14,15,16,.06)}
.stream__track{display:flex;flex-direction:column;animation:streamUp var(--sp,26s) linear infinite}
.stream:hover .stream__track{animation-play-state:paused}
@keyframes streamUp{from{transform:translate3d(0,0,0)}to{transform:translate3d(0,-50%,0)}}
.sline{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:14px;
  padding:14px 18px;border-bottom:1px solid var(--hair);transition:background .2s}
.sline:hover{background:var(--surface-2)}
.sline__ic{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;
  background:var(--surface-2);color:var(--signal)}
.sline__b{min-width:0;display:grid;gap:3px}
.sline__t{font-size:var(--t-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sline__x{font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.09em;font-weight:600;color:var(--muted)}
.sline__m{font-family:var(--f-mono);font-size:var(--t-meta);font-weight:600;color:var(--muted)}
.stream__fade{position:absolute;left:0;right:0;height:56px;pointer-events:none}
.stream__fade--t{top:0;background:linear-gradient(to bottom,var(--surface),transparent)}
.stream__fade--b{bottom:0;background:linear-gradient(to top,var(--surface),transparent)}
/* ── карточки состояния ───────────────────────────────────────────────── */
.stats{display:grid;gap:1px;margin-top:clamp(28px,4vw,48px);background:var(--hair);
  border-radius:var(--r3);overflow:hidden;box-shadow:inset 0 0 0 1px var(--hair)}
@media (min-width:860px){.stats{grid-template-columns:repeat(3,1fr)}}
.stat{display:grid;gap:18px;align-content:start;padding:clamp(20px,2.6vw,28px);background:var(--paper);
  transition:background .25s}
.stat:hover{background:var(--surface)}
.stat__h{display:flex;align-items:flex-start;gap:12px}
.stat__ic{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;flex:none;
  background:var(--surface-2);color:var(--signal)}
.stat__t{font-size:var(--t-sm);font-weight:600}
.stat__s{margin-top:2px;color:var(--muted);font-size:var(--t-sm)}
.stat__b{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.stat__v{font-family:var(--f-dis);font-weight:700;font-size:clamp(1.9rem,4vw,2.6rem);
  letter-spacing:-.04em;line-height:1}
.stat__badge{display:inline-flex;align-items:center;gap:7px;min-height:26px;padding:0 10px;
  border-radius:999px;background:var(--signal-soft);color:var(--signal-ink);
  font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.09em;font-weight:600}
.stat__f{color:var(--muted);font-size:var(--t-sm);line-height:1.55}
/* ── избранное исследование ───────────────────────────────────────────── */
.feat{display:grid;gap:clamp(24px,3vw,40px)}
.feat__main{display:grid;gap:16px;align-content:start}
.feat__mark{display:flex;flex-wrap:wrap;align-items:center;gap:10px 20px}
.feat__title{font-size:clamp(1.5rem,3.4vw,2.6rem);line-height:1.1;max-width:16ch;
  transition:color .25s var(--ease)}
.feat__main:hover .feat__title{color:var(--signal)}
.feat__lead{color:var(--ink-2);font-size:var(--t-lead);max-width:44ch;line-height:1.55}
.feat__list{grid-column:1/-1;border-top:1px solid var(--hair)}
.fitem{border-bottom:1px solid var(--hair)}
.fitem a{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:4px 24px;padding:18px 0;align-items:baseline;
  transition:padding-left .35s var(--ease)}
.fitem a:hover{padding-left:8px}
.fitem__mark{grid-column:1;color:var(--muted)}
.fitem__title{grid-column:1;grid-row:2;font-size:clamp(1rem,1.6vw,1.22rem);font-weight:500;
  transition:color .2s}
.fitem__meta{grid-column:2;grid-row:1/3;color:var(--muted);text-align:right;white-space:nowrap}
.fitem a:hover .fitem__title{color:var(--signal)}
/* Ниже 720px метка справа съедала ширину заголовка и рвала его в столбик:
   уводим её под заголовок и отдаём всю строку тексту. */
@media (max-width:720px){
  .fitem a{grid-template-columns:minmax(0,1fr)}
  .fitem__mark{grid-row:1}
  .fitem__title{grid-column:1;grid-row:2;max-width:none}
  .fitem__meta{grid-column:1;grid-row:3;text-align:left;white-space:normal;margin-top:6px}
}
@media (min-width:900px){
  .feat{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);align-items:start;gap:clamp(32px,4vw,64px)}
  .feat__list{margin-top:var(--s5)}
}
/* ── линия вмешательства ──────────────────────────────────────────────── */
.spine{display:grid;gap:0;border-top:1px solid var(--hair)}
.spine__i{display:flex;align-items:baseline;gap:16px;padding:14px 0;border-bottom:1px solid var(--hair)}
.spine__n{font-size:var(--t-meta);letter-spacing:.1em;color:var(--muted)}
.spine__t{font-size:clamp(1rem,1.8vw,1.24rem);font-weight:500}
.js [data-reveal].in .spine__i{animation:rise .5s var(--ease) both;animation-delay:calc(var(--i)*55ms)}
.spine__note{margin-top:var(--s5);color:var(--muted);font-size:var(--t-sm);max-width:56ch}
.studio-line{display:grid;gap:18px;margin-top:clamp(30px,4vw,52px);padding-top:var(--s5);
  border-top:1px solid var(--hair)}
.studio-line__x{font-size:clamp(1.1rem,2.2vw,1.6rem);max-width:26ch;line-height:1.25}
.studio-line__acts{display:flex;flex-wrap:wrap;gap:12px}
@media (min-width:900px){
  .spine{grid-template-columns:repeat(6,1fr);border-bottom:1px solid var(--hair)}
  .spine__i{flex-direction:column;gap:10px;align-items:flex-start;padding:20px 20px 24px 0;border-bottom:0}
  .spine__t{font-size:1rem}
  .studio-line{grid-template-columns:minmax(0,1fr) auto;align-items:end}
}
/* ── архивная полоса ──────────────────────────────────────────────────── */
.astrip{display:grid;gap:20px;padding:clamp(22px,2.8vw,36px) 0;border-block:1px solid var(--hair);
  align-items:center}
.astrip__l{display:flex;align-items:baseline;gap:clamp(16px,2.5vw,32px);min-width:0}
.astrip__n{font-size:clamp(1.8rem,4.4vw,3rem);line-height:1;transition:color .25s}
.astrip__t{display:block;font-size:var(--t-h3)}
.astrip__x{display:block;margin-top:6px;color:var(--muted);font-size:var(--t-sm);max-width:44ch}
.astrip__types{display:flex;flex-wrap:wrap;gap:8px 22px;color:var(--muted)}
.astrip__types b{color:var(--ink-2);font-weight:500}
.astrip__go{color:var(--hair);transition:transform .25s var(--ease),color .25s;justify-self:end}
.astrip:hover .astrip__n,.astrip:hover .astrip__go{color:var(--signal)}
.astrip:hover .astrip__go{transform:translateX(6px)}
@media (min-width:1000px){.astrip{grid-template-columns:minmax(0,1fr) auto auto;gap:clamp(24px,4vw,64px)}}
/* ── N°02 ─────────────────────────────────────────────────────────────── */
.sec--n02{padding-block:0;max-width:none;padding-inline:0}
.n02{position:relative;background:var(--surface-2);display:grid;gap:clamp(24px,3.5vw,56px);width:100%;
  padding-block:clamp(32px,4.5vw,80px);overflow:hidden;
  padding-inline:max(var(--gut),calc((100% - var(--wrap)) / 2 + var(--gut)))}
.n02 > *:not(.bd3d){position:relative;z-index:1}
.n02__id{display:flex;flex-direction:column;gap:14px;align-items:flex-start}
@keyframes fadeIn{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}
.n02__code{font-family:var(--f-dis);font-size:1.5rem;letter-spacing:.01em}
.n02__sub{color:var(--muted)}
.n02__t{font-size:var(--t-h2)}
.n02__lead{margin-top:14px;color:var(--ink-2);max-width:54ch}
.n02__list{margin:var(--s5) 0;border-top:1px solid var(--hair)}
.n02__list li{border-bottom:1px solid var(--hair)}
.n02__list a{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:4px 16px;padding:14px 0;
  align-items:center;transition:padding-left .32s var(--ease)}
.n02__list a:hover{padding-left:8px}
.n02__thumb{grid-column:1;grid-row:1/3;width:74px;aspect-ratio:16/9;border-radius:var(--r2);
  overflow:hidden;background:var(--surface-3);align-self:center}
.n02__thumb img{width:100%;height:100%;object-fit:cover}
.n02__mark{grid-column:2;grid-row:1;color:var(--muted);align-self:end}
.n02__ttl{grid-column:2;grid-row:2;font-weight:500;transition:color .2s;align-self:start}
.n02__date{grid-column:3;grid-row:1/3;color:var(--muted);font-size:var(--t-meta)}
@media (max-width:520px){.n02__thumb{width:56px}.n02__date{display:none}}
.n02__list a:hover .n02__ttl{color:var(--signal)}
@media (min-width:900px){.n02{grid-template-columns:220px minmax(0,1fr)}}
/* ── экосистема ───────────────────────────────────────────────────────── */
.eco{display:grid;gap:0;border-top:1px solid var(--hair)}
.eco__i{padding:clamp(18px,2.4vw,28px) 0;border-bottom:1px solid var(--hair)}
.eco__t{font-size:var(--t-h3);font-weight:600}
.eco__x{margin-top:8px;color:var(--muted);font-size:var(--t-sm);max-width:52ch}
.eco__note{margin-top:var(--s5);color:var(--muted)}
@media (min-width:900px){
  .eco{grid-template-columns:repeat(4,1fr);border-bottom:1px solid var(--hair)}
  .eco__i{border-bottom:0;padding-right:24px}
}
/* ── фильтры ──────────────────────────────────────────────────────────── */
.fbar{display:grid;gap:var(--s4);padding-block:var(--s5);margin-bottom:var(--s4);border-top:1px solid var(--hair)}
.fbar__g{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.fbar__l{color:var(--muted);margin-right:6px}
.fchip{min-height:38px;padding:0 14px;border-radius:999px;background:var(--surface);
  font-size:var(--t-sm);color:var(--ink-2);transition:background .2s,color .2s,transform .2s}
.fchip:hover{background:var(--surface-3);transform:translateY(-1px)}
.fchip.is-on{background:var(--ink);color:var(--paper)}
.fbar__res{color:var(--muted);font-size:var(--t-sm)}
/* ── текст материалов ─────────────────────────────────────────────────── */
.art,.q,.dos,.legal,.prof{padding-block:clamp(28px,4vw,64px)}
.art__head,.q__top,.dos__head,.prof__head{max-width:var(--measure)}
.art__mark,.q__mark{display:flex;flex-wrap:wrap;align-items:center;gap:12px 22px;margin-bottom:20px}
.art__title,.q__title,.dos__title{font-size:var(--t-h1);line-height:1.1}
.art__lead,.q__lead,.dos__lead{margin-top:20px;font-size:var(--t-lead);color:var(--ink-2);line-height:1.6}
.art__head .mr,.q__top .mr,.dos__head .mr{margin-top:24px;padding-top:18px;border-top:1px solid var(--hair)}
.art__subj{margin-top:14px;font-size:var(--t-sm);color:var(--muted)}
.art__subj span{font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.09em;margin-right:10px}
.art__subj a{color:var(--signal);text-decoration:underline;text-underline-offset:3px}
/* индикатор чтения — нативный, без обработчиков прокрутки */
.rprog{position:fixed;top:0;left:0;right:0;height:2px;background:var(--signal);z-index:65;
  transform-origin:left;transform:scaleX(0)}
@supports (animation-timeline:scroll()){
  .rprog{animation:grow2 linear;animation-timeline:scroll(root block)}
  @keyframes grow2{to{transform:scaleX(1)}}
}
.crumbs{margin-bottom:22px;font-size:var(--t-meta);letter-spacing:.07em;text-transform:uppercase;color:var(--muted)}
.crumbs ol{display:flex;flex-wrap:wrap;align-items:center;gap:4px 8px}
.crumbs li + li::before{content:'/';margin-right:8px;color:var(--hair)}
/* Запас по высоте нажатия: визуально ничего не смещается, палец попадает. */
.crumbs a,.crumbs span{display:inline-block;padding-block:5px}
.crumbs a:hover{color:var(--ink)}
.fromq{display:grid;gap:6px;max-width:var(--measure);margin-block:clamp(26px,3.6vw,42px);
  padding:20px 22px;background:var(--surface);border-radius:var(--r2);
  transition:transform .3s var(--ease)}
.fromq:hover{transform:translateX(6px)}
.fromq__l{color:var(--muted)}
.fromq__t{font-weight:600}
.fromq__m{color:var(--signal)}
.pending{max-width:var(--measure);margin-block:24px;padding:14px 18px;background:var(--signal-soft);
  border-radius:var(--r1);font-size:var(--t-sm);color:var(--ink-2)}
.art__body{display:grid;gap:clamp(24px,3vw,48px);margin-top:clamp(24px,3vw,40px)}
@media (min-width:1100px){
  .art__body{grid-template-columns:minmax(0,var(--measure)) minmax(0,1fr);gap:clamp(40px,5vw,88px)}
  .art__aside{grid-column:2;grid-row:1;position:sticky;top:86px;align-self:start;max-width:280px}
  .art__body .tx{grid-column:1;grid-row:1}
  .art__aside .toc{margin:0;padding-top:0;border-top:0}
}
.toc{max-width:var(--measure);margin-block:clamp(26px,3.6vw,42px);padding-top:22px;border-top:1px solid var(--hair)}
.toc__t{color:var(--muted);margin-bottom:14px}
.toc__list{display:grid;gap:2px}
.toc__list a{display:flex;gap:14px;padding:7px 0;font-size:var(--t-sm);color:var(--ink-2);
  transition:padding-left .28s var(--ease)}
.toc__list a:hover{color:var(--signal);padding-left:4px}
.toc__n{color:var(--muted);font-size:var(--t-meta)}
.tx{max-width:var(--measure)}
.tx--wide{max-width:72ch}
.tx p{margin-top:1.15em;line-height:1.75}
.tx p:first-child{margin-top:0}
.tx__h2{margin-top:clamp(36px,4.4vw,60px);font-family:var(--f-dis);font-weight:400;
  font-size:var(--t-h2);letter-spacing:-.03em;line-height:1.24;scroll-margin-top:86px}
.tx__h3{margin-top:2em;font-size:var(--t-h3);font-weight:600}
.tx__list{margin-top:1.15em;display:grid;gap:.6em}
.tx__list li{position:relative;padding-left:26px;line-height:1.65}
.tx__list li::before{content:'';position:absolute;left:2px;top:.78em;width:10px;height:1px;background:var(--signal)}
.tx__list--num{counter-reset:n}
.tx__list--num li{counter-increment:n}
.tx__list--num li::before{content:counter(n,decimal-leading-zero);top:0;width:auto;height:auto;
  background:none;font-family:var(--f-mono);font-size:var(--t-meta);color:var(--muted)}
.tx__quote{margin-block:2em}
.tx__quote blockquote p{font-family:var(--f-dis);font-size:var(--t-lead);line-height:1.4;letter-spacing:-.025em}
.tx__quote figcaption{margin-top:12px;font-size:var(--t-sm);color:var(--muted)}
.tx a{color:var(--signal);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}
.tx a:hover{text-decoration-thickness:2px}
.mk{margin-top:1.6em;padding-left:22px;position:relative}
.mk::before{content:'';position:absolute;left:0;top:.35em;bottom:.35em;width:2px;background:var(--hair)}
.mk__label{color:var(--muted);margin-bottom:6px}
.mk__text{line-height:1.72}
.mk--fact::before,.mk--data::before,.mk--source::before{background:var(--ink-2)}
.mk--fact .mk__label,.mk--data .mk__label,.mk--source .mk__label{color:var(--ink-2)}
.mk--conclusion::before{background:var(--signal)}
.mk--conclusion .mk__label{color:var(--signal)}
.mk--conclusion .mk__text{font-size:var(--t-lead);line-height:1.55}
.mk--hypothesis::before{background:repeating-linear-gradient(var(--signal) 0 4px,transparent 4px 8px)}
.mk--hypothesis .mk__label{color:var(--signal)}
.mk--unverified::before,.mk--counter::before{background:repeating-linear-gradient(var(--muted) 0 3px,transparent 3px 7px)}
/* ── вопрос ───────────────────────────────────────────────────────────── */
.q__grid{display:grid;gap:clamp(30px,3.6vw,52px);margin-top:clamp(32px,4.4vw,60px)}
.qsec__t{font-size:var(--t-h3);font-weight:600;margin-bottom:16px;padding-bottom:12px;
  border-bottom:1px solid var(--hair)}
.qopen{max-width:var(--measure);margin-top:clamp(32px,4.4vw,60px);padding:24px;
  background:var(--surface);border-radius:var(--r2)}
.qopen__t{font-weight:600}
.qopen__x{margin-top:8px;color:var(--muted);font-size:var(--t-sm)}
@media (min-width:900px){
  .q__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .qsec--wide{grid-column:1/-1;max-width:var(--measure)}
}
/* ── вмешательство ────────────────────────────────────────────────────── */
.iparts{margin-top:clamp(30px,3.6vw,52px);border-top:1px solid var(--hair)}
.ipart{display:grid;gap:14px;padding:clamp(22px,3vw,36px) 0;border-bottom:1px solid var(--hair)}
.ipart__t{font-size:var(--t-meta)}
.ipart__n{color:var(--muted);font-weight:400}
.ipart .tx p{font-size:var(--t-lead);line-height:1.55}
@media (min-width:900px){
  .ipart{grid-template-columns:180px minmax(0,1fr);gap:0 var(--s6);align-items:start}
  .ipart__t{grid-column:1}
  .ipart .tx,.ipart .tx__list{grid-column:2}
}
/* ── источники, автор, связи ──────────────────────────────────────────── */
.sources{max-width:var(--measure);margin-top:clamp(44px,5.4vw,80px);padding-top:28px;border-top:1px solid var(--hair)}
.sources__t{font-size:var(--t-h3);font-weight:600;margin-bottom:22px}
.sources__list{display:grid;gap:20px}
.src{display:grid;grid-template-columns:auto minmax(0,1fr);gap:0 16px}
.src__n{color:var(--muted);font-size:var(--t-meta);padding-top:4px}
.src__line{line-height:1.5}
.src__author{color:var(--muted);margin-right:8px}
.src__title{font-style:normal;font-weight:600}
.src__sub{margin-top:4px;color:var(--muted);font-size:var(--t-sm)}
.src__link{display:inline-flex;align-items:center;gap:7px;margin-top:8px;font-size:var(--t-sm);color:var(--signal)}
.src__link:hover{text-decoration:underline;text-underline-offset:3px}
.sources__note{margin-top:24px;color:var(--muted);font-size:var(--t-sm);line-height:1.6}
.abox{display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px 20px;align-items:center;
  max-width:var(--measure);margin-top:clamp(36px,4.6vw,68px);padding-top:26px;border-top:1px solid var(--hair)}
.abox__mark{color:var(--ink)}
.abox__l{color:var(--muted)}
.abox__n{margin-top:6px;font-size:var(--t-h3);font-weight:600}
.abox__r{margin-top:4px;color:var(--muted);font-size:var(--t-sm)}
.abox__go{grid-column:2;display:inline-flex;align-items:center;gap:8px;min-height:44px;
  font-size:var(--t-sm);color:var(--signal)}
.abox__go:hover{text-decoration:underline;text-underline-offset:3px}
.nextq{display:grid;gap:8px;max-width:var(--measure);margin-top:clamp(36px,4.6vw,68px);
  padding:clamp(22px,3vw,32px) 0;border-top:1px solid var(--hair);border-bottom:1px solid var(--hair);
  transition:padding-left .35s var(--ease)}
.nextq:hover{padding-left:10px}
.nextq__l{color:var(--muted)}
.nextq__t{font-size:clamp(1.15rem,2.4vw,1.7rem);line-height:1.2;transition:color .22s}
.nextq__m{color:var(--muted)}
.nextq:hover .nextq__t{color:var(--signal)}
.related{margin-top:clamp(44px,5.4vw,80px)}
.related__t{font-size:var(--t-h3);font-weight:600;margin-bottom:20px}
.related__list{display:grid;gap:1px;background:var(--hair);border-block:1px solid var(--hair)}
.rel{display:grid;gap:6px;padding:20px 0;background:var(--paper);transition:background .22s}
.rel:hover{background:var(--surface)}
.rel__mark{color:var(--muted)}
.rel__title{font-weight:500;transition:color .2s}
.rel__type{color:var(--muted);font-size:var(--t-sm)}
.rel:hover .rel__title{color:var(--signal)}
@media (min-width:760px){.related__list{grid-template-columns:repeat(3,1fr)}.rel{padding:22px 20px}}
/* ── досье и профили ──────────────────────────────────────────────────── */
.dos__stats,.prof__stats{display:flex;flex-wrap:wrap;gap:22px 40px;margin-top:28px;padding-top:22px;
  border-top:1px solid var(--hair)}
.dstat dt{color:var(--muted)}
.dstat dd{margin-top:6px;font-size:1.5rem}
.dos__st{font-size:var(--t-h3);font-weight:600;margin-bottom:22px}
.dos__route,.dos__items{margin-top:clamp(36px,4.6vw,68px)}
.route{display:grid;gap:2px;border-top:1px solid var(--hair)}
.route__i{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 18px;padding:20px 0;
  border-bottom:1px solid var(--hair)}
.route__n{color:var(--muted);font-size:var(--t-meta);padding-top:4px}
.route__x{color:var(--ink-2)}
.route__go{grid-column:2;display:inline-flex;align-items:center;gap:8px;margin-top:8px;
  font-size:var(--t-sm);color:var(--signal)}
.route__go:hover{text-decoration:underline;text-underline-offset:3px}
.obs{display:grid;gap:2px;border-top:1px solid var(--hair)}
.ob{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;
  gap:0 clamp(18px,3vw,36px);padding:clamp(20px,2.8vw,32px) 0;border-bottom:1px solid var(--hair);
  transition:padding-left .32s var(--ease)}
.ob:hover{padding-left:10px}
.ob__body{display:grid;gap:5px;min-width:0}
.ob__name{font-family:var(--f-dis);font-size:clamp(1.1rem,2vw,1.5rem);letter-spacing:-.03em;transition:color .2s}
.ob__role,.ob__n{color:var(--muted);font-size:var(--t-sm)}
.ob__go{color:var(--hair);transition:transform .25s var(--ease),color .25s}
.ob:hover .ob__name,.ob:hover .ob__go{color:var(--signal)}
.ob:hover .ob__go{transform:translateX(5px)}
.prof__id{display:flex;align-items:center;gap:clamp(18px,3vw,32px);flex-wrap:wrap}
.prof__name{font-size:var(--t-h1);line-height:1}
.prof__role{margin-top:10px;color:var(--ink-2)}
.prof__with{margin-top:8px;color:var(--muted)}
.prof__st{font-size:var(--t-h3);font-weight:600;margin-bottom:18px;padding-bottom:12px;border-bottom:1px solid var(--hair)}
.prof__pos,.prof__topics,.prof__method,.prof__feed{margin-top:clamp(36px,4.6vw,68px);max-width:var(--measure)}
.prof__feed{max-width:none}
.tlist{display:grid;gap:10px}
.tlist li{position:relative;padding-left:24px;color:var(--ink-2)}
.tlist li::before{content:'';position:absolute;left:0;top:.78em;width:12px;height:1px;background:var(--signal)}
.mlist{display:grid;gap:14px}
.mlist li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;color:var(--ink-2)}
.mlist__n{color:var(--muted);font-size:var(--t-meta);padding-top:5px}
.tline{border-top:1px solid var(--hair)}
.tline__i{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:baseline;gap:6px 22px;
  padding:16px 0;border-bottom:1px solid var(--hair)}
.tline__d{color:var(--muted);font-size:var(--t-meta)}
.tline__l{display:grid;gap:4px;min-width:0}
.tline__m{color:var(--muted)}
.tline__t{font-weight:500;transition:color .2s}
.tline__l:hover .tline__t{color:var(--signal)}
@media (max-width:640px){.tline__i{grid-template-columns:minmax(0,1fr)}.tline__s{justify-self:start}}
/* ── студия ───────────────────────────────────────────────────────────── */
.model{display:grid;gap:var(--s5);border-top:1px solid var(--hair);padding-top:var(--s5)}
.mstep{display:grid;gap:8px}
.mstep__ic{color:var(--signal)}
.mstep__n{color:var(--muted);font-family:var(--f-mono);font-size:var(--t-meta);letter-spacing:.1em}
.mstep__t{font-size:var(--t-h3);font-weight:600}
.mstep__x{color:var(--muted);font-size:var(--t-sm)}
.js [data-reveal].in .mstep{animation:rise .55s var(--ease) both;animation-delay:calc(var(--i)*60ms)}
@media (min-width:640px){.model{grid-template-columns:repeat(2,1fr);gap:var(--s6)}}
@media (min-width:1080px){.model{grid-template-columns:repeat(4,1fr)}}
.caps{display:grid;gap:var(--s6)}
.cap__ic{color:var(--signal);margin-bottom:14px}
.cap__t{font-size:var(--t-h3);font-weight:600}
.cap__x{margin-top:8px;color:var(--muted);font-size:var(--t-sm);max-width:46ch}
.cap__list{margin-top:16px;display:grid;gap:8px}
.cap__list li{position:relative;padding-left:22px;font-size:var(--t-sm);color:var(--ink-2)}
.cap__list li::before{content:'';position:absolute;left:0;top:.75em;width:10px;height:1px;background:var(--hair)}
.cap--full{padding-top:var(--s5);border-top:1px solid var(--hair)}
@media (min-width:720px){.caps{grid-template-columns:repeat(2,1fr);gap:var(--s7) var(--s6)}}
@media (min-width:1080px){.caps,.caps--brief{grid-template-columns:repeat(3,1fr)}}
.proc{display:grid;gap:2px;border-top:1px solid var(--hair)}
.pstep{display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:start;
  gap:0 clamp(16px,3vw,32px);padding:clamp(22px,2.8vw,34px) 0;border-bottom:1px solid var(--hair)}
.pstep__n{color:var(--muted);font-family:var(--f-mono);font-size:var(--t-meta);letter-spacing:.1em;padding-top:6px}
.pstep__ic{color:var(--signal)}
.pstep__t{font-size:var(--t-h3);font-weight:600}
.pstep__x{margin-top:8px;color:var(--muted);max-width:60ch}
@media (max-width:600px){
  .pstep{grid-template-columns:auto minmax(0,1fr)}
  .pstep__ic{grid-row:1;grid-column:1}
  .pstep__n{grid-column:2;padding-top:0}
  .pstep__b{grid-column:1/-1;margin-top:12px}
}
.cta{padding-top:clamp(26px,3.6vw,44px);border-top:1px solid var(--hair);display:grid;gap:14px;justify-items:start}
.cta__t{font-size:var(--t-h2);max-width:18ch}
.cta__x{color:var(--ink-2);max-width:52ch}
.cta .btn{margin-top:10px}
.note-line{margin-top:var(--s5);color:var(--muted);font-size:var(--t-sm);max-width:60ch}
/* ── команда ──────────────────────────────────────────────────────────── */
.tcards{display:grid;gap:var(--s4)}
@media (min-width:720px){.tcards{grid-template-columns:repeat(2,1fr);gap:var(--s5)}}
.tcard{display:grid;gap:16px;align-content:start;color:inherit}
.tcard__ph{position:relative;display:block;aspect-ratio:3/4;border-radius:clamp(14px,1.6vw,20px);
  overflow:hidden;background:var(--surface-2);isolation:isolate}
.tcard__ph img{width:100%;height:100%;object-fit:cover;
  transition:transform .6s var(--ease);will-change:transform}
.tcard:hover .tcard__ph img{transform:scale(1.03)}
/* заливка снизу: имя читается на любом кадре, но фотография не темнеет целиком */
.tcard__scrim{position:absolute;inset:auto 0 0 0;height:56%;pointer-events:none;
  background:linear-gradient(to top,rgba(10,12,16,.82) 0%,rgba(10,12,16,.42) 42%,transparent 100%)}
.tcard__cap{position:absolute;left:0;right:0;bottom:0;display:grid;gap:5px;
  padding:clamp(16px,2vw,22px)}
.tcard__n{font-family:var(--f-dis);font-weight:600;font-size:clamp(1.25rem,2.4vw,1.7rem);
  letter-spacing:-.03em;color:#fff;line-height:1.1}
.tcard__r{font-family:var(--f-mono);font-size:var(--t-meta);text-transform:uppercase;
  letter-spacing:.11em;font-weight:600;color:rgba(255,255,255,.78)}
.tcard__go{position:absolute;top:14px;right:14px;display:grid;place-items:center;
  width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.16);color:#fff;
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  transition:background .28s,transform .28s var(--ease)}
.tcard:hover .tcard__go{background:rgba(255,255,255,.3);transform:translate(2px,-2px)}
.tcard__b{display:grid;gap:14px}
.tcard__x{color:var(--muted);font-size:var(--t-sm);line-height:1.6}
.tcard__sk{display:flex;flex-wrap:wrap;gap:6px}
.tcard__chip{display:inline-flex;align-items:center;min-height:28px;padding:0 11px;border-radius:999px;
  background:var(--surface-2);font-family:var(--f-mono);font-size:var(--t-meta);
  text-transform:uppercase;letter-spacing:.08em;font-weight:600;color:var(--ink-2)}
/* переход к отбору: форма живёт отдельной страницей, здесь только вход */
.joinbar{display:grid;gap:20px;align-items:center;margin-top:var(--s6);padding-top:var(--s6);
  border-top:1px solid var(--hair)}
.joinbar__t{font-family:var(--f-dis);font-weight:600;font-size:var(--t-h3);letter-spacing:-.025em}
.joinbar__x{margin-top:8px;color:var(--muted);font-size:var(--t-sm);max-width:52ch}
.joinbar__cta{display:inline-flex;align-items:center;gap:14px;min-height:56px;padding:0 12px 0 12px;
  border-radius:999px;background:var(--surface);font-size:var(--t-sm);font-weight:600;
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.08);justify-self:start;
  transition:background .25s,box-shadow .25s,transform .25s var(--ease)}
.joinbar__cta:hover{background:#fff;transform:translateY(-2px);box-shadow:inset 0 0 0 1px rgba(14,15,16,.16),var(--sh-1)}
.joinbar__cta > span:last-child{padding-right:12px}
.joinbar__plus{position:relative;width:36px;height:36px;border-radius:50%;background:var(--ink);flex:none}
.joinbar__plus i{position:absolute;left:50%;top:50%;background:var(--paper);border-radius:2px;
  transition:transform .34s var(--ease)}
.joinbar__plus i:first-child{width:13px;height:1.8px;translate:-50% -50%}
.joinbar__plus i:last-child{width:1.8px;height:13px;translate:-50% -50%}
.joinbar__cta:hover .joinbar__plus i{transform:rotate(90deg)}
@media (min-width:860px){.joinbar{grid-template-columns:minmax(0,1fr) auto}}
/* ── поля выбора и радио ──────────────────────────────────────────────── */
.fld__sel{position:relative;display:grid}
.fld__sel select{appearance:none;padding-right:44px;cursor:pointer}
.fld__chev{position:absolute;right:14px;top:50%;translate:0 -50%;pointer-events:none;color:var(--muted)}
.fld--group{border:0;padding:0;margin:0;display:grid;gap:10px}
.fld--group legend{padding:0}
.radios{display:flex;flex-wrap:wrap;gap:8px}
.radio{display:inline-flex;align-items:center;gap:9px;min-height:44px;padding:0 16px;border-radius:999px;
  background:var(--surface);font-size:var(--t-sm);cursor:pointer;
  box-shadow:inset 0 0 0 1px transparent;transition:box-shadow .2s,background .2s}
.radio:hover{background:var(--surface-3)}
.radio input{accent-color:var(--signal);width:16px;height:16px}
.radio:has(input:checked){background:var(--ink);color:var(--paper)}
.radio:has(input:focus-visible){box-shadow:inset 0 0 0 2px var(--signal)}
/* honeypot: поле для автоматики, человеку его не видно и в фокус оно не попадает */
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
/* ── позиция ──────────────────────────────────────────────────────────── */
.man{display:grid;border-top:1px solid var(--hair)}
.mstate{display:grid;grid-template-columns:auto minmax(0,1fr);gap:6px clamp(20px,4vw,56px);
  padding:clamp(26px,3.6vw,44px) 0;border-bottom:1px solid var(--hair)}
.mstate__n{color:var(--muted);font-size:var(--t-meta);letter-spacing:.1em;padding-top:10px}
.mstate__t{font-size:clamp(1.2rem,2.6vw,1.9rem);line-height:1.2}
.mstate__x{grid-column:2;color:var(--ink-2);max-width:56ch;margin-top:10px}
@media (max-width:600px){.mstate{grid-template-columns:minmax(0,1fr)}.mstate__x{grid-column:1}}
.man__close{margin-top:clamp(32px,4.4vw,60px);font-size:var(--t-lead);color:var(--ink-2)}
.man__acts{margin-top:var(--s6)}
/* ── формы ────────────────────────────────────────────────────────────── */
/* ── формы ────────────────────────────────────────────────────────────
   Поля крупные и спокойные: подпись живёт внутри поля и уезжает наверх,
   когда в поле что-то есть. Рамка тонкая, фокус — кольцо, а не подсветка. */
.cgrid{display:grid;gap:clamp(32px,5vw,72px)}
.cform{display:grid;gap:14px;max-width:min(620px,100%)}
.fld{display:grid;gap:8px;position:relative}
.fld__l,.chk__l{font-size:var(--t-sm);font-weight:500;letter-spacing:-.008em}
.fld__i{width:100%;min-height:56px;padding:17px 18px;background:var(--surface);border:0;
  border-radius:12px;font-size:17px;line-height:1.4;outline:none;color:var(--ink);
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.12);
  transition:box-shadow .2s var(--ease),background .2s}
.fld__i::placeholder{color:color-mix(in srgb,var(--muted) 72%,transparent)}
.fld__i:hover{box-shadow:inset 0 0 0 1px rgba(14,15,16,.24)}
.fld__i:focus{background:#fff;box-shadow:inset 0 0 0 1px var(--signal),0 0 0 4px color-mix(in srgb,var(--signal) 16%,transparent)}
.fld__i[aria-invalid=true]{box-shadow:inset 0 0 0 1px var(--signal-ink),0 0 0 4px color-mix(in srgb,var(--signal-ink) 12%,transparent)}
.fld__i--area{min-height:132px;resize:vertical;line-height:1.55}
.fld__h{color:var(--muted);font-size:var(--t-sm);line-height:1.5}
.fld__h a{color:var(--signal);text-decoration:underline;text-underline-offset:3px}
.fld__e{display:flex;align-items:center;gap:8px;color:var(--signal-ink);font-size:var(--t-sm)}
.fld__e::before{content:'';width:10px;height:10px;border-radius:50%;box-shadow:inset 0 0 0 2px currentColor;flex:none}
.fld--check{grid-template-columns:auto minmax(0,1fr);align-items:start;gap:6px 14px;
  padding:18px;background:var(--surface);border-radius:12px;
  box-shadow:inset 0 0 0 1px rgba(14,15,16,.1)}
.chk{width:22px;height:22px;margin:1px 0 0;accent-color:var(--signal);flex:none}
.fld--check .fld__h,.fld--check .fld__e{grid-column:2}
.cform__foot{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s4) var(--s5);margin-top:var(--s2)}
.cform__mail{display:inline-flex;align-items:center;gap:9px;font-size:var(--t-sm);color:var(--ink-2);min-height:44px}
.cform__mail:hover{color:var(--signal)}
.fstate{padding:18px 20px;border-radius:var(--r2);background:var(--surface);
  animation:rise .4s var(--ease) both}
.fstate__t{font-weight:600}
.fstate__x{margin-top:6px;color:var(--muted);font-size:var(--t-sm)}
.fstate--ok{background:var(--signal-soft)}
.cside{display:grid;gap:var(--s6);align-content:start}
.cside__b{padding-top:var(--s5);border-top:1px solid var(--hair)}
.cside__t{color:var(--muted);margin-bottom:14px;font-weight:400}
.cside__list{display:grid;gap:10px}
.cside__list li{position:relative;padding-left:22px;font-size:var(--t-sm);color:var(--ink-2)}
.cside__list li::before{content:'';position:absolute;left:0;top:.75em;width:10px;height:1px;background:var(--signal)}
.cside__x{color:var(--muted);font-size:var(--t-sm)}
.cside__mail{display:flex;align-items:center;gap:9px;margin-bottom:8px}
.cside__mail a{color:var(--signal)}
@media (min-width:900px){.cgrid{grid-template-columns:minmax(0,1fr) 300px}}
/* ── правовые страницы ────────────────────────────────────────────────── */
.legal__upd{color:var(--muted);font-size:var(--t-meta);letter-spacing:.06em;margin-bottom:10px}
.ph{border-bottom:1px dashed var(--muted);color:var(--ink-2)}
.tx--legal p{font-size:1rem}
.lcontact{max-width:var(--measure);margin-top:clamp(36px,4.6vw,68px)}
.lcontact__x{margin-top:14px;color:var(--ink-2);line-height:1.65}
.lcontact__list{margin-top:20px;margin-bottom:20px;border-top:1px solid var(--hair)}
.lcontact__list li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px 20px;padding:14px 0;
  border-bottom:1px solid var(--hair);font-size:var(--t-sm)}
.lcontact__list span{color:var(--muted)}
.lcontact__list a{color:var(--signal)}
.legal__nav{display:flex;flex-wrap:wrap;gap:8px;margin-top:clamp(36px,4.6vw,60px)}
.legal__l{min-height:40px;display:inline-flex;align-items:center;padding:0 14px;border-radius:999px;
  background:var(--surface);font-size:var(--t-sm);color:var(--ink-2)}
.legal__l:hover{background:var(--surface-3)}
.legal__l.is-on{background:var(--ink);color:var(--paper)}
/* ── пустые состояния и 404 ───────────────────────────────────────────── */
.empty{display:grid;justify-items:start;gap:16px;padding:clamp(36px,5vw,72px) 0;
  border-top:1px solid var(--hair);border-bottom:1px solid var(--hair)}
.empty__mark{color:var(--muted)}
.empty__text{color:var(--ink-2);max-width:44ch}
.rows + .empty,.qrows + .empty{margin-top:var(--s6);display:none}
.rows + .empty.is-on{display:grid}
.sec--404{min-height:58vh;display:grid;align-content:center;justify-items:start;gap:16px}
.e404__code{font-size:clamp(3rem,12vw,7rem);color:var(--hair);line-height:1}
.e404__t{font-size:var(--t-h1)}
.e404__x{color:var(--ink-2);max-width:48ch}
.e404__acts{display:flex;flex-wrap:wrap;gap:12px;margin-top:var(--s4)}
/* ── подвал ───────────────────────────────────────────────────────────── */
.ftr{margin-top:var(--sec);padding-block:clamp(36px,4.4vw,64px);border-top:1px solid var(--hair)}
.ftr__top{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px 22px}
.ftr__desc{color:var(--muted)}
.ftr__desc span{color:var(--hair)}
.ftr__nav{display:grid;gap:14px 40px;margin-top:clamp(26px,3.4vw,44px)}
.ftr__set{display:flex;flex-wrap:wrap;gap:6px 26px}
.ftr__set a{display:inline-flex;align-items:center;min-height:36px;font-size:var(--t-sm);color:var(--ink-2);
  transition:color .18s}
.ftr__set a:hover{color:var(--signal)}
.ftr__set--q a{color:var(--muted)}
.ftr__bot{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s4) var(--s5);
  margin-top:clamp(30px,3.8vw,52px);padding-top:20px;border-top:1px solid var(--hair)}
.ftr__cr{color:var(--muted);font-size:var(--t-meta);letter-spacing:.05em}
.ftr__mail{font-size:var(--t-sm)}
.ftr__mail a{color:var(--signal);display:inline-block;padding-block:3px}
.fld__h a{display:inline-block;padding-block:3px}
.ftr__ctl{display:flex;align-items:center;gap:var(--s4);margin-left:auto}
.ftr__rss,.ftr__tg{display:inline-flex;align-items:center;gap:8px;min-height:44px;font-size:var(--t-meta);
  font-family:var(--f-mono);letter-spacing:.09em;font-weight:600;color:var(--muted)}
.ftr__rss:hover,.ftr__tg:hover{color:var(--signal)}
@media (min-width:900px){.ftr__nav{grid-template-columns:minmax(0,1fr) auto;align-items:baseline}}
/* ── раскрытие при прокрутке ──────────────────────────────────────────── */
.js [data-reveal]{opacity:0;transform:translateY(20px)}
.js [data-reveal].in{opacity:1;transform:none;transition:opacity .75s var(--ease),transform .75s var(--ease)}
/* Строки списков выходят по очереди — порядок чтения совпадает с порядком появления. */
@media (prefers-reduced-motion:no-preference){
  .js .rows > *,.js .qrows > *,.js .obs > *,.js .proc > *,.js .man > *,.js .eco > *{
    opacity:0;animation:rowIn .6s var(--ease) forwards;animation-timeline:view();
    animation-range:entry 4% cover 16%}
  @keyframes rowIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
  /* браузеры без scroll-driven анимаций показывают строки сразу */
  @supports not (animation-timeline:view()){
    .js .rows > *,.js .qrows > *,.js .obs > *,.js .proc > *,.js .man > *,.js .eco > *{
      opacity:1;animation:none}
  }
}
/* Заголовок секции подчёркивается линией, которая растёт по мере входа в кадр. */
.shead__l{position:relative;padding-bottom:14px}
.shead__l::after{content:'';position:absolute;left:0;bottom:0;height:1px;width:100%;
  background:var(--hair);transform:scaleX(0);transform-origin:left}
[data-reveal].in .shead__l::after{animation:lineIn 1s var(--ease) .1s forwards}
@keyframes lineIn{to{transform:scaleX(1)}}
/* Цикличная пульсация у открытых статусов: живой, но тихий признак работы. */
@media (prefers-reduced-motion:no-preference){
  .st--open .st__glyph,.st--investigating .st__glyph{animation:stPulse 3.6s var(--ease) infinite}
  @keyframes stPulse{0%,100%{opacity:1}50%{opacity:.45}}
  .mk--hypothesis .mk__label::after{content:'';display:inline-block;width:5px;height:5px;
    margin-left:8px;border-radius:50%;background:currentColor;vertical-align:middle;
    animation:stPulse 2.8s var(--ease) infinite}
}
/* Крупные числа набираются вместе с лёгким подъёмом. */
@media (prefers-reduced-motion:no-preference){
  .stat__v,.astrip__n{animation:numIn .7s var(--ease) both;animation-timeline:view();
    animation-range:entry 10% cover 28%}
  @keyframes numIn{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
  @supports not (animation-timeline:view()){.stat__v,.astrip__n{opacity:1;animation:none}}
}
/* ── уменьшенное движение и печать ────────────────────────────────────── */
@media (prefers-reduced-motion:reduce){
  html:focus-within{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:.001ms!important}
  .js [data-reveal],.js [data-hs],.js [data-hs].hl .hl__i,.cyc__node,.obmark rect,
  .pin__s,.pin__icon{opacity:1!important;transform:none!important}
  .chart__fill{transform:scaleX(var(--v,1))!important}
  .cyc__arc{stroke-dashoffset:0!important}
  .rprog{display:none}
  /* сцена перестаёт быть закреплённой и становится обычным списком */
  .js .pin{height:auto}
  .js .pin__stage{position:static;min-height:0}
  .pin__s{position:static}
  .pin__steps{min-height:0;display:grid;gap:var(--s5)}
  .pin__ring,.pin__dots{display:none}
  /* спектакль выключается целиком: загрузчик, вращение, бегущая строка, курсор */
  .js .boot{display:none}
  .mq__t,.l3d__obj,.tile,.stream__track,.beam__run{animation:none!important}
  .beam__run{stroke-dashoffset:0;stroke-dasharray:none;opacity:.35}
  .tile{opacity:.4}
  .l3d__obj{transform:rotateX(-14deg) rotateY(16deg)!important}
  .scrub__w{opacity:1!important}
}
@media print{
  .bar,.idx,.ftr,.sdlg,.fbar,.row__go,.skip,.rprog{display:none}
  body{background:#fff;color:#000}
  .sec{padding-block:0}
}