/*
 * pwa.css — только то, что относится к приложению:
 * нижняя панель, приглашение установить, уведомление об обновлении,
 * страница «нет интернета».
 *
 * Существующую вёрстку не меняем: нижняя панель по умолчанию появляется
 * только в установленном приложении (display-mode: standalone), в обычном
 * браузере ни один селектор ниже не срабатывает.
 */

/* =============== Экран загрузки приложения =============== */

/*
 * Показывается один раз за запуск приложения. Виден только когда <html>
 * помечен как ag-standalone и заставка ещё не была показана в этой сессии —
 * классы ставит инлайн-скрипт в <head> до первой отрисовки.
 *
 * Логотип неоновый на чёрном, поэтому фон здесь именно #000: подложка
 * картинки и фон экрана сливаются без видимого шва.
 */

.pwa-splash {
	display: none;
}

html.ag-standalone:not(.ag-splash-off) .pwa-splash {
	position: fixed;
	inset: 0;
	/* Выше шапки (100000) и мобильного меню (100001) — заставка перекрывает всё. */
	z-index: 100010;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 44px;
	background: var(--color-navy);
	opacity: 1;
	transition: opacity 0.45s ease;
	/*
	 * Страховка без участия JS: если скрипт почему-то не отработал, заставка
	 * всё равно уйдёт сама и не запрёт приложение на чёрном экране.
	 */
	animation: pwa-splash-failsafe 0.6s ease 8s forwards;
}

.pwa-splash.is-hidden {
	opacity: 0;
	pointer-events: none;
}

.pwa-splash__stage {
	position: relative;
	display: flex;
	align-items: center;
	justify-content: center;
}

/* Мягкое неоновое свечение под логотипом — медленно «дышит». */
.pwa-splash__glow {
	position: absolute;
	width: 128%;
	aspect-ratio: 1;
	border-radius: 50%;
	background:
		radial-gradient(circle at 38% 50%, rgba(72, 103, 191, 0.55), transparent 62%),
		radial-gradient(circle at 62% 50%, rgba(58, 86, 168, 0.55), transparent 62%);
	filter: blur(38px);
	opacity: 0.45;
	animation: pwa-splash-breathe 2.8s ease-in-out infinite alternate;
}

.pwa-splash__logo {
	position: relative;
	display: block;
	width: min(64vw, 340px);
	aspect-ratio: 482 / 224;
	background: url("../img/pwa/splash-logo.png") center / contain no-repeat;
	/*
	 * Картинка нарисована светлым по чёрному. В режиме screen чёрное
	 * становится прозрачным — подложка не режет свечение прямоугольником,
	 * а неон читается ярче.
	 */
	opacity: 0;
	transform: translateY(10px) scale(0.96);
	animation: pwa-splash-in 0.75s cubic-bezier(0.22, 0.7, 0.3, 1) forwards;
}

/* Тонкая полоса: по ней бежит короткий брендовый отрезок. */
.pwa-splash__bar {
	position: relative;
	width: 132px;
	height: 2px;
	overflow: hidden;
	background: rgba(255, 255, 255, 0.12);
	border-radius: var(--radius-pill);
	opacity: 0;
	animation: pwa-splash-fade 0.5s ease 0.35s forwards;
}

.pwa-splash__bar i {
	position: absolute;
	top: 0;
	left: 0;
	width: 42%;
	height: 100%;
	border-radius: inherit;
	background: linear-gradient(90deg, var(--color-brand-hover), var(--color-brand));
	animation: pwa-splash-sweep 1.25s cubic-bezier(0.65, 0, 0.35, 1) infinite;
}

@keyframes pwa-splash-failsafe {
	to {
		opacity: 0;
		visibility: hidden;
	}
}

@keyframes pwa-splash-in {
	to {
		opacity: 1;
		transform: translateY(0) scale(1);
	}
}

@keyframes pwa-splash-fade {
	to {
		opacity: 1;
	}
}

@keyframes pwa-splash-breathe {
	from {
		opacity: 0.32;
		transform: scale(0.94);
	}
	to {
		opacity: 0.7;
		transform: scale(1.06);
	}
}

@keyframes pwa-splash-sweep {
	from {
		transform: translateX(-105%);
	}
	to {
		transform: translateX(348%);
	}
}

/* Пользователь просил меньше движения — оставляем статичный логотип. */
@media (prefers-reduced-motion: reduce) {
	/* Анимацию-страховку (.pwa-splash) намеренно не трогаем. */
	.pwa-splash__logo,
	.pwa-splash__glow,
	.pwa-splash__bar,
	.pwa-splash__bar i {
		animation: none;
	}
	.pwa-splash__logo,
	.pwa-splash__bar {
		opacity: 1;
		transform: none;
	}
}

/* =============== Нижняя панель навигации =============== */

.ag-bottombar {
	display: none;
	position: fixed;
	left: 0;
	right: 0;
	bottom: 0;
	z-index: 98;
	align-items: stretch;
	background: var(--color-bg);
	border-top: 1px solid var(--color-border-soft);
	padding-bottom: env(safe-area-inset-bottom, 0px);
	box-shadow: 0 -2px 16px rgba(33, 26, 36, 0.08);
}

/* Приложение установлено — панель нужна. */
@media (display-mode: standalone) {
	.ag-bottombar {
		display: flex;
	}
}
@media (display-mode: fullscreen) {
	.ag-bottombar {
		display: flex;
	}
}
/* iOS отдаёт standalone через navigator.standalone — класс ставит pwa.js. */
html.ag-standalone .ag-bottombar {
	display: flex;
}

/* Режим «и на телефонах в браузере» — включается в настройках темы. */
@media (max-width: 700px) {
	.ag-bottombar--mobile {
		display: flex;
	}
}

.ag-bottombar__item {
	flex: 1 1 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 3px;
	min-width: 0;
	height: 58px;
	padding: 6px 2px;
	color: var(--color-text-muted);
	text-decoration: none;
	-webkit-tap-highlight-color: transparent;
	transition: color 0.18s ease;
}

.ag-bottombar__item:hover,
.ag-bottombar__item:focus-visible {
	color: var(--color-navy);
}

.ag-bottombar__item.is-active {
	color: var(--color-brand);
}

.ag-bottombar__ico {
	position: relative;
	display: block;
	width: 24px;
	height: 24px;
}

.ag-bottombar__icon {
	display: block;
	width: 24px;
	height: 24px;
}

.ag-bottombar__label {
	max-width: 100%;
	overflow: hidden;
	font-size: 11px;
	line-height: 1.1;
	letter-spacing: -0.01em;
	white-space: nowrap;
	text-overflow: ellipsis;
}

.ag-bottombar__count {
	position: absolute;
	top: -5px;
	left: 13px;
	min-width: 17px;
	height: 17px;
	padding: 0 4px;
	background: var(--color-brand);
	border-radius: var(--radius-pill);
	color: var(--color-text-invert);
	font-size: 10px;
	font-weight: var(--fw-medium);
	line-height: 17px;
	text-align: center;
}

.ag-bottombar__count[hidden] {
	display: none;
}

/*
 * Панель перекрывает низ страницы — добавляем отступ ровно там, где она
 * показана. Обычный сайт в браузере остаётся без изменений.
 */
@media (display-mode: standalone) {
	body {
		padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px));
	}
}
@media (display-mode: fullscreen) {
	body {
		padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px));
	}
}
html.ag-standalone body {
	padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px));
}
@media (max-width: 700px) {
	body:has(.ag-bottombar--mobile) {
		padding-bottom: calc(58px + env(safe-area-inset-bottom, 0px));
	}
}

/* Cookie-баннер и подсказки поднимаем над панелью. */
@media (display-mode: standalone) {
	.cookie-notice {
		bottom: calc(var(--space-12) + 58px + env(safe-area-inset-bottom, 0px));
	}
}
html.ag-standalone .cookie-notice {
	bottom: calc(var(--space-12) + 58px + env(safe-area-inset-bottom, 0px));
}

/* =============== Приглашение установить =============== */

.pwa-install {
	position: fixed;
	left: var(--space-24);
	right: var(--space-24);
	bottom: var(--space-24);
	/* Выше плавающего WhatsApp темы (.wa-float, z-index 950). */
	z-index: 960;
	display: flex;
	align-items: center;
	gap: var(--space-16);
	max-width: 640px;
	margin-inline: auto;
	padding: var(--space-16) 20px;
	background: var(--color-navy);
	color: var(--color-text-invert);
	/* Тонкая рамка: на тёмном подвале баннер иначе сливается с фоном. */
	border: 1px solid rgba(255, 255, 255, 0.14);
	border-radius: var(--radius-md);
	box-shadow: 0 12px 40px rgba(14, 21, 52, 0.45);
	transform: translateY(160%);
	transition: transform 0.35s ease;
}

.pwa-install.is-visible {
	transform: translateY(0);
}

.pwa-install[hidden] {
	display: none;
}

.pwa-install__icon {
	flex: none;
	width: 48px;
	height: 48px;
	border-radius: var(--radius-sm);
}

.pwa-install__body {
	flex: 1 1 auto;
	min-width: 0;
}

.pwa-install__title {
	margin: 0 0 2px;
	font-size: var(--fs-16);
	font-weight: var(--fw-medium);
	letter-spacing: normal;
}

.pwa-install__text {
	margin: 0;
	font-size: 13px;
	line-height: 1.4;
	color: rgba(255, 255, 255, 0.75);
}

.pwa-install__actions {
	flex: none;
	display: flex;
	align-items: center;
	gap: var(--space-8);
}

.pwa-install__btn {
	height: 40px;
	padding: 0 20px;
	background: var(--color-brand);
	border: 0;
	border-radius: var(--radius-pill);
	color: var(--color-text-invert);
	font-family: var(--font-base);
	font-weight: var(--fw-medium);
	font-size: var(--fs-14);
	letter-spacing: normal;
	cursor: pointer;
	transition: background-color 0.2s ease, color 0.2s ease;
}

.pwa-install__btn:hover {
	background: var(--color-bg);
	color: var(--color-text);
}

.pwa-install__btn[hidden] {
	display: none;
}

.pwa-install__later {
	height: 40px;
	padding: 0 var(--space-12);
	background: none;
	border: 0;
	color: rgba(255, 255, 255, 0.7);
	font-family: var(--font-base);
	font-size: var(--fs-14);
	cursor: pointer;
	transition: color 0.2s ease;
}

.pwa-install__later:hover {
	color: var(--color-text-invert);
}

@media (max-width: 700px) {
	.pwa-install {
		left: var(--space-12);
		right: var(--space-12);
		bottom: var(--space-12);
		flex-wrap: wrap;
		gap: var(--space-12);
		padding: var(--space-16);
	}
	.pwa-install__icon {
		width: 40px;
		height: 40px;
	}
	.pwa-install__actions {
		width: 100%;
	}
	.pwa-install__btn {
		flex: 1 1 auto;
	}
}

/* =============== Уведомление об обновлении =============== */

.pwa-toast {
	position: fixed;
	left: 50%;
	bottom: var(--space-24);
	z-index: 101;
	display: flex;
	align-items: center;
	gap: var(--space-16);
	/* По содержимому, но не шире экрана: иначе flex сжимает его в столбик. */
	width: max-content;
	max-width: calc(100% - var(--space-24) * 2);
	padding: var(--space-12) var(--space-16) var(--space-12) 20px;
	background: var(--color-navy);
	color: var(--color-text-invert);
	border-radius: var(--radius-pill);
	box-shadow: 0 10px 30px rgba(33, 26, 36, 0.3);
	transform: translate(-50%, 160%);
	transition: transform 0.35s ease;
}

.pwa-toast.is-visible {
	transform: translate(-50%, 0);
}

.pwa-toast__text {
	flex: 1 1 auto;
	font-size: var(--fs-14);
	line-height: 1.35;
	letter-spacing: normal;
}

.pwa-toast__btn {
	flex: none;
	height: 34px;
	padding: 0 var(--space-16);
	background: var(--color-brand);
	border: 0;
	border-radius: var(--radius-pill);
	color: var(--color-text-invert);
	font-family: var(--font-base);
	font-weight: var(--fw-medium);
	font-size: 13px;
	cursor: pointer;
}

.pwa-toast__btn:hover {
	background: var(--color-bg);
	color: var(--color-text);
}

html.ag-standalone .pwa-toast {
	bottom: calc(var(--space-16) + 58px + env(safe-area-inset-bottom, 0px));
}
@media (display-mode: standalone) {
	.pwa-toast {
		bottom: calc(var(--space-16) + 58px + env(safe-area-inset-bottom, 0px));
	}
}

/* =============== Страница «нет интернета» =============== */

/* Заголовок и текст выводит штатный тёмный hero, здесь — только низ. */
.pwa-offline {
	max-width: 560px;
	margin: 0 auto;
	padding: var(--space-48) var(--space-24) var(--space-64);
	text-align: center;
}

.pwa-offline__title {
	margin: 0 0 var(--space-24);
	font-size: var(--fs-40, 40px);
	font-weight: var(--fw-medium);
	line-height: var(--lh-tight);
}

.pwa-offline__hint {
	margin: 0 0 var(--space-32);
	font-size: var(--fs-14);
	line-height: 1.5;
	color: var(--color-text-muted);
}

.pwa-offline__icon {
	display: block;
	width: 88px;
	height: 88px;
	margin: 0 auto var(--space-24);
	color: var(--color-brand);
}



.pwa-offline__actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: var(--space-12);
}

.pwa-offline__btn {
	height: 48px;
	display: inline-flex;
	align-items: center;
	padding: 0 var(--space-32);
	background: var(--color-brand);
	border: 0;
	border-radius: var(--radius-pill);
	color: var(--color-text-invert);
	font-family: var(--font-base);
	font-weight: var(--fw-medium);
	font-size: var(--fs-16);
	letter-spacing: normal;
	text-decoration: none;
	cursor: pointer;
}

.pwa-offline__btn--ghost {
	background: var(--color-blue-50);
	color: var(--color-navy);
}

@media (max-width: 700px) {
	.pwa-offline {
		padding: var(--space-32) var(--space-16) var(--space-48);
	}
	.pwa-offline__title {
		font-size: var(--fs-24);
	}
}

/* =============== Кнопка установки (постоянная, справа снизу) =============== */

.pwa-fab {
	position: fixed;
	/* В одну линию с плавающим WhatsApp (.wa-float, круг 60px в углу):
	   встаём слева от него, по центру его высоты. */
	right: calc(var(--space-24) + 60px + var(--space-12));
	bottom: calc(var(--space-24) + 8px);
	z-index: 940;
	display: none;
}

/* Показываем, только когда установка возможна (класс ставит pwa.js). */
.pwa-fab.is-visible {
	display: block;
	animation: pwa-fab-in 0.35s ease both;
}

/* Уже установлено — кнопка не нужна ни в одном из режимов. */
html.ag-standalone .pwa-fab,
.pwa-fab[hidden] {
	display: none !important;
}
@media (display-mode: standalone) {
	.pwa-fab {
		display: none !important;
	}
}
@media (display-mode: fullscreen) {
	.pwa-fab {
		display: none !important;
	}
}

@keyframes pwa-fab-in {
	from {
		opacity: 0;
		transform: translateY(16px) scale(0.96);
	}
	to {
		opacity: 1;
		transform: none;
	}
}

.pwa-fab__btn {
	display: inline-flex;
	align-items: center;
	gap: var(--space-8);
	height: 44px;
	padding: 0 var(--space-16);
	background: var(--color-brand);
	border: 1px solid var(--color-bg);
	border-radius: var(--radius-pill);
	color: var(--color-text-invert);
	font-family: var(--font-base);
	font-weight: var(--fw-medium);
	font-size: var(--fs-14);
	letter-spacing: normal;
	white-space: nowrap;
	cursor: pointer;
	box-shadow: 0 10px 28px rgba(72, 103, 191, 0.4);
	transition: background-color 0.2s ease, color 0.2s ease, transform 0.2s ease;
}

.pwa-fab__btn:hover {
	background: var(--color-bg);
	color: var(--color-brand);
	transform: translateY(-2px);
}

.pwa-fab__btn:active {
	transform: translateY(0);
}

.pwa-fab__icon {
	flex: none;
	width: 18px;
	height: 18px;
}

/* Баннер установки и кнопка не должны налезать друг на друга. */
.pwa-fab.is-above-banner {
	bottom: calc(var(--space-24) + 96px);
}

/* Нижняя панель приложения — поднимаем кнопку над ней. */
html.ag-standalone .pwa-fab.is-visible {
	bottom: calc(var(--space-24) + 58px + env(safe-area-inset-bottom, 0px));
}

/* --- Адаптив: на телефоне широкая кнопка во всю ширину с текстом --- */
@media (max-width: 700px) {
	.pwa-fab {
		/* WhatsApp-круг 52px с отступом 16 — встаём слева от него,
		   на одной линии по центру круга. */
		left: auto;
		right: calc(16px + 52px + var(--space-12));
		bottom: calc(16px + 4px);
	}
	.pwa-fab.is-visible {
		display: flex;
	}
	.pwa-fab__btn {
		height: 44px;
		justify-content: center;
		padding: 0 var(--space-16);
		font-size: var(--fs-14);
	}
	.pwa-fab__btn:hover {
		transform: none;
	}
	.pwa-fab__icon {
		width: 18px;
		height: 18px;
	}
	/* Показан баннер (он во всю ширину поверх низа) — прячем кнопку,
	   чтобы не дублировать «Установить». */
	.pwa-fab.is-above-banner {
		display: none;
	}
	/* Мобильная нижняя панель в браузере, если включена в настройках. */
	body:has(.ag-bottombar--mobile) .pwa-fab {
		bottom: calc(var(--space-12) + 58px + env(safe-area-inset-bottom, 0px));
	}
	body:has(.ag-bottombar--mobile) .pwa-fab.is-above-banner {
		bottom: calc(var(--space-12) + 58px + 132px + env(safe-area-inset-bottom, 0px));
	}
}

/* Плавающий WhatsApp темы (.wa-float) в приложении поднимаем над нижней
   панелью, чтобы не накрывал таб «Кабинет». */
html.ag-standalone .wa-float {
	bottom: calc(58px + var(--space-12) + env(safe-area-inset-bottom, 0px));
}
@media (display-mode: standalone) {
	.wa-float {
		bottom: calc(58px + var(--space-12) + env(safe-area-inset-bottom, 0px));
	}
}
@media (display-mode: fullscreen) {
	.wa-float {
		bottom: calc(58px + var(--space-12) + env(safe-area-inset-bottom, 0px));
	}
}

/* Каталог фото обновлён 2026-09-02 — строка меняет версию оболочки,
   чтобы у установленных приложений сбросился кеш картинок. */
