/* ═══════════════════════════════════════════════════════════════
   AURA — единый набор токенов на все страницы сайта.

   ── НАПРАВЛЕНИЕ: ЖУРНАЛ СТРОЙКИ ──
   Сайт устроен как журнал производства работ. Каждое изображение
   помечено: «фото» с датой съёмки или «проект» со сроком. Рендер
   нигде не выдаёт себя за фотографию.

   Выбрано измерением, а не вкусом. Из восьми снятых референсов
   ни один не показывает фотографию стройки на первом экране,
   ни один не ставит дату рядом с кадром, ни один не различает
   «фото» и «проект» в интерфейсе и ни один не показывает цену
   за семь экранов прокрутки. Это незанятая позиция, и она же —
   единственное настоящее отличие AURA.

   Две другие концепции сняты: разбор по признакам сгенерированного
   дизайна показал, что «Туф» — это умолчание «кремовый фон плюс
   антиква плюс терракота» целиком, а «Опалубка» — умолчание
   «газетная полоса» плюс тот же акцент. Обе лежат в теге
   pre-refs-v4, если решение придётся пересматривать.

   Общее для всех трёх и не обсуждается: поле светлое и тёплое.
   Тёмный фон воюет со светлыми модернистскими рендерами, а материал
   охватывает оба полюса — классику с карнизами и белый минимализм.

   Золото #C2A574 выведено из основы. Работает в двух местах на весь
   сайт: знак и одна отметка на экран. Как текст на светлом оно даёт
   1,88:1 и потому не может быть текстом в принципе — это его место.

   Шкала отступов переключается по ширине ступенями, а не тянется
   через vw: clamp(18px,2.2vw,32px) на промежуточной ширине даёт
   26.4px и мимо любой сетки. Ступени кратны четырём.
   ═══════════════════════════════════════════════════════════════ */

/* ══════════ ШРИФТЫ ══════════
   Свои, а не системные. SF Pro — шрифт операционной системы:
   он сделан незаметным и характер нести не может, а его лицензия
   раздачу через /* ══════════ ГАРНИТУРЫ ══════════
   Две, из одной суперсемьи, роли разделены жёстко.

   IBM Plex Sans — дисплей, заголовки, текст.
   IBM Plex Mono — прибор: отметки, площади, цены, даты, марки
   материалов. Всё, что на чертеже набрано моноширинным, потому что
   колонка цифр обязана стоять колонкой.

   Inter снят. Это самая умолчательная интерфейсная гарнитура,
   какая есть, и «одна гарнитура Inter» стояла прямым признаком
   в разборе умолчаний. Plex — не пара из двух выборов, а одна
   семья, чья моноширинная половина рисовалась для технической
   документации.

   Проверено, а не предположено: Plex Sans Condensed, который был бы
   ближе к чертёжному DIN, кириллицы не имеет — поэтому не он.
   Армянский Plex не покрывает: :lang(hy) отдаётся Noto Sans
   Armenian. Моноширинного армянского приемлемого качества
   не существует — осознанная уступка. */
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:300;
  font-display:swap;src:url(../fonts/plex-300-cyr.woff2) format('woff2');
  unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:300;
  font-display:swap;src:url(../fonts/plex-300-lat.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:'IBM Plex Sans';font-style:normal;font-weight:400;
  font-display:swap;src:url(../fonts/plex-400-cyr.woff2) format('woff2');
  unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;
  font-display:swap;src:url(../fonts/plex-400-lat.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:'IBM Plex Sans';font-style:normal;font-weight:500;
  font-display:swap;src:url(../fonts/plex-500-cyr.woff2) format('woff2');
  unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;
  font-display:swap;src:url(../fonts/plex-500-lat.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:'IBM Plex Mono';font-style:normal;font-weight:400;
  font-display:swap;src:url(../fonts/plexmono-400-cyr.woff2) format('woff2');
  unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;
  font-display:swap;src:url(../fonts/plexmono-400-lat.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:'IBM Plex Mono';font-style:normal;font-weight:500;
  font-display:swap;src:url(../fonts/plexmono-500-cyr.woff2) format('woff2');
  unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;
  font-display:swap;src:url(../fonts/plexmono-500-lat.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}


/* Армянский. Plex его не покрывает, поэтому :lang(hy) подхватывает
   Noto Sans Armenian из того же стека. Объявления лежали
   в css/aura-fonts.css, который на страницах не подключён, —
   армянский текст падал на системный шрифт. */
/* Noto Sans Armenian, переменный: оси веса 100–900 и ширины 62,5–100 %.
   Три статических файла заменены одним, чтобы армянский набирался тем
   же светлым 300, что и русский, и умел сужаться. Лицензия OFL. */
@font-face {
  font-family: 'Noto Sans Armenian';
  font-style: normal;
  font-weight: 100 900;
  font-stretch: 62.5% 100%;
  font-display: swap;
  src: url(../fonts/noto-sans-armenian-var.woff2) format('woff2');
  unicode-range: U+0308, U+0530-058F, U+2010, U+2024, U+25CC, U+FB13-FB17;
}

:root{
  /* ══════════ ОБЩЕЕ ДЛЯ ТРЁХ КОНЦЕПЦИЙ ══════════ */

  /* Печать. Почти-чёрный из брендовых констант. */
  --ink:#0A0908;
  --on-dark:#F7F5F1;     /* текст на тёмной плашке */
  /* Тёмный остров посреди светлой страницы: отдельный токен, а не
     --ink. Иначе селектор, который и красит фон, и переопределяет
     --ink для потомков, красит фон собственным переопределением. */
  --island:#15120E;

  /* Туф. Один тёплый акцент на чёрно-белом сайте, взятый с фотографий
     Еревана. #93492F: 5,40 на бумаге, 4,97 на поле карточки, белый
     на нём 5,96. Правило: туф — это число и действие. Крупная цифра,
     индекс пункта, главная кнопка. Не заголовок и не абзац. */
  --tuf:#0A0908;
  --tuf-hi:#302F2D;      /* наведение: на ступень темнее */
  --on-tuf:#FFFFFF;

  /* Фокус: кольцо и подложка под ним. Роли, а не цвета —
     на тёмных островах они меняются местами. */
  --focus:var(--ink);
  --focus-back:var(--paper);   /* тот же тёплый ряд, что и печать, на тон светлее */

  /* Золото: знак и одна отметка. Текстом быть не может. */
  --gold:#C2A574;
  --gold-dim:#A98A57;
  --gold-hi:#D8BE92;
  /* Золото на светлом поле даёт 1,88:1 и текстом быть не может
     ни при каком кегле. Это его настоящая граница, а не придирка:
     знак, заливка, обводка — да; буква — никогда. */

  /* Состояние квартиры. Цветом никогда не сообщается ничего,
     что не продублировано словом. Значения подобраны под светлое
     поле: на тёмном они были светлее, здесь темнее. */
  --free:#2F6B4F;        /* свободна — 5,0:1 на поле */
  --hold:#8A6A22;        /* бронь   — 4,8:1 */
  --sold:#8E2733;        /* продана — 6,4:1 */
  --err:#A32330;         /* ошибка формы — 6,9:1 */

  /* Вуали поверх фотографий. Работают одинаково на любом поле:
     это затемнение снимка, а не элемент палитры. */
  --tn-thin:rgba(10,9,8,.10);
  --tn-veil:rgba(10,9,8,.32);
  --tn-half:rgba(10,9,8,.52);
  --tn-read:rgba(10,9,8,.62);
  --tn-deep:rgba(10,9,8,.74);
  --tn-dark:rgba(10,9,8,.80);
  --tn-full:rgba(10,9,8,.96);
  --tn-0:rgba(10,9,8,0);

  /* ══════════ ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ ══════════
     Совпадают с концепцией А. Переопределяются ниже классом. */
  /* Бумага журнала. Холодная, а не кремовая: тёплый #F4F1EA — первый
     пункт в списке признаков сгенерированного дизайна, а из семи
     снятых референсов пятеро используют холодное почти-белое
     и тёплого кремового нет ни у кого. */
  /* ══════════ ПОЛЕ ══════════
     Значения не подобраны на глаз, а сняты с наших же файлов.

     --paper-lo — собственный фон рендера DOMZASTAVKA (#E2E1DF,
     46 % верхней полосы кадра). Вырезанное здание садится на него
     без шва: это не совпадение, это причина.

     --paper — та же нейтраль на ступень светлее, поле страницы.

     --stone — медиана камня фасада на нашем же рендере (#746E6A),
     затемнённая до 4,8 : 1 на бумаге. Второстепенный текст цвета
     собственного туфа, а не абстрактный серый. */
  --paper:#EBEAE7;
  --paper-lo:#E2E1DF;
  /* Затемнён до прохода на утопленной плоскости, а не на поле:
     проверять надо по худшей подложке, а не по той, что удобнее.
     На #E2E1DF даёт 4.53, на поле 4.92. */
  --stone:#615B57;
  --bg:var(--paper);
  --bg-hi:var(--paper);
  --panel:var(--paper-lo);
  --panel-a:rgba(236,237,233,.94);
  /* Составляющие поля карточки: вуаль над кадром строится из них,
     чтобы следовать за цветом поля, а не помнить своё значение. */
  --panel-rgb:226 225 223;
  --line:#D9D7D2;
  --mute:#43463F;        /* 9,4:1 на бумаге */
  --dim:var(--stone);         /* 5,5:1 на бумаге, 4,9:1 на панели */

  /* Чернильная синька. Означает текущую стадию, проект и действие.
     8,1:1 на бумаге — годится и как текст, и как заливка. */
  --acc:#0A0908;       /* действие — чёрное */
  --acc-ink:#0A0908;
  --acc-hi:#3A3733;    /* наведение — тёмно-серое */
  /* Зелёная метка: то, что уже случилось. 5,3:1 */
  --ok:#3A3733;

  /* производные, общие по способу получения */
  --dark:var(--ink);
  --grey:var(--dim);
  --hair:rgba(10,9,8,.10);
  --edge:rgba(10,9,8,.16);
  /* волосяная линия на тёмном: --line читается только
     на бумаге, поверх снимка её не видно вовсе */
  --on-dark-line:rgba(247,245,241,.28);
  --void:var(--ink);
  --deep:var(--panel);
  --void-dim:rgba(247,245,241,.72);   /* второстепенный текст на тёмной плашке */
  --plinth-1:var(--panel);
  --plinth-2:var(--bg);

  /* прежние имена акцента ведут на новый акцент, а не на золото */
  --tuff:var(--acc);
  --tuff-ink:var(--acc-ink);
  --brass:var(--gold);

  /* Ступени подсветки. На тёмном это был свет в окне, на светлом —
     заливка акцентом. Имена сохранены, работа та же: подсказка,
     выбранное, отмеченное, наведённое. */
  --sv-hint:rgba(10,9,8,.04);
  --sv-mark:rgba(10,9,8,.07);
  --sv-lit:rgba(10,9,8,.10);
  --sv-warm:rgba(10,9,8,.14);
  --sv-hot:rgba(10,9,8,.20);
  --sv-half:rgba(10,9,8,.05);
  --sv-hold:rgba(10,9,8,.05);
  --glow:rgba(10,9,8,.14);


  /* ══════════ А. ОПАЛУБКА ══════════
     Каркас виден: страница обведена рамкой листа, блоки стоят
     в ячейках, между ними волосяные линии. Акцент сигнальный —
     цвет разметки на площадке, а не цвет роскоши. */

  /* ── шрифт ──
     Две гарнитуры на весь сайт: Cormorant Garamond в дисплее
     до Black уже лежат на диске, иерархия строится внутри семейства.
     Армянское Cormorant не покрывает — впереди стека стоит
     Noto Sans Armenian, чтобы армянская версия не поехала на
     системный запасной. Веб-шрифт для армянского в списке к заказчику. */
  /* Два семейства и роли между ними разделены жёстко.
     Дисплей — только заголовок первого экрана и заголовки разделов.
     Всё остальное, включая подписи к кадру, набирается гротеском:
     антиква в мелком кегле на экране разваливается.

     Армянский Cormorant не покрывает, поэтому в дисплейной строке
     он отдаётся Noto Sans Armenian — это осознанная уступка,
     а не недосмотр: армянская версия будет набрана гротеском. */
  --sans:'IBM Plex Sans','Noto Sans Armenian',system-ui,sans-serif;
  /* Прибор. Всё, что число, дата, площадь, отметка или марка
     материала, набирается этим и только этим. */
  --pribor:'IBM Plex Mono','Noto Sans Armenian',ui-monospace,monospace;

  /* ── кегли: примитив → смысл → компонент ── */
  --f-1:12px; --f-2:14px; --f-3:16px; --f-4:20px;
  --f-5:24px; --f-6:30px; --f-7:36px; --f-8:44px;

  --t-label:var(--f-1);
  --t-s:var(--f-2);
  --t-body:var(--f-3);
  --t-lead:var(--f-4);
  --t-h3:var(--f-5);
  --t-h2:var(--f-6);
  --t-h1:var(--f-7);
  --t-display:var(--f-8);
  --t-xs:var(--f-1); --t-m:var(--f-3); --t-l:var(--f-4); --t-xl:var(--f-5);
  /* Заголовок первого экрана. Вынесен из общей шкалы намеренно: он там
     один, и подтягивать под него --f-8 значило бы раздуть все заголовки
     сайта ради одного экрана. */
  --t-hero:42px;   /* медиана сегмента на 390 — 41,6 */
  /* Заголовок раздела и крупная цифра. Жили в :root главной, а класс
     .h1 теперь общий — значит, и переменная должна быть общей. */
  --h1:clamp(2rem,5vw,96px);
  --num:clamp(2.6rem,6.67vw,128px);

  /* трекинг: крупное сжимается, мелкое разряжается */
  --tr-display:-.03em;
  --tr-head:-.022em;
  --tr-label:.12em;      /* лейблы прописными — 12%, как в концепции */

  /* вес */
  /* Тяжёлых начертаний на сайте нет. Заголовку даётся кегль
     и воздух, а не жир: тонкое в крупном кегле читается
     уверенностью, жирное в том же кегле — рекламой. */
  --w-display:300; --w-body:400; --w-label:500; --w-head:300;
  /* Вес дисплейного начертания. Измерение показало: из семи снятых
     референсов ни один не тяжелее 500, медиана 400, sminex ставит 250.
     Полужирный дисплей на светлом читается утилитарно, а не премиально. */
  --w-hero:300;

  /* ── отступы: ступени, всегда кратные четырём ── */
  --s-1:4px; --s-2:8px; --s-3:12px; --s-4:16px; --s-5:20px;
  --s-6:24px; --s-7:28px; --s-8:32px; --s-10:40px; --s-12:48px; --s-16:64px; --s-24:96px;

  --gap-xs:12px; --gap-s:16px; --gap-m:20px; --gap-l:24px; --gap-xl:32px;
  --sec-y:48px; --sec-y-l:32px;
  --pad:20px; --pad-hero:20px;

  /* ── радиусы ──
     На тёмном скругление читается хуже и почти не нужно: форму
     задаёт свет, а не рамка. Крупный радиус изображений снят —
     снимок в этой концепции растворяется краем, а не скругляется. */
  /* Радиусы сведены к нулю по всему сайту.
     Причина не во вкусе. Разбор по признакам сгенерированного
     дизайна называет скруглённые карточки с заливкой самым частым
     из них, а первый экран уже собран на острых углах и волосяных
     линиях. Две геометрии на одном сайте читаются как два сайта.
     Токены оставлены именами, а не вычищены: если понадобится
     вернуть скругление, это снова четыре строки. */
  /* Кегль афишного заголовка и высота половины разворота.
     Ступенями, а не clamp: каждое значение остаётся
     на сетке в 4 px. */
  /* Кегль постера. Ступенями, не clamp: каждое значение
     остаётся на сетке в 4 px. */
  /* Кегль афиши. Ступенями, не clamp: значение остаётся
     на сетке в 4 px на каждой ступени ширины. */
  --t-afisha-big:72px;
  --t-mash:46px;
  --t-poster:54px;
  --head-h:72px;
  --t-afisha:38px;
  --h-para:240px;
  --r-sm:0;
  --r-card:0;
  --r-img:0;
  --r-pill:0;

  /* ── тени ──
     На пустоте тень не видна: тени нет, есть свет. Прежние имена
     сохранены, чтобы вёрстка не сломалась, но теперь это либо
     волосяная граница, либо свечение. */
  --sh-1:0 0 0 1px var(--hair);
  --sh-2:0 0 40px -12px rgba(0,0,0,.9);
  --sh-3:0 0 0 1px var(--hair),0 24px 60px -30px #000;
  --sh-glow:0 0 24px -4px var(--glow);

  /* ── слои ──
     Было: 1, 2, 3, 5, 15, 20, 21, 35, 40, 80, 89, 90 и 9999.
     Стало: семь ступеней, у каждой имя. Число 9999 означало
     «не знаю, поставлю побольше». */
  --z-base:1;
  --z-over:3;        /* текст поверх снимка внутри секции */
  --z-tip:5;         /* подсказка над клеткой */
  --z-sticky:15;     /* липкая полоса отбора */
  --z-header:20;     /* шапка */
  --z-crumbs:21;     /* крошки под фиксированной шапкой */
  --z-cta:35;        /* закреплённая панель действия */
  --z-menu:40;       /* меню на весь экран */
  --z-top:90;        /* прелоадер и всё, что обязано быть выше меню */

  /* ── движение: медленно и как свет ── */
  --e:cubic-bezier(.16,1,.3,1);
  --e-light:cubic-bezier(.16,1,.3,1);
  --t-fast:240ms;
  --t-slow:600ms;
}

/* ── лестница порогов ──
   Одна на весь сайт. Каждая ступень имеет работу, и ни один файл
   не имеет права завести свою.

     380  компактный телефон
     520  телефон
     600  крупный телефон  ← здесь переключаются кегли и отступы
     720  планшет портрет
     900  планшет ландшафт
     1000 ноутбук          ← здесь переключаются кегли и отступы
     1100 десктоп
     1440 широкий          ← здесь переключаются отступы
     1760 очень широкий

   max-width всегда на единицу меньше соседней ступени: пара
   max-width:899 / min-width:900 — это правильная пара, а не разнобой.

   Исключение одно и оно временное: раздел частных домов ещё держит
   собственные пороги 760 / 767 / 820 / 940. Он живёт по своей
   системе целиком и переедет на общую вместе с переборкой страницы.
   Отмечено в DESIGN_LOG. */
@media(max-width:599px){
  :root{ --f-5:22px; --f-6:26px; --f-7:30px; --f-8:34px; --t-hero:42px;
    --t-afisha:52px; --h-para:264px; --t-poster:76px; --head-h:80px;
    --t-afisha-big:44px; --t-mash:34px; }
}
@media(min-width:600px){
  :root{
    --t-hero:42px;
    --gap-xs:12px; --gap-s:16px; --gap-m:24px; --gap-l:32px; --gap-xl:40px;
    --sec-y:64px; --sec-y-l:40px;
    --pad:40px; --pad-hero:32px;
  }
}
/* На 600 px предел русского 76, английского 72 — ступень 72.
   На 760 предел уже 92 и 96, поэтому здесь своя ступень. */
@media(min-width:760px){ :root{ --t-afisha-big:84px; } }

@media(min-width:1000px){
  :root{
    --f-5:26px; --f-6:34px; --f-7:44px; --f-8:58px; --t-hero:56px;
    --t-afisha:72px; --h-para:258px; --t-poster:104px; --t-afisha-big:120px;
    --t-mash:58px;
    --gap-xs:16px; --gap-s:20px; --gap-m:32px; --gap-l:40px; --gap-xl:56px;
    --sec-y:88px; --sec-y-l:48px;
    --pad:64px; --pad-hero:44px;
  }
}
/* Ноутбучные 1280x800: при половине разворота в 320 px карточки
   условий упирались в сгиб на 68 пикселей. Ступень ниже. */
@media(min-width:1100px) and (max-width:1366px){ :root{ --h-para:188px; } }

@media(min-width:1440px){
  :root{
    --t-hero:64px;   /* медиана сегмента на 1440 */
    --gap-xs:16px; --gap-s:24px; --gap-m:36px; --gap-l:48px; --gap-xl:64px;
    --sec-y:104px; --sec-y-l:64px;
    --pad:96px; --pad-hero:56px;
    /* Колонка 1248, строка «И ПОСТРОЕНО» одиннадцать знаков:
       предельный кегль 158, ступень ниже — 152. */
    --t-afisha-big:160px;
    --t-mash:72px;
  }
}
@media(min-width:1760px){
  :root{ --pad:120px; --pad-hero:68px; --sec-y:112px; --t-afisha-big:176px; }
}


/* ── переменные отдельных страниц ──
   Страница не заводит свой :root. Если ей нужен свой ритм или своя
   высота шапки, она объявляет это здесь, под ключом-классом. Так
   переопределение видно в системе, а не спрятано внутри HTML.

   `.p-houses` — раздел частных домов. У него фиксированная шапка,
   поэтому нужна её высота, и более плотный ритм разделов. */
.p-houses{
  --head-h:76px;              /* высота фиксированной шапки */
  --pad-x:var(--pad);         /* поле страницы под своим именем */
  /* Ритм разделов и лестница кеглей здесь были свои: 64 против 104
     и clamp против ступеней. Шапка занимает верх страницы, а не
     воздух между разделами, — своего ритма это не оправдывает,
     а две лестницы кеглей в одном доме не нужны вовсе. Сняты обе.
     Заголовок первого экрана берёт общий --t-h1. */
  --t-h1-page:var(--t-h1);
  --t-micro:.75rem;
  /* Трекинг был рассчитан на прописные надзаголовки. Прописных
     больше нет, а .18em на строчных рассыпает слово. */
  --ls-micro:.03em;
  --e-io:cubic-bezier(.65,0,.35,1);   /* вход-выход: меню, шторки */
}
@media(max-width:767px){
  .p-houses{ --t-micro:.75rem; --ls-micro:.03em; --head-h:62px; }
}

/* `.p-index` — главная. Заголовок героя и крупная цифра тянутся
   плавно: это типографика, а не ритм, поэтому clamp здесь уместен. */
.p-index{ --r-round:var(--r-img); }

/* ── общая основа ── */
*,*::before,*::after{box-sizing:border-box}
/* Низ окна занят закреплённой панелью, верх — шапкой: доводка
   фокуса и переход по якорю обязаны это учитывать, иначе цель
   встаёт под панель (WCAG 2.4.11). */
html{scroll-padding-top:calc(var(--head-h) + var(--gap-s));
  scroll-padding-bottom:calc(var(--s-6) + 76px);
  scroll-behavior:smooth;-webkit-text-size-adjust:100%;background:var(--void);
  color-scheme:dark}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}
body{margin:0;background:var(--void);color:var(--ink);font-family:var(--sans);
  font-size:var(--t-m);line-height:1.45;-webkit-font-smoothing:antialiased}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
button{font:inherit;color:inherit}
::selection{background:var(--gold);color:var(--void)}
/* Кольцо фокуса и подложка под ним — две роли, а не два цвета.
   На светлом кольцо печатное, подложка бумажная: 12:1 на поле
   и отделение от снимка под ним. На тёмных островах роли меняются
   местами одной строкой ниже. */
:focus-visible{outline:2px solid var(--focus);outline-offset:3px;
  box-shadow:0 0 0 5px var(--focus-back)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Утилита концепции: снимок без края. Изображение растворяется
   в пустоте по радиусу, поэтому у него нет прямоугольника —
   иначе тёмная фотография на тёмном фоне читается как карточка. */
.dissolve{-webkit-mask-image:radial-gradient(58% 54% at 50% 44%,#000 18%,rgba(0,0,0,.62) 52%,transparent 84%);
  mask-image:radial-gradient(58% 54% at 50% 44%,#000 18%,rgba(0,0,0,.62) 52%,transparent 84%)}
/* Ночная градация дневного рендера. ПЛЕЙСХОЛДЕР: настоящие вечерние
   рендеры запрошены у заказчика (NEEDED_FROM_CLIENT, пункт 11). */
.dusk{filter:brightness(.30) contrast(1.22) saturate(.42) sepia(.16) hue-rotate(-6deg)}


/* ══════════ ВТОРОСТЕПЕННЫЙ ТЕКСТ НА ТЁМНОМ ══════════
   --stone выведен из камня фасада и работает на бумаге. На тёмных
   плоскостях он даёт 2,56 — там нужен свой тон, и он выводится
   из того же камня, но осветлённого до прохода на #211E1A. */
.pj,.lv,.band{--dim:#A9A39C;--mute:#C4BEB7;--focus:var(--on-dark);--focus-back:var(--island)}


/* ══════════ АРМЯНСКИЙ: СВОЯ ЛЕСТНИЦА КЕГЛЯ ══════════
   Замер по шести ширинам: армянская строка длиннее русской
   в 1,6 раза. Общая лестница резала её по краям кадра.

   Значения на ступень ниже предела: заголовок переводят люди,
   и он может стать длиннее на слово. */
html:lang(hy){ --t-afisha-big:30px; }
@media(min-width:600px){ html:lang(hy){ --t-afisha-big:44px; } }
@media(min-width:760px){ html:lang(hy){ --t-afisha-big:60px; } }
@media(min-width:1100px){ html:lang(hy){ --t-afisha-big:88px; } }
@media(min-width:1440px){ html:lang(hy){ --t-afisha-big:112px; } }
@media(min-width:1760px){ html:lang(hy){ --t-afisha-big:136px; } }

/* AURA brand accents, reviewed with Gemini. */
@font-face{font-family:"IBM Plex Sans";font-style:normal;font-weight:700;font-display:swap;src:url(../fonts/plex-700.woff2) format("woff2")}
:root{--bronze-ink:#75603F}

/* White paper and monochrome actions: latest client reference. */
:root{--paper:#FFFFFF;--paper-lo:#FFFFFF;--bg:#FFFFFF;--bg-hi:#FFFFFF;--panel:#FFFFFF;--panel-rgb:255 255 255;--bronze-ink:#0A0908}
