From c286ba79039f71c99a89390988f454694e4985ae Mon Sep 17 00:00:00 2001 From: Andrey Date: Mon, 14 Sep 2026 07:31:50 +0300 Subject: [PATCH] =?UTF-8?q?:lipstick:=20fix(ui):=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=D1=82=D0=B8=D0=BF=20=D0=B1=D0=B5=D0=B7=20=D0=BE=D0=B1?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D0=BA=D0=B8,=20=D0=BA=D1=80=D1=83=D0=BF?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D1=87?= =?UTF-8?q?=D0=B8=D0=BA=D0=B8,=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D1=8C=20=C2=AB=D0=A0=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D0=B5=D1=82?= =?UTF-8?q?=20=D0=BD=D0=B0=20Chatballs=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Логотип организации в сайдбаре рисовался с рамкой и подложкой — снято, знак стоит на прозрачном фоне. Загрузчик портала до прихода манифеста и темы появлялся в левом верхнем углу и только потом прыгал в центр: его стиль лежал в CSS портала, а этот чанк грузится лениво, и первый кадр шёл без стилей. Стиль перенесён в общий state.css, слой фиксирован на весь экран и центрирован независимо от отступов документа. Загрузчик системы на экране входа в сессию и загрузчик портала увеличены. В футере всех шаблонов портала — подпись «Работает на Chatballs» со ссылкой на chatballs.ru. Co-Authored-By: Claude Fable 5.1 --- .../features/help-center/HelpCenterApp.tsx | 2 +- .../src/features/help-center/HelpLayout.tsx | 16 ++++++---- .../features/help-center/styles-layout.css | 29 +++++++++++++++---- .../help-center/styles-responsive.css | 6 +++- apps/internal-ui/src/i18n/en.ts | 1 + apps/internal-ui/src/i18n/ru.ts | 1 + apps/internal-ui/src/layout/styles.css | 3 +- apps/internal-ui/src/main.tsx | 4 +-- apps/internal-ui/src/shared/state.css | 14 +++++++++ apps/internal-ui/src/shared/ui.tsx | 2 +- 10 files changed, 61 insertions(+), 17 deletions(-) diff --git a/apps/internal-ui/src/features/help-center/HelpCenterApp.tsx b/apps/internal-ui/src/features/help-center/HelpCenterApp.tsx index 549c3aa..9fe3ba4 100644 --- a/apps/internal-ui/src/features/help-center/HelpCenterApp.tsx +++ b/apps/internal-ui/src/features/help-center/HelpCenterApp.tsx @@ -64,7 +64,7 @@ export function HelpCenterApp() { ); } if (!manifest || !themeReady) { - return
; + return
; } return route.articleSlug ? diff --git a/apps/internal-ui/src/features/help-center/HelpLayout.tsx b/apps/internal-ui/src/features/help-center/HelpLayout.tsx index 57532bb..333fc88 100644 --- a/apps/internal-ui/src/features/help-center/HelpLayout.tsx +++ b/apps/internal-ui/src/features/help-center/HelpLayout.tsx @@ -42,11 +42,17 @@ export function HelpLayout({
{children}
{portal.webWidgetKey && } diff --git a/apps/internal-ui/src/features/help-center/styles-layout.css b/apps/internal-ui/src/features/help-center/styles-layout.css index 8d2a4b1..eb4aabe 100644 --- a/apps/internal-ui/src/features/help-center/styles-layout.css +++ b/apps/internal-ui/src/features/help-center/styles-layout.css @@ -153,17 +153,37 @@ html.help-center-document body { } .help-footer { - display: flex; + display: grid; width: min(1024px, calc(100% - 48px)); margin: 80px auto 0; padding: 34px 0 42px; - align-items: center; - justify-content: space-between; + gap: 18px; border-top: 1px solid var(--help-line-soft); color: var(--help-text-muted); font-size: 14px; } +.help-footer-row { + display: flex; + align-items: center; + justify-content: space-between; +} + +.help-footer-powered { + font-size: 12px; + opacity: 0.8; +} + +.help-footer-powered a { + color: inherit; + text-decoration: underline; + text-underline-offset: 2px; +} + +.help-footer-powered a:hover { + color: var(--help-ink); +} + .help-footer-brand { gap: 9px; font-size: 16px; @@ -256,8 +276,7 @@ html.help-center-document body { color: var(--help-text-muted); } -.help-fatal, -.help-boot-loading { +.help-fatal { display: grid; min-height: 100vh; place-content: center; diff --git a/apps/internal-ui/src/features/help-center/styles-responsive.css b/apps/internal-ui/src/features/help-center/styles-responsive.css index 383a975..b1ce20a 100644 --- a/apps/internal-ui/src/features/help-center/styles-responsive.css +++ b/apps/internal-ui/src/features/help-center/styles-responsive.css @@ -115,10 +115,14 @@ } .help-footer { + gap: 14px; + margin-top: 54px; + } + + .help-footer-row { display: grid; justify-content: start; gap: 12px; - margin-top: 54px; } .help-support-launcher { diff --git a/apps/internal-ui/src/i18n/en.ts b/apps/internal-ui/src/i18n/en.ts index c1cc0e6..e2c8c05 100644 --- a/apps/internal-ui/src/i18n/en.ts +++ b/apps/internal-ui/src/i18n/en.ts @@ -905,6 +905,7 @@ export const en: Record = { "portals.invalid_yaml": "Invalid YAML", "portals.ip_of_installation": "{value} · this installation's IP", "portals.knowledge_base_support": "Knowledge base and support", + "portals.powered_by": "Powered by", "portals.language": "Language", "portals.language_2": "Language:", "portals.language_3": "LANGUAGE", diff --git a/apps/internal-ui/src/i18n/ru.ts b/apps/internal-ui/src/i18n/ru.ts index 64ae37f..b161a57 100644 --- a/apps/internal-ui/src/i18n/ru.ts +++ b/apps/internal-ui/src/i18n/ru.ts @@ -906,6 +906,7 @@ export const ru = { "portals.invalid_yaml": "Невалидный YAML", "portals.ip_of_installation": "{value} · IP этой установки", "portals.knowledge_base_support": "База знаний и поддержка", + "portals.powered_by": "Работает на", "portals.language": "Язык", "portals.language_2": "Язык:", "portals.language_3": "ЯЗЫК", diff --git a/apps/internal-ui/src/layout/styles.css b/apps/internal-ui/src/layout/styles.css index 9d25db4..e7487e2 100644 --- a/apps/internal-ui/src/layout/styles.css +++ b/apps/internal-ui/src/layout/styles.css @@ -266,8 +266,7 @@ .hub-brand-mark.has-logo { overflow: hidden; color: inherit; - background: var(--surface-card); - border: 1px solid var(--n-7); + background: transparent; } .hub-brand-mark img { diff --git a/apps/internal-ui/src/main.tsx b/apps/internal-ui/src/main.tsx index e584dde..eeadb93 100644 --- a/apps/internal-ui/src/main.tsx +++ b/apps/internal-ui/src/main.tsx @@ -29,10 +29,10 @@ function SurfaceApp() { }, [surface]); if (surface === "loading") { - return
; + return
; } return surface === "help" - ? }> + ? }> : ; } diff --git a/apps/internal-ui/src/shared/state.css b/apps/internal-ui/src/shared/state.css index 3e1f3ea..c244080 100644 --- a/apps/internal-ui/src/shared/state.css +++ b/apps/internal-ui/src/shared/state.css @@ -15,3 +15,17 @@ color: var(--n-3); font-size: 13px; } + +/* Загрузчик портала до прихода манифеста и темы. Живёт в общем CSS, а не в + чанке портала: чанк грузится лениво, и первый кадр иначе рисуется без + стилей. Фиксированный слой на весь экран — центр не зависит от отступов + и высоты документа. */ +.help-boot-loading { + position: fixed; + inset: 0; + display: grid; + place-items: center; + margin: 0; + background: var(--help-bg, var(--surface-page)); + color: var(--help-ink, var(--text-body)); +} diff --git a/apps/internal-ui/src/shared/ui.tsx b/apps/internal-ui/src/shared/ui.tsx index 9854aba..18fbde0 100644 --- a/apps/internal-ui/src/shared/ui.tsx +++ b/apps/internal-ui/src/shared/ui.tsx @@ -108,7 +108,7 @@ export function LoadingState({ variant = "page" }: { variant?: "page" | "inline" } export function LoadingScreen() { - return
; + return
; } export function ErrorScreen({ retry }: { retry: () => void }) {