diff --git a/docs/TZ.md b/docs/TZ.md
index 8e31104..ebd6b05 100644
--- a/docs/TZ.md
+++ b/docs/TZ.md
@@ -4,7 +4,7 @@
| | |
|---|---|
-| Версия ТЗ | 0.54 |
+| Версия ТЗ | 0.55 |
| Дата | 2026-10-09 |
| Статус | На обсуждении |
@@ -511,10 +511,13 @@
отозвать — при блокировке/выходе доступ закрывается на стороне SSO; у gntodo
webhook отзывает только MCP-токены.
-### 3.17. Экран входа (0.38)
+### 3.17. Экран входа (0.38, карточка — 0.55)
-- Отдельный маршрут `/login` вне навигационной оболочки: логотип, название и
- единственная кнопка «Войти» — инициация SSO-флоу (`/auth/login` с `return_to`).
+- Отдельный маршрут `/login` вне навигационной оболочки: **карточка кита**
+ (`GnCard`, 460px) с логотипом, названием и единственной кнопкой «Войти» —
+ инициация SSO-флоу (`/auth/login` с `return_to`). Пока `/auth/me` не ответил,
+ в карточке только лого и лоадер — кнопка не вспыхивает перед редиректом уже
+ залогиненного; тот же вид, что на экране входа gnexus-creds.
- Не залогиненный пользователь направляется на экран входа с любого маршрута
(`/auth/me` → 401); после логина возвращается на исходный адрес. Истёкшая
сессия в API/SSE-коде тоже ведёт на `/login`, а не на бэкендовый SSO-флоу.
diff --git a/frontend/src/views/LoginView.vue b/frontend/src/views/LoginView.vue
index 048578c..4d05dcc 100644
--- a/frontend/src/views/LoginView.vue
+++ b/frontend/src/views/LoginView.vue
@@ -1,18 +1,23 @@
-
-
-
GNexus Tasks
-
{{ t('login.subtitle') }}
-
- {{ t('login.signIn') }}
-
-
+
+
+
+
+
GNexus Tasks
+
{{ t('login.subtitle') }}
+
+ {{ t('login.signIn') }}
+
+
+
+
+
@@ -56,17 +70,23 @@
display: flex;
align-items: center;
justify-content: center;
- padding: 1rem;
+ padding: 1.5rem;
}
.login-card {
+ /* карточка кита: width: max-content / max-width: 340px — снимаем, задаём
+ размер экрана входа (как у китовой .login-card: 460px) */
+ width: 100%;
+ max-width: 460px;
+ min-width: 0;
+ padding: 20px;
+ text-align: center;
+}
+/* колонка содержимого: внутри карточки кита своего отступа достаточно */
+.login-inner {
display: flex;
flex-direction: column;
align-items: center;
gap: 1rem;
- padding: 2.5rem 3rem;
- /* карточка кита: width: max-content / max-width: 340px сброшены — центр сама */
- max-width: 100%;
- width: auto;
}
.login-logo {
width: 72px;
@@ -77,12 +97,20 @@
font-size: 1.25rem;
}
.login-subtitle {
- margin: 0 0 1.25rem;
+ margin: 0;
/* приглушённый текст в цвет .identity-meta кита */
color: #787c99;
}
.login-btn {
+ margin-top: 0.25rem;
font-size: 1rem;
padding: 0.75rem 2rem;
}
+/* узкий экран: «ВОЙТИ ЧЕРЕЗ GNEXUS» в одну строку не влезает при 16px */
+@media (max-width: 420px) {
+ .login-btn {
+ font-size: 0.875rem;
+ padding: 0.75rem 1rem;
+ }
+}
\ No newline at end of file