/* ==========================================================================
   page.css — внутренние страницы: хаб услуг и страницы виз.
   Общие блоки (карточки, шаги, вопросы, призыв, иконки) берутся из home.css,
   поэтому на этих страницах подключены оба файла.
   Новых цветов нет — всё из css/tokens.css.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Хлебные крошки
   -------------------------------------------------------------------------- */

.breadcrumbs {
  margin-bottom: var(--space-6);
  font-size: var(--text-sm);
  color: var(--muted);
}

.breadcrumbs ol {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2);
  margin: 0;
  padding: 0;
  list-style: none;
}

.breadcrumbs li {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.breadcrumbs li + li::before {
  content: "/";
  color: var(--line);
}

.breadcrumbs a {
  color: var(--muted);
  text-decoration: none;
}

.breadcrumbs a:hover {
  color: var(--copper-dark);
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.breadcrumbs [aria-current="page"] {
  color: var(--ink);
}

/* --------------------------------------------------------------------------
   Шапка страницы и её разделы
   -------------------------------------------------------------------------- */

.page {
  padding-top: var(--space-6);
}

.page-head {
  padding-bottom: var(--space-6);
  border-bottom: 1px solid var(--line);
}

.page-head .lead {
  margin-top: var(--space-4);
  font-size: var(--text-lg);
  color: var(--muted);
}

.page-section {
  padding-top: var(--space-7);
}

@media (min-width: 48em) {
  .page {
    padding-top: var(--space-7);
  }
  .page-section {
    padding-top: var(--space-8);
  }
}

/* --------------------------------------------------------------------------
   Список «Кому подходит»: тонкая медная чёрточка вместо точки
   -------------------------------------------------------------------------- */

.checklist {
  display: grid;
  gap: var(--space-3);
  margin: var(--space-5) 0 0;
  padding: 0;
  list-style: none;
}

.checklist li {
  position: relative;
  padding-left: var(--space-6);
  max-width: 68ch;
}

.checklist li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.68em;
  width: 14px;
  height: 1px;
  background-color: var(--copper);
}

/* --------------------------------------------------------------------------
   Список документов: строки, разделённые тонкими линиями
   -------------------------------------------------------------------------- */

.doclist {
  margin: var(--space-5) 0 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--line);
}

.doclist li {
  padding-block: var(--space-3);
  border-bottom: 1px solid var(--line);
  font-size: var(--text-sm);
}

.doclist li span {
  display: block;
  margin-top: 2px;
  color: var(--muted);
  font-size: var(--text-xs);
}

/* --------------------------------------------------------------------------
   Честная оговорка. Ставится там, где мы НЕ можем дать точную цифру:
   требования консульств меняются, и выдуманный список приведёт к отказу.
   -------------------------------------------------------------------------- */

.note {
  display: flex;
  gap: var(--space-3);
  max-width: 80ch;           /* длинная строка плохо читается */
  margin-top: var(--space-5);
  padding: var(--space-4) var(--space-5);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-left: 2px solid var(--copper);
  border-radius: var(--radius-md);
  color: var(--muted);
  font-size: var(--text-sm);
}

.note .icon {
  flex: none;
  margin-top: 2px;
  color: var(--copper);
}

.note p {
  max-width: none;
}

.note p + p {
  margin-top: var(--space-3);
}

.note a {
  color: var(--copper-dark);
}

/* --------------------------------------------------------------------------
   Сроки и цены.

   Класс pricing--todo рисует пунктирную рамку — это метка «здесь ещё
   не вписаны цифры». Заполните значения и уберите этот класс из тега,
   рамка станет обычной.
   -------------------------------------------------------------------------- */

.pricing {
  margin-top: var(--space-5);
  padding: var(--space-5);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
}

@media (min-width: 48em) {
  .pricing {
    padding: var(--space-6);
  }
}

.pricing__list {
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Две колонки: слева название, справа значение. Значение переносится
   внутри своей колонки, а не сваливается целиком на новую строку. */
.pricing__row {
  display: grid;
  grid-template-columns: minmax(0, auto) minmax(45%, 1fr);
  align-items: baseline;
  gap: var(--space-2) var(--space-4);
  padding-block: var(--space-3);
  border-top: 1px solid var(--line);
}

.pricing__row:first-child {
  border-top: none;
  padding-top: 0;
}

.pricing__row:last-child {
  padding-bottom: 0;
}

.pricing__label {
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  color: var(--ink);
}

.pricing__value {
  min-width: 0;
  text-align: right;
  font-size: var(--text-sm);
  color: var(--muted);
}

/* На узком экране значение переносится на свою строку —
   там прижимать его вправо неудобно для чтения. */
/* На узком экране колонки не помещаются — ставим значение под названием */
@media (max-width: 32.4375em) {
  .pricing__row {
    grid-template-columns: 1fr;
    gap: var(--space-1);
  }
  .pricing__value {
    text-align: left;
  }
}

/* Значение, которое владельцам ещё предстоит вписать */

/* --------------------------------------------------------------------------
   Шаги на внутренних страницах всегда идут столбиком —
   даже на широком экране, где на главной они выстраиваются в ряд.
   -------------------------------------------------------------------------- */

.steps--stack {
  margin-top: var(--space-5);
}

@media (min-width: 64em) {
  .steps--stack {
    grid-template-columns: 1fr;
    gap: var(--space-6);
  }

  .steps--stack .step {
    grid-template-columns: 48px 1fr;
    gap: var(--space-4);
    align-content: normal;
  }

  .steps--stack .step:not(:last-child) .step__marker::after {
    left: 50%;
    right: auto;
    top: 48px;
    bottom: calc(-1 * var(--space-6));
    width: 1px;
    height: auto;
    background-image: var(--dash-line-vertical);
  }
}

/* --------------------------------------------------------------------------
   Мелочи
   -------------------------------------------------------------------------- */

/* Отступ у списка вопросов и карточек внутри раздела */
.page-section .faq,
.page-section .cards {
  margin-top: var(--space-5);
}

/* Ссылка «назад к списку услуг» */
/* Дата, когда проверяли сумму сбора. Тише самой суммы: это пометка
   о свежести сведений, а не часть цены. */
.fact-note {
  color: var(--muted);
  font-weight: var(--weight-regular, 400);
  white-space: nowrap;
}

/* Строка «Проверено: …» под оговоркой */
.note-line {
  margin: var(--space-4) 0 0;
  color: var(--muted);
  font-size: var(--text-sm);
}

/* Выноска для одного главного ответа. Крупнее и заметнее, чем .warn:
   ставится там, где ответ важнее всего остального на странице —
   например, признаётся ли диплом дома. */
.callout {
  max-width: 80ch;
  margin-top: var(--space-4);
  padding: var(--space-5) var(--space-6);
  background-color: var(--copper-tint);
  border: 1px solid var(--copper);
  border-left: 5px solid var(--copper);
  border-radius: var(--radius-md);
}

.callout p {
  margin: 0;
  font-size: var(--text-base);
}

.callout p + p {
  margin-top: var(--space-3);
}

/* Воздух перед тёмным блоком призыва.

   Раньше его давали отступы последнего элемента страницы. Отступ снизу
   схлопывается наружу контейнера, если у того нет ни рамки, ни своего
   отступа, — и на шести страницах виз и на «Биз барада» призыв наезжал
   на последнюю кнопку: замер показывал минус двадцать пикселей.

   Отступ снизу у самого контейнера не схлопывается и не зависит от
   того, чем страница кончается — списком, заметкой или кнопкой. */
article.page > .container {
  padding-bottom: var(--space-8);
}

.backlink {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  margin-top: var(--space-5);
  color: var(--copper-dark);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
  text-decoration: none;
}

.backlink .icon {
  transition: transform var(--transition-fast);
}

.backlink:hover .icon {
  transform: translateX(-3px);
}

/* ==========================================================================
   КОНТАКТЫ
   ========================================================================== */


@media (min-width: 37.5em) {
}


a


/* Главный способ связи — первый телефон в списке. Крупнее остальных.
   Порядок телефонов задаётся в data/site.json: первый в списке = главный. */


/* Строка «адрес / часы / языки» */

@media (min-width: 48em) {
}


/* ==========================================================================
   ФОРМА ЗАЯВКИ
   ========================================================================== */

.form {
  margin-top: var(--space-5);
}

.form__grid {
  display: grid;
  gap: var(--space-5);
}

@media (min-width: 37.5em) {
  .form__grid {
    grid-template-columns: repeat(2, 1fr);
  }
  /* Поле во всю ширину формы */
  .field--wide {
    grid-column: 1 / -1;
  }
}

.field label {
  display: block;
  margin-bottom: var(--space-2);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
}

.field__required {
  color: var(--copper-dark);
}

.field input,
.field select,
.field textarea {
  width: 100%;
  padding: var(--space-3) var(--space-4);
  min-height: 48px;
  background-color: var(--surface);
  /* Граница поля — это элемент интерфейса, а не украшение: по WCAG ей нужен
     контраст 3:1. Светлая --line давала всего 1.3:1, поэтому здесь --muted. */
  border: 1px solid var(--muted);
  border-radius: var(--radius-md);
  color: var(--ink);
  /* Не меньше 16px: на меньшем кегле Safari при фокусе увеличивает
     страницу целиком, и человек оказывается на приближённой вёрстке. */
  font-size: var(--text-input);
  transition: border-color var(--transition-fast);
}

.field textarea {
  min-height: 120px;
  resize: vertical;
  line-height: var(--leading-normal);
}

.field select {
  appearance: none;
  /* Стрелка нарисована фоном, чтобы не тянуть картинку из сети */
  background-image: linear-gradient(45deg, transparent 50%, var(--muted) 50%),
                    linear-gradient(135deg, var(--muted) 50%, transparent 50%);
  background-position: calc(100% - 20px) 21px, calc(100% - 14px) 21px;
  background-size: 6px 6px, 6px 6px;
  background-repeat: no-repeat;
  padding-right: var(--space-8);
}

.field input:hover,
.field select:hover,
.field textarea:hover {
  border-color: var(--ink);
}

.field input:focus,
.field select:focus,
.field textarea:focus {
  border-color: var(--copper);
}

.field__hint {
  display: block;
  margin-top: var(--space-2);
  color: var(--muted);
  font-size: var(--text-xs);
}

/* Ошибка рядом с полем */
.field__error {
  display: none;
  margin-top: var(--space-2);
  color: var(--copper-dark);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
}

.field[data-invalid] .field__error {
  display: block;
}

.field[data-invalid] input,
.field[data-invalid] select,
.field[data-invalid] textarea {
  border-color: var(--copper-dark);
}

/* Кнопки отправки */
.form__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-6);
}

@media (max-width: 32.4375em) {
  .form__actions .btn {
    flex: 1 1 100%;
  }
}

/* Строка состояния: «текст скопирован» и т. п. */
.form__status {
  margin-top: var(--space-4);
  padding: var(--space-3) var(--space-4);
  background-color: var(--copper-tint);
  border-radius: var(--radius-md);
  color: var(--copper-dark);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
}

.form__status[hidden] {
  display: none;
}

/* Предпросмотр собранного сообщения */
.form__preview {
  margin-top: var(--space-5);
}

.form__preview summary {
  cursor: pointer;
  color: var(--copper-dark);
  font-size: var(--text-sm);
  font-weight: var(--weight-semibold);
}

.form__preview pre {
  margin-top: var(--space-3);
  padding: var(--space-4);
  overflow-x: auto;
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  color: var(--muted);
  font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  font-size: var(--text-xs);
  line-height: var(--leading-snug);
  white-space: pre-wrap;
}

/* Предупреждение о документах — строже обычной оговорки */
.warn {
  display: flex;
  gap: var(--space-3);
  max-width: 80ch;
  margin-top: var(--space-5);
  padding: var(--space-4) var(--space-5);
  background-color: var(--copper-tint);
  border: 1px solid var(--copper);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
}

.warn .icon {
  flex: none;
  margin-top: 2px;
  color: var(--copper-dark);
}

.warn p {
  max-width: none;
}

.warn p + p {
  margin-top: var(--space-3);
}

/* --------------------------------------------------------------------------
   ПРЕДУПРЕЖДЕНИЕ ВВЕРХУ СТРАНИЦЫ ТРЕБОВАНИЙ

   Сведения на этих страницах общие, и знать об этом надо до того, как их
   применят к себе, — значит, не сноской внизу. Рамка медная со всех
   сторон и толще левой кромкой: блок должен читаться как предупреждение
   с первого взгляда, но не кричать красным — пугать тут нечем.
   -------------------------------------------------------------------------- */
.notice {
  display: flex;
  gap: var(--space-3);
  max-width: 80ch;
  margin-bottom: var(--space-7);
  padding: var(--space-4) var(--space-5);
  background-color: var(--copper-tint);
  border: 2px solid var(--copper);
  border-left-width: 6px;
  border-radius: var(--radius-md);
  font-size: var(--text-base);
}

.notice .icon {
  flex: none;
  margin-top: 3px;
  color: var(--copper-dark);
}

.notice p {
  max-width: none;
  margin: 0;
  color: var(--ink);
}

/* ==========================================================================
   СТРАНИЦА «О НАС»
   ========================================================================== */

/* Раздел «чего мы не делаем» */
.nolist {
  display: grid;
  gap: var(--space-4);
  margin: var(--space-5) 0 0;
  padding: 0;
  list-style: none;
}

.nolist li {
  display: flex;
  gap: var(--space-4);
  padding: var(--space-5);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
}

.nolist .icon {
  flex: none;
  margin-top: 2px;
  color: var(--copper);
}

.nolist strong {
  display: block;
  margin-bottom: var(--space-2);
  font-size: var(--text-h4);
  font-weight: var(--weight-semibold);
}

.nolist p {
  max-width: none;
  color: var(--muted);
  font-size: var(--text-sm);
}


/* Блок «Сроки и цены»: вводный абзац и кнопка на контакты.
   Цифр в блоке нет намеренно — цена зависит от случая, и это сказано прямо. */
.pricing__lead {
  max-width: none;
  margin-bottom: var(--space-5);
  font-size: var(--text-sm);
  color: var(--muted);
}

.pricing__cta {
  margin-top: var(--space-5);
}

@media (max-width: 32.4375em) {
  .pricing__cta {
    display: flex;
    width: 100%;
  }
}


/* ==========================================================================
   ИСТОЧНИКИ ФОТОГРАФИЙ (suratlar.html)

   Страница нужна не для красоты: лицензии CC-BY и CC-BY-SA требуют называть
   автора, а CC-BY-SA — ещё и помечать, что изменённая версия расходится
   под той же лицензией. Список собирается из data/photos.json.
   ========================================================================== */

.credits {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(19rem, 100%), 1fr));
  gap: clamp(var(--space-4), 2vw, var(--space-5));
  margin: var(--space-7) 0 0;
  padding: 0;
  list-style: none;
}

.credit {
  display: grid;
  grid-template-columns: 96px minmax(0, 1fr);
  gap: var(--space-4);
  align-items: start;
  padding: var(--space-4);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
}

.credit__thumb {
  width: 96px;
  height: 64px;
  object-fit: cover;
  border-radius: var(--radius-sm);
}

.credit__body {
  min-width: 0;
}

.credit__city {
  margin: 0;
  color: var(--ink);
  font-weight: var(--weight-semibold);
}

.credit__author {
  margin: 2px 0 0;
  color: var(--muted);
  font-size: var(--text-sm);
}

.credit__licence {
  display: flex;
  flex-wrap: wrap;
  /* Не меньше 8 между строками: когда лицензия и ссылка на источник
     переносятся на разные строки, они не должны слипаться. */
  gap: var(--space-2) var(--space-3);
  margin: var(--space-2) 0 0;
  font-size: var(--text-sm);
}

.credit__source {
  color: var(--muted);
}

/* Строка про то, что снимок изменён. Мелко, но на месте:
   без неё условия лицензии не выполнены. */
.credit__note {
  margin: var(--space-2) 0 0;
  color: var(--muted);
  font-size: var(--text-xs);
  line-height: var(--leading-snug);
}

.credits__flags {
  margin-top: var(--space-6);
  padding-top: var(--space-5);
  border-top: 1px solid var(--line);
  color: var(--muted);
  font-size: var(--text-sm);
}


/* ==========================================================================
   СТРАНИЦА КОНТАКТОВ

   Две колонки: слева тёмная панель со связью, справа форма на светлой
   карточке. Телефон — главный канал, поэтому он и самое крупное на странице.
   На телефоне колонки становятся друг под другом, тёмная панель первой.
   ========================================================================== */

.contacts {
  display: grid;
  gap: var(--space-5);
  margin-top: var(--space-7);
}

@media (min-width: 56.25em) {
  .contacts {
    grid-template-columns: 0.9fr 1.1fr;
    gap: var(--space-6);
    align-items: stretch;
  }
}

/* Обе колонки — одинаковой высоты, поэтому панель тянется вниз */
.contacts__panel,
.contacts__form {
  min-width: 0;
  display: flex;
  flex-direction: column;
}

/* Панель — сама себе мера. Телефон на ней набран от ширины панели,
   а не от ширины окна: иначе на 900–1050 он вылезал за край, потому что
   колонка там уже, чем можно было бы судить по экрану. */
.contacts__panel {
  container-type: inline-size;
  container-name: panel;
}


/* --- Тёмная панель --------------------------------------------------------- */

.contact-panel {
  position: relative;
  overflow: hidden;
  flex: 1;
  display: flex;
  padding: var(--space-6) var(--space-5);
  background-color: var(--dark);
  border-radius: var(--radius-lg);
  color: var(--on-dark);
}

@media (min-width: 37.5em) {
  .contact-panel {
    padding: var(--space-7) var(--space-6);
  }
}

/* Тот же приглушённый мотив маршрута, что в блоке призыва */
.contact-panel__art {
  position: absolute;
  inset: 0;
  pointer-events: none;
}

.contact-panel__art svg {
  width: 100%;
  height: 100%;
}

.contact-panel__inner {
  position: relative;
  display: flex;
  flex-direction: column;
  width: 100%;
}

.contact-panel__title {
  margin: 0;
  color: var(--on-dark);
  font-size: var(--text-h2);
}

.contact-panel__note {
  margin-top: var(--space-3);
  color: var(--on-dark-muted);
  font-size: var(--text-sm);
  max-width: 34ch;
}

/* --- Телефоны: самое заметное на странице ---------------------------------- */

.phones {
  margin: var(--space-6) 0 0;
  padding: 0;
  list-style: none;
}

/* Первый номер в списке — главный: он в выделенной карточке и крупнее.
   Какой номер главный, решает порядок в data/site.json, а не эти стили. */
.phones li:first-child {
  padding: var(--space-3) var(--space-4);
  background-color: rgba(204, 123, 80, 0.12);
  border: 1px solid var(--copper-light);
  border-radius: var(--radius-md);
  /* Карточка сама себе мерка. Иначе кегль считается от ширины всей панели
     и не знает про отступы карточки — номер вылезает за рамку. */
  container-type: inline-size;
  container-name: phonecard;
}

/* Запасной размер для браузеров без контейнерных запросов */
.phones li:first-child .phones__link {
  font-size: clamp(1.1rem, 4.4vw, 2.25rem);
}

@container phonecard (min-width: 0px) {
  .phones li:first-child .phones__link {
    font-size: clamp(1.1rem, 9cqi, 2.25rem);
  }
}

.phones li + li {
  margin-top: var(--space-3);
  padding-inline: var(--space-4);
}

/* Второй номер тише: он рабочий, но не тот, по которому звонят первым.
   Нижняя граница ниже, чем у главного номера, иначе на узком экране
   оба упираются в неё и разница в размере пропадает. */
.phones li + li .phones__link {
  font-size: clamp(0.95rem, 5.5cqi, 1.5rem);
  color: var(--on-dark-muted);
}

@media (hover: hover) and (pointer: fine) {
  .phones li + li .phones__link:hover {
    color: var(--on-dark);
  }
}

.phones__link {
  color: var(--on-dark);
  font-family: var(--font-display);
  /* Крупнее любого заголовка страницы, кроме h1: это главный канал связи.
     Запасной размер — для браузеров, которые не умеют контейнерные запросы. */
  font-size: clamp(1.25rem, 5vw, 2rem);
  font-weight: var(--weight-semibold);
  letter-spacing: -0.01em;
  line-height: 1.15;
  text-decoration: none;
  white-space: nowrap;
  transition: color var(--transition-fast);
}

@container panel (min-width: 0px) {
  .phones__link {
    font-size: clamp(1.25rem, 8cqi, 2.25rem);
  }
}

@media (hover: hover) and (pointer: fine) {
  .phones__link:hover {
    color: var(--copper-on-dark);
  }
}

.phones__link:focus-visible {
  outline-color: var(--copper-on-dark);
}


/* --- Почта, Instagram, мессенджеры ----------------------------------------- */

.contact-panel__subtitle {
  margin: var(--space-6) 0 var(--space-3);
  color: var(--on-dark-muted);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.contact-lines {
  margin: 0;
  padding: 0;
  list-style: none;
}

.contact-lines li + li {
  margin-top: var(--space-2);
}

.contact-line {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: center;
  column-gap: var(--space-3);
  padding: var(--space-2) 0;
  color: var(--on-dark);
  text-decoration: none;
}

.contact-line__icon {
  grid-row: 1 / span 2;
  color: var(--copper-on-dark);
}

.contact-line__label {
  color: var(--on-dark-muted);
  font-size: var(--text-xs);
}

.contact-line__value {
  font-size: var(--text-base);
  font-weight: var(--weight-medium);
  overflow-wrap: anywhere;
}

@media (hover: hover) and (pointer: fine) {
  a.contact-line:hover .contact-line__value {
    color: var(--copper-on-dark);
  }
}

/* --- Часы и языки: тонкой строкой в самом низу ------------------------------ */

.contact-panel__foot {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-1) var(--space-5);
  margin: auto 0 0;
  padding-top: var(--space-6);
  color: var(--on-dark-muted);
  font-size: var(--text-xs);
  line-height: var(--leading-snug);
}

.contact-panel :focus-visible {
  outline-color: var(--copper-on-dark);
}


/* --- Форма на светлой карточке ---------------------------------------------- */

.contacts__form {
  padding: var(--space-6) var(--space-5);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
}

@media (min-width: 37.5em) {
  .contacts__form {
    padding: var(--space-7) var(--space-6);
  }
}

.contacts__form > h2 {
  margin-top: 0;
}


/* --- Плавающие подписи ------------------------------------------------------

   Подпись сидит внутри поля и уезжает наверх, когда в поле встают курсором
   или что-то пишут. Держится это на :placeholder-shown — поэтому у каждого
   поля в разметке стоит placeholder=" " с пробелом: пока он «показан»,
   поле считается пустым. Скрипт для этого не нужен.

   Порядок в разметке обратный привычному: сначала поле, потом подпись.
   Иначе селектор «поле в фокусе + подпись» не сработает.
   ---------------------------------------------------------------------------- */

.field--float {
  position: relative;
}

.field--float input,
.field--float select,
.field--float textarea {
  /* Сверху оставлено место под уехавшую подпись */
  padding: 24px var(--space-4) 10px;
  min-height: 60px;
}

.field--float textarea {
  padding-top: 28px;
}

.field--float label {
  position: absolute;
  left: calc(var(--space-4) + 1px);
  top: 19px;
  margin: 0;
  color: var(--muted);
  font-size: var(--text-input);
  font-weight: var(--weight-regular);
  line-height: 1;
  /* Клик по подписи должен попадать в поле, а не в саму подпись */
  pointer-events: none;
  transform-origin: left top;
  transition: transform var(--dur-base) var(--ease-out),
              color var(--dur-fast) var(--ease-hover);
}

/* Поле заполнено или в фокусе — подпись уезжает наверх и мельчает */
.field--float input:focus + label,
.field--float input:not(:placeholder-shown) + label,
.field--float textarea:focus + label,
.field--float textarea:not(:placeholder-shown) + label,
.field--select label {
  transform: translateY(-11px) scale(0.75);
}

.field--float input:focus + label,
.field--float textarea:focus + label,
.field--float select:focus + label {
  color: var(--copper-dark);
}

/* У списка выбора значение есть всегда, поэтому подпись у него
   всегда наверху — прятать её не за чем. */
.field--select select {
  padding-top: 26px;
}

/* Медное кольцо фокуса — плавное, поверх обычной обводки */
.field--float input:focus,
.field--float select:focus,
.field--float textarea:focus {
  border-color: var(--copper);
  box-shadow: 0 0 0 3px var(--copper-tint);
}

.field--float input,
.field--float select,
.field--float textarea {
  transition: border-color var(--transition-fast),
              box-shadow var(--dur-base) var(--ease-out);
}

.field__hint {
  display: block;
  margin-top: var(--space-2);
  color: var(--muted);
  font-size: var(--text-xs);
}

/* Ошибка появляется со сдвигом, а не возникает мгновенно */
.field__error {
  margin-top: var(--space-2);
}

@media (prefers-reduced-motion: no-preference) {
  .field__error[style*="block"],
  .field__error:not(:empty) {
    animation: field-error var(--dur-base) var(--ease-out);
  }

  @keyframes field-error {
    from { opacity: 0; transform: translateY(-4px); }
  }
}

/* Поле с ошибкой видно и без цвета: рамка становится толще */
.field--float input[aria-invalid="true"],
.field--float textarea[aria-invalid="true"] {
  border-color: var(--copper-dark);
  box-shadow: 0 0 0 3px rgba(175, 95, 57, 0.14);
}


/* --- Предупреждение о документах --------------------------------------------
   Не серая сноска, а полоса с медной левой границей: это единственное место
   на сайте, где мы просим чего-то НЕ делать. */

.warn {
  align-items: flex-start;
  max-width: none;
  border: 1px solid var(--line);
  border-left: 4px solid var(--copper);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  padding: var(--space-5);
}


/* --- Кнопка «скопировать» ----------------------------------------------------
   После нажатия на две секунды показывает вторую надпись со значком.
   Обе надписи лежат в разметке, чтобы перевод не попал внутрь скрипта. */

.btn__icon--done,
.btn__text--done {
  display: none;
}

.btn.is-done .btn__icon,
.btn.is-done .btn__text {
  display: none;
}

.btn.is-done .btn__icon--done {
  display: inline-flex;
}

.btn.is-done .btn__text--done {
  display: inline;
}

.btn.is-done {
  border-color: var(--copper-dark);
  color: var(--copper-dark);
}


/* --- «Приходите в офис» ------------------------------------------------------
   Карты нет: вместо неё фирменный пунктир, ведущий к метке. Это знак того,
   что нас можно найти, а не попытка изобразить карту. */

.office {
  display: grid;
  gap: var(--space-5);
  align-items: center;
  margin-top: var(--space-8);
  padding: var(--space-6) var(--space-5);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-lg);
}

@media (min-width: 48em) {
  .office {
    grid-template-columns: minmax(0, 1fr) minmax(0, 0.7fr);
    gap: var(--space-7);
    padding: var(--space-7);
  }
}

.office__title {
  margin: 0 0 var(--space-3);
}

.office__address {
  margin: 0;
  color: var(--ink);
  font-family: var(--font-display);
  font-size: var(--text-h3);
  font-weight: var(--weight-semibold);
  line-height: var(--leading-snug);
}

.office__lead {
  margin-top: var(--space-4);
  color: var(--muted);
  font-size: var(--text-sm);
}

.office__mark svg {
  display: block;
  width: 100%;
  max-width: 320px;
  height: auto;
  margin-inline: auto;
}

.office__route { stroke: var(--copper); opacity: 0.75; }
.office__start { fill: var(--muted); }
.office__pin   { stroke: var(--copper); fill: none; }
.office__pin circle { fill: var(--copper); stroke: none; }

@media (prefers-reduced-motion: no-preference) {
  .office.is-visible .office__route {
    stroke-dasharray: 5 13;
    animation: office-draw var(--dur-slow) var(--ease-out) both;
  }

  @keyframes office-draw {
    from { opacity: 0; }
    to   { opacity: 0.75; }
  }

  .office.is-visible .office__pin {
    animation: office-pin var(--dur-slow) var(--ease-out) 300ms both;
  }

  @keyframes office-pin {
    from { opacity: 0; transform: translateY(-8px); }
    to   { opacity: 1; transform: none; }
  }
}


/* ==========================================================================
   ВНУТРЕННИЕ СТРАНИЦЫ: первый экран, документы, цены, 404
   ========================================================================== */

/* --- Тёмная полоса вверху страницы услуги ----------------------------------
   Вдвое ниже, чем первый экран главной: здесь она представляет раздел,
   а не открывает сайт. */

.page-hero {
  position: relative;
  overflow: hidden;
  /* Отступ снизу небольшой: первая же секция страницы добавляет свой,
     иначе между полосой и текстом получается провал. */
  margin-bottom: var(--space-2);
  padding-block: var(--space-6) var(--space-7);
  background-color: var(--dark);
  color: var(--on-dark);
}

@media (min-width: 48em) {
  .page-hero {
    margin-bottom: var(--space-3);
    padding-block: var(--space-7) var(--space-8);
  }
}

.page-hero__inner {
  position: relative;
}

@media (min-width: 56.25em) {
  .page-hero__inner {
    /* Мотив лежит правее колонки текста, поэтому место под него
       забирать не нужно: колонка и так узкая. */
    padding-right: 0;
  }
}

.page-hero__head h1 {
  color: var(--on-dark);
}

.page-hero .eyebrow {
  color: var(--copper-on-dark);
}

.page-hero .eyebrow::before {
  background-color: var(--copper-light);
}

.page-hero .lead {
  color: var(--on-dark-muted);
  max-width: 62ch;
}

/* Крошки на тёмном: тише обычного, это служебная строка */
.page-hero .breadcrumbs {
  margin-bottom: var(--space-5);
}

.page-hero .breadcrumbs a {
  color: var(--on-dark-muted);
}

.page-hero .breadcrumbs a:hover {
  color: var(--on-dark);
}

.page-hero .breadcrumbs [aria-current="page"] {
  color: var(--on-dark-muted);
}

.page-hero :focus-visible {
  outline-color: var(--copper-on-dark);
}

/* Мотив маршрута справа. На узком экране он только мешал бы тексту. */
.page-hero__art {
  display: none;
}

@media (min-width: 56.25em) {
  .page-hero__art {
    display: block;
    position: absolute;
    right: 0;
    bottom: 0;
    width: 34%;
    max-width: 420px;
    pointer-events: none;
  }

  .page-hero__art svg {
    display: block;
    width: 100%;
    height: auto;
  }
}

.page-hero__line { stroke: var(--copper-light); opacity: 0.55; }
.page-hero__ring { stroke: var(--copper-light); opacity: 0.45; }
.page-hero__dot  { fill: var(--copper-on-dark); }


/* --- Крошки: тоньше и спокойнее -------------------------------------------- */

.breadcrumbs {
  font-size: var(--text-xs);
}

.breadcrumbs ol {
  flex-wrap: wrap;
}

.breadcrumbs ol {
  gap: var(--space-2);
}


/* --- Список документов: карточки в две колонки ------------------------------ */

.doclist {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(17rem, 100%), 1fr));
  gap: clamp(var(--space-3), 1.6vw, var(--space-4));
  margin: var(--space-5) 0 0;
  padding: 0;
  list-style: none;
}

.doclist li {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  align-items: start;
  gap: var(--space-3);
  margin: 0;
  padding: var(--space-4);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-md);
  font-size: var(--text-sm);
  line-height: var(--leading-snug);
}

.doclist__icon {
  flex: none;
  width: 20px;
  height: 20px;
  margin-top: 1px;
  color: var(--copper);
}

/* Уточнение под названием документа */
.doclist li span span {
  display: block;
  margin-top: var(--space-1);
  color: var(--muted);
  font-size: var(--text-xs);
}


/* --- Сроки и цены: заметная карточка ----------------------------------------- */

.pricing {
  margin-top: var(--space-5);
  padding: var(--space-5);
  background-color: var(--surface);
  border: 1px solid var(--copper);
  border-radius: var(--radius-lg);
}

@media (min-width: 48em) {
  .pricing {
    padding: var(--space-6) var(--space-7);
  }
}

/* Главное в блоке — то, что первая консультация бесплатная */
.pricing__free {
  display: flex;
  align-items: center;
  gap: var(--space-3);
  margin: 0 0 var(--space-4);
  max-width: none;
  color: var(--ink);
  font-family: var(--font-display);
  font-size: var(--text-h3);
  font-weight: var(--weight-semibold);
  line-height: var(--leading-snug);
}

.pricing__free::before {
  content: "";
  flex: none;
  width: 10px;
  height: 10px;
  border-radius: var(--radius-full);
  background-color: var(--copper);
}

.pricing__lead {
  max-width: 68ch;
  color: var(--muted);
  font-size: var(--text-sm);
}


/* --- Страница «такой страницы нет» ------------------------------------------- */

.page--notfound {
  display: flex;
  flex: 1;
}

.notfound {
  position: relative;
  overflow: hidden;
  display: flex;
  align-items: center;
  width: 100%;
  padding-block: var(--space-8);
  background-color: var(--dark);
  color: var(--on-dark);
}

@media (min-width: 48em) {
  .notfound {
    min-height: min(72vh, 640px);
    min-height: min(72dvh, 640px);
    padding-block: var(--space-9);
  }
}

/* Оборванный маршрут держится правого нижнего угла и не лезет
   поперёк заголовка. */
.notfound__art {
  position: absolute;
  right: 0;
  bottom: 0;
  left: auto;
  width: min(100%, 820px);
  opacity: 0.75;
  pointer-events: none;
}

.notfound__art svg {
  display: block;
  width: 100%;
  height: auto;
}

.notfound__route { stroke: var(--copper-light); opacity: 0.6; }
.notfound__ghost { stroke: var(--on-dark);      opacity: 0.14; }
.notfound__start { fill: var(--copper-on-dark); }

.notfound__inner {
  position: relative;
}

/* Крупная цифра — единственное, что видно с порога */
.notfound__code {
  margin: 0;
  color: var(--copper-on-dark);
  font-family: var(--font-display);
  font-size: clamp(4rem, 12vw + 1rem, 9rem);
  font-weight: var(--weight-bold);
  line-height: 0.9;
  letter-spacing: -0.02em;
}

.notfound__title {
  margin: var(--space-5) 0 0;
  color: var(--on-dark);
}

.notfound__lead {
  margin-top: var(--space-4);
  max-width: 46ch;
  color: var(--on-dark-muted);
  font-size: var(--text-lg);
}

.notfound__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-6);
}

@media (max-width: 32.4375em) {
  .notfound__actions {
    flex-direction: column;
    align-items: stretch;
  }
}

.notfound__more {
  margin-top: var(--space-7);
  color: var(--on-dark-muted);
  font-size: var(--text-xs);
  font-weight: var(--weight-semibold);
  letter-spacing: 0.1em;
  text-transform: uppercase;
}

.notfound__links {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2) var(--space-5);
  margin: var(--space-3) 0 0;
  padding: 0;
  list-style: none;
  font-size: var(--text-sm);
}

.notfound__links a {
  color: var(--on-dark-muted);
  text-decoration: none;
}

.notfound__links a:hover {
  color: var(--on-dark);
  text-decoration: underline;
  text-underline-offset: 0.2em;
}

.notfound :focus-visible {
  outline-color: var(--copper-on-dark);
}

/* ==========================================================================
   ВЫБОР СТРАНЫ НА СТРАНИЦЕ ВИЗЫ

   Здесь это не витрина, а инструмент: человек пришёл за конкретной
   страной и хочет переключиться, а не рассматривать снимки. Поэтому
   кнопки того же размера, что фильтр на главной, флаг вместо фотографии,
   и содержимое меняется на месте, без перехода на другую страницу.
   ========================================================================== */

.picker__bar {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-2);
  margin-bottom: var(--space-6);
}

.picker__chip {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2);
  min-height: var(--tap);
  padding: 0 var(--space-4);
  background-color: var(--surface);
  border: 1px solid var(--line);
  border-radius: var(--radius-full);
  color: var(--ink);
  font-family: var(--font-sans);
  font-size: var(--text-sm);
  font-weight: var(--weight-medium);
  text-decoration: none;
  transition: background-color var(--transition-fast),
              border-color var(--transition-fast),
              color var(--transition-fast);
}

/* Флаг не должен растягиваться и не должен подпрыгивать при загрузке.
   Размер ровно 4:3, как сами файлы флагов: при 21×15 аудит справедливо
   ругался, что картинку растянули. */
.picker__flag {
  flex: none;
  width: 20px;
  height: 15px;
  border-radius: 2px;
}

@media (hover: hover) and (pointer: fine) {
  .picker__chip:hover {
    border-color: var(--copper);
    background-color: var(--copper-tint);
    color: var(--copper-dark);
  }
}

/* Выбранная страна. Признак — aria-selected: так состояние слышно
   в программе чтения с экрана, а не только видно глазом. */
.picker__chip[aria-selected="true"],
.picker__chip.is-on {
  background-color: var(--copper);
  border-color: var(--copper);
  color: #FFFFFF;
  font-weight: var(--weight-semibold);
}

@media (hover: hover) and (pointer: fine) {
  .picker__chip[aria-selected="true"]:hover {
    background-color: var(--copper-dark);
    border-color: var(--copper-dark);
    color: #FFFFFF;
  }
}

/* Панели стран. Первая в разметке открыта, остальные лежат скрытыми —
   без скриптов человек видит первую страну, а не пустоту. */
.picker__panel > .page-section:first-child {
  margin-top: 0;
}

/* Смена содержимого. Гасим и зажигаем только прозрачностью: высота
   меняется сразу, поэтому макет не дёргается в такт анимации. */
@media (prefers-reduced-motion: no-preference) {
  .js .picker__panel {
    animation: picker-in 220ms ease-out both;
  }

  @keyframes picker-in {
    from { opacity: 0; }
    to   { opacity: 1; }
  }
}

/* На телефоне кнопки идут одной строкой с прокруткой пальцем: двенадцать
   штук в две-три строки съедали бы весь первый экран. */
@media (max-width: 47.999em) {
  .picker__bar {
    flex-wrap: nowrap;
    overflow-x: auto;
    overscroll-behavior-x: contain;
    margin-inline: calc(var(--container-pad) * -1);
    padding-inline: var(--container-pad);
    scrollbar-width: none;
  }

  .picker__bar::-webkit-scrollbar {
    display: none;
  }

  .picker__chip {
    flex: none;
  }
}
