/* V14 review extends the approved Arrival Lights identity. */
.language a { display:flex; align-items:center; justify-content:center; flex:0 0 40px; width:40px; height:40px; min-width:40px; min-height:40px; padding:0; aspect-ratio:1; line-height:1; border-radius:50%; font-size:12px; font-weight:700; text-decoration:none; color:inherit; }
.language a.is-current { background:var(--white); color:var(--night); }
.site-header--solid .language a.is-current { background:var(--night); color:white; }
.v13-breadcrumb { display:flex; flex-wrap:wrap; gap:8px; padding:24px clamp(20px,5vw,80px) 0; color:#657782; font-size:13px; }
.v13-breadcrumb a { text-decoration:none; }
.v13-hero { padding:64px clamp(20px,5vw,80px) 70px; background:var(--night); color:var(--white); position:relative; overflow:hidden; }
.v13-hero h1 { max-width:890px; margin:12px 0 24px; font-size:clamp(40px,5.5vw,76px); line-height:1.06; letter-spacing:-.055em; }
.v13-hero p { max-width:660px; color:#b9cad4; font-size:18px; line-height:1.65; }
.v13-hero .eyebrow { color:var(--window); }
.v13-hero--split { display:grid; grid-template-columns:1.15fr 1fr; align-items:center; gap:54px; }
.v13-hero--split h1 { font-size:clamp(40px,4.5vw,64px); }
.v13-photo { width:100%; height:420px; object-fit:cover; border-radius:24px; }
.v13-content { max-width:1440px; margin:auto; padding:64px clamp(20px,5vw,80px); }
.v13-content h2 { font-size:clamp(30px,3.3vw,46px); line-height:1.15; letter-spacing:-.04em; margin:0 0 24px; }
.v13-content p { line-height:1.7; }
.v13-intro-grid { display:grid; grid-template-columns:.8fr 1.2fr; gap:64px; }
.v13-intro-grid p { margin-top:0; font-size:18px; color:#536774; }
.v13-link-list { list-style:none; padding:0; margin:0; border-top:1px solid #d9d5cb; }
.v13-link-list li { border-bottom:1px solid #d9d5cb; }
.v13-link-list a { display:flex; align-items:center; justify-content:space-between; gap:20px; padding:22px 0; text-decoration:none; font-size:19px; font-weight:600; }
.v13-link-list a:hover { color:#806023; }
.v13-faq { max-width:920px; }
.v13-faq details { border-bottom:1px solid #d9d5cb; padding:22px 0; }
.v13-faq summary { cursor:pointer; font-size:20px; font-weight:600; line-height:1.4; padding-right:10px; }
.v13-faq details p { max-width:770px; color:#526572; }
.v13-toc { display:flex; flex-wrap:wrap; gap:12px; margin:28px 0; }
.v13-toc a { display:inline-block; padding:12px 18px; border:1px solid #d8d1c3; border-radius:30px; text-decoration:none; font-size:14px; }
.v13-toc a[aria-current] { background:#112939; color:white; }
.v13-steps { counter-reset:steps; }
.v13-step { counter-increment:steps; display:grid; grid-template-columns:90px 1fr; gap:24px; padding:30px 0; border-bottom:1px solid #d9d5cb; }
.v13-step::before { content:'0' counter(steps); font-size:42px; color:#ba924f; }
.v13-step h2 { font-size:28px; margin:0 0 12px; }
.v13-step p { max-width:770px; color:#526572; margin:0; }
.v13-article { max-width:850px; margin:auto; }
.v13-article section { padding:24px 0; scroll-margin-top:110px; }
.v13-article h2 { font-size:30px; }
.v13-article li { margin:12px 0; line-height:1.7; }
.v13-article p { font-size:18px; color:#435865; }
.v13-editorial-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:28px; }
.v13-story { display:block; text-decoration:none; min-width:0; }
.v13-story img { width:100%; height:260px; object-fit:cover; border-radius:18px; }
.v13-story h2,.v13-story h3 { font-size:26px; margin:18px 0 12px; letter-spacing:-.03em; }
.v13-story p { font-size:15px; color:#526572; }
.v13-story span { color:#92691f; font-size:14px; font-weight:600; }
.v13-footer { display:grid; grid-template-columns:1.2fr 1fr 1fr; gap:36px; background:var(--night); color:#b8cbd7; padding:56px clamp(20px,5vw,80px); }
.v13-footer img { width:210px; height:auto; }
.v13-footer p { max-width:300px; line-height:1.7; font-size:14px; }
.v13-footer nav { display:flex; flex-direction:column; align-items:flex-start; gap:15px; }
.v13-footer a { text-decoration:none; font-size:14px; }
.v13-footer strong { color:white; margin-bottom:10px; }
.v13-footer a:hover { color:#f4b654; }
.v13-note { padding:22px 26px; border-left:3px solid #d5aa65; background:#f1e7d6; line-height:1.65; }
.v13-actions { display:flex; flex-wrap:wrap; gap:14px; margin-top:28px; }
.v13-review-note { padding:12px 20px; background:#f1e7d6; color:#536774; text-align:center; font-size:13px; }
@media(max-width:900px) {
 .v13-hero--split,.v13-intro-grid { grid-template-columns:1fr; gap:28px; }
 .v13-editorial-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
 .v13-footer { grid-template-columns:1fr 1fr; }
 .v13-photo { height:320px; }
}
@media(max-width:600px) {
 .v13-hero { padding-top:38px; padding-bottom:42px; }
 .v13-hero p { font-size:16px; }
 .v13-content { padding-top:40px; padding-bottom:40px; }
 .v13-step { grid-template-columns:45px 1fr; gap:15px; }
 .v13-step::before { font-size:28px; }
 .v13-step h2 { font-size:24px; }
 .v13-editorial-grid,.v13-footer { grid-template-columns:1fr; }
 .v13-photo { height:300px; }
 .v13-actions .btn { flex:1 1 auto; }
 .v13-faq summary { font-size:18px; }
 .v13-article p { font-size:16px; }
}
.v13-map-wrap { position:relative; height:580px; border-radius:24px; overflow:hidden; background:#06111d; }
.v13-company-link { display:inline-block; margin-top:20px; color:#6d521b; }
.v13-skeleton i { display:block; height:10px; background:#dfddd6; margin:14px 0; max-width:650px; border-radius:4px; }
.v13-skeleton i:nth-child(2) { max-width:580px; }.v13-skeleton i:nth-child(3) { max-width:410px; }
.v13-note summary { cursor:pointer; font-weight:600; }
.v13-content .maplibregl-canvas { border-radius:24px; }
.hero__actions { flex-wrap:wrap; }
.room-summary > .btn + .btn { margin-top:12px; }
@media(max-width:600px) {
 .hero__actions .btn { padding:0 14px; font-size:13px; }
 .hero__actions .btn--arrival-cta { flex-basis:100%; }
 .v13-map-wrap { height:480px; }
 .language a { flex-basis:32px; width:32px; height:32px; min-width:32px; min-height:32px; padding:0; font-size:11px; }
 .site-header .brand { max-width:175px; }
 .site-header .brand img { width:100%; }
 .site-header .header-actions { gap:7px; }
}
.v13-map-wrap .map-canvas { position:absolute; inset:0; }
.v13-map-wrap::after { display:none; }
.v13-map-wrap .maplibregl-control-container { display:block; }
.v13-map-wrap .maplibregl-ctrl-bottom-right { bottom:26px; }

/* Translation notice stays readable above the preserved map intro. */
.v13-review-note { position:fixed; z-index:200; top:100px; left:20px; right:20px; max-width:680px; margin:auto; border-radius:16px; box-shadow:0 12px 35px #0003; pointer-events:none; }

.site-header .nav { gap:clamp(12px,1.6vw,25px); }
.mobile-menu__panel { max-height:calc(100dvh - 100px); overflow-y:auto; }

html.v13-menu-open { overflow:hidden; overscroll-behavior:none; }
.v13-menu-open .mobile-menu__panel { overscroll-behavior:contain; touch-action:pan-y; }

/* Keep every route out of the map available while exploring. */
.v13-map-page .site-header { position:sticky; top:0; z-index:40; }
.v13-map-toolbar { position:sticky; top:88px; z-index:20; display:flex; align-items:center; gap:24px; padding:12px 0; background:var(--cream,#f7f2e9); }
.v13-map-toolbar .btn { min-height:44px; padding:0 22px; }
@media(max-width:620px){.v13-map-toolbar { top:72px; }.v13-map-page .v13-map-wrap { height:min(480px,calc(100dvh - 158px)); }}

/* ROOMPLACE consent: окно согласия на cookies, настройки, политики (scripts/site_consent.py) */
/* Окно — фиксированная панель внизу: ничего на странице не сдвигается. По слою
   выше нижних панелей с кнопками (80 и 55), ниже ссылки «к содержимому» (1000).
   Где такая панель есть, окно стоит над ней, а не на ней (правила ниже):
   «Позвонить» и Telegram видны и нажимаются, пока человек не выбрал.
   Окно никогда не выше экрана: сверху остаётся 16px. На низком экране (или при
   увеличении 400 %) прокручивается текст, а кнопки OK и «Отклонить» остаются
   видны под ним. 100dvh — видимая высота телефона с панелями браузера; старые
   браузеры берут строку со 100vh. */
.rp-consent {
  position: fixed;
  z-index: 90;
  right: 16px;
  bottom: max(16px, env(safe-area-inset-bottom));
  left: 16px;
  display: flex;
  flex-direction: column;
  box-sizing: border-box;
  max-width: 560px;
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 16px - max(16px, env(safe-area-inset-bottom)));
  overflow-y: auto;
  overscroll-behavior: contain;
  margin-inline: auto;
  padding: 20px 22px;
  border: 1px solid var(--line-dark, rgba(255, 255, 255, .14));
  border-radius: 20px;
  color: var(--white, #f9fbfd);
  background: rgba(6, 17, 29, .97);
  box-shadow: 0 24px 70px rgba(1, 8, 14, .45);
  font-size: 15px;
  line-height: 1.5;
  animation: rp-consent-in .32s ease both;
}
/* Текст сжимается и прокручивается первым; хотя бы две строки видны всегда. */
.rp-consent__body { flex: 0 1 auto; min-height: 2.9em; overflow-y: auto; overscroll-behavior: contain; }
.rp-consent__title { margin: 0 0 6px; font-size: 16px; font-weight: 700; }
.rp-consent__text { margin: 0; color: #d6e1ea; }
.rp-consent__text a { color: var(--window-soft, #ffdda0); text-underline-offset: 3px; }
.rp-consent__actions { flex: none; display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 16px; }
/* Обе кнопки одинаковые: ни одна не выделена сильнее другой. */
.rp-consent__button {
  min-height: 48px;
  padding: 0 16px;
  border: 1px solid rgba(255, 255, 255, .3);
  border-radius: 12px;
  color: var(--night, #06111d);
  background: var(--white, #f9fbfd);
  font: inherit;
  font-weight: 700;
  cursor: pointer;
}
.rp-consent__button:hover { background: #ffffff; }
.rp-consent__button:focus-visible { outline: 3px solid var(--window, #f4b654); outline-offset: 3px; }
@keyframes rp-consent-in { from { opacity: 0; transform: translateY(14px); } }
@media (prefers-reduced-motion: reduce) { .rp-consent { animation: none; } }
@media print { .rp-consent { display: none !important; } }

/* Нижние панели «Позвонить / Telegram»: окно поднимается над ними (панель
   высотой 62–64px стоит в 10–16px от края). На главной панель есть на любом
   экране, на странице адреса — только на телефоне. */
html.rp-consent-open:has(.hero-command) .rp-consent {
  bottom: calc(max(16px, env(safe-area-inset-bottom)) + 72px);
  max-height: calc(100vh - 104px);
  max-height: calc(100dvh - 88px - max(16px, env(safe-area-inset-bottom)));
}
@media (max-width: 620px) {
  html.rp-consent-open:has(.room-mobile-contact) .rp-consent {
    bottom: calc(max(16px, env(safe-area-inset-bottom)) + 72px);
    max-height: calc(100vh - 104px);
    max-height: calc(100dvh - 88px - max(16px, env(safe-area-inset-bottom)));
  }
  /* На телефоне окно компактнее: меньше отступов, кнопки 44px. */
  .rp-consent { right: 10px; left: 10px; padding: 14px 16px; border-radius: 16px; font-size: 14px; line-height: 1.45; }
  .rp-consent__title { margin-bottom: 4px; font-size: 15px; }
  .rp-consent__actions { gap: 8px; margin-top: 12px; }
  .rp-consent__button { min-height: 44px; }
}
/* Открытое меню телефона закрывает страницу целиком и само ловит нажатия мимо
   себя: окно прячется под ним, чтобы не закрывать «Позвонить» и Telegram
   внизу меню, и возвращается, когда меню закроют. */
html.v13-menu-open .rp-consent { visibility: hidden; }
/* Низкий экран (телефон лёжа, увеличение 400 %): меньше отступов, чтобы тексту
   оставалось место; кнопки остаются 44px. */
@media (max-height: 480px) {
  .rp-consent { padding-top: 12px; padding-bottom: 12px; }
  .rp-consent__title { margin-bottom: 2px; }
  .rp-consent__actions { margin-top: 10px; }
}

/* Страница cookies: те же две кнопки, текущий выбор отмечен. */
.rp-consent-settings__actions { display: flex; flex-wrap: wrap; gap: 12px; }
.rp-consent-settings .rp-consent__button { min-width: 160px; color: var(--white, #f9fbfd); background: var(--night, #06111d); }
.rp-consent-settings .rp-consent__button[aria-pressed="true"] { box-shadow: inset 0 0 0 3px var(--window, #f4b654); }

/* Политики: дата и таблица cookies. */
.rp-legal-note { font-size: 16px; }
/* Название cookie не переносится посередине (_ga_YTCJHCRV95, AWSALBCORS); если
   таблица не помещается, она прокручивается вбок внутри себя, а не вся страница. */
.rp-legal-table-wrap { overflow-x: auto; }
.rp-legal-table { width: 100%; border-collapse: collapse; font-size: 16px; line-height: 1.5; }
.rp-legal-table caption { margin-bottom: 12px; text-align: left; font-weight: 700; }
.rp-legal-table th, .rp-legal-table td { padding: 12px 14px; border-bottom: 1px solid var(--line-light, rgba(13, 31, 45, .14)); text-align: left; vertical-align: top; }
.rp-legal-table thead th { background: var(--cream, #f1e7d6); }
.rp-legal-table tbody th { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; font-size: 15px; white-space: nowrap; }
@media (max-width: 640px) {
  .rp-legal-table, .rp-legal-table caption, .rp-legal-table tbody, .rp-legal-table tr, .rp-legal-table th, .rp-legal-table td { display: block; }
  .rp-legal-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .rp-legal-table tr { padding: 10px 0; border-bottom: 1px solid var(--line-light, rgba(13, 31, 45, .14)); }
  .rp-legal-table th, .rp-legal-table td { padding: 4px 0; border: 0; }
  .rp-legal-table td::before { content: attr(data-label) ": "; font-weight: 700; }
}

/* Телефон и @имя Telegram в тексте политик: одной строкой, без переноса посередине. */
.rp-nowrap { white-space: nowrap; }

/* Строка под формой обратного звонка. */
.callback-form__notice { margin: 14px 0 0; color: #526573; font-size: 13px; line-height: 1.5; }
.callback-form__notice a { color: inherit; text-underline-offset: 3px; }

/* V16 hybrid loading */
.hero-poster { position: absolute; inset: 0; z-index: 0; pointer-events: none; transition: opacity .45s ease; }
.hero-poster img { display: block; width: 100%; height: 100%; object-fit: cover; }
.hero-poster.is-hidden { opacity: 0; }
html[data-rp-tier="map"] .map-expand { opacity: 1; visibility: visible; }
.map-expand[aria-busy="true"] { cursor: progress; }
.hero-poster.is-pending { visibility: hidden; }
.hero-intro { position: absolute; inset: 0; z-index: 1; width: 100%; height: 100%; object-fit: cover; pointer-events: none; transition: opacity .55s ease; }
.hero-intro.is-hidden { opacity: 0; }
/* the map button waits for the recording to finish (V13 reveals it as soon as the map is ready) */
html[data-rp-tier="light"]:not([data-rp-intro="done"]) .map-expand { opacity: 0 !important; visibility: hidden !important; }
html[data-rp-tier="light"][data-rp-intro="done"] .map-expand { opacity: 1; visibility: visible; }
.map-wrap--deferred { background: linear-gradient(150deg, #0c2435, #06111d 72%); }
.map-wrap--deferred .map-canvas { background: repeating-linear-gradient(126deg, transparent 0 34px, rgba(120,160,190,.05) 34px 36px); }
.room-map-open[aria-busy="true"], .map-expand[aria-busy="true"] { cursor: progress; }
.room-tile img[src$="hybrid/room-1-warm-ai.webp"] { filter: none; }

/* V16 callback form on every page */
/* Address pages have no cream band: the panel sits on the page itself, under
   the contact card and the map. */
.callback-panel--room { margin-top: 56px; }
@media (max-width: 900px) { .callback-panel--room { margin-top: 36px; } }

/* V16 contrast (WCAG AA): the same colours a shade darker, so small text reaches 4.5:1.
   Old -> new colour, contrast on the real background in brackets. */
/* Синие кнопки: белый текст на #2f80ed (3.87) -> #1f6fd6 (4.88). Переменная общая,
   так что заодно темнеет ссылка-пропуск .skip-link. Наведение было #2276df - теперь
   оно светлее основы, поэтому #1b63c4 (5.79): при наведении кнопка по-прежнему темнеет. */
:root { --sky-strong: #1f6fd6; }
.btn--primary:hover { background: #1b63c4; }
/* Жёлтая метка «Уточнити доступні варіанти» на белой карточке адреса: #f4b654 (1.80) ->
   #9a6200 (5.10). Точка перед ней остаётся прежней жёлтой. На тёмном фоне .status не трогаем. */
.room-summary .status { color: #9a6200; }
.room-summary .status::before { background: var(--window); }
/* Хлебные крошки: #657782 на бумаге #f7f2e9 (4.17) -> #56666f (5.34).
   Ссылки - цель касания 25 px в высоту: поля сверху и снизу, съеденные отрицательным
   отступом, поэтому строка не становится выше и ничего не сдвигается. */
.v13-breadcrumb { color: #56666f; }
.v13-breadcrumb a { padding: 3px 0; margin: -3px 0; }
/* Район на карточке каталога: #a56f2e (4.14) -> #8c5a1f (5.66). */
.catalog-card__district { color: #8c5a1f; }
/* Подпись под ценой и подсказка под кнопками на карточке адреса:
   #6a7985 (4.48) и #70808b (4.08) -> #5f6e7a (5.25). */
.room-summary__price { color: #5f6e7a; }
.room-summary__next { color: #5f6e7a; }
/* Счётчик на кнопке «Только с 3D-туром»: #8a7456 (4.46) -> #7a6448 (5.61). virtual-tour.css
   подключён после design.css, поэтому правило сильнее, а нажатое (тёмное) состояние - прежнее. */
.tour-filter:not([aria-pressed="true"]) small { color: #7a6448; }

/* V16 map page: «Загружаем карту…» в окне карты, пока она не готова */
.map-loading { position: absolute; z-index: 6; inset: 0; display: flex; align-items: center; justify-content: center; gap: 10px; padding: 24px; color: #c7d5de; font-size: 15px; font-weight: 700; text-align: center; pointer-events: none; }
.map-loading::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--window); box-shadow: 0 0 16px rgba(244, 182, 84, .72); animation: map-loading-pulse 1.4s ease-in-out infinite; }
@keyframes map-loading-pulse { 50% { opacity: .35; } }
@media (prefers-reduced-motion: reduce) { .map-loading::before { animation: none; } }
.map-wrap.is-ready .map-loading { display: none; }
.map-loading.is-failed::before { display: none; }
.map-loading button { pointer-events: auto; min-height: 44px; padding: 0 22px; border: 1px solid var(--line-dark); border-radius: 999px; color: white; background: rgba(255, 255, 255, .08); font: inherit; cursor: pointer; }
.map-loading button:focus-visible { outline: 3px solid var(--window); outline-offset: 4px; }
