diff --git a/docs/COMPONENTS.md b/docs/COMPONENTS.md
index 3bcbd58..23f27b7 100644
--- a/docs/COMPONENTS.md
+++ b/docs/COMPONENTS.md
@@ -246,6 +246,11 @@ setup-команды, сохранение, API и права принадлеж
`SettingsCard` фиксирует нейтральную структуру админской группы: eyebrow/title/description/actions/body. `Switch` покрывает компактное включение/видимость внутри таких групп. Данные секции, сохранение и права остаются в consumer.
+Для компактных сообщений о результате и пустых состояний `SettingsCard align="center"`
+центрирует содержимое по горизонтали и вертикали. Пустой body не создаёт
+асимметричный нижний отступ. Обычные группы настроек сохраняют `align="start"`;
+вариант не задаёт высоту и не меняет токены темы.
+
## AdminNavigationPanel
Левая выезжающая панель Hub/Launcher. Библиотека владеет оболочкой `352 px`, радиусом `21.6 px`, внутренними отступами, full-bleed context/navigation pills, круглыми icon surfaces и анимацией появления. Приложение передаёт workspace/company, маршруты, active id и footer identity.
diff --git a/packages/ui-core/styles.css b/packages/ui-core/styles.css
index 46b4ea7..869d011 100644
--- a/packages/ui-core/styles.css
+++ b/packages/ui-core/styles.css
@@ -608,6 +608,21 @@ textarea.nodedc-field__control {
gap: 0.8rem;
}
+.nodedc-settings-card[data-align="center"] {
+ align-content: center;
+ text-align: center;
+}
+
+.nodedc-settings-card[data-align="center"] > .nodedc-settings-card__head {
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+}
+
+.nodedc-settings-card[data-align="center"] > .nodedc-settings-card__body {
+ justify-items: center;
+}
+
.nodedc-switch {
display: inline-flex;
width: max-content;
diff --git a/packages/ui-react/src/Settings.tsx b/packages/ui-react/src/Settings.tsx
index 7db9f56..54aa13f 100644
--- a/packages/ui-react/src/Settings.tsx
+++ b/packages/ui-react/src/Settings.tsx
@@ -6,11 +6,12 @@ export interface SettingsCardProps extends Omit
, "ti
title: ReactNode;
description?: ReactNode;
actions?: ReactNode;
+ align?: "start" | "center";
}
-export function SettingsCard({ eyebrow, title, description, actions, children, className, ...props }: SettingsCardProps) {
+export function SettingsCard({ eyebrow, title, description, actions, children, align = "start", className, ...props }: SettingsCardProps) {
return (
-
+
{eyebrow ? {eyebrow} : null}
@@ -19,7 +20,7 @@ export function SettingsCard({ eyebrow, title, description, actions, children, c
{actions ? {actions}
: null}
- {children}
+ {align === "center" && (children === undefined || children === null || children === false) ? null : {children}
}
);
}
diff --git a/registry/components.json b/registry/components.json
index b29c2f5..7761647 100644
--- a/registry/components.json
+++ b/registry/components.json
@@ -445,6 +445,7 @@
"summary": "Neutral administration group with title metadata, actions, content and a compact binary switch.",
"rules": [
"The card owns grouping geometry but not product form schemas.",
+ "Use align=center for compact result or empty messages: center the content on both axes and omit an empty body. The default start layout remains unchanged.",
"Section and empty-state titles use the compact md token; descriptions use sm. Page/window title sizes and browser heading defaults are forbidden inside cards.",
"Use Switch for compact visibility/enable states; use Checker for the Engine inspector treatment."
]