/* Единый ритм движения (research/10-airostudy-motion-flow-design.md, раздел 4).
   Подключается последним и перекрывает старые длинные тайминги:
   появление 300–450 мс, переключения 160–220 мс, перемещение объектов 450–600 мс. */
:root{--m-fast:.18s;--m-in:.42s;--m-move:.5s;--m-ease:cubic-bezier(.2,.7,.2,1)}

/* Тихое появление блоков: короче и ближе */
.motion-reveal{transform:translate3d(0,10px,0);transition:opacity .36s ease-out,transform var(--m-in) var(--m-ease);transition-delay:var(--motion-delay,0ms)}
main.page-enter{animation-duration:.26s}

/* Заголовки: строки выезжают из-под маски один раз */
.m-lines .m-line{display:block;overflow:hidden;padding-bottom:.08em;margin-bottom:-.08em}
.m-lines .m-line>span{display:block;transform:translate3d(0,105%,0);transition:transform .5s var(--m-ease);transition-delay:calc(var(--i,0) * 60ms)}
.m-lines.is-in .m-line>span{transform:none}

/* Стежок между блоками: строчка прошивается при входе в экран и останавливается */
.stitch{position:relative;height:34px;margin:0 auto;max-width:1300px;padding-inline:var(--gutter);pointer-events:none}
.stitch svg{display:block;width:100%;height:100%;overflow:visible}
.stitch path{fill:none;stroke:var(--blue);stroke-width:1.6;stroke-dasharray:7 6;stroke-linecap:round;opacity:.55}
.stitch .stitch-run{clip-path:inset(0 100% 0 0);transition:clip-path .9s var(--m-ease)}
.stitch.is-in .stitch-run{clip-path:inset(0 0 0 0)}
.stitch-dark path{stroke:#7EA6F0}
.section>.stitch,.wrap>.stitch,.section.wrap>.stitch{padding-inline:0;margin-bottom:clamp(28px,4vw,56px)}
.factory-details>.stitch,.faq-grid>.stitch{grid-column:1/-1}
.cb-stitch .stitch{padding-inline:0;margin-bottom:clamp(28px,4vw,56px)}

/* История производства: короче дистанция прокрутки и быстрее смена кадров */
@media (min-width:951px){.story-track{min-height:300vh}}
.story-garment{transition:transform var(--m-move) var(--m-ease),opacity .3s ease-out}
.story-layer{transition:transform var(--m-move) var(--m-ease),opacity .3s ease-out}

/* Рейлы и предметы — без долгих «доплываний» */
.rail-piece{transition:transform .6s var(--m-ease),opacity .35s ease-out}
.prop-float{transition:opacity .45s var(--m-ease),transform .6s cubic-bezier(.34,1.4,.64,1)}

/* Карточки изделий: быстрый отклик на наведение */
.pm-info{transition:transform .32s var(--m-ease)}
.pm-base{transition:opacity .2s}
.pm-media img{transition:transform .45s var(--m-ease)}

/* Логотип: знак доворачивается при загрузке, на наведение — короткий поворот */
.header .logo img{animation:logo-in .55s var(--m-ease) both}
.header .logo:hover img{transform:rotate(12deg);transition:transform .25s var(--m-ease)}
.header .logo>span{animation:logo-text .5s var(--m-ease) .12s both}
@keyframes logo-in{from{opacity:0;transform:rotate(-90deg) scale(.8)}to{opacity:1;transform:none}}
@keyframes logo-text{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}

/* Ссылки-стрелки: короткий толчок вперёд */
.text-link svg,.pm-links a svg{transition:transform var(--m-fast) var(--m-ease)}
.text-link:hover svg,.pm-links a:hover svg{transform:translate(2px,-2px)}

@media (hover:none){.pm-info{transition:none}}

@media (prefers-reduced-motion:reduce){
  .m-lines .m-line>span{transform:none;transition:none}
  .stitch .stitch-run{clip-path:none;transition:none}
  .header .logo img,.header .logo>span{animation:none}
}
