/* ------------------------------------------------------------------ tokens */
:root{
  --bg:#FFFFFF;
  --wall:#F4F4F2;
  --wall-2:#E8E8E4;
  --ink:#0E0E0E;
  --ink-2:#5C5C5A;
  --ink-3:#9B9B97;

  --r-s:2px;

  --wrap:1440px;
  --gut:40px;

  --e-out:cubic-bezier(.2,.8,.2,1);
  --e-soft:cubic-bezier(.4,0,.2,1);
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;
  /* Полосу прокрутки резервируем с обеих сторон. Иначе контент центрируется
     по области без неё и уезжает влево ровно на её ширину, а при переходе
     между страницами с прокруткой и без ещё и подпрыгивает вбок. */
  scrollbar-gutter:stable both-edges}
body{
  margin:0;
  background:var(--bg);
  color:var(--ink);
  font-family:"Golos Text",system-ui,sans-serif;
  font-size:16px;
  line-height:1.6;
  font-weight:400;
  font-variant-numeric:tabular-nums;
  -webkit-font-smoothing:antialiased;
  overflow-x:clip;
  display:flex;
  flex-direction:column;
  min-height:100vh;
}
/* Картинки не тащим средствами браузера: нативный drag обрывает события
   указателя, и приближённая картинка переставала перетаскиваться, а состояние
   захвата залипало. */
img{display:block;max-width:100%;-webkit-user-drag:none;user-select:none;-webkit-user-select:none}
button{font:inherit;color:inherit;border:0;background:none;cursor:pointer;padding:0}
a{color:inherit;text-decoration:none}
input{font:inherit;border:0;outline:0;background:none}
::selection{background:#0E0E0E;color:#fff}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:var(--wall-2)}

.wrap{max-width:var(--wrap);margin:0 auto;padding:0 var(--gut)}

.d1{font-weight:600;font-size:clamp(34px,4.4vw,64px);line-height:1.06;letter-spacing:-.032em}
.d2{font-weight:600;font-size:clamp(24px,2.7vw,40px);line-height:1.1;letter-spacing:-.028em}
.d3{font-size:20px;line-height:1.3;font-weight:600;letter-spacing:-.015em}
.lead{font-size:17.5px;line-height:1.55;color:var(--ink-2);max-width:54ch}
.sub{font-size:14.5px;line-height:1.55;color:var(--ink-3)}

/* --------------------------------------------------------------------- nav */
.nav{position:sticky;top:0;z-index:80;background:var(--bg);padding:22px 0 18px}
.nav-in{display:flex;align-items:baseline;gap:30px}
.brand{margin-right:auto;font-size:15px;font-weight:600;letter-spacing:.1em;text-transform:uppercase}
.navlinks{display:flex;align-items:baseline;gap:22px}
.navlinks a{font-size:15px;font-weight:400;color:var(--ink-3);
  transition:color .2s var(--e-soft)}
.navlinks a:hover{color:var(--ink-2)}
.navlinks a.on{color:var(--ink);font-weight:600}
.navcta{font-size:15px;font-weight:500;color:var(--ink);transition:opacity .2s var(--e-soft)}
.navcta:hover{opacity:.5}

/* Переключатель языков: те же правила, что у остальных переключателей.
   Никаких плашек, активный отличается цветом и весом. */
.langs{display:flex;align-items:baseline;gap:12px;margin-left:26px}
.langs button{font-size:13.5px;color:var(--ink-3);transition:color .2s var(--e-soft)}
.langs button:hover{color:var(--ink-2)}
.langs button.on{color:var(--ink);font-weight:600}

/* Никаких плашек: действие это текст, который меняет вес и тон. */
.btn{
  display:inline-flex;align-items:center;gap:8px;
  font-size:15px;font-weight:600;color:var(--ink);
  transition:color .2s var(--e-soft), opacity .2s var(--e-soft);
}
.btn:hover{opacity:.5}
.btn:active{opacity:.35}
.btn.ghost{font-weight:400;color:var(--ink-3)}
.btn.ghost:hover{color:var(--ink);opacity:1}
.btn svg{width:15px;height:15px}
.btn.sm{font-size:14px}

/* ------------------------------------------------------------------ layout */
main{flex:1 0 auto;padding-bottom:30px}
.gap{margin-top:clamp(72px,9vw,128px)}

/* -------------------------------------------------------------------- hero */
.hero{padding-top:clamp(36px,6vw,84px)}
.hero .d1{max-width:19ch}
.hero .lead{margin-top:24px}
.hero-cta{display:flex;gap:30px;flex-wrap:wrap;margin-top:34px}
.hero-cta .btn{font-size:16.5px}
.hero-foot{display:flex;gap:36px;flex-wrap:wrap;margin-top:42px;color:var(--ink-3);font-size:13.5px}

/* ----------------------------------------------------------------- marquee */
.strip{margin-top:clamp(44px,5.5vw,78px);overflow:hidden;display:grid;gap:10px}
.track{display:flex;gap:10px;width:max-content}
.track figure{margin:0;width:clamp(148px,14.5vw,230px);aspect-ratio:1;flex:none;background:var(--wall);
  cursor:pointer;overflow:hidden}
.track img{width:100%;height:100%;object-fit:cover;transition:opacity .25s var(--e-soft)}
.track figure:hover img{opacity:.76}

/* ------------------------------------------------------------- number band */
.figs{display:grid;grid-template-columns:repeat(4,1fr);gap:34px}
.figs div b{display:block;font-weight:600;
  font-size:clamp(30px,3.2vw,46px);line-height:1;letter-spacing:-.032em}
.figs div span{display:block;margin-top:9px;font-size:13.5px;color:var(--ink-3);max-width:24ch}

/* -------------------------------------------------------------- collections */
.sechead{display:flex;align-items:baseline;gap:22px;margin-bottom:28px;flex-wrap:wrap}
.sechead .sub{margin-left:auto}

.cols{display:grid;grid-template-columns:repeat(3,1fr);gap:34px 24px}
.card .shot{position:relative;aspect-ratio:1;background:var(--wall);overflow:hidden}
.card .shot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:0;
  transition:opacity .4s var(--e-soft)}
.card .shot img.on{opacity:1}
.card:hover .shot img.on{opacity:.9}
.card .lab{display:flex;align-items:flex-start;gap:20px;margin-top:13px}
.card .lab .tx{min-width:0}
.card .lab b{display:block;font-size:17px;font-weight:600;letter-spacing:-.01em;line-height:1.2}
.card .lab p{margin:3px 0 0;font-size:13.5px;line-height:1.35;color:var(--ink-3)}
.card .lab .num{margin-left:auto;text-align:right;flex:none;font-size:12.5px;
  line-height:1.45;color:var(--ink-3)}

/* Другие коллекции внизу страницы остаются второстепенными: одна картинка
   вместо перелистывания, меньше размер, и затемняется готовый кадр целиком,
   а не каждый слой по отдельности. */
.cols.side{grid-template-columns:repeat(5,1fr);gap:24px 18px;max-width:1120px}
.side .card .shot img{opacity:1;filter:brightness(.6);
  transition:filter .35s var(--e-soft)}
.side .card:hover .shot img{filter:none}
.side .card .lab b{font-size:15px;color:var(--ink-2);font-weight:500}
.side .card:hover .lab b{color:var(--ink)}
.side .card .lab p,.side .card .lab .num{font-size:12.5px}

/* ------------------------------------------------------- collection header */
/* Две колонки в две строки: название встаёт вровень с первой парой цифр,
   описание вровень со второй. */
.chead{padding-top:clamp(24px,3.5vw,54px);display:grid;
  grid-template-columns:minmax(0,1fr) auto;column-gap:56px;row-gap:18px;align-items:start}
.chead .d1{line-height:1;margin:0}
.chead .lead{margin:0}
.facts{display:flex;gap:44px;justify-content:flex-end;text-align:right}
.facts.r2{padding-top:5px}
.facts div b{display:block;font-size:21px;font-weight:600;letter-spacing:-.015em;line-height:1}
.facts div span{display:block;margin-top:5px;font-size:12.5px;line-height:1.2;color:var(--ink-3)}

.bar{display:flex;align-items:center;gap:26px;flex-wrap:wrap;margin:36px 0 26px}
.seg{display:flex;flex-wrap:wrap;gap:22px}
.seg button{font-size:14.5px;color:var(--ink-3);
  transition:color .2s var(--e-soft)}
.seg button:hover{color:var(--ink-2)}
.seg button.on{color:var(--ink);font-weight:600}
.spacer{margin-left:auto}

.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:24px 20px}
.tile{position:relative;cursor:pointer}
.tile .ph{position:relative;aspect-ratio:1;background:var(--wall);overflow:hidden}
.tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  transition:opacity .25s var(--e-soft)}
.tile:hover img{opacity:.82}
.tile .n{display:block;margin-top:10px;font-size:12.5px;color:var(--ink-3)}

/* ------------------------------------------------------------ traits board */
.layerbar{display:flex;gap:20px;flex-wrap:wrap}
.layerbar button{font-size:14.5px;color:var(--ink-3);transition:color .2s var(--e-soft)}
.layerbar button:hover{color:var(--ink-2)}
.layerbar button.on{color:var(--ink);font-weight:600}
.layerbar button i{font-style:normal;font-size:12px;opacity:.6;margin-left:6px}

.tgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:26px 20px}
.tcell{cursor:pointer}
.tcell .ph{position:relative;aspect-ratio:1;background:var(--wall);overflow:hidden}
.tcell .ph img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;
  transition:opacity .25s var(--e-soft)}
.tcell:hover .ph img{opacity:.8}
.tcell b{display:block;margin-top:11px;font-size:14px;font-weight:500;letter-spacing:-.005em}
.tcell span{display:block;font-size:12.5px;color:var(--ink-3)}

/* --------------------------------------------------------------- delivery */
.deliver{display:grid;grid-template-columns:repeat(4,1fr);gap:32px}
.deliver div b{display:block;font-size:15px;font-weight:600;margin-bottom:5px}
.deliver div p{margin:0;font-size:14px;line-height:1.55;color:var(--ink-3)}

/* --------------------------------------------------------------------- lab */
/* Лаборатория занимает экран целиком и стоит по его центру. Размер холста
   считается от высоты окна, поэтому ничего не уезжает вниз. */
.labpage{min-height:calc(100vh - 66px - 222px);display:flex;flex-direction:column;
  justify-content:center;padding:14px 0}
.lab{--stage:min(calc(100vh - 400px), calc(100vw - 520px), 660px);
  display:grid;grid-template-columns:var(--stage) 360px;gap:44px;
  align-items:start;justify-content:center}
/* переключатель коллекций живёт в колонке со слоями, чтобы не читаться
   как вторая навигационная полоса рядом с заголовком */
.labpanel{display:flex;flex-direction:column}
.labpanel .seg{gap:16px;margin-bottom:16px;flex:none}
.labpanel .seg button{font-size:13.5px}
.lab .bar{gap:26px;margin-top:20px}
.lab .bar .btn{font-size:14px}
.labstage{position:relative;width:100%;aspect-ratio:1;background:var(--wall);overflow:hidden}
.labstage img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  transition:opacity .25s var(--e-soft)}
.labstage img.hid{opacity:0}

.lrow{display:flex;align-items:center;gap:10px;padding:7px 0}
.lgroup.off{opacity:.3}
.lgroup.off .lrow{pointer-events:none}
.lrow .nm{min-width:0;flex:1;cursor:pointer}
.lrow .nm b{display:block;font-size:13.5px;font-weight:600;letter-spacing:-.01em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity .2s}
.lrow .nm:hover b{opacity:.55}
.lrow .nm span{display:block;font-size:11.5px;color:var(--ink-3)}
.lrow .thumb{width:42px;height:42px;overflow:hidden;background:var(--wall);flex:none;cursor:pointer;
  transition:opacity .2s var(--e-soft)}
.lrow .thumb:hover{opacity:.7}
.lrow .thumb img{width:100%;height:100%;object-fit:contain}
.ic{width:27px;height:27px;display:grid;place-items:center;color:var(--ink-3);flex:none;
  transition:color .18s var(--e-soft)}
.ic:hover{color:var(--ink)}
.ic.act{color:var(--ink)}
.ic svg{width:15px;height:15px}

.picker{display:grid;grid-template-columns:repeat(auto-fill,minmax(54px,1fr));gap:4px;padding:2px 0 12px}
.picker .p{aspect-ratio:1;overflow:hidden;background:var(--wall);cursor:pointer;position:relative;
  opacity:.45;transition:opacity .2s var(--e-soft)}
.picker .p:hover{opacity:.8}
.picker .p.on{opacity:1}
.picker .p img{width:100%;height:100%;object-fit:contain}
.picker .p.none{display:grid;place-items:center;font-size:10px;color:var(--ink-3)}
.collapse{display:grid;grid-template-rows:0fr;transition:grid-template-rows .35s var(--e-out)}
.collapse.open{grid-template-rows:1fr}
.collapse>div{overflow:hidden;min-height:0}

/* --------------------------------------------------- отдельные экраны */
/* Экран занимает высоту окна за вычетом футера, поэтому футер виден без
   прокрутки, а содержимое стоит по центру оставшегося места. */
.page{padding-top:clamp(18px,2.4vw,34px);min-height:calc(100vh - 66px - 222px);
  display:flex;flex-direction:column}
.page .back{flex:none}
.pagebody{margin:auto 0;width:100%}
.back{display:inline-flex;align-items:center;gap:9px;font-size:14.5px;color:var(--ink-3);
  margin-bottom:clamp(20px,2.4vw,32px);transition:color .2s var(--e-soft)}
.back:hover{color:var(--ink)}
.back svg{width:15px;height:15px}

.viewer{
  /* 440 это шапка, кнопка возврата, панель под картинкой и футер,
     460 это правая колонка вместе с отступами. Потолок держим ниже
     разрешения исходника, иначе картинка растягивается и мылится. */
  --stage:min(calc(100vh - 440px), calc(100vw - 460px), 660px);
  display:grid;grid-template-columns:var(--stage) 320px;gap:44px;
  align-items:start;justify-content:center}
.vleft{width:var(--stage)}
.viewer .bar{gap:22px;flex-wrap:nowrap}
.viewer .bar .btn{font-size:13.5px;white-space:nowrap}
.viewer .bar .seg{gap:14px;flex-wrap:nowrap}
.viewer .bar input[type=range]{width:96px}
.vstage{position:relative;width:100%;aspect-ratio:1;background:var(--wall);overflow:hidden;
  cursor:zoom-in;touch-action:none}
/* Рука только во время перетаскивания. В покое курсор показывает,
   что клик приблизит или отдалит. */
.vstage.zoom{cursor:zoom-out}
.vstage.drag,.vstage.zoom.drag{cursor:grabbing}
.lbimg.zoom{cursor:zoom-out}
.lbimg.drag,.lbimg.zoom.drag{cursor:grabbing}
.zoomer{position:absolute;inset:0;transform-origin:50% 50%;transform-style:preserve-3d}
.vstage .inner{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .7s var(--e-out)}
.vstage .inner img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  transition:opacity .3s var(--e-soft), filter .3s var(--e-soft), transform .7s var(--e-out),
             background .45s var(--e-soft), box-shadow .45s var(--e-soft)}
.vstage.exploded{background:transparent;overflow:visible;cursor:default}
.vstage.exploded .inner{transform:perspective(1700px) translateY(4%) rotateX(50deg) rotateZ(-34deg) scale(.58)}
.vstage.exploded .inner img{background:rgba(255,255,255,.34);box-shadow:0 20px 30px -22px rgba(0,0,0,.5)}
.vstage .inner img.dim{opacity:.1;filter:grayscale(1)}
.vstage .inner img.hid{opacity:0}

.vmeta h2{margin:0}
.vrow{display:flex;align-items:center;gap:12px;padding:6px 0}
.vrow .sw{width:34px;height:34px;overflow:hidden;background:var(--wall);flex:none;
  transition:opacity .2s var(--e-soft)}
.vrow:hover .sw{opacity:.7}
.vrow .sw img{width:100%;height:100%;object-fit:contain}
.vrow .tx{min-width:0}
.vrow .tx b{display:block;font-size:13.5px;font-weight:600;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;transition:opacity .2s}
.vrow:hover .tx b{opacity:1}
.vrow .tx span{display:block;font-size:11.5px;color:var(--ink-3)}

.lightbox{display:grid;place-items:center;gap:0}
.lbimg{position:relative;width:min(calc(100vh - 430px), calc(100vw - 80px), 700px);
  aspect-ratio:1;background:var(--wall);overflow:hidden;cursor:zoom-in;touch-action:none}
.lbimg img{position:relative;width:100%;height:100%;object-fit:contain}
/* Подпись и стрелки стоят одной колонкой под картинкой и выровнены по её
   центру, поэтому блок читается симметрично. */
.lbmeta{text-align:center;margin-top:11px}
.lbmeta p{margin:0;font-size:14.5px;color:var(--ink-3)}
.lbmeta p b{color:var(--ink);font-weight:600}
.lbnav{display:flex;justify-content:center;gap:8px;margin-top:6px}

/* the peel control */
input[type=range]{-webkit-appearance:none;appearance:none;height:16px;cursor:pointer;width:120px}
input[type=range]::-webkit-slider-runnable-track{height:1px;background:var(--wall-2)}
input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:11px;height:11px;
  background:var(--ink);margin-top:-5px}
input[type=range]::-moz-range-track{height:1px;background:var(--wall-2)}
input[type=range]::-moz-range-thumb{width:11px;height:11px;border:0;border-radius:0;background:var(--ink)}

/* Подложка под ещё не доехавшими слоями. */
@keyframes breathe{0%,100%{opacity:.35}50%{opacity:.8}}
.loading::after{content:"";position:absolute;inset:0;pointer-events:none;z-index:2;
  background:linear-gradient(100deg,transparent 30%,rgba(0,0,0,.05) 50%,transparent 70%);
  animation:breathe 1.1s ease-in-out infinite}

.toast{position:fixed;left:50%;bottom:30px;transform:translate(-50%,10px);z-index:200;
  background:var(--ink);color:#fff;padding:11px 18px;font-size:14px;
  opacity:0;pointer-events:none;transition:.25s var(--e-out)}
.toast.on{opacity:1;transform:translate(-50%,0)}

/* ------------------------------------------------------------------ footer */
footer{flex:none;padding:clamp(70px,8vw,116px) 0 52px;color:var(--ink-3);font-size:14px}
.foot{display:flex;gap:26px;align-items:baseline;flex-wrap:wrap}
.foot a{transition:color .2s var(--e-soft)}
.foot a:hover{color:var(--ink)}

/* ------------------------------------------------------------------- about */
.about{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,420px);gap:64px}
.steps{margin-top:38px;display:grid;gap:22px;max-width:60ch}
.steps div{display:flex;gap:20px}
.steps div b{font-size:13px;color:var(--ink-3);padding-top:4px;min-width:22px;font-weight:500}
.steps div p{margin:0;font-size:15px;line-height:1.6;color:var(--ink-2)}
.steps div p strong{display:block;color:var(--ink);font-weight:600;font-size:16px;margin-bottom:3px}
.glance{display:grid;gap:4px}

/* -------------------------------------------------------------- responsive */
.only-s{display:none}
@media (max-width:1180px){
  :root{--gut:30px}
  .about{grid-template-columns:1fr}
  .labpage{min-height:0;padding:0}
  .lab{grid-template-columns:1fr;align-items:start;
    --stage:min(calc(100vw - 60px), calc(100vh - 400px), 660px)}
  .lab>div:first-child,.labpanel{width:var(--stage);margin:0 auto}
  .viewer{grid-template-columns:1fr;--stage:min(calc(100vw - 60px), 660px)}
  .vleft,.vmeta{width:var(--stage);margin:0 auto}
  .cols{grid-template-columns:repeat(2,1fr)}
  .cols.side{grid-template-columns:repeat(3,1fr);max-width:none}
  .grid{grid-template-columns:repeat(3,1fr)}
  .deliver{grid-template-columns:repeat(2,1fr)}
  .chead{grid-template-columns:1fr;gap:34px}
}
@media (max-width:720px){
  :root{--gut:20px}
  .hide-s{display:none}
  .only-s{display:block}
  .nav-in{gap:14px}
  .navlinks{gap:14px}
  .cols,.grid,.tgrid,.cols.side{grid-template-columns:repeat(2,1fr)}
  .figs{grid-template-columns:repeat(2,1fr);gap:26px}
  .deliver{grid-template-columns:1fr;gap:22px}
  .close{top:12px;right:14px}
  .lbimg{width:100%}
  .viewer{--stage:calc(100vw - 40px)}
}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.001ms!important;transition-duration:.001ms!important}
  .track{animation:none}
}
