/* ===================== АНИМАЦИИ И ПРЕМИУМ-СЛОЙ ===================== */
:root{--ease:cubic-bezier(.16,1,.3,1)}
body{font-variant-numeric:lining-nums}
.proof__num,.about__badge b,.gallery__count,.card__num,.geo__list b{font-variant-numeric:lining-nums;font-feature-settings:"lnum" 1}

/* заставка */
.preloader{position:fixed;inset:0;z-index:200;background:var(--forest);display:grid;place-items:center;transition:clip-path 1.1s var(--ease) .1s;clip-path:inset(0 0 0 0)}
.preloader.is-done{clip-path:inset(0 0 100% 0);pointer-events:none}
.preloader__inner{text-align:center;color:var(--sand)}
.preloader__leaf{width:46px;height:70px;fill:none;stroke:var(--sand);stroke-width:1.2;stroke-dasharray:240;stroke-dashoffset:240;animation:draw 1.3s var(--ease) forwards}
@keyframes draw{to{stroke-dashoffset:0}}
.preloader__name{font:300 34px/1 var(--serif);color:var(--linen);margin-top:18px;letter-spacing:.06em;opacity:0;animation:fadeUp .9s var(--ease) .35s forwards}
.preloader__line{display:block;width:120px;height:1px;margin:18px auto 0;background:var(--sand);transform:scaleX(0);animation:line 1.1s var(--ease) .5s forwards}
@keyframes line{to{transform:scaleX(1)}}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
body.is-loading{overflow:hidden}

/* курсор */
.cursor{position:fixed;left:0;top:0;z-index:150;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--sand);pointer-events:none;mix-blend-mode:difference;transition:width .35s var(--ease),height .35s var(--ease),margin .35s var(--ease),background .35s,opacity .3s;display:grid;place-items:center;opacity:0}
.cursor.is-on{opacity:1}
.cursor.is-hover{width:54px;height:54px;margin:-27px 0 0 -27px;background:rgba(180,154,120,.35)}
.cursor.is-drag{width:88px;height:88px;margin:-44px 0 0 -44px;background:var(--sand);mix-blend-mode:normal}
.cursor__label{font:500 10px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--walnut);opacity:0;transition:opacity .2s}
.cursor.is-drag .cursor__label{opacity:1}
@media (hover:none),(pointer:coarse){.cursor{display:none}}

/* первый экран: заголовок по буквам, пар, подсказка прокрутки */
.split-line{display:inline-block;overflow:hidden;padding-bottom:.08em;vertical-align:top;white-space:nowrap}
.nav__name small{white-space:nowrap}
@media (max-width:520px){
  .hero__title{font-size:clamp(52px,15vw,72px)}
  .hero__actions .btn{width:100%;letter-spacing:.1em;padding:16px 18px}
  .nav__name small{letter-spacing:.16em}
  .hero__strip{gap:10px;font-size:11px;letter-spacing:.16em}
}
.split-char{display:inline-block;transform:translateY(110%);transition:transform 1.3s var(--ease)}
.is-ready .split-char{transform:none}
.hero .eyebrow,.hero__lead,.hero__actions,.hero__strip{opacity:0;transform:translateY(20px);transition:opacity 1s var(--ease),transform 1s var(--ease)}
.is-ready .hero .eyebrow{opacity:1;transform:none;transition-delay:.2s}
.is-ready .hero__lead{opacity:.92;transform:none;transition-delay:.75s}
.is-ready .hero__actions{opacity:1;transform:none;transition-delay:.95s}
.is-ready .hero__strip{opacity:.8;transform:none;transition-delay:1.15s}
.hero__steam{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;mix-blend-mode:screen;opacity:.6}
.hero__bg{position:absolute;inset:0}
.hero__scroll{position:absolute;right:var(--gutter);bottom:110px;width:1px;height:70px;background:rgba(232,223,208,.25);overflow:hidden}
.hero__scroll::after{content:"";position:absolute;left:0;top:-40%;width:1px;height:40%;background:var(--sand);animation:scrollHint 2.2s var(--ease) infinite}
@keyframes scrollHint{to{top:100%}}

/* бегущая строка */
.marquee{background:var(--walnut);color:var(--sand);overflow:hidden;padding:22px 0;border-block:1px solid rgba(180,154,120,.2)}
.marquee__track{display:flex;align-items:center;gap:36px;width:max-content;animation:marquee 38s linear infinite}
.marquee span{font:300 italic clamp(22px,2.6vw,34px)/1 var(--serif);white-space:nowrap}
.marquee i{width:8px;height:8px;transform:rotate(45deg);border:1px solid var(--sand);flex:none}
.marquee:hover .marquee__track{animation-play-state:paused}
@keyframes marquee{to{transform:translateX(-50%)}}

/* связки между блоками: нить + падающий лист */
main>section{position:relative}
.linker{position:absolute;left:50%;top:0;width:40px;height:120px;margin:0 0 0 -20px;z-index:6;pointer-events:none}
.linker__thread{position:absolute;left:50%;top:0;bottom:24px;width:1px;background:linear-gradient(180deg,transparent,var(--sand) 25%,var(--sand) 80%,transparent);transform-origin:top;transform:scaleY(0);opacity:.8;transition:transform 1.2s var(--ease)}
.linker__leaf{position:absolute;left:50%;top:0;width:22px;height:32px;margin-left:-11px;color:var(--sand);opacity:0;filter:drop-shadow(0 0 10px rgba(180,154,120,.6))}
.linker__leaf svg{width:100%;height:100%;display:block}
.linker.in-view .linker__thread{transform:scaleY(1)}
.linker.in-view .linker__leaf{animation:leafFall 2s var(--ease) .15s forwards}
@keyframes leafFall{0%{opacity:0;top:0;transform:rotate(-35deg) translateX(-14px)}30%{opacity:1;transform:rotate(25deg) translateX(12px)}60%{transform:rotate(-15deg) translateX(-8px)}100%{opacity:1;top:calc(100% - 32px);transform:rotate(0) translateX(0)}}

/* шлейф фото за курсором */
.proof{overflow:hidden}
.proof__trail{position:absolute;inset:0;pointer-events:none;z-index:0}
.proof .wrap{position:relative;z-index:1;pointer-events:none}
.trail-img{position:absolute;width:150px;aspect-ratio:3/4;object-fit:cover;border-radius:3px;transform:translate(-50%,-50%) scale(.6) rotate(var(--rot));opacity:0;transition:transform .6s var(--ease),opacity .6s ease;box-shadow:0 20px 40px rgba(0,0,0,.35)}
.trail-img.in{opacity:1;transform:translate(-50%,-50%) scale(1) rotate(var(--rot))}
.trail-img.out{opacity:0;transform:translate(-50%,-30%) scale(.85) rotate(var(--rot))}
.proof__hint{display:block;margin-top:18px;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--sand);opacity:.6}
@media (hover:none){.proof__hint{display:none}}

/* о мастере: шторка на фото и бейдж */
.about__photo{position:relative}
.img-reveal{overflow:hidden;border-radius:var(--r);clip-path:inset(100% 0 0 0);transition:clip-path 1.4s var(--ease)}
.img-reveal.is-in{clip-path:inset(0 0 0 0)}
.img-reveal img{transform:scale(1.25);transition:transform 2s var(--ease)}
.img-reveal.is-in img{transform:scale(1.04)}
.about__badge{position:absolute;right:-24px;bottom:40px;width:128px;height:128px;border-radius:50%;background:var(--forest);color:var(--linen);display:grid;place-content:center;text-align:center;font-size:11px;letter-spacing:.14em;text-transform:uppercase;line-height:1.4;box-shadow:0 20px 50px rgba(38,56,47,.35);animation:float 6s ease-in-out infinite}
.about__badge b{display:block;font:300 44px/1 var(--serif);color:var(--sand);letter-spacing:0}
@keyframes float{50%{transform:translateY(-12px)}}

/* заголовки секций — строки выезжают из-под маски */
.h2 .ln{display:block;overflow:hidden;padding-bottom:.06em}
.h2 .ln>span{display:block;transform:translateY(105%);transition:transform 1.1s var(--ease)}
.is-in .h2 .ln>span{transform:none}
.is-in .h2 .ln:nth-child(2)>span{transition-delay:.12s}

/* карточки: шторка на фото, подъём при наведении */
.card{transition:transform .6s var(--ease),box-shadow .6s var(--ease),opacity .9s ease}
.card:hover{transform:translateY(-6px);box-shadow:0 30px 60px rgba(51,40,32,.18)}
.card.reveal .card__img{clip-path:inset(0 100% 0 0);transition:clip-path 1.3s var(--ease) .15s}
.card.reveal.is-in .card__img{clip-path:inset(0 0 0 0)}
.card.reveal.is-in{transform:none}
.card.reveal.is-in:hover{transform:translateY(-6px)}

/* карусель */
.gallery{background:var(--walnut);color:var(--linen);padding:clamp(80px,10vw,130px) 0 clamp(60px,8vw,100px);overflow:hidden}
.gallery__head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;margin-bottom:48px}
.gallery__head .h2{margin-bottom:0} .gallery__head .h2 em{color:var(--sand)}
.gallery__ctrl{display:flex;align-items:center;gap:14px;flex:none}
.gallery__count{font:300 22px var(--serif);margin-right:14px;color:rgba(232,223,208,.6)} .gallery__count b{font-weight:400;color:var(--sand)}
.gallery__arrow{width:58px;height:58px;border:1px solid rgba(180,154,120,.45);border-radius:50%;display:grid;place-items:center;transition:.35s var(--ease)}
.gallery__arrow svg{width:20px;height:20px;fill:none;stroke:var(--linen);stroke-width:1.4}
.gallery__arrow:hover{background:var(--sand);border-color:var(--sand)} .gallery__arrow:hover svg{stroke:var(--walnut)}
.carousel{overflow:hidden;cursor:grab;outline:none;touch-action:pan-y;user-select:none}
.carousel.is-dragging{cursor:grabbing}
.carousel__track{display:flex;gap:clamp(14px,2vw,28px);will-change:transform}
.slide{flex:none;width:min(62vw,820px);aspect-ratio:3/2;border-radius:4px;overflow:hidden;position:relative;transform:scale(.86);opacity:.4;filter:grayscale(.9) brightness(.75);transition:transform .9s var(--ease),opacity .9s var(--ease),filter .9s var(--ease)}
.slide img{width:100%;height:100%;object-fit:cover;object-position:center 30%;transform:scale(1.15);transition:transform 1.4s var(--ease);pointer-events:none}
.slide.is-active{transform:scale(1);opacity:1;filter:none}
.slide.is-active img{transform:scale(1)}
.slide figcaption{position:absolute;left:24px;bottom:20px;font:300 italic 22px var(--serif);color:var(--linen);opacity:0;transform:translateY(10px);transition:.8s var(--ease) .3s;text-shadow:0 2px 14px rgba(0,0,0,.6)}
.slide.is-active figcaption{opacity:1;transform:none}
.gallery__progress{height:1px;background:rgba(232,223,208,.15);margin-top:40px;position:relative;overflow:hidden}
.gallery__progress span{position:absolute;inset:0;background:var(--sand);transform-origin:left;transform:scaleX(0)}
.gallery__progress span.run{animation:gbar 5s linear forwards}
@keyframes gbar{to{transform:scaleX(1)}}

/* лайтбокс */
.lightbox{border:0;padding:0;margin:0;width:100vw;height:100svh;max-width:none;max-height:none;background:rgba(18,14,11,.96);display:none;place-items:center}
.lightbox[open]{display:grid;animation:lbIn .5s var(--ease)}
.lightbox::backdrop{background:transparent}
@keyframes lbIn{from{opacity:0}}
.lightbox img{max-width:min(88vw,1600px);max-height:82svh;object-fit:contain;border-radius:3px}
.lightbox img.swap{animation:lbImg .7s var(--ease)}
@keyframes lbImg{from{opacity:0;transform:scale(.95)}}
.lightbox__close{position:absolute;top:16px;right:22px;font-size:40px;color:var(--linen);width:52px;height:52px;z-index:2}
.lightbox__nav{position:absolute;top:50%;width:56px;height:56px;margin-top:-28px;border:1px solid rgba(180,154,120,.5);border-radius:50%;display:grid;place-items:center;transition:.3s}
.lightbox__nav:hover{background:rgba(180,154,120,.2)}
.lightbox__nav svg{width:20px;fill:none;stroke:var(--linen);stroke-width:1.4}
.lightbox__nav--prev{left:22px} .lightbox__nav--next{right:22px}
.lightbox__cap{position:absolute;bottom:22px;left:0;right:0;text-align:center;color:var(--sand);font:300 italic 20px var(--serif)}

/* окна: мягкое появление с размытием */
.modal[open]{animation:mIn2 .6s var(--ease)}
@keyframes mIn2{from{opacity:0;transform:translateY(30px) scale(.97);filter:blur(6px)}}
.modal[open] .modal__media img{animation:mImg 1.4s var(--ease)}
@keyframes mImg{from{transform:scale(1.18)}}
.modal::backdrop{animation:bd .5s ease}
@keyframes bd{from{opacity:0}}
.modal--form .field{opacity:0;animation:fadeUp .7s var(--ease) forwards}
.modal--form .field:nth-of-type(1){animation-delay:.1s}.modal--form .field:nth-of-type(2){animation-delay:.16s}.modal--form .field:nth-of-type(3){animation-delay:.22s}.modal--form .field:nth-of-type(4){animation-delay:.28s}.modal--form .field:nth-of-type(5){animation-delay:.34s}

/* параллакс */
.parallax{will-change:transform}
.quote__bg{position:absolute;left:0;right:0;top:-12%;height:124%}
.quote__bg img{width:100%;height:100%;object-fit:cover}

/* кнопки: блик */
.btn{position:relative;overflow:hidden}
.btn::before{content:"";position:absolute;top:0;left:-120%;width:60%;height:100%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.3),transparent);transform:skewX(-20deg);transition:left .8s var(--ease);pointer-events:none}
.btn:hover::before{left:140%}

/* карта: точки проявляются волной */
.geo .dot{opacity:0;transition:opacity .9s ease var(--d,0s)}
.geo__map.is-in .dot{opacity:1}
.geo .spark{fill:#fff6e6;filter:drop-shadow(0 0 4px #fff3dc);opacity:0;transition:opacity .6s 2s}
.geo__map.is-in .spark{opacity:1}
.geo .arc-draw{fill:none;stroke:#f1e4cd;stroke-width:1.3;opacity:.85;filter:drop-shadow(0 0 3px rgba(26,38,32,.9));stroke-dasharray:1;stroke-dashoffset:1;transition:stroke-dashoffset 1.6s var(--ease) var(--d,0s)}
.geo__map.is-in .arc-draw{stroke-dashoffset:0}
.geo .pin{opacity:0;transform-box:fill-box;transform-origin:center;transition:opacity .6s ease,transform .8s var(--ease);transform:translateY(-10px)}
.geo__map.is-in .pin{opacity:1;transform:none}

@media (max-width:760px){
  .gallery__head{flex-direction:column;align-items:flex-start}
  .gallery__arrow{width:48px;height:48px}
  .slide{width:80vw;aspect-ratio:4/5}
  .about__badge{right:12px;bottom:-28px;width:104px;height:104px} .about__badge b{font-size:34px}
  .linker{height:80px}
  .hero__scroll{display:none}
}
@media (prefers-reduced-motion:reduce){
  .preloader{display:none} .split-char,.hero .eyebrow,.hero__lead,.hero__actions,.hero__strip{opacity:1!important;transform:none!important}
  .img-reveal,.card.reveal .card__img{clip-path:none} .h2 .ln>span{transform:none}
  .marquee__track{animation:none} .geo .dot,.geo .pin{opacity:1}
}
