/* ============================================================
   МОСМЕБЕЛЬ — основа сайта.

   Здесь всё, что повторяется на каждой странице: сброс, шапка
   с мобильным меню, подвал, кнопки, типографика, контейнер.
   Разделы страниц лежат в home.css и catalog.css.

   Мобильная версия не «доделана потом»: все размеры заданы
   через clamp, а перестройки — в media-запросах рядом
   с самим блоком, а не свалены в конец файла.
   ============================================================ */

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--fg);
  font-family:var(--text);font-weight:300;font-size:var(--t-body);
  line-height:1.66;-webkit-font-smoothing:antialiased;
  overflow-x:hidden}
body.locked{overflow:hidden}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
h1,h2,h3,h4,p,figure,ul,dl,dd{margin:0}
ul{padding:0;list-style:none}
:focus-visible{outline:1px solid #fff;outline-offset:4px}
::selection{background:var(--brand-stone);color:#fff}

/* ══ КОНТЕЙНЕР ═══════════════════════════════════════════ */
.wrap{max-width:var(--maxw);margin:0 auto;padding-inline:var(--pad)}

/* ══ ТИПОГРАФИКА ═════════════════════════════════════════ */
.disp{font-family:var(--disp);font-weight:400;line-height:1.1}
.h-hero{font-family:var(--disp);font-size:var(--t-hero);line-height:1.02}
.h1{font-family:var(--disp);font-size:var(--t-h1);line-height:1.1}
.h2{font-family:var(--disp);font-size:var(--t-h2);line-height:1.14}
.h3{font-family:var(--disp);font-size:var(--t-h3);line-height:1.2}
.lead{font-size:var(--t-lead);color:var(--fg-2)}
.dim{color:var(--fg-2)}
.label{font-size:var(--t-label);letter-spacing:var(--tr-label);
  text-transform:uppercase;font-weight:500;color:var(--fg-3)}
.sm{font-size:var(--t-sm)}
.rule{height:1px;background:var(--rule)}

/* ══ ШАПКА ═══════════════════════════════════════════════
   Оверлей поверх страницы, а не блок в потоке. По умолчанию
   сплошная — но на странице с героем (body.hero-page) стоит
   прозрачной, пока не начали прокручивать: тогда JS добавляет
   .on и появляется тёмная подложка. «Шторки» в начале нет —
   логотип и меню просто лежат на фотографии.                */
.hd{position:fixed;top:0;left:0;right:0;z-index:60;
  background:rgba(12,12,14,.94);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--rule);
  transition:background-color 420ms var(--e),border-color 420ms var(--e),
             -webkit-backdrop-filter 420ms var(--e),backdrop-filter 420ms var(--e)}
body.hero-page .hd{background:transparent;border-bottom-color:transparent;
  -webkit-backdrop-filter:none;backdrop-filter:none}
body.hero-page .hd.on{background:rgba(12,12,14,.94);border-bottom-color:var(--rule);
  -webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
body.hero-page .hd .hd__lg b,body.hero-page .hd nav a,body.hero-page .hd__tel{
  text-shadow:0 1px 8px rgba(0,0,0,.55)}
.hd__in{display:flex;align-items:center;gap:clamp(12px,2.2vw,36px);
  height:var(--hd)}
.hd__lg{display:flex;align-items:center;gap:11px;flex:none}
.hd__lg img{width:26px;height:26px}
.hd__lg b{font-weight:500;font-size:.62rem;letter-spacing:.3em;
  text-transform:uppercase;white-space:nowrap}
.hd nav{display:flex;gap:clamp(14px,1.8vw,30px);margin-left:auto}
.hd nav a{position:relative;font-size:.85rem;color:var(--fg-2);
  padding-block:6px;transition:color var(--d1)}
.hd nav a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:#fff;transform:scaleX(0);transform-origin:left;
  transition:transform var(--d2) var(--e)}
.hd nav a:hover{color:var(--fg)}
.hd nav a:hover::after,.hd nav a[aria-current]::after{transform:scaleX(1)}
.hd__tel{font-size:.84rem;white-space:nowrap;flex:none}
.hd__burger{display:none;margin-left:auto;background:0;border:0;cursor:pointer;
  width:38px;height:38px;position:relative;flex:none}
.hd__burger i{position:absolute;left:9px;right:9px;height:1px;background:var(--fg);
  transition:transform var(--d2) var(--e),opacity var(--d1)}
.hd__burger i:nth-child(1){top:15px}
.hd__burger i:nth-child(2){top:22px}
body.menu .hd__burger i:nth-child(1){transform:translateY(3.5px) rotate(45deg)}
body.menu .hd__burger i:nth-child(2){transform:translateY(-3.5px) rotate(-45deg)}

/* мобильное меню — простыня на весь экран, без выезжающих шторок */
.menu{position:fixed;inset:var(--hd) 0 0;z-index:55;background:var(--bg);
  display:flex;flex-direction:column;justify-content:space-between;
  padding:var(--s6) var(--pad) var(--s7);
  opacity:0;visibility:hidden;transition:opacity var(--d2) var(--e),
  visibility var(--d2)}
body.menu .menu{opacity:1;visibility:visible}
.menu a.big{font-family:var(--disp);font-size:clamp(1.6rem,7vw,2.4rem);
  line-height:1.5;display:block;color:var(--fg)}
.menu .foot{display:flex;flex-direction:column;gap:6px}
.menu .foot a{font-size:.95rem;color:var(--fg-2)}

@media(max-width:900px){
  .hd nav,.hd__tel{display:none}
  .hd__burger{display:block}
}
@media(min-width:901px){
  .menu{display:none}
}

/* ══ ДЕЙСТВИЯ ════════════════════════════════════════════
   Не таблетка с обводкой: слово на плите, которая при
   наведении плавно перекрашивается. Никакой черты по нижней
   кромке — только заливка.                                  */
.act{position:relative;display:inline-flex;align-items:center;
  justify-content:center;gap:10px;
  padding:clamp(15px,1.6vw,19px) clamp(20px,2.2vw,32px);
  font-weight:500;font-size:.74rem;letter-spacing:var(--tr-mid);
  text-transform:uppercase;color:var(--fg);background:var(--bg-2);
  border:0;border-radius:var(--r);cursor:pointer;overflow:hidden;text-align:center;
  transition:background-color var(--d2),color var(--d2)}
.act:hover{background:var(--bg-3);color:#fff}
/* Белая кнопка при наведении просто плавно перекрашивается
   в графитовый — тот же тон, что у соседних плит. Без бегущей
   заливки: любая её реализация — отдельный слой поверх фона,
   а у отдельного слоя своё сглаживание угла, чуть расходящееся
   со скруглением самой кнопки, отчего в стыке просвечивала
   белая кромка. Один фон — одно скругление, шва нет.          */
.act--solid{background:#EFEFEF;color:var(--bg)}
.act--solid:hover{background:var(--bg-3);color:#fff}
/* Кнопка, лежащая НА графитовой карточке. Обычный тон
   наведения (--bg-3) — это ровно фон самой карточки, и кнопка
   на ней растворялась: оставались висеть одни буквы.
   Внутри карточки поднимаем на тон выше.                      */
.card2 .act:hover,.card2 .act--solid:hover{background:var(--bg-4)}
.act[disabled]{opacity:.4;cursor:default}
@media(max-width:520px){.act{width:100%}}

/* тихая ссылка-гравировка */
.link{position:relative;display:inline-flex;align-items:center;
  font-weight:500;font-size:.72rem;letter-spacing:var(--tr-mid);
  text-transform:uppercase;color:var(--fg-2);
  transition:color var(--d1),padding-left var(--d2) var(--e)}
.link::before{content:"";position:absolute;left:0;top:50%;width:7px;height:1px;
  background:#fff;opacity:0;transform:translateY(-50%) scaleX(0);
  transform-origin:left;transition:opacity var(--d1),transform var(--d2) var(--e)}
.link:hover{color:#fff;padding-left:19px}
.link:hover::before{opacity:1;transform:translateY(-50%) scaleX(1)}

/* ══ КАДР ════════════════════════════════════════════════
   При наведении карточка целиком чуть подрастает и выходит
   поверх соседей. Никаких обводок и линий: масштабируется
   сам элемент вместе со своим скруглением, поэтому светлых
   кромок по краю взяться неоткуда.                          */
.shot{position:relative;display:block;overflow:hidden;background:var(--bg-2);
  border-radius:var(--r);
  transition:transform var(--d2) var(--e)}
.shot img{width:100%;height:100%;object-fit:cover;filter:var(--img);
  transition:filter var(--d3)}
.shot::after{content:"";position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(0,0,0,0) 52%,rgba(0,0,0,.74) 100%);
  opacity:0;transition:opacity var(--d2)}
.shot:hover{transform:scale(1.025);z-index:2}
.shot:hover img{filter:var(--img-hi)}
.shot:hover::after{opacity:1}
.shot__tag{position:absolute;left:clamp(12px,1.2vw,18px);
  bottom:clamp(11px,1.1vw,16px);right:clamp(12px,1.2vw,18px);z-index:2;
  font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;color:#EDEDED;
  opacity:0;transform:translateY(6px);
  transition:opacity var(--d2),transform var(--d3) var(--e)}
.shot:hover .shot__tag{opacity:1;transform:none}
/* на телефоне наведения нет — подпись видна сразу */
@media(hover:none){
  .shot::after{opacity:1}
  .shot__tag{opacity:1;transform:none}
}

/* ══ ПОДВАЛ ══════════════════════════════════════════════
   Верхняя черта — не border-top через весь экран: .ft — это
   .wrap, а max-width ограничивает его только СВЕРХУ, при
   viewport уже maxw граница всё равно рисуется во всю ширину
   окна. Полоска — псевдоэлемент, вписанный в те же поля,
   что и .divider между секциями.                              */
.ft{position:relative;padding-block:var(--s7) var(--s6)}
.ft::before{content:"";position:absolute;top:0;left:var(--pad);right:var(--pad);
  height:1px;background:var(--rule)}
.ft__cols{display:grid;gap:clamp(24px,3vw,56px);
  grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.ft__k{font-size:.62rem;letter-spacing:var(--tr-mid);text-transform:uppercase;
  font-weight:500;color:var(--fg-3);margin-bottom:10px}
.ft p{font-size:.92rem}
.ft a:hover{color:#fff}
/* ссылки друг под другом, а не в строку через точки */
.foot-link{display:block;padding-block:4px;font-size:.92rem;color:var(--fg-2);
  transition:color var(--d1)}
.foot-link:hover{color:#fff}
.ft__end{display:flex;justify-content:space-between;gap:var(--s5);
  flex-wrap:wrap;align-items:flex-end;margin-top:var(--s7);padding-top:var(--s5);
  border-top:1px solid var(--rule-2);color:var(--fg-3);font-size:.8rem}
.ft__seal{width:54px;opacity:.8}
/* реквизиты и правовая ссылка — столбиком у правого края */
.ft__legal{display:flex;flex-direction:column;align-items:flex-end;gap:4px;
  text-align:right}
.ft__legal a{color:var(--fg-3);transition:color var(--d1)}
.ft__legal a:hover{color:#fff}
/* ИНН и ОГРНИП разделяет просвет, а не точка */
.ft__legal [data-s="legal"] span + span{margin-left:18px}
@media(max-width:560px){
  .ft__legal{align-items:flex-start;text-align:left}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;
    transition-duration:.01ms!important;scroll-behavior:auto!important}
}
