@rt-tools/ui-kit-v2 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/README.md +71 -0
  2. package/fesm2022/rt-tools-ui-kit-v2.mjs +166 -166
  3. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  4. package/package.json +1 -1
  5. package/rt-tools-ui-kit-v2-0.6.0.tgz +0 -0
  6. package/src/lib/components/aside/_rt-aside-overlay.scss +73 -71
  7. package/src/lib/components/aside/footer/rt-aside-footer.component.scss +20 -16
  8. package/src/lib/components/aside/header/rt-aside-header.component.scss +72 -70
  9. package/src/lib/components/aside/rt-aside.component.scss +107 -105
  10. package/src/lib/components/aside/unsaved-dialog/rt-aside-unsaved-dialog.component.scss +33 -31
  11. package/src/lib/components/aside-section/rt-aside-section.component.scss +27 -23
  12. package/src/lib/components/autocomplete/rt-autocomplete.component.scss +124 -118
  13. package/src/lib/components/bar-list/rt-bar-list.component.scss +85 -81
  14. package/src/lib/components/bottom-sheet/rt-bottom-sheet.component.scss +64 -57
  15. package/src/lib/components/button/rt-button.directive.scss +319 -280
  16. package/src/lib/components/calendar/rt-calendar.component.scss +106 -102
  17. package/src/lib/components/card/rt-card.component.scss +53 -45
  18. package/src/lib/components/chat/rt-chat.component.scss +312 -306
  19. package/src/lib/components/checkbox/rt-checkbox.component.scss +61 -54
  20. package/src/lib/components/collapsible-text/rt-collapsible-text.component.scss +36 -34
  21. package/src/lib/components/confirm-popover/rt-confirm-popover.component.scss +36 -30
  22. package/src/lib/components/container/rt-container.component.scss +91 -87
  23. package/src/lib/components/counter/rt-counter.component.scss +14 -12
  24. package/src/lib/components/counter-row/rt-counter-row.component.scss +31 -27
  25. package/src/lib/components/date-picker/rt-date-picker.component.scss +73 -71
  26. package/src/lib/components/delta-view/rt-delta-view.component.scss +27 -25
  27. package/src/lib/components/detail-list/rt-detail-list.component.scss +8 -6
  28. package/src/lib/components/detail-list/rt-detail-row.component.scss +18 -16
  29. package/src/lib/components/dialog/footer/rt-dialog-footer.component.scss +19 -17
  30. package/src/lib/components/dialog/header/rt-dialog-header.component.scss +27 -25
  31. package/src/lib/components/dialog/rt-dialog.component.scss +59 -56
  32. package/src/lib/components/download-link/rt-download-link.component.scss +32 -27
  33. package/src/lib/components/empty-state/rt-empty-state.component.scss +50 -46
  34. package/src/lib/components/field/rt-field.component.scss +63 -61
  35. package/src/lib/components/file-card/rt-file-card.component.scss +84 -78
  36. package/src/lib/components/file-drop/rt-file-drop.component.scss +83 -77
  37. package/src/lib/components/file-input/rt-file-input.component.scss +20 -18
  38. package/src/lib/components/file-list/rt-file-list.component.scss +9 -7
  39. package/src/lib/components/filter-control/rt-filter-control.component.scss +16 -14
  40. package/src/lib/components/header/rt-header.component.scss +61 -55
  41. package/src/lib/components/icon/rt-icon.component.scss +14 -12
  42. package/src/lib/components/icon-button/CONTEXT.md +4 -2
  43. package/src/lib/components/icon-button/rt-icon-button.component.scss +128 -112
  44. package/src/lib/components/info-item/rt-info-item.component.scss +38 -36
  45. package/src/lib/components/input/rt-input.component.scss +102 -98
  46. package/src/lib/components/input-number/rt-input-number.component.scss +84 -82
  47. package/src/lib/components/live-badge/rt-live-badge.component.scss +27 -23
  48. package/src/lib/components/logo/rt-logo.component.scss +54 -52
  49. package/src/lib/components/menu/rt-menu-confirm-dialog.component.scss +30 -28
  50. package/src/lib/components/menu/rt-menu-item.component.scss +47 -42
  51. package/src/lib/components/menu/rt-menu.component.scss +23 -15
  52. package/src/lib/components/message/rt-message.component.scss +53 -49
  53. package/src/lib/components/message-composer/rt-message-composer.component.scss +55 -49
  54. package/src/lib/components/money-list/rt-money-list.component.scss +13 -9
  55. package/src/lib/components/money-list/rt-money-row.component.scss +23 -19
  56. package/src/lib/components/multiselect/rt-multiselect.component.scss +169 -161
  57. package/src/lib/components/night-grid/rt-night-grid.component.scss +47 -42
  58. package/src/lib/components/note/rt-note.component.scss +15 -11
  59. package/src/lib/components/notifications-bell/rt-notifications-bell.component.scss +34 -27
  60. package/src/lib/components/page-header/rt-page-header-mobile.scss +142 -134
  61. package/src/lib/components/page-header/rt-page-header-submenu.scss +130 -123
  62. package/src/lib/components/page-header/rt-page-header.component.scss +221 -210
  63. package/src/lib/components/pagination/rt-pagination.component.scss +88 -81
  64. package/src/lib/components/photo-viewer/rt-photo-viewer.component.scss +109 -105
  65. package/src/lib/components/rich-editor/rt-rich-editor.component.scss +63 -59
  66. package/src/lib/components/section-nav/rt-section-nav.component.scss +53 -47
  67. package/src/lib/components/select/rt-select.component.scss +146 -138
  68. package/src/lib/components/skeleton/rt-skeleton.component.scss +50 -41
  69. package/src/lib/components/skeleton-wrapper/rt-skeleton-wrapper.component.scss +8 -6
  70. package/src/lib/components/spinner/rt-spinner.component.scss +35 -32
  71. package/src/lib/components/split-button/rt-split-button.component.scss +74 -62
  72. package/src/lib/components/stat-tile/rt-stat-tile.component.scss +95 -91
  73. package/src/lib/components/stepper/rt-stepper.component.scss +107 -101
  74. package/src/lib/components/table/copy-cell/rt-copy-cell.component.scss +34 -30
  75. package/src/lib/components/table/rt-table.component.scss +260 -252
  76. package/src/lib/components/table/settings-aside/rt-table-settings-aside.component.scss +7 -5
  77. package/src/lib/components/table/settings-panel/rt-table-settings-panel.component.scss +71 -61
  78. package/src/lib/components/table/sort-header/rt-table-sort-header.component.scss +31 -29
  79. package/src/lib/components/tabs/rt-tabs.component.scss +184 -175
  80. package/src/lib/components/tag/rt-tag.component.scss +97 -92
  81. package/src/lib/components/textarea/rt-textarea.component.scss +62 -60
  82. package/src/lib/components/theme-toggle/rt-theme-toggle.component.scss +7 -5
  83. package/src/lib/components/thread-list/rt-thread-list.component.scss +221 -212
  84. package/src/lib/components/timeline/rt-timeline.component.scss +82 -76
  85. package/src/lib/components/toast/rt-toast.component.scss +169 -160
  86. package/src/lib/components/toast/rt-toaster.component.scss +37 -35
  87. package/src/lib/components/toggle-button-group/rt-toggle-button-group.component.scss +129 -122
  88. package/src/lib/components/toggle-switch/rt-toggle-switch.component.scss +97 -91
  89. package/src/lib/components/toolbar/rt-toolbar.component.scss +56 -54
  90. package/src/lib/components/tooltip/rt-tooltip.component.scss +20 -15
  91. package/src/lib/components/welcome-dialog/rt-welcome-dialog.component.scss +46 -44
  92. package/src/lib/components/workspace/rt-workspace.component.scss +139 -131
  93. package/src/lib/components/workspace-details/rt-workspace-details.component.scss +105 -101
  94. package/src/styles/_index.scss +4 -0
  95. package/src/styles/_layers.scss +22 -0
  96. package/src/styles/_login.scss +87 -85
  97. package/src/styles/_mixins.scss +1 -1
  98. package/src/styles/_primitives.scss +126 -67
  99. package/src/styles/_scrollbar.scss +21 -19
  100. package/src/styles/_semantic.scss +140 -56
  101. package/src/styles/_theme-dark.scss +60 -27
  102. package/styles/tokens.css +628 -408
  103. package/rt-tools-ui-kit-v2-0.5.0.tgz +0 -0
@@ -16,39 +16,118 @@
16
16
  --rt-color-bg-overlay: var(--rt-overlay-black-50);
17
17
  --rt-color-bg-inverse: var(--rt-neutral-900);
18
18
 
19
+ /* Подложка обвязки — шапка и боковая навигация. Отдельно от bg-inverse: тот
20
+ нейтральный и работает под перевёрнутым текстом, а этот синеватый и в обеих
21
+ темах один. */
22
+ --rt-color-bg-nav: var(--rt-navy-900); /* rt-theme-shared: обвязка тёмная в обеих темах */
23
+
19
24
  /* Text */
20
25
  --rt-color-text-primary: var(--rt-neutral-900);
21
- --rt-color-text-muted: var(--rt-neutral-500);
26
+
27
+ /* Ступень 600, а не 500: приглушённый текст обязан брать порог, а после
28
+ пересчёта ряда самая светлая ступень, которая его берёт, — шестисотая.
29
+ Прежде эту роль держала off-grid ступень 510, заведённая ровно под неё. */
30
+ --rt-color-text-muted: var(--rt-neutral-600);
22
31
  --rt-color-text-disabled: var(--rt-neutral-400);
23
32
  --rt-color-text-inverse: var(--rt-neutral-0);
24
- --rt-color-text-link: var(--rt-blue-500);
25
- --rt-color-text-link-hover: var(--rt-blue-600);
33
+ --rt-color-text-link: var(--rt-brand-500);
34
+ --rt-color-text-link-hover: var(--rt-brand-600);
26
35
 
27
36
  /* Border */
28
37
  --rt-color-border-default: var(--rt-neutral-200);
29
38
  --rt-color-border-strong: var(--rt-neutral-300);
30
39
  --rt-color-border-subtle: var(--rt-neutral-200);
31
- --rt-color-border-focus: var(--rt-blue-500);
32
-
33
- /* Action */
34
- --rt-color-action-primary: var(--rt-blue-500);
35
- --rt-color-action-primary-hover: var(--rt-blue-600);
36
- --rt-color-action-primary-subtle: var(--rt-overlay-blue-8);
40
+ --rt-color-border-focus: var(--rt-brand-500);
41
+
42
+ /* Action — роли действия.
43
+
44
+ Роль это пятёрка: подложка, наведение, нажатие, подпись на них и цвет самой
45
+ роли на поверхности. Кнопка берёт роль целиком и своих цветов не знает вовсе,
46
+ поэтому смена роли — одна строка здесь, а не правка стилей компонента.
47
+ Наведение и нажатие — соседние ступени своей шкалы; подпись светлая у всех
48
+ ролей, потому что все подложки тёмные.
49
+
50
+ Пятый член — `-on-surface` — красит безфоновые оформления: текстовое и
51
+ обводочное берут им подпись и рамку. Отдельным именем, а не подложкой роли:
52
+ подложка вправе быть поверхностью, и у вторичной роли на графите она ею
53
+ становится — подпись, взятая из подложки, легла бы сама на себя. У пяти ролей
54
+ цвет тот же, что и у подложки, и это записано ссылкой, а не повтором
55
+ значения. */
56
+ --rt-color-action-primary: var(--rt-brand-500); /* rt-theme-shared: цвет марки один в обеих темах */
57
+ --rt-color-action-primary-hover: var(--rt-brand-600); /* rt-theme-shared: цвет марки один в обеих темах */
58
+ --rt-color-action-primary-active: var(--rt-brand-700); /* rt-theme-shared: цвет марки один в обеих темах */
59
+ --rt-color-action-primary-subtle: var(--rt-overlay-brand-8);
37
60
 
38
61
  /* Focus-ring tint — насыщеннее subtle, для visible 3px outline. */
39
- --rt-color-action-primary-soft: var(--rt-overlay-blue-24);
40
- --rt-color-action-on-primary: var(--rt-neutral-0);
41
- --rt-color-action-secondary: var(--rt-neutral-200);
42
- --rt-color-action-on-secondary: var(--rt-neutral-900);
62
+ --rt-color-action-primary-soft: var(--rt-overlay-brand-24);
63
+ --rt-color-action-on-primary: var(--rt-neutral-0); /* rt-theme-shared: подпись на действии марки светлая в обеих темах */
64
+ --rt-color-action-primary-on-surface: var(--rt-color-action-primary);
65
+
66
+ /* Вторичное действие — единственная роль без своего цвета: она нейтральна и на
67
+ графите разворачивается в подложку поверхности, поэтому тёмная тема отвечает
68
+ на всю её тройку. По той же причине пятый член у неё свой: подложкой роли на
69
+ графите красить подпись нечем. */
70
+ --rt-color-action-secondary: var(--rt-neutral-600);
71
+ --rt-color-action-secondary-hover: var(--rt-neutral-700);
72
+ --rt-color-action-secondary-active: var(--rt-neutral-800);
73
+ --rt-color-action-on-secondary: var(--rt-neutral-0);
74
+ --rt-color-action-secondary-on-surface: var(--rt-neutral-600);
75
+ --rt-color-action-success: var(--rt-success-500); /* rt-theme-shared: цвет роли один в обеих темах */
76
+ --rt-color-action-success-hover: var(--rt-success-600); /* rt-theme-shared: цвет роли один в обеих темах */
77
+ --rt-color-action-success-active: var(--rt-success-700); /* rt-theme-shared: цвет роли один в обеих темах */
78
+ --rt-color-action-on-success: var(--rt-neutral-0); /* rt-theme-shared: подпись на цветной подложке светлая в обеих темах */
79
+ --rt-color-action-success-on-surface: var(--rt-color-action-success);
80
+ --rt-color-action-warning: var(--rt-warning-500); /* rt-theme-shared: цвет роли один в обеих темах */
81
+ --rt-color-action-warning-hover: var(--rt-warning-600); /* rt-theme-shared: цвет роли один в обеих темах */
82
+ --rt-color-action-warning-active: var(--rt-warning-700); /* rt-theme-shared: цвет роли один в обеих темах */
83
+ --rt-color-action-on-warning: var(--rt-neutral-0); /* rt-theme-shared: подпись на цветной подложке светлая в обеих темах */
84
+ --rt-color-action-warning-on-surface: var(--rt-color-action-warning);
85
+ --rt-color-action-danger: var(--rt-danger-500); /* rt-theme-shared: цвет роли один в обеих темах */
86
+ --rt-color-action-danger-hover: var(--rt-danger-600); /* rt-theme-shared: цвет роли один в обеих темах */
87
+ --rt-color-action-danger-active: var(--rt-danger-700); /* rt-theme-shared: цвет роли один в обеих темах */
88
+ --rt-color-action-on-danger: var(--rt-neutral-0); /* rt-theme-shared: подпись на цветной подложке светлая в обеих темах */
89
+ --rt-color-action-danger-on-surface: var(--rt-color-action-danger);
90
+ --rt-color-action-info: var(--rt-info-500); /* rt-theme-shared: цвет роли один в обеих темах */
91
+ --rt-color-action-info-hover: var(--rt-info-600); /* rt-theme-shared: цвет роли один в обеих темах */
92
+ --rt-color-action-info-active: var(--rt-info-700); /* rt-theme-shared: цвет роли один в обеих темах */
93
+ --rt-color-action-on-info: var(--rt-neutral-0); /* rt-theme-shared: подпись на цветной подложке светлая в обеих темах */
94
+ --rt-color-action-info-on-surface: var(--rt-color-action-info);
95
+
96
+ /* Отключённое действие — своя пара, а не вторичная роль: делить подложку с ней
97
+ значит сделать отключённую вторичную кнопку неотличимой от доступной. */
98
+ --rt-color-action-disabled: var(--rt-neutral-200);
99
+ --rt-color-action-on-disabled: var(--rt-color-text-disabled);
100
+
101
+ /* Доли оттенка под наведение и нажатие безфоновых оформлений кнопки. Живут в
102
+ слое, а не в стилях компонента: тёмная тема их поднимает, а половина пары,
103
+ оставшаяся в компоненте, тёмному ответу не видна. */
104
+ --rt-btn-tint-hover: 8%;
105
+ --rt-btn-tint-active: 16%;
106
+
107
+ /* Кольцо фокуса разобрано на составляющие: толщину, отступ и цвет. Композит
108
+ собирается из них и остаётся на месте — восемь компонентов берут его целиком, и
109
+ менять их незачем. Отступ — зазор цвета поверхности между элементом и кольцом:
110
+ первая тень при нулевом отступе не рисует ничего. */
111
+ --rt-focus-ring-width: var(--rt-border-width-thick);
112
+
113
+ /* Ноль с единицей намеренно: безразмерный ноль внутри calc с длиной невалиден, и
114
+ браузер отбрасывает объявление кольца целиком — кольцо просто пропадает. */
115
+ --rt-focus-ring-offset: 0px;
116
+ --rt-focus-ring-color: var(--rt-color-action-primary-soft);
117
+ --rt-focus-ring-color-danger: var(--rt-overlay-danger-16); /* rt-theme-shared: оттенок опасного действия один в обеих темах */
43
118
 
44
119
  /* Focus-ring composite — для interactive элементов с custom focus-visible. */
45
- --rt-shadow-focus-ring: 0 0 0 3px var(--rt-color-action-primary-soft);
46
- --rt-shadow-focus-ring-danger: 0 0 0 3px var(--rt-overlay-danger-16);
120
+ --rt-shadow-focus-ring:
121
+ 0 0 0 var(--rt-focus-ring-offset) var(--rt-color-bg-surface),
122
+ 0 0 0 calc(var(--rt-focus-ring-offset) + var(--rt-focus-ring-width)) var(--rt-focus-ring-color);
123
+ --rt-shadow-focus-ring-danger:
124
+ 0 0 0 var(--rt-focus-ring-offset) var(--rt-color-bg-surface),
125
+ 0 0 0 calc(var(--rt-focus-ring-offset) + var(--rt-focus-ring-width)) var(--rt-focus-ring-color-danger);
47
126
 
48
127
  /* Stepper (rt-stepper) — рельса прогресса. Текущий шаг — янтарный (одинаков
49
128
  в обеих темах); трек/прогресс переопределяются в dark на приглушённые. */
50
- --rt-color-stepper-current: var(--rt-amber-400);
51
- --rt-color-stepper-current-subtle: var(--rt-overlay-amber-16);
129
+ --rt-color-stepper-current: var(--rt-amber-400); /* rt-theme-shared: янтарь текущего шага один в обеих темах */
130
+ --rt-color-stepper-current-subtle: var(--rt-overlay-amber-16); /* rt-theme-shared: янтарь текущего шага один в обеих темах */
52
131
  --rt-color-stepper-track: var(--rt-gray-350);
53
132
  --rt-color-stepper-progress: var(--rt-color-action-primary);
54
133
 
@@ -59,32 +138,36 @@
59
138
  --rt-shadow-status-dot: 0 0 0 3px var(--rt-color-state-success-bg);
60
139
 
61
140
  /* State */
62
- --rt-color-state-success: var(--rt-success-500);
141
+ --rt-color-state-success: var(--rt-success-500); /* rt-theme-shared: цвет статуса один в обеих темах */
63
142
  --rt-color-state-success-bg: var(--rt-success-50);
64
- --rt-color-state-warning: var(--rt-warning-500);
143
+ --rt-color-state-warning: var(--rt-warning-500); /* rt-theme-shared: цвет статуса один в обеих темах */
65
144
  --rt-color-state-warning-bg: var(--rt-warning-50);
66
- --rt-color-state-danger: var(--rt-danger-500);
145
+
146
+ /* Подпись на подложке предупреждения — ступенью темнее самого статуса: сам
147
+ статус на своей подложке порога контраста не берёт. Пара к error-text. */
148
+ --rt-color-state-warning-text: var(--rt-warning-600);
149
+ --rt-color-state-danger: var(--rt-danger-500); /* rt-theme-shared: цвет статуса один в обеих темах */
67
150
  --rt-color-state-danger-bg: var(--rt-danger-50);
68
151
  --rt-color-state-error-text: var(--rt-danger-600);
69
- --rt-color-state-info: var(--rt-info-500);
152
+ --rt-color-state-info: var(--rt-info-500); /* rt-theme-shared: цвет статуса один в обеих темах */
70
153
  --rt-color-state-info-bg: var(--rt-info-50);
71
154
 
72
155
  /* Chat — пузыри переписки. Входящее и своё различаются фоном, а не рамкой:
73
156
  рамка на каждом пузыре дробит ленту. Отметка прочтения синяя — единственный
74
157
  цветной элемент подвала пузыря, остальные статусы приглушены. */
75
- --rt-chat-bubble-in-bg: var(--rt-blue-50);
76
- --rt-chat-bubble-in-author: var(--rt-blue-700);
158
+ --rt-chat-bubble-in-bg: var(--rt-brand-50);
159
+ --rt-chat-bubble-in-author: var(--rt-brand-700);
77
160
  --rt-chat-bubble-own-bg: var(--rt-neutral-100);
78
161
  --rt-chat-bubble-own-author: var(--rt-neutral-500);
79
162
  --rt-chat-bubble-date: var(--rt-color-text-muted);
80
- --rt-chat-status-read: var(--rt-blue-400);
163
+ --rt-chat-status-read: var(--rt-brand-400);
81
164
 
82
165
  /* Special — Auth surface (gradient bg + transparent card в dark) */
83
166
  --rt-color-bg-page-auth: var(--rt-neutral-50);
84
167
  --rt-color-bg-surface-auth-card: var(--rt-neutral-0);
85
168
 
86
169
  /* Spacing aliases — named semantic aliases на primitive numeric scale */
87
- --rt-space-2xs: 2px;
170
+ --rt-space-2xs: var(--rt-space-0-5); /* 2px */
88
171
  --rt-space-xs: var(--rt-space-1); /* 4px */
89
172
  --rt-space-sm: var(--rt-space-2); /* 8px */
90
173
  --rt-space-md: var(--rt-space-4); /* 16px */
@@ -94,7 +177,7 @@
94
177
  --rt-space-3xl: var(--rt-space-16); /* 64px */
95
178
 
96
179
  /* Text size base — semantic alias для default body text */
97
- --rt-text-base: 16px;
180
+ --rt-text-base: var(--rt-text-md);
98
181
 
99
182
  /* Form input — composition tokens. Единый контракт для всего input-семейства
100
183
  (rt-input, rt-input-number, rt-autocomplete, rt-select, rt-multiselect,
@@ -123,7 +206,7 @@
123
206
 
124
207
  /* Radius / spacing / border */
125
208
  --rt-input-radius: var(--rt-radius-lg);
126
- --rt-input-padding-x: var(--rt-space-3);
209
+ --rt-input-padding-x: var(--rt-space-4);
127
210
  --rt-input-padding-y: var(--rt-space-0);
128
211
  --rt-input-border-width: var(--rt-border-width-thin);
129
212
  --rt-input-focus-outline-offset: var(--rt-border-width-thin);
@@ -157,7 +240,7 @@
157
240
  набирается табличными цифрами и держит ширину, иначе кнопки прыгают
158
241
  при переходе через десяток. */
159
242
  --rt-counter-gap: var(--rt-space-sm);
160
- --rt-counter-value-min-width: 24px;
243
+ --rt-counter-value-min-width: var(--rt-size-6);
161
244
  --rt-counter-value-font-size: var(--rt-text-md);
162
245
  --rt-counter-value-color: var(--rt-color-text-primary);
163
246
  --rt-counter-row-gap: var(--rt-space-md);
@@ -173,7 +256,7 @@
173
256
  --rt-toggle-color-track-on: var(--rt-color-action-primary);
174
257
  --rt-toggle-color-border: var(--rt-color-border-strong);
175
258
  --rt-toggle-color-thumb: var(--rt-color-bg-surface);
176
- --rt-toggle-color-icon: var(--rt-amber-400);
259
+ --rt-toggle-color-icon: var(--rt-amber-400); /* rt-theme-shared: янтарь иконки один в обеих темах */
177
260
  --rt-toggle-shadow-thumb: var(--rt-shadow-md);
178
261
 
179
262
  /* Рамка off-трека — inset-тенью, а не border: у border своя коробка, и
@@ -182,26 +265,26 @@
182
265
 
183
266
  /* Навигация (rt-page-header). Шапка — отдельная плашка; отступ от краёв
184
267
  страницы задаёт тот, кто её ставит. */
185
- --rt-nav-header-padding: var(--rt-space-2-5) var(--rt-space-3);
186
- --rt-nav-header-color-bg: var(--rt-neutral-150);
268
+ --rt-nav-header-padding: var(--rt-space-2) var(--rt-space-4);
269
+ --rt-nav-header-color-bg: var(--rt-neutral-50);
187
270
 
188
271
  /* Первый уровень. Пункт ряда несёт плашку цвета самой шапки: на общем фоне её
189
272
  не видно, и белым проступает только активный раздел. Наведение красит
190
273
  подпись, а не фон — иначе оно спорит с этой подсветкой. */
191
- --rt-nav-item-height: 28px;
274
+ --rt-nav-item-height: var(--rt-size-6);
192
275
  --rt-nav-item-gap: var(--rt-space-1);
193
- --rt-nav-item-padding: var(--rt-space-1-5) var(--rt-space-2);
194
- --rt-nav-item-content-gap: var(--rt-space-1-5);
276
+ --rt-nav-item-padding: var(--rt-space-2) var(--rt-space-2);
277
+ --rt-nav-item-content-gap: var(--rt-space-2);
195
278
  --rt-nav-item-font-size: var(--rt-text-sm);
196
279
  --rt-nav-item-font-weight: var(--rt-font-weight-semibold);
197
280
  --rt-nav-item-line-height: var(--rt-leading-none);
198
281
  --rt-nav-item-color: var(--rt-color-text-primary);
199
282
  --rt-nav-item-color-hover: var(--rt-color-action-primary);
200
283
  --rt-nav-item-color-pressed: var(--rt-color-action-primary-hover);
201
- --rt-nav-item-color-bg: var(--rt-neutral-150);
202
- --rt-nav-item-color-border: var(--rt-neutral-150);
284
+ --rt-nav-item-color-bg: var(--rt-neutral-50);
285
+ --rt-nav-item-color-border: var(--rt-neutral-50);
203
286
  --rt-nav-item-color-bg-active: var(--rt-color-bg-surface);
204
- --rt-nav-item-color-caret: var(--rt-neutral-250);
287
+ --rt-nav-item-color-caret: var(--rt-neutral-200);
205
288
 
206
289
  /* Фокус обведён пунктиром: сплошная рамка на плашке пункта неотличима от его
207
290
  же границы. */
@@ -210,18 +293,18 @@
210
293
  /* Недоступный пункт светлее доступного, а не другого оттенка: общий
211
294
  `text-disabled` уходит в сине-стальной и рядом с серой подписью читается
212
295
  как второй цвет, а не как выключенное состояние. */
213
- --rt-nav-color-disabled: var(--rt-neutral-350);
296
+ --rt-nav-color-disabled: var(--rt-neutral-300);
214
297
 
215
298
  /* Попап профиля. Подложку берёт у панели навигации, своего здесь — габариты
216
299
  блока пользователя, тень и набор строк: строк четыре, и они читаются как
217
300
  список действий, а не как выпадающее меню. */
218
- --rt-profile-menu-min-width: 240px;
301
+ --rt-profile-menu-min-width: var(--rt-size-60);
219
302
  --rt-profile-menu-padding: var(--rt-space-5);
220
303
  --rt-profile-menu-shadow: var(--rt-shadow-profile-menu);
221
- --rt-profile-avatar-size: 42px;
304
+ --rt-profile-avatar-size: var(--rt-size-10);
222
305
  --rt-profile-avatar-font-size: var(--rt-text-2xl);
223
- --rt-profile-item-padding-y: var(--rt-space-3);
224
- --rt-profile-item-content-gap: var(--rt-space-2-5);
306
+ --rt-profile-item-padding-y: var(--rt-space-4);
307
+ --rt-profile-item-content-gap: var(--rt-space-2);
225
308
  --rt-profile-item-font-size: var(--rt-text-md);
226
309
  --rt-profile-item-font-weight: var(--rt-font-weight-medium);
227
310
  --rt-profile-item-radius: var(--rt-radius-md);
@@ -229,24 +312,24 @@
229
312
  /* Строки выступают за содержимое панели на половину её отступа: так
230
313
  подсветка на наведении не упирается в рамку, а иконка остаётся на одной
231
314
  вертикали с содержимым. Это же число — горизонтальный отступ строки. */
232
- --rt-profile-row-inset: var(--rt-space-2-5);
315
+ --rt-profile-row-inset: var(--rt-space-2);
233
316
  --rt-profile-theme-icon-padding: var(--rt-space-2);
234
317
 
235
318
  /* Габариты панели второго уровня: ширина считается числом колонок, поэтому
236
319
  колонка, промежуток и внутренний отступ — токены, из которых панель
237
320
  складывает свою ширину. По вертикали отступ крупнее: у первой группы над
238
321
  заголовком нет ничего, и панель иначе начинается впритык. */
239
- --rt-nav-panel-column-width: 250px;
322
+ --rt-nav-panel-column-width: var(--rt-size-60);
240
323
  --rt-nav-panel-column-gap: var(--rt-space-5);
241
- --rt-nav-panel-padding: var(--rt-space-3);
324
+ --rt-nav-panel-padding: var(--rt-space-4);
242
325
  --rt-nav-panel-padding-y: var(--rt-space-md);
243
- --rt-nav-panel-group-gap: var(--rt-space-7);
326
+ --rt-nav-panel-group-gap: var(--rt-space-8);
244
327
  --rt-nav-panel-item-gap: var(--rt-space-0-5);
245
- --rt-nav-panel-item-height: 24px;
328
+ --rt-nav-panel-item-height: var(--rt-size-6);
246
329
  --rt-nav-panel-item-padding: var(--rt-space-1) var(--rt-space-2);
247
330
  --rt-nav-panel-columns: 1;
248
331
  --rt-nav-panel-color-bg: var(--rt-color-bg-surface);
249
- --rt-nav-panel-color-border: var(--rt-neutral-250);
332
+ --rt-nav-panel-color-border: var(--rt-neutral-200);
250
333
  --rt-nav-panel-shadow: var(--rt-shadow-nav-panel);
251
334
 
252
335
  /* Второй уровень набран легче первого: ряд разделов держит вес, а полтора
@@ -254,23 +337,24 @@
254
337
  --rt-nav-panel-item-font-size: var(--rt-text-sm);
255
338
  --rt-nav-panel-item-font-weight: var(--rt-font-weight-medium);
256
339
  --rt-nav-panel-item-content-gap: var(--rt-space-1);
257
- --rt-nav-panel-item-color: var(--rt-neutral-520);
258
- --rt-nav-panel-item-color-bg-hover: var(--rt-neutral-150);
340
+ --rt-nav-panel-item-color: var(--rt-neutral-600);
341
+ --rt-nav-panel-item-color-bg-hover: var(--rt-neutral-50);
259
342
  --rt-nav-panel-item-color-active: var(--rt-color-text-inverse);
260
343
  --rt-nav-panel-item-color-bg-active: var(--rt-color-action-primary);
261
344
  --rt-nav-panel-group-font-size: var(--rt-text-xs);
262
345
  --rt-nav-panel-group-font-weight: var(--rt-font-weight-medium);
263
346
 
264
- /* Заголовок группы светлее пункта, но оба берут порог AA на белой панели:
265
- 4.95:1 у пункта и 4.54:1 у заголовка. */
266
- --rt-nav-panel-group-color: var(--rt-neutral-510);
267
- --rt-nav-panel-group-content-gap: var(--rt-space-1-5);
347
+ /* Заголовок группы светлее пункта, и оба берут порог контраста на белой панели.
348
+ Отношения обеих пар считает проверка тёмной темы; таблица замера — на странице
349
+ «Colors» витрины. */
350
+ --rt-nav-panel-group-color: var(--rt-neutral-600);
351
+ --rt-nav-panel-group-content-gap: var(--rt-space-2);
268
352
 
269
353
  /* Маркер непросмотренного. Точка стоит в потоке следом за подписью — и в ряду
270
354
  разделов, и в панели, и на узком экране: место ей даёт общий зазор
271
355
  содержимого пункта. */
272
- --rt-nav-caret-size: 12px;
273
- --rt-nav-marker-size: 4px;
356
+ --rt-nav-caret-size: var(--rt-size-3);
357
+ --rt-nav-marker-size: var(--rt-size-1);
274
358
  --rt-nav-marker-color: var(--rt-color-state-danger);
275
359
 
276
360
  /* Form field (rt-field) — обёртка анатомии поля: label / help / hint / error /
@@ -24,14 +24,14 @@
24
24
  --rt-color-text-muted: var(--rt-overlay-white-40);
25
25
  --rt-color-text-disabled: var(--rt-overlay-white-25);
26
26
  --rt-color-text-inverse: var(--rt-neutral-900);
27
- --rt-color-text-link: var(--rt-blue-300);
28
- --rt-color-text-link-hover: var(--rt-blue-500);
27
+ --rt-color-text-link: var(--rt-brand-300);
28
+ --rt-color-text-link-hover: var(--rt-brand-500);
29
29
 
30
30
  /* Border — приглушённые на графите */
31
31
  --rt-color-border-default: var(--rt-charcoal-border);
32
32
  --rt-color-border-strong: var(--rt-charcoal-border-strong);
33
33
  --rt-color-border-subtle: var(--rt-charcoal-border);
34
- --rt-color-border-focus: var(--rt-blue-500);
34
+ --rt-color-border-focus: var(--rt-brand-500);
35
35
 
36
36
  /* Input border видим в dark (в light — transparent). */
37
37
  --rt-input-color-border: var(--rt-charcoal-border);
@@ -49,22 +49,46 @@
49
49
  --rt-nav-item-color-bg: var(--rt-charcoal-950);
50
50
  --rt-nav-item-color-border: var(--rt-charcoal-950);
51
51
  --rt-nav-item-color-bg-active: var(--rt-charcoal-800);
52
- --rt-nav-item-color-caret: var(--rt-neutral-520);
52
+ --rt-nav-item-color-caret: var(--rt-neutral-600);
53
53
  --rt-nav-panel-color-bg: var(--rt-charcoal-800);
54
- --rt-nav-panel-color-border: var(--rt-neutral-520);
55
- --rt-nav-panel-item-color: var(--rt-neutral-280);
54
+ --rt-nav-panel-color-border: var(--rt-neutral-600);
55
+ --rt-nav-panel-item-color: var(--rt-neutral-200);
56
56
  --rt-nav-panel-item-color-bg-hover: var(--rt-charcoal-950);
57
- --rt-nav-panel-group-color: var(--rt-neutral-420);
58
- --rt-nav-color-disabled: var(--rt-neutral-520);
57
+ --rt-nav-panel-group-color: var(--rt-neutral-400);
58
+ --rt-nav-color-disabled: var(--rt-neutral-600);
59
59
 
60
- /* Action — primary остаётся синим в обеих темах */
61
- --rt-color-action-primary-subtle: rgb(21 93 252 / 16%);
60
+ /* Action — сам цвет марки один в обеих темах, а доля оттенка на графите вдвое
61
+ больше: слабый оттенок на тёмном фоне просто не виден. Считается от ступени
62
+ бренда, как и в светлой теме. */
63
+ --rt-color-action-primary-subtle: color-mix(in srgb, var(--rt-brand-500) 16%, transparent);
62
64
 
63
65
  /* Focus-ring в dark — ярче для контрастности на тёмных фонах. */
64
- --rt-color-action-primary-soft: rgb(21 93 252 / 32%);
66
+ --rt-color-action-primary-soft: color-mix(in srgb, var(--rt-brand-500) 32%, transparent);
67
+
68
+ /* Вторичное действие нейтрально, и на графите вся его тройка разворачивается:
69
+ подложка садится на приподнятую поверхность, а наведение и нажатие идут вверх
70
+ по светлоте, а не вниз, — иначе они тонут в фоне страницы. */
65
71
  --rt-color-action-secondary: var(--rt-charcoal-700);
72
+ --rt-color-action-secondary-hover: var(--rt-charcoal-border);
73
+ --rt-color-action-secondary-active: var(--rt-charcoal-border-strong);
66
74
  --rt-color-action-on-secondary: var(--rt-neutral-50);
67
75
 
76
+ /* Пятый член роли идёт против всей её тройки: подложка садится на поверхность,
77
+ а цвет на поверхности обязан от неё оторваться. Ступень нейтрали, а не графита:
78
+ графит кончается границей, и любая его ступень на карточке даёт меньше двух к
79
+ одному. Светлая тема красит тем же именем, что и подложку, и разъехаться они
80
+ могут только здесь. */
81
+ --rt-color-action-secondary-on-surface: var(--rt-neutral-400);
82
+
83
+ /* Отключённое действие на графите — та же приподнятая поверхность; подпись
84
+ наследует ответ тёмной темы по ссылке на приглушённый текст. */
85
+ --rt-color-action-disabled: var(--rt-charcoal-700);
86
+
87
+ /* Оттенок наведения на графите вдвое насыщеннее: слабый след на тёмном фоне
88
+ не виден — та же причина, что и у оттенка марки выше. */
89
+ --rt-btn-tint-hover: 16%;
90
+ --rt-btn-tint-active: 32%;
91
+
68
92
  /* Soft card-shadow в dark — насыщеннее для отделения от фона. */
69
93
  --rt-shadow-card-soft: 0 0 40px rgb(0 0 0 / 25%);
70
94
 
@@ -79,24 +103,29 @@
79
103
  --rt-toggle-color-thumb: var(--rt-neutral-50);
80
104
  --rt-toggle-shadow-thumb: var(--rt-shadow-none);
81
105
 
82
- /* State — surfaces под dark + ярче error-text */
83
- --rt-color-state-success-bg: rgb(5 150 105 / 12%);
84
- --rt-color-state-warning-bg: rgb(217 119 6 / 12%);
85
- --rt-color-state-danger-bg: rgb(220 38 38 / 12%);
106
+ /* State — surfaces под dark + ярче error-text.
107
+
108
+ Подложка считается от ступени своего статуса, а не повторяет её код цвета
109
+ тройкой каналов: повторённое значение расходится с источником молча, и
110
+ правка ступени оставляла подложку прежней. */
111
+ --rt-color-state-success-bg: color-mix(in srgb, var(--rt-success-500) 12%, transparent);
112
+ --rt-color-state-warning-bg: color-mix(in srgb, var(--rt-warning-500) 12%, transparent);
113
+ --rt-color-state-danger-bg: color-mix(in srgb, var(--rt-danger-500) 12%, transparent);
86
114
  --rt-color-state-error-text: var(--rt-danger-500);
87
- --rt-color-state-info-bg: rgb(37 99 235 / 12%);
115
+ --rt-color-state-warning-text: var(--rt-warning-500);
116
+ --rt-color-state-info-bg: color-mix(in srgb, var(--rt-info-500) 12%, transparent);
88
117
 
89
118
  /* Chat — на графите светлые фоны пузырей нечитаемы: входящее уходит в
90
119
  полупрозрачный синий, своё — в глубокий графит. */
91
- --rt-chat-bubble-in-bg: rgb(37 99 235 / 12%);
92
- --rt-chat-bubble-in-author: var(--rt-blue-300);
120
+ --rt-chat-bubble-in-bg: color-mix(in srgb, var(--rt-brand-500) 12%, transparent);
121
+ --rt-chat-bubble-in-author: var(--rt-brand-300);
93
122
  --rt-chat-bubble-own-bg: var(--rt-charcoal-950);
94
123
  --rt-chat-bubble-own-author: var(--rt-overlay-white-40);
95
124
  --rt-chat-bubble-date: var(--rt-overlay-white-40);
96
- --rt-chat-status-read: var(--rt-blue-300);
125
+ --rt-chat-status-read: var(--rt-brand-300);
97
126
 
98
127
  /* Special — Auth surface (градиентный фон логина + прозрачная карточка). */
99
- --rt-color-bg-page-auth: linear-gradient(156deg, #122341 12.68%, #182142 99.28%);
128
+ --rt-color-bg-page-auth: linear-gradient(156deg, var(--rt-neutral-950) 12.68%, var(--rt-navy-900) 99.28%);
100
129
  --rt-color-bg-surface-auth-card: transparent;
101
130
  }
102
131
 
@@ -110,14 +139,18 @@ html.rt-theme-dark {
110
139
  Остальные экраны его не видят — rt-container кроет body непрозрачным фоном
111
140
  страницы. Не shorthand `background:`, чтобы не сбросить body{}'ный
112
141
  `background-color`. */
113
- :root[data-theme='dark'] body,
114
- html.rt-theme-dark body {
115
- background-attachment: fixed;
116
- background-image: linear-gradient(156deg, #122341 12.68%, #182142 99.28%);
142
+ @layer rt-kit.base {
143
+ :root[data-theme='dark'] body,
144
+ html.rt-theme-dark body {
145
+ background-attachment: fixed;
146
+ background-image: linear-gradient(156deg, #122341 12.68%, #182142 99.28%);
147
+ }
117
148
  }
118
149
 
119
150
  /* rt-logo (чёрный SVG) — инверсия для читаемости на тёмном фоне */
120
- :root[data-theme='dark'] .rt-logo,
121
- html.rt-theme-dark .rt-logo {
122
- filter: invert(1) brightness(1.5);
151
+ @layer rt-kit.base {
152
+ :root[data-theme='dark'] .rt-logo,
153
+ html.rt-theme-dark .rt-logo {
154
+ filter: invert(1) brightness(1.5);
155
+ }
123
156
  }