/* Piknikovich - city-picker.css
   Окно выбора города и кнопка «Все города». Зона transfer-16.
   Эталон: components/navigation/CityPicker.jsx дизайн-системы,
   кадры 1-10 доски ui_kits/website/CityPickerBoard.jsx.

   Файл зоны: сюда же переехали стили карточек блока «Где мы работаем»
   (.pk-hgeo*), потому что карточка города переписана по кадру 1 доски и
   старые правила из home-sections.css удалены.

   Окно грузится на каждой странице (триггер стоит в шапке), поэтому все
   селекторы начинаются с .pk-cp или .pk-hgeo - чужого тут ничего нет.
   Прячем через [hidden] + display:none, а не через opacity: пока окно
   закрыто, его ссылки в DOM есть, но никакой площади они не занимают.

   ПРЕФИКС `.pk-front .pk-cp` У ЧАСТИ ПРАВИЛ - не украшение, а перевес
   специфичности. Окно живёт внутри <body class="pk-front">, а в base.css
   есть глобальные правила «класс + тег», которые одиночный класс не
   перебивает:
     .pk-front input[type="text"]     (0,2,1) - крала у поля поиска padding,
                                       радиус и кегль, из-за чего плейсхолдер
                                       заезжал на иконку лупы;
     .pk-front button                 (0,1,1) - крала рамку и белый фон у
                                       крестика и у кнопки очистки поля;
     .pk-front p                      (0,1,1) - крала отступы у подписи;
     .pk-front:not(.home) ul          (0,2,1) - на ВСЕХ страницах кроме
                                       главной сдвигала список городов на
                                       22px вправо и вешала margin снизу;
     .pk-front:not(.home) li + li     (0,2,2) - добавляла 4px между строками.
   Три класса (0,3,0) перебивают всё перечисленное. Префикс не снимать и
   новые правила этих же свойств писать с ним же, иначе поломка вернётся
   тихо: в дизайн-системе всё это инлайновые стили, там конфликта нет. */

/* ============================================================
   Кнопка-триггер и тихая строка под ней (кадр 1)
   ============================================================ */

.pk-front .pk-cp-open {
	display: inline-flex;
	align-items: center;
	gap: 8px;
}
.pk-front .pk-cp-open svg { flex: none; }

.pk-front .pk-cp-allrow {
	margin-top: 32px;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
}
.pk-front .pk-cp-note {
	margin: 0;
	max-width: 560px;
	text-align: center;
	font-size: var(--fs-ui-sm);
	line-height: 1.5;
	color: var(--pk-muted);
}

/* Геометрию кнопки-триггера в шапке (.pk-city, .pk-city-select и подписи)
   держит layout.css - она не менялась: эталон CityPickerBoard, кадр 9,
   «тот же CitySelect шириной 160, но с onOpenPicker». Здесь её не дублируем,
   иначе два файла начнут спорить за одну кнопку. */

/* ============================================================
   Окно
   ============================================================ */

.pk-cp[hidden] { display: none; }
.pk-cp {
	position: fixed;
	inset: 0;
	z-index: 80;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 24px;
	font-family: var(--pk-font-sans);
}
.pk-cp__scrim {
	position: absolute;
	inset: 0;
	background: rgba(29, 37, 48, .5);
	backdrop-filter: blur(2px);
}

.pk-cp__panel {
	position: relative;
	display: flex;
	flex-direction: column;
	width: 960px;
	max-width: 100%;
	max-height: 88%;
	background: #fff;
	border-radius: var(--pk-radius-lg);
	box-shadow: var(--pk-shadow-lg);
	overflow: hidden;
}

/* ---- шапка окна */

.pk-cp__head {
	flex: none;
	padding: 22px 22px 16px;
	border-bottom: 1px solid var(--pk-border);
	background: #fff;
}
.pk-cp__grab { display: none; }

.pk-cp__headrow { display: flex; align-items: flex-start; gap: 16px; }
.pk-cp__titles { flex: 1; min-width: 0; }
.pk-cp__title {
	font-size: 26px;
	font-weight: var(--fw-black);
	letter-spacing: -.02em;
	line-height: 1.2;
	color: var(--pk-text);
}
.pk-front .pk-cp .pk-cp__note {
	margin: 6px 0 0;
	font-size: var(--fs-ui-sm);
	line-height: 1.5;
	color: var(--pk-muted);
}
.pk-front .pk-cp .pk-cp__x {
	flex: none;
	width: 44px;
	height: 44px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	border: 1px solid var(--pk-border);
	border-radius: 50%;
	background: #fff;
	color: var(--pk-text);
	cursor: pointer;
	transition: border-color var(--dur-base), color var(--dur-base);
}
.pk-front .pk-cp .pk-cp__x:hover { border-color: var(--pk-green); color: var(--pk-green); }

/* ---- поиск */

.pk-cp__search { position: relative; display: flex; align-items: center; margin-top: 14px; }
.pk-cp__search-ico {
	position: absolute;
	left: 16px;
	color: var(--pk-muted);
	pointer-events: none;
	transition: color var(--dur-base);
}
.pk-cp__search:focus-within .pk-cp__search-ico { color: var(--pk-green); }
.pk-front .pk-cp .pk-cp__input {
	width: 100%;
	height: var(--control-h);
	padding: 0 46px 0 42px;
	border: 1px solid var(--pk-border);
	border-radius: var(--pk-radius-pill);
	background: #fff;
	font-family: inherit;
	font-size: var(--fs-lead);
	color: var(--pk-text);
	outline: none;
	box-sizing: border-box;
	transition: border-color var(--dur-base), box-shadow var(--dur-base);
}
.pk-front .pk-cp .pk-cp__input:focus { border-color: var(--pk-green); box-shadow: var(--focus-ring); }
.pk-front .pk-cp .pk-cp__clear {
	position: absolute;
	right: 8px;
	width: 32px;
	height: 32px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	border: 1px solid var(--pk-border);
	border-radius: 50%;
	background: #fff;
	color: var(--pk-muted);
	cursor: pointer;
}
.pk-front .pk-cp .pk-cp__clear[hidden] { display: none; }
.pk-front .pk-cp .pk-cp__clear:hover { color: var(--pk-text); border-color: var(--pk-green); }

/* ---- плашка «Ваш город» (ds-13, п. 2.1)

   Ярлык, а не строка списка: высота как у поля поиска, вес другой. Секция
   «Ваш город» из одной строки списка (ds-12) удалена - именно она читалась
   дублем с основным списком. */

.pk-front .pk-cp .pk-cp__cur {
	margin-top: 10px;
	display: flex;
	align-items: center;
	gap: 8px;
	min-height: 40px;
	padding: 0 14px;
	border: 1px solid var(--pk-green);
	border-radius: var(--pk-radius-pill);
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
	font-size: var(--fs-ui-sm);
	font-weight: var(--fw-bold);
	line-height: 1;
	text-decoration: none;
	box-sizing: border-box;
}
.pk-cp__cur[hidden] { display: none; }
.pk-cp__cur svg { flex: none; }
.pk-cp__cur-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pk-cp__cur-count { flex: none; opacity: .7; }

/* ---- популярные города */

.pk-cp__popular { flex: none; padding: 16px 22px 6px; }
.pk-cp__popular[hidden] { display: none; }
.pk-cp__ptitle {
	margin-bottom: 10px;
	font-size: var(--fs-ui-sm);
	font-weight: var(--fw-semibold);
	color: var(--pk-muted);
}
.pk-cp__pchips { display: flex; flex-wrap: wrap; gap: 8px; }
.pk-front .pk-cp__chip {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 9px 9px 9px 15px;
	border: 1px solid var(--pk-border);
	border-radius: var(--pk-radius-pill);
	background: #fff;
	color: var(--pk-text);
	font-size: var(--fs-body);
	font-weight: var(--fw-medium);
	line-height: 1;
	white-space: nowrap;
	flex: none;
	text-decoration: none;
	box-sizing: border-box;
	transition: background var(--dur-base), border-color var(--dur-base), color var(--dur-base);
}
.pk-front .pk-cp__chip b {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 26px;
	height: 22px;
	padding: 0 7px;
	border-radius: var(--pk-radius-pill);
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
	font-size: var(--fs-ui-xs);
	font-weight: var(--fw-bold);
}
.pk-front .pk-cp__chip:hover { background: var(--pk-green-dark); border-color: var(--pk-green-dark); color: #fff; }
.pk-front .pk-cp__chip:hover b { background: rgba(255, 255, 255, .18); color: #fff; }

/* ---- список */

.pk-cp__list {
	position: relative;
	flex: 1 1 auto;
	min-height: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
	padding: 0 22px 10px;
}
/* Дерево двух уровней: строка верхнего уровня (город федерального значения,
   субъект или одиночный город региона) и вложенные города субъекта.
   Плоской сетки округов на четыре колонки (.pk-cp__group, .pk-cp__gname,
   .pk-cp__cities--3/--4) больше нет: заголовок округа и строка города были
   одинаковыми по весу, и на сотне городов окно читалось простынёй. */

.pk-front .pk-cp .pk-cp__tree,
.pk-front .pk-cp .pk-cp__sub-list,
.pk-front .pk-cp .pk-cp__results {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: 2px;
}
.pk-front .pk-cp .pk-cp__tree,
.pk-front .pk-cp .pk-cp__results { padding: 8px 0 10px; }
.pk-front .pk-cp .pk-cp__tree li,
.pk-front .pk-cp .pk-cp__results li { margin: 0; }
/* [hidden] у сеточных блоков сам по себе не работает: display из правила
   выше сильнее атрибута. Гасим руками. */
.pk-cp__tree[hidden],
.pk-cp__results[hidden],
.pk-cp__row[hidden] { display: none; }

/* ---- строка субъекта */

.pk-cp__reghead { display: flex; align-items: center; gap: 2px; }
.pk-front .pk-cp .pk-cp__reglink,
.pk-front .pk-cp .pk-cp__regbtn {
	flex: 1;
	min-width: 0;
	display: flex;
	align-items: center;
	gap: 10px;
	min-height: 40px;
	padding: 7px 8px;
	border: 0;
	border-radius: var(--pk-radius-sm);
	background: none;
	font-family: inherit;
	font-size: var(--fs-body);
	font-weight: var(--fw-semibold);
	line-height: 1.3;
	text-align: left;
	color: var(--pk-text);
	text-decoration: none;
	box-sizing: border-box;
	cursor: pointer;
	transition: background var(--dur-base), color var(--dur-base);
}
/* Субъекта без своего хаба вести некуда: строка приглушена, она только
   разворачивает список. */
.pk-front .pk-cp .pk-cp__regbtn { color: var(--pk-ink-soft); font-weight: var(--fw-medium); }
.pk-front .pk-cp .pk-cp__reglink .pk-cp__cname,
.pk-front .pk-cp .pk-cp__regbtn .pk-cp__cname { flex: 1; min-width: 0; overflow-wrap: anywhere; }
.pk-front .pk-cp .pk-cp__reglink:hover,
.pk-front .pk-cp .pk-cp__reglink:focus-visible,
.pk-front .pk-cp .pk-cp__reglink.is-active,
.pk-front .pk-cp .pk-cp__regbtn:hover {
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
	outline: none;
}
.pk-cp__regcount {
	flex: none;
	font-size: var(--fs-ui-xs);
	color: var(--pk-muted);
}
/* Свёрнутая подпись «8 городов, скоро» нужна, пока список свёрнут:
   развёрнутый субъект её не повторяет. */
.pk-cp__reg.is-open .pk-cp__regcount { display: none; }

.pk-front .pk-cp .pk-cp__regtoggle {
	flex: none;
	width: 40px;
	height: 40px;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: 0;
	border: 0;
	border-radius: var(--pk-radius-sm);
	background: none;
	color: var(--pk-muted);
	cursor: pointer;
}
.pk-front .pk-cp .pk-cp__regtoggle:hover { color: var(--pk-green-dark); }
.pk-cp__chev { flex: none; transition: transform var(--dur-base) var(--ease-entrance); }
.pk-cp__reg.is-open .pk-cp__chev { transform: rotate(180deg); }

/* Свёрнутый субъект: строки внутри остаются в DOM и в исходном коде
   страницы, площади не занимают. Перелинковка и поиск не зависят от того,
   тапнул ли кто-то по субъекту. */
.pk-front .pk-cp .pk-cp__sub-list { display: none; padding: 0 0 6px 22px; }
.pk-front .pk-cp .pk-cp__reg.is-open .pk-cp__sub-list { display: grid; }

.pk-front .pk-cp__city {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 10px;
	min-height: 34px;
	padding: 7px 8px;
	border-radius: var(--pk-radius-sm);
	font-size: var(--fs-body);
	line-height: 1.3;
	color: var(--pk-text);
	text-decoration: none;
	box-sizing: border-box;
	transition: background var(--dur-base), color var(--dur-base);
}
.pk-cp__ctext { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pk-cp__cname { min-width: 0; overflow-wrap: anywhere; }
/* Вторая строка с субъектом. В дереве контекст даёт вложенность, поэтому у
   вложенных строк она спрятана; печатается у одиночных строк верхнего уровня
   и всегда - в плоской выдаче поиска, где контекста иначе нет. */
.pk-cp__sub { font-size: var(--fs-ui-xs); line-height: 1.3; color: var(--pk-muted); }
.pk-cp__sub-list .pk-cp__sub { display: none; }
.pk-cp__results .pk-cp__sub { display: block; }
/* В плоской выдаче субъект - такая же одна строка: ни детей, ни шеврона.
   Три класса в селекторе - перевес над правилом разворота
   `.pk-front .pk-cp .pk-cp__reg.is-open .pk-cp__sub-list`: у развёрнутого
   субъекта, попавшего в выдачу, дети иначе поехали бы за ним. */
.pk-front .pk-cp .pk-cp__results .pk-cp__sub-list,
.pk-front .pk-cp .pk-cp__results .pk-cp__regtoggle,
.pk-front .pk-cp .pk-cp__results .pk-cp__regcount { display: none; }
.pk-cp__cname mark {
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
	border-radius: 3px;
	padding: 0 1px;
}
.pk-cp__count {
	flex: none;
	font-size: var(--fs-ui-xs);
	font-weight: var(--fw-semibold);
	color: var(--pk-muted);
}
.pk-front a.pk-cp__city:hover,
.pk-front a.pk-cp__city:focus-visible,
.pk-front a.pk-cp__city.is-active {
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
	outline: none;
}
.pk-front a.pk-cp__city:hover .pk-cp__count,
.pk-front a.pk-cp__city.is-active .pk-cp__count { color: var(--pk-green-dark); }

/* Текущий город из списка НЕ вычёркивается: человек, листающий список, должен
   найти его на своём месте - помеченным галочкой. Плашка наверху это ярлык
   другого веса, а не вторая копия строки. */
.pk-front .pk-cp .pk-cp__row.is-current .pk-cp__city {
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
	font-weight: var(--fw-semibold);
}
.pk-cp__row.is-current .pk-cp__cname::after {
	content: "";
	display: inline-block;
	width: 12px;
	height: 7px;
	margin-left: 7px;
	border-left: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: translateY(-2px) rotate(-45deg);
}

/* Спящий город: тот же ряд, но не ссылка и не кликается. */
.pk-front .pk-cp__city--off { color: var(--pk-muted); cursor: default; }
.pk-cp__soon { flex: none; font-size: var(--fs-ui-xs); color: var(--pk-muted); }

/* ---- ничего не нашли */

.pk-cp__empty {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 14px;
	padding: 60px 20px 56px;
	text-align: center;
}
.pk-cp__empty[hidden] { display: none; }
.pk-cp__empty-ico {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 52px;
	height: 52px;
	border-radius: 50%;
	background: var(--pk-green-soft);
	color: var(--pk-green-dark);
}
.pk-cp__empty strong {
	font-size: 18px;
	font-weight: var(--fw-semibold);
	letter-spacing: -.015em;
	color: var(--pk-text);
}
.pk-cp__empty p {
	margin: 0;
	max-width: 420px;
	font-size: var(--fs-body);
	line-height: 1.55;
	color: var(--pk-muted);
}
.pk-front .pk-cp__empty .pk-btn { display: inline-flex; align-items: center; gap: 8px; }

/* ---- подвал окна */

.pk-cp__foot {
	flex: none;
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	flex-wrap: wrap;
	padding: 14px 22px;
	border-top: 1px solid var(--pk-border);
	background: #fff;
	font-size: var(--fs-ui-sm);
	color: var(--pk-muted);
}
.pk-front .pk-cp__foot a {
	color: var(--pk-green-dark);
	text-decoration: underline;
	text-underline-offset: 3px;
}

/* ============================================================
   Планшет и мобильный: шторка снизу (кадр 8)
   ============================================================ */

/* Вложенные города субъекта на широком экране идут в несколько колонок:
   уровней остаётся два, а высота списка не растёт линейно с числом городов. */
@media (min-width: 861px) {
	.pk-front .pk-cp .pk-cp__reg.is-open .pk-cp__sub-list { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 640px) {
	/* Шторка на ВЕСЬ экран поверх меню (ds-13, п. 3.5): список на сотню
	   городов не должен жить в окошке на девяносто процентов высоты внутри
	   второго скролла. */
	.pk-cp { align-items: stretch; padding: 0; }
	.pk-cp__panel {
		width: 100%;
		height: 100%;
		max-height: 100%;
		border-radius: 0;
		/* Свайп вниз двигает панель: смещение ставит скрипт инлайном,
		   переход выключается на время перетаскивания классом is-drag. */
		transition: transform var(--dur-mid) var(--ease-entrance);
	}
	.pk-cp__panel.is-drag { transition: none; }

	/* Поле поиска липкое не за счёт position: sticky, а за счёт раскладки -
	   шапка лежит вне прокручиваемого списка (flex: none у .pk-cp__head,
	   overflow только у .pk-cp__list) и на экране остаётся всегда. */
	.pk-cp__head { padding: 8px 12px 12px; touch-action: none; }
	.pk-cp__grab {
		display: block;
		width: 40px;
		height: 4px;
		margin: 0 auto 10px;
		border-radius: 2px;
		background: var(--pk-border);
	}
	.pk-cp__title { font-size: 20px; }
	/* 16px - минимум, при котором iOS не зумит страницу на фокусе поля. */
	.pk-front .pk-cp .pk-cp__input { font-size: 16px; }

	.pk-cp__popular { padding: 12px 12px 4px; }
	/* Чипы не переносим: перенос съедал бы высоту списка. Строка едет вбок. */
	.pk-cp__pchips { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 4px; }

	.pk-cp__list { padding: 0 12px 8px; }
	/* Тап-цели от 44: строка города, строка субъекта, кнопка разворота. */
	.pk-front .pk-cp__city { min-height: 48px; padding: 10px 12px; font-size: 15px; }
	.pk-front .pk-cp .pk-cp__reglink,
	.pk-front .pk-cp .pk-cp__regbtn { min-height: 48px; padding: 10px 12px; font-size: 15px; }
	.pk-front .pk-cp .pk-cp__regtoggle { width: 44px; height: 44px; }
	.pk-front .pk-cp .pk-cp__sub-list { padding-left: 14px; }
	.pk-cp__empty { padding: 44px 12px 32px; }
	.pk-cp__foot { padding: 12px 14px; }
}

/* ============================================================
   Блок «Где мы работаем» (кадры 1 и 10)
   ============================================================
   Одна сетка на два ряда: строки одинаковой высоты, вертикальный шаг равен
   горизонтальному. Карточка города без фирменного кадра встаёт на стандартную
   тёмно-зелёную подложку со штриховкой - ряд не ломается и дыры не появляется.

   Строки «Весь каталог города» в карточке НЕТ: владелец снял её 2026-09-02,
   и это решение главнее кита. Ряд держит общая высота сетки, а список типов
   прижат к верху карточки. */

.pk-front .pk-hgeo {
	display: grid;
	grid-template-columns: repeat(5, minmax(0, 1fr));
	gap: 20px;
	align-items: stretch;
}

.pk-front .pk-hgeo__card {
	display: flex;
	flex-direction: column;
	background: #fff;
	border: 1px solid var(--pk-border);
	border-radius: var(--pk-radius);
	overflow: hidden;
	transition: border-color var(--dur-base), box-shadow var(--dur-base), transform var(--dur-base);
}
.pk-front .pk-hgeo__card:hover {
	border-color: var(--pk-green);
	box-shadow: var(--pk-shadow);
	transform: var(--lift-card);
}

/* Кадр и подпись. Название и счётчик - братья кадра: на широком экране они
   лежат поверх фото абсолютно, на узком встают строкой рядом с миниатюрой. */

.pk-front .pk-hgeo__row {
	position: relative;
	display: block;
	color: inherit;
	text-decoration: none;
}

.pk-front .pk-hgeo__media {
	position: relative;
	display: block;
	aspect-ratio: 3 / 2;
	overflow: hidden;
	background: var(--pk-bg-soft);
}
/* Стандартная подложка города без фирменного кадра. */
.pk-front .pk-hgeo__media--blank {
	background:
		radial-gradient(78% 120% at 14% 6%, #24603a 0%, rgba(36, 96, 58, 0) 62%),
		radial-gradient(70% 120% at 80% 108%, rgba(242, 167, 59, .16) 0%, rgba(242, 167, 59, 0) 62%),
		linear-gradient(158deg, #17452a 0%, #0f2f1d 58%, #0b2416 100%);
}
.pk-hgeo__lines {
	position: absolute;
	inset: 0;
	background: repeating-linear-gradient(135deg, rgba(255, 255, 255, .05) 0 2px, rgba(255, 255, 255, 0) 2px 12px);
}
.pk-front .pk-hgeo__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center center;
	display: block;
	transition: transform .5s var(--ease-entrance);
}
.pk-front .pk-hgeo__card:hover .pk-hgeo__img { transform: scale(1.03); }
.pk-hgeo__grad {
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(20, 32, 24, 0) 46%, rgba(20, 32, 24, .28) 68%, rgba(20, 32, 24, .72) 100%);
}

.pk-hgeo__name {
	position: absolute;
	left: 14px;
	right: 76px;
	bottom: 12px;
	display: inline-flex;
	align-items: center;
	gap: 6px;
	font-size: 17px;
	font-weight: var(--fw-semibold);
	letter-spacing: -.015em;
	line-height: 1.15;
	color: #fff;
	text-shadow: 0 1px 3px rgba(0, 0, 0, .35);
}
.pk-hgeo__name svg { flex: none; }
.pk-hgeo__count {
	position: absolute;
	right: 14px;
	bottom: 12px;
	padding: 3px 9px;
	border-radius: var(--pk-radius-pill);
	background: rgba(255, 255, 255, .94);
	font-size: var(--fs-ui-xs);
	font-weight: var(--fw-bold);
	color: var(--pk-green-dark);
}
.pk-hgeo__count--soon { background: rgba(255, 255, 255, .82); color: var(--pk-muted); }
/* Шеврон - только мобильный аккордеон. */
.pk-hgeo__chev { display: none; }

.pk-front .pk-hgeo__body { flex: 1; display: flex; flex-direction: column; padding: 12px 14px; }
.pk-front .pk-hgeo__inner { display: block; }
.pk-front .pk-hgeo__types {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 2px;
}
.pk-front .pk-hgeo__types li { margin: 0; }
.pk-front .pk-hgeo__types a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 8px;
	padding: 8px 10px;
	border-radius: var(--pk-radius-sm);
	font-size: var(--fs-ui-sm);
	color: var(--pk-ink-soft);
	text-decoration: none;
	box-sizing: border-box;
	transition: background var(--dur-base), color var(--dur-base);
}
.pk-front .pk-hgeo__types a:hover { background: var(--pk-green-soft); color: var(--pk-green-dark); }
.pk-front .pk-hgeo__types a span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pk-front .pk-hgeo__types a b {
	flex: none;
	font-size: var(--fs-ui-xs);
	font-weight: var(--fw-semibold);
	color: var(--pk-muted);
}
.pk-front .pk-hgeo__types a:hover b { color: var(--pk-green-dark); }

/* Город на подходе: та же карточка, но приглушённая и без единой ссылки. */
.pk-front .pk-hgeo__card--soon { background: var(--pk-bg-soft); }
.pk-front .pk-hgeo__card--soon:hover { border-color: var(--pk-border); box-shadow: none; transform: none; }
.pk-hgeo__soon {
	margin: 0;
	display: flex;
	align-items: flex-start;
	gap: 8px;
	font-size: var(--fs-ui-sm);
	line-height: 1.45;
	color: var(--pk-muted);
}
.pk-hgeo__soon svg { flex: none; margin-top: 2px; }

@media (max-width: 1100px) {
	.pk-front .pk-hgeo { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

/* Мобильный: карточки складываются в аккордеон строками (кадр 10). */
@media (max-width: 760px) {
	.pk-front .pk-hgeo { display: block; }
	.pk-front .pk-hgeo__card {
		display: block;
		border: 0;
		border-top: 1px solid var(--pk-border);
		border-radius: 0;
		background: none;
		overflow: visible;
	}
	.pk-front .pk-hgeo__card:first-child { border-top: 0; }
	.pk-front .pk-hgeo__card:hover { box-shadow: none; transform: none; border-color: transparent; }
	.pk-front .pk-hgeo__card--soon { background: none; }

	.pk-front .pk-hgeo__row {
		position: static;
		display: flex;
		align-items: center;
		gap: 12px;
		min-height: 56px;
		padding: 6px 2px;
		box-sizing: border-box;
	}
	.pk-front .pk-hgeo__media {
		width: 44px;
		height: 44px;
		flex: none;
		aspect-ratio: auto;
		border-radius: 50%;
	}
	.pk-front .pk-hgeo__card:hover .pk-hgeo__img { transform: none; }
	.pk-hgeo__grad { display: none; }

	.pk-hgeo__name {
		position: static;
		flex: 1;
		min-width: 0;
		font-size: var(--fs-body);
		font-weight: var(--fw-bold);
		letter-spacing: -.01em;
		color: var(--pk-text);
		text-shadow: none;
	}
	/* Булавка нужна только поверх фото: в строке рядом с миниатюрой она лишняя. */
	.pk-hgeo__name svg { display: none; }
	.pk-hgeo__count {
		position: static;
		flex: none;
		padding: 0;
		border-radius: 0;
		background: none;
		font-size: var(--fs-ui-sm);
		font-weight: var(--fw-medium);
		color: var(--pk-muted);
	}
	.pk-hgeo__count--soon { background: none; }
	.pk-hgeo__chev {
		display: inline-flex;
		flex: none;
		color: var(--pk-muted);
		transition: transform var(--dur-base) var(--ease-entrance);
	}
	.pk-hgeo__card.is-open .pk-hgeo__chev { transform: rotate(90deg); }

	/* Раскрытие сеткой 0fr/1fr: без замера высоты и без прыжка. */
	.pk-front .pk-hgeo__body {
		display: grid;
		grid-template-rows: 0fr;
		padding: 0 2px 0 56px;
		transition: grid-template-rows var(--dur-mid) var(--ease-entrance);
	}
	.pk-front .pk-hgeo__card.is-open .pk-hgeo__body { grid-template-rows: 1fr; }
	.pk-front .pk-hgeo__inner { overflow: hidden; min-height: 0; }
	.pk-front .pk-hgeo__types { padding-bottom: 10px; }
	.pk-front .pk-hgeo__types a { min-height: 44px; padding-left: 0; padding-right: 0; }
	.pk-hgeo__soon { padding: 0 0 12px; }

/* Без скрипта аккордеон раскрыт: список длиннее, но целиком рабочий. */
	.pk-front .pk-hgeo:not(.is-ready) .pk-hgeo__body { grid-template-rows: 1fr; }
}
