setEditingConference(null)}>
diff --git a/frontend/src/pages/ProfilePage.tsx b/frontend/src/pages/ProfilePage.tsx
index b3320ef..ecf102f 100644
--- a/frontend/src/pages/ProfilePage.tsx
+++ b/frontend/src/pages/ProfilePage.tsx
@@ -2,6 +2,7 @@ import { useRef, useState, type FormEvent } from 'react'
import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'
import { Trash2, Upload } from 'lucide-react'
import { ShellTopbar } from '@/components/layout/ShellTopbar'
+import { AppFooter } from '@/components/layout/AppFooter'
import { Avatar } from '@/components/ui/Avatar'
import { Select } from '@/components/ui/Select'
import { useToast } from '@/components/ui/ToastProvider'
@@ -271,6 +272,7 @@ export function ProfilePage() {
+
)
}
diff --git a/frontend/src/styles/admin.css b/frontend/src/styles/admin.css
index 14dcc04..171b7b3 100644
--- a/frontend/src/styles/admin.css
+++ b/frontend/src/styles/admin.css
@@ -168,10 +168,8 @@
.admin-page .settings-grid { grid-template-columns: 1fr; }
}
-/* ---------- Футер админки ----------
- Версия инстанса из `/api/health` (см. AdminPage.tsx) — до появления поля
- на backend строка сокращается до одного «VidConf» без версии. */
-.admin-page .admin-footer { margin-top: var(--space-6); padding-top: var(--space-4); border-top: 1px solid var(--color-border); font: var(--text-caption); color: var(--color-ink-400); text-align: center; }
+/* Футер админки (`.admin-footer`) убран в 0.0.6: вместо него общий для всех
+ страниц компонент `AppFooter` (см. `styles/footer.css`). */
/* =====================================================================
* Тёмная тема: заливка var(--color-ink-700) (индиго) сочеталась с жёстким
diff --git a/frontend/src/styles/footer.css b/frontend/src/styles/footer.css
new file mode 100644
index 0000000..7d3d8ab
--- /dev/null
+++ b/frontend/src/styles/footer.css
@@ -0,0 +1,38 @@
+/*
+ * VidConf — общий футер приложения (см. `components/layout/AppFooter.tsx`).
+ *
+ * Файл импортируется самим компонентом, а не страницами: футер стоит в четырёх
+ * разных раскладках (`page-shell`, `AuthLayout`, `join-shell`, `lobby-shell`),
+ * и таскать импорт по всем страницам смысла нет.
+ *
+ * Футер — обычный блок в потоке (не `position: fixed`), поэтому контент он
+ * не перекрывает ни на какой высоте экрана.
+ */
+
+.app-footer {
+ padding: var(--space-5) var(--space-4);
+ font: var(--text-caption);
+ color: var(--color-ink-400);
+ text-align: center;
+}
+.app-footer a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
+.app-footer a:hover { color: var(--color-ink-700); }
+
+/* Оболочка страниц (`page-shell`): выравниваем футер по ширине контента
+ (`main.page-main` — max-width 1440 + боковые отступы) и отделяем линией,
+ как это делал прежний футер админки. */
+.page-shell .app-footer {
+ max-width: 1440px;
+ margin: 0 auto;
+ padding: var(--space-4) var(--space-8) var(--space-6);
+ border-top: 1px solid var(--color-border);
+}
+
+/* Экраны auth: футер — последний элемент правой колонки с формой, поэтому
+ ограничиваем его шириной самой формы (`.screen-block`, 440px), иначе
+ центрированная строка «уезжала» бы вправо от неё. */
+.form-panel .app-footer { max-width: 440px; width: 100%; padding-inline: 0; margin-top: var(--space-8); }
+
+@media (max-width: 640px) {
+ .page-shell .app-footer { padding: var(--space-4) var(--space-4) var(--space-5); }
+}