@rt-tools/ui-kit-v2 0.10.0 → 0.12.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 (166) hide show
  1. package/README.md +110 -5
  2. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs +947 -0
  3. package/fesm2022/rt-tools-ui-kit-v2-rich-editor.mjs.map +1 -0
  4. package/fesm2022/rt-tools-ui-kit-v2.mjs +11558 -8313
  5. package/fesm2022/rt-tools-ui-kit-v2.mjs.map +1 -1
  6. package/package.json +8 -1
  7. package/rt-tools-ui-kit-v2-0.12.0.tgz +0 -0
  8. package/src/assets/fonts/montserrat-cyrillic-ext-wght-italic.woff2 +0 -0
  9. package/src/assets/fonts/montserrat-cyrillic-ext-wght-normal.woff2 +0 -0
  10. package/src/assets/fonts/montserrat-cyrillic-wght-italic.woff2 +0 -0
  11. package/src/assets/fonts/montserrat-cyrillic-wght-normal.woff2 +0 -0
  12. package/src/assets/fonts/montserrat-latin-ext-wght-italic.woff2 +0 -0
  13. package/src/assets/fonts/montserrat-latin-ext-wght-normal.woff2 +0 -0
  14. package/src/assets/fonts/montserrat-latin-wght-italic.woff2 +0 -0
  15. package/src/assets/fonts/montserrat-latin-wght-normal.woff2 +0 -0
  16. package/src/assets/icons/arrows.svg +9 -0
  17. package/src/assets/icons/equals.svg +8 -0
  18. package/src/assets/icons/user-off.svg +16 -0
  19. package/src/assets/icons-material/NOTICE.md +6 -2
  20. package/src/assets/icons-material/arrow-left.fill.svg +3 -0
  21. package/src/assets/icons-material/arrow-left.svg +1 -1
  22. package/src/assets/icons-material/arrow-right.fill.svg +3 -0
  23. package/src/assets/icons-material/arrow-right.svg +3 -0
  24. package/src/assets/icons-material/arrows.fill.svg +5 -0
  25. package/src/assets/icons-material/arrows.svg +5 -0
  26. package/src/assets/icons-material/ban.fill.svg +5 -0
  27. package/src/assets/icons-material/ban.svg +1 -1
  28. package/src/assets/icons-material/bars.fill.svg +3 -0
  29. package/src/assets/icons-material/bars.svg +1 -1
  30. package/src/assets/icons-material/check.fill.svg +3 -0
  31. package/src/assets/icons-material/check.svg +1 -1
  32. package/src/assets/icons-material/chevron-down.fill.svg +3 -0
  33. package/src/assets/icons-material/chevron-down.svg +1 -1
  34. package/src/assets/icons-material/chevron-left.fill.svg +3 -0
  35. package/src/assets/icons-material/chevron-left.svg +1 -1
  36. package/src/assets/icons-material/chevron-right.fill.svg +3 -0
  37. package/src/assets/icons-material/chevron-right.svg +1 -1
  38. package/src/assets/icons-material/close.fill.svg +3 -0
  39. package/src/assets/icons-material/close.svg +1 -1
  40. package/src/assets/icons-material/cloud-upload.fill.svg +5 -0
  41. package/src/assets/icons-material/cloud-upload.svg +1 -1
  42. package/src/assets/icons-material/cog.fill.svg +5 -0
  43. package/src/assets/icons-material/cog.svg +1 -1
  44. package/src/assets/icons-material/copy.fill.svg +5 -0
  45. package/src/assets/icons-material/copy.svg +1 -1
  46. package/src/assets/icons-material/ellipsis-h.fill.svg +5 -0
  47. package/src/assets/icons-material/ellipsis-h.svg +1 -1
  48. package/src/assets/icons-material/ellipsis-v.fill.svg +5 -0
  49. package/src/assets/icons-material/ellipsis-v.svg +1 -1
  50. package/src/assets/icons-material/email.fill.svg +5 -0
  51. package/src/assets/icons-material/email.svg +5 -0
  52. package/src/assets/icons-material/equals.fill.svg +3 -0
  53. package/src/assets/icons-material/equals.svg +3 -0
  54. package/src/assets/icons-material/external-link.fill.svg +5 -0
  55. package/src/assets/icons-material/external-link.svg +1 -1
  56. package/src/assets/icons-material/eye-slash.fill.svg +5 -0
  57. package/src/assets/icons-material/eye-slash.svg +1 -1
  58. package/src/assets/icons-material/eye.fill.svg +5 -0
  59. package/src/assets/icons-material/eye.svg +1 -1
  60. package/src/assets/icons-material/ico-download.fill.svg +5 -0
  61. package/src/assets/icons-material/ico-download.svg +1 -1
  62. package/src/assets/icons-material/ico-plus.fill.svg +3 -0
  63. package/src/assets/icons-material/ico-plus.svg +1 -1
  64. package/src/assets/icons-material/info-circle.fill.svg +5 -0
  65. package/src/assets/icons-material/info-circle.svg +1 -1
  66. package/src/assets/icons-material/pencil.fill.svg +5 -0
  67. package/src/assets/icons-material/pencil.svg +1 -1
  68. package/src/assets/icons-material/refresh.fill.svg +5 -0
  69. package/src/assets/icons-material/refresh.svg +1 -1
  70. package/src/assets/icons-material/search.fill.svg +5 -0
  71. package/src/assets/icons-material/search.svg +1 -1
  72. package/src/assets/icons-material/star.fill.svg +3 -0
  73. package/src/assets/icons-material/star.svg +1 -1
  74. package/src/assets/icons-material/sync.fill.svg +5 -0
  75. package/src/assets/icons-material/sync.svg +1 -1
  76. package/src/assets/icons-material/table.fill.svg +5 -0
  77. package/src/assets/icons-material/table.svg +1 -1
  78. package/src/assets/icons-material/tag.fill.svg +5 -0
  79. package/src/assets/icons-material/tag.svg +1 -1
  80. package/src/assets/icons-material/trash.fill.svg +5 -0
  81. package/src/assets/icons-material/trash.svg +1 -1
  82. package/src/assets/icons-material/user-off.fill.svg +5 -0
  83. package/src/assets/icons-material/user-off.svg +5 -0
  84. package/src/assets/icons-material/user.fill.svg +5 -0
  85. package/src/assets/icons-material/user.svg +1 -1
  86. package/src/lib/components/CONTEXT.md +3 -0
  87. package/src/lib/components/action-bar/CONTEXT.md +53 -0
  88. package/src/lib/components/action-bar/rt-action-bar-holder.component.scss +70 -0
  89. package/src/lib/components/action-bar/rt-action-bar.component.scss +122 -0
  90. package/src/lib/components/aside/CONTEXT.md +5 -1
  91. package/src/lib/components/aside/_rt-aside-overlay.scss +9 -0
  92. package/src/lib/components/aside/header/rt-aside-header.component.scss +18 -2
  93. package/src/lib/components/aside/rt-aside.component.scss +5 -1
  94. package/src/lib/components/autocomplete/CONTEXT.md +2 -1
  95. package/src/lib/components/button/CONTEXT.md +11 -11
  96. package/src/lib/components/checkbox/rt-checkbox.component.scss +5 -1
  97. package/src/lib/components/data-list/CONTEXT.md +122 -0
  98. package/src/lib/components/data-list/rt-data-list.component.scss +57 -0
  99. package/src/lib/components/data-list/settings/rt-data-list-settings-aside.component.scss +256 -0
  100. package/src/lib/components/data-list/toolbar/rt-data-list-toolbar.component.scss +128 -0
  101. package/src/lib/components/data-table/CONTEXT.md +102 -0
  102. package/src/lib/components/data-table/cell/rt-data-table-cell.component.scss +115 -0
  103. package/src/lib/components/data-table/filter-cell/rt-data-table-filter-cell.component.scss +51 -0
  104. package/src/lib/components/data-table/header-cell/rt-data-table-header-cell.component.scss +111 -0
  105. package/src/lib/components/data-table/rt-data-table.component.scss +263 -0
  106. package/src/lib/components/date-picker/rt-date-picker.component.scss +13 -0
  107. package/src/lib/components/delta-view/CONTEXT.md +1 -1
  108. package/src/lib/components/dialog/CONTEXT.md +4 -0
  109. package/src/lib/components/dynamic-list/CONTEXT.md +90 -0
  110. package/src/lib/components/dynamic-list/rt-dynamic-list.component.scss +123 -0
  111. package/src/lib/components/empty-state/CONTEXT.md +5 -0
  112. package/src/lib/components/empty-state/rt-empty-state.component.scss +19 -5
  113. package/src/lib/components/file-card/rt-file-card.component.scss +14 -0
  114. package/src/lib/components/file-drop/rt-file-drop.component.scss +44 -8
  115. package/src/lib/components/icon-button/rt-icon-button.component.scss +28 -4
  116. package/src/lib/components/input/rt-input.component.scss +25 -1
  117. package/src/lib/components/input-number/rt-input-number.component.scss +13 -0
  118. package/src/lib/components/menu/CONTEXT.md +10 -0
  119. package/src/lib/components/menu/rt-menu-item.component.scss +35 -3
  120. package/src/lib/components/menu/rt-menu.component.scss +15 -5
  121. package/src/lib/components/multiselect/CONTEXT.md +3 -0
  122. package/src/lib/components/multiselect/rt-multiselect.component.scss +58 -1
  123. package/src/lib/components/pagination/CONTEXT.md +4 -1
  124. package/src/lib/components/pagination/rt-pagination.component.scss +43 -13
  125. package/src/lib/components/radio-button/CONTEXT.md +42 -0
  126. package/src/lib/components/radio-button/rt-radio-button.component.scss +105 -0
  127. package/src/lib/components/scroll-area/CONTEXT.md +52 -0
  128. package/src/lib/components/scroll-area/rt-scroll-area.component.scss +69 -0
  129. package/src/lib/components/select/CONTEXT.md +8 -1
  130. package/src/lib/components/select/rt-select.component.scss +110 -7
  131. package/src/lib/components/table/CONTEXT.md +46 -1
  132. package/src/lib/components/table/filter-header/CONTEXT.md +64 -0
  133. package/src/lib/components/table/filter-header/rt-table-filter-header.component.scss +76 -0
  134. package/src/lib/components/table/rt-table.component.scss +32 -1
  135. package/src/lib/components/tag/CONTEXT.md +9 -0
  136. package/src/lib/components/tag/rt-tag.component.scss +38 -0
  137. package/src/lib/components/textarea/CONTEXT.md +1 -1
  138. package/src/lib/components/thread-list/CONTEXT.md +6 -1
  139. package/src/lib/components/toolbar/CONTEXT.md +3 -0
  140. package/src/lib/components/toolbar/rt-toolbar.component.scss +9 -2
  141. package/src/lib/components/tooltip/CONTEXT.md +4 -4
  142. package/src/lib/components/tooltip/rt-tooltip.component.scss +2 -2
  143. package/src/{lib → rich-editor/lib}/components/chat/CONTEXT.md +1 -1
  144. package/src/{lib → rich-editor/lib}/components/message-composer/CONTEXT.md +5 -1
  145. package/src/{lib → rich-editor/lib}/components/message-composer/rt-message-composer.component.scss +9 -0
  146. package/src/{lib → rich-editor/lib}/components/rich-editor/CONTEXT.md +2 -2
  147. package/src/styles/_coarse-pointer.scss +15 -0
  148. package/src/styles/_coexist.scss +28 -0
  149. package/src/styles/_fonts.scss +99 -0
  150. package/src/styles/_index.scss +13 -0
  151. package/src/styles/_preset-material.scss +201 -26
  152. package/src/styles/_primitives.scss +41 -5
  153. package/src/styles/_scrollbar.scss +16 -12
  154. package/src/styles/_semantic-lists.scss +89 -0
  155. package/src/styles/_semantic.scss +80 -9
  156. package/src/styles/_theme-dark.scss +36 -0
  157. package/src/styles/_theme-scope.scss +111 -0
  158. package/src/styles/tokens.coexist.scss +3 -0
  159. package/src/styles/tokens.package.scss +6 -0
  160. package/styles/tokens.coexist.css +27 -0
  161. package/styles/tokens.css +5443 -43
  162. package/types/rt-tools-ui-kit-v2-rich-editor.d.ts +529 -0
  163. package/types/rt-tools-ui-kit-v2.d.ts +2760 -1381
  164. package/rt-tools-ui-kit-v2-0.10.0.tgz +0 -0
  165. /package/src/{lib → rich-editor/lib}/components/chat/rt-chat.component.scss +0 -0
  166. /package/src/{lib → rich-editor/lib}/components/rich-editor/rt-rich-editor.component.scss +0 -0
@@ -43,4 +43,4 @@ rtChatMessageActions let-message>` рисуется в меню «…» у ре
43
43
  - Режим `formatting` подменяет простое поле [`rt-rich-editor`](../rich-editor/CONTEXT.md);
44
44
  тот грузит Quill динамическим импортом.
45
45
  - Неотправленное сообщение (`status: 'failed'`) получает кнопку повтора.
46
- - Файлы можно бросать прямо в ленту — чат обёрнут в [`rt-file-drop`](../file-drop/CONTEXT.md).
46
+ - Файлы можно бросать прямо в ленту — чат обёрнут в [`rt-file-drop`](../../../../lib/components/file-drop/CONTEXT.md).
@@ -33,12 +33,16 @@
33
33
  **Enter отправляет, Shift+Enter переносит строку.** Набор во время IME-композиции игнорируется.
34
34
 
35
35
  **`droppedFiles` — вход, а не выход.** Файлы, брошенные в область
36
- [`rt-file-drop`](../file-drop/CONTEXT.md) снаружи, передаются сюда входом и добавляются к
36
+ [`rt-file-drop`](../../../../lib/components/file-drop/CONTEXT.md) снаружи, передаются сюда входом и добавляются к
37
37
  вложениям; без `attachments` они игнорируются.
38
38
 
39
39
  ## Края
40
40
 
41
41
  - После отправки форма сбрасывается целиком — и текст, и файлы.
42
+ - Ширину поле берёт от хозяина. Своей ширины у него нет намеренно: без объявленной ширины её
43
+ задавала бы `textarea` умолчанием браузера по числу колонок, а оно считается от средней ширины
44
+ знака доступного начертания и не держится между запусками — кадры витрины из-за этого месяцами
45
+ давали то 192 точки, то 195.
42
46
  - В режиме `formatting` текст уезжает пустым, а содержимое едет в `delta` строкой JSON.
43
47
 
44
48
  ## Рядом
@@ -12,6 +12,11 @@
12
12
  background: var(--rt-color-bg-surface);
13
13
  gap: var(--rt-space-2);
14
14
 
15
+ /* Ширина приходит от хозяина, а не от содержимого. Без этой строки её задавала textarea
16
+ без объявленной ширины: такую браузер считает от средней ширины знака первого
17
+ доступного начертания, и величина гуляла между поднятиями витрины — 158 против 161. */
18
+ inline-size: 100%;
19
+
15
20
  &:focus-within {
16
21
  border-color: var(--rt-color-border-strong);
17
22
  }
@@ -26,6 +31,10 @@
26
31
  font-size: var(--rt-text-sm);
27
32
  inline-size: 100%;
28
33
  line-height: var(--rt-leading-snug);
34
+
35
+ /* Своего размера поле ввода хозяину не отдаёт: иначе его ширина по `cols`
36
+ по-прежнему участвовала бы в измерении. */
37
+ min-inline-size: 0;
29
38
  outline: 0;
30
39
  resize: none;
31
40
 
@@ -8,7 +8,7 @@
8
8
  </rt-field>
9
9
  ```
10
10
 
11
- Свои входы поверх общих из [`RtFormControlBase`](../form-control/CONTEXT.md):
11
+ Свои входы поверх общих из [`RtFormControlBase`](../../../../lib/components/form-control/CONTEXT.md):
12
12
 
13
13
  | вход | тип | умолчание |
14
14
  | ------------- | ---------------------- | --------- |
@@ -31,6 +31,6 @@
31
31
 
32
32
  ## Рядом
33
33
 
34
- - [`rt-delta-view`](../delta-view/CONTEXT.md) — показ той же модели без редактирования.
34
+ - [`rt-delta-view`](../../../../lib/components/delta-view/CONTEXT.md) — показ той же модели без редактирования.
35
35
  - [`rt-message-composer`](../message-composer/CONTEXT.md) — использует редактор в режиме
36
36
  форматирования.
@@ -0,0 +1,15 @@
1
+ /* Built by the generator `tools/build-tokens-v2.mjs` from `tokens.source.mjs` — edited there, not here:
2
+ an edit on the spot is lost on the next build, and `pnpm run check:tokens-build` names it. */
3
+
4
+ /* On touch devices an input is not smaller than 16px: WebKit (all of iOS, Chrome included)
5
+ zooms the page on focusing a field with font-size < 16px — hence the horizontal
6
+ shift of the layout. The desktop keeps the dense 14px. */
7
+ @mixin rt-coarse-pointer-tokens {
8
+ @media (pointer: coarse) {
9
+ --rt-input-font-size: var(--rt-text-md);
10
+ }
11
+ }
12
+
13
+ :root {
14
+ @include rt-coarse-pointer-tokens;
15
+ }
@@ -0,0 +1,28 @@
1
+ /* Built by the generator `tools/build-tokens-v2.mjs` from `tokens.source.mjs` — edited there, not here:
2
+ an edit on the spot is lost on the next build, and `pnpm run check:tokens-build` names it. */
3
+
4
+ /* Coexistence with the first kit for the time of migration. The first kit declares ten steps of the
5
+ same names on the page root with its own values, and an application holding both kits gets them
6
+ inside the second kit's components: a 4px rounding becomes 8px. Here the second kit's values stand
7
+ on the preset node, and the preset is drawn by its own scale whatever lies on the root.
8
+
9
+ The selector outweighs the first kit's root by one step wherever the preset flag stands, the page
10
+ root included: there both kits declare the steps on the same node, and without the extra weight
11
+ the order of inclusion decides.
12
+
13
+ The application includes it only while it holds the first kit, and removes it together with it:
14
+ the values repeat the scale, so without the first kit the look does not change. */
15
+
16
+ [data-preset='material']:is(:root, :not(:root)),
17
+ .rt-preset-material:is(:root, :not(:root)) {
18
+ --rt-radius-xs: 2px;
19
+ --rt-radius-sm: 4px;
20
+ --rt-radius-md: 8px;
21
+ --rt-radius-lg: 10px;
22
+ --rt-radius-xl: 15px;
23
+ --rt-radius-2xl: 20px;
24
+ --rt-radius-full: 9999px;
25
+ --rt-shadow-sm: 0 1px 2px rgb(0 0 0 / 5%);
26
+ --rt-shadow-md: 0 4px 6px -1px rgb(0 0 0 / 10%), 0 2px 4px -2px rgb(0 0 0 / 6%);
27
+ --rt-shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 10%), 0 4px 6px -4px rgb(0 0 0 / 6%);
28
+ }
@@ -0,0 +1,99 @@
1
+ // Начертания, которые кит называет, кит и везёт.
2
+ // Прежде токен `--rt-font-family-sans` называл Montserrat, а файлов кит не вёз ни одного: у
3
+ // потребителя кит рисовался тем, что случайно стоит на машине читателя. Отступы, высоты строк и
4
+ // ширины полей рассчитаны под Montserrat, и вид разъезжался там, где никто ничего не правил.
5
+ // Кадры витрины это скрывали: они снимались на машине, где Montserrat установлен.
6
+ // Файлы лежат рядом, в `assets/fonts`, и уезжают в пакет тем же путём, что набор значков. Адрес
7
+ // относительный: сборка потребителя разрешает `url()` от места файла стилей. Исходники партиалов
8
+ // лежат в пакете в `src/styles`, и им подходит адрес по умолчанию. Собранный `styles/tokens.css`
9
+ // лежит на каталог выше исходников, поэтому его сборка задаёт `$rt-fonts-url` своим входом —
10
+ // с прежним адресом сборка приложения не находила ни одного файла.
11
+ // Объявления стоят вне слоя каскада намеренно: `@font-face` — не правило оформления, спорить ему
12
+ // не с чем, и слой на него не действует.
13
+ // Начертание одно на все насыщенности: переменный шрифт несёт ось веса целиком, и четыре
14
+ // объявленных китом веса — 400, 500, 600, 700 — берутся из него же. Файлами по весу это стоило бы
15
+ // вчетверо больше при том же виде.
16
+ // Подмножества разделены по диапазонам знаков: браузер качает только те, чьи знаки на странице
17
+ // встретились. Русской странице достаются кириллица и латиница, а латинское расширение не едет.
18
+
19
+ $rt-fonts-url: '../assets/fonts' !default;
20
+
21
+ @font-face {
22
+ font-display: swap;
23
+ font-family: Montserrat;
24
+ font-style: normal;
25
+ font-weight: 100 900;
26
+ src: url('#{$rt-fonts-url}/montserrat-cyrillic-ext-wght-normal.woff2') format('woff2-variations');
27
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
28
+ }
29
+
30
+ @font-face {
31
+ font-display: swap;
32
+ font-family: Montserrat;
33
+ font-style: italic;
34
+ font-weight: 100 900;
35
+ src: url('#{$rt-fonts-url}/montserrat-cyrillic-ext-wght-italic.woff2') format('woff2-variations');
36
+ unicode-range: U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
37
+ }
38
+
39
+ @font-face {
40
+ font-display: swap;
41
+ font-family: Montserrat;
42
+ font-style: normal;
43
+ font-weight: 100 900;
44
+ src: url('#{$rt-fonts-url}/montserrat-cyrillic-wght-normal.woff2') format('woff2-variations');
45
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
46
+ }
47
+
48
+ @font-face {
49
+ font-display: swap;
50
+ font-family: Montserrat;
51
+ font-style: italic;
52
+ font-weight: 100 900;
53
+ src: url('#{$rt-fonts-url}/montserrat-cyrillic-wght-italic.woff2') format('woff2-variations');
54
+ unicode-range: U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
55
+ }
56
+
57
+ @font-face {
58
+ font-display: swap;
59
+ font-family: Montserrat;
60
+ font-style: normal;
61
+ font-weight: 100 900;
62
+ src: url('#{$rt-fonts-url}/montserrat-latin-ext-wght-normal.woff2') format('woff2-variations');
63
+ unicode-range:
64
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF,
65
+ U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
66
+ }
67
+
68
+ @font-face {
69
+ font-display: swap;
70
+ font-family: Montserrat;
71
+ font-style: italic;
72
+ font-weight: 100 900;
73
+ src: url('#{$rt-fonts-url}/montserrat-latin-ext-wght-italic.woff2') format('woff2-variations');
74
+ unicode-range:
75
+ U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF,
76
+ U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
77
+ }
78
+
79
+ @font-face {
80
+ font-display: swap;
81
+ font-family: Montserrat;
82
+ font-style: normal;
83
+ font-weight: 100 900;
84
+ src: url('#{$rt-fonts-url}/montserrat-latin-wght-normal.woff2') format('woff2-variations');
85
+ unicode-range:
86
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
87
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
88
+ }
89
+
90
+ @font-face {
91
+ font-display: swap;
92
+ font-family: Montserrat;
93
+ font-style: italic;
94
+ font-weight: 100 900;
95
+ src: url('#{$rt-fonts-url}/montserrat-latin-wght-italic.woff2') format('woff2-variations');
96
+ unicode-range:
97
+ U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191,
98
+ U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
99
+ }
@@ -6,9 +6,18 @@
6
6
  // подслой ложится.
7
7
  @forward './layers';
8
8
 
9
+ // Начертания идут первыми: объявление `@font-face` обязано попасть в вывод раньше первого
10
+ // правила, которое им рисует. Без этой строки кит называет Montserrat и не везёт его — у
11
+ // потребителя он рисуется тем, что случайно стоит на машине читателя.
12
+ @forward './fonts';
13
+
9
14
  @forward './primitives';
10
15
  @forward './semantic';
11
16
 
17
+ // Грубый указатель идёт сразу за назначениями: у правила запроса тот же вес, что у корневого, и
18
+ // выигрывает оно местом.
19
+ @forward './coarse-pointer';
20
+
12
21
  // Материальный набор стоит между назначениями и тёмной темой: у признака набора и признака
13
22
  // тёмной темы на корне одинаковая специфичность, и порядок здесь — единственное, чем тёмная
14
23
  // тема выигрывает у набора.
@@ -16,6 +25,10 @@
16
25
 
17
26
  @forward './theme-dark';
18
27
  @forward './theme-dark-rules';
28
+
29
+ // Местный кусок темы стоит последним из наборов свойств: его правила обязаны выигрывать у
30
+ // корневых, а выигрывают они местом, а не силой селектора.
31
+ @forward './theme-scope';
19
32
  @forward './scrollbar';
20
33
 
21
34
  // Раскладка экрана входа: она объявлена классами, а не компонентом, поэтому доехать до
@@ -15,24 +15,24 @@
15
15
  @mixin rt-preset-material-tokens {
16
16
  /* Подложки */
17
17
  --rt-color-bg-page: var(--rt-mat-neutral-5);
18
- --rt-color-bg-surface: var(--rt-mat-neutral-0);
18
+ --rt-color-bg-surface: var(--mat-sys-surface, var(--rt-mat-neutral-0));
19
19
  --rt-color-bg-surface-subtle: var(--rt-mat-overlay-black-4);
20
- --rt-color-bg-surface-subtle-2: var(--rt-mat-neutral-15);
20
+ --rt-color-bg-surface-subtle-2: var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant, var(--rt-mat-neutral-15)));
21
21
  --rt-color-bg-hover: var(--rt-mat-neutral-10);
22
22
  --rt-color-bg-subtle: var(--rt-mat-neutral-10);
23
23
  --rt-color-bg-overlay: var(--rt-mat-overlay-black-32);
24
- --rt-color-bg-inverse: var(--rt-mat-neutral-100);
25
- --rt-color-bg-nav: var(--rt-mat-navy-100); /* марка первого кита: обвязка тёмная в обоих наборах */
24
+ --rt-color-bg-inverse: var(--mat-sys-inverse-surface, var(--rt-mat-neutral-100));
25
+ --rt-color-bg-nav: var(--mat-sys-primary, var(--rt-mat-navy-100)); /* марка первого кита: обвязка тёмная в обоих наборах */
26
26
  --rt-color-bg-page-auth: var(--rt-mat-neutral-5);
27
27
  --rt-color-bg-surface-auth-card: var(--rt-mat-neutral-0);
28
28
 
29
29
  /* Текст */
30
- --rt-color-text-primary: var(--rt-mat-neutral-100);
30
+ --rt-color-text-primary: var(--mat-sys-on-surface, var(--rt-mat-neutral-100));
31
31
  --rt-color-text-muted: var(--rt-mat-neutral-60);
32
- --rt-color-text-disabled: var(--rt-mat-neutral-40);
33
- --rt-color-text-inverse: var(--rt-mat-neutral-0);
34
- --rt-color-text-link: var(--rt-mat-blue-100);
35
- --rt-color-text-link-hover: var(--rt-mat-blue-hover);
32
+ --rt-color-text-disabled: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-100)) 38%, transparent);
33
+ --rt-color-text-inverse: var(--mat-sys-inverse-on-surface, var(--rt-mat-neutral-0));
34
+ --rt-color-text-link: var(--mat-sys-primary, var(--rt-mat-blue-100));
35
+ --rt-color-text-link-hover: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 90%, #000);
36
36
 
37
37
  /* Рамки */
38
38
  --rt-color-border-default: var(--rt-mat-neutral-25);
@@ -41,11 +41,11 @@
41
41
  --rt-color-border-focus: var(--rt-mat-blue-40); /* кольцо фокуса первого кита светлее его действия */
42
42
 
43
43
  /* Действие: подложка, наведение, нажатие, подпись на них и цвет роли на поверхности */
44
- --rt-color-action-primary: var(--rt-mat-blue-100);
45
- --rt-color-action-primary-hover: var(--rt-mat-blue-hover);
46
- --rt-color-action-primary-active: var(--rt-mat-blue-active);
47
- --rt-color-action-primary-subtle: var(--rt-mat-overlay-blue-8);
48
- --rt-color-action-primary-soft: var(--rt-mat-overlay-blue-24);
44
+ --rt-color-action-primary: var(--mat-sys-primary, var(--rt-mat-blue-100));
45
+ --rt-color-action-primary-hover: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 90%, #000);
46
+ --rt-color-action-primary-active: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 80%, #000);
47
+ --rt-color-action-primary-subtle: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 8%, transparent);
48
+ --rt-color-action-primary-soft: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 24%, transparent);
49
49
  --rt-color-action-on-primary: var(--rt-mat-neutral-0);
50
50
  --rt-color-action-secondary: var(--rt-mat-neutral-60);
51
51
  --rt-color-action-secondary-hover: var(--rt-mat-neutral-hover);
@@ -60,27 +60,28 @@
60
60
  --rt-color-action-warning-hover: var(--rt-mat-orange-hover);
61
61
  --rt-color-action-warning-active: var(--rt-mat-orange-active);
62
62
  --rt-color-action-on-warning: var(--rt-mat-neutral-0);
63
- --rt-color-action-danger: var(--rt-mat-red-100);
64
- --rt-color-action-danger-hover: var(--rt-mat-red-hover);
65
- --rt-color-action-danger-active: var(--rt-mat-red-active);
63
+ --rt-color-action-danger: var(--mat-sys-error, var(--rt-mat-red-100));
64
+ --rt-color-action-danger-hover: color-mix(in srgb, var(--mat-sys-error, var(--rt-mat-red-100)) 90%, #000);
65
+ --rt-color-action-danger-active: color-mix(in srgb, var(--mat-sys-error, var(--rt-mat-red-100)) 80%, #000);
66
66
  --rt-color-action-on-danger: var(--rt-mat-neutral-0);
67
- --rt-color-action-info: var(--rt-mat-blue-100);
68
- --rt-color-action-info-hover: var(--rt-mat-blue-hover);
69
- --rt-color-action-info-active: var(--rt-mat-blue-active);
67
+ --rt-color-action-info: var(--mat-sys-primary, var(--rt-mat-blue-100));
68
+ --rt-color-action-info-hover: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 90%, #000);
69
+ --rt-color-action-info-active: color-mix(in srgb, var(--mat-sys-primary, var(--rt-mat-blue-100)) 80%, #000);
70
70
  --rt-color-action-on-info: var(--rt-mat-neutral-0);
71
- --rt-color-action-disabled: var(--rt-mat-neutral-25);
71
+ --rt-color-action-disabled: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-100)) 12%, transparent);
72
72
 
73
73
  /* Состояния: цвет роли и её светлая подложка */
74
74
  --rt-color-state-success: var(--rt-mat-green-100);
75
75
  --rt-color-state-success-bg: var(--rt-mat-green-10);
76
+ --rt-color-state-success-text: var(--rt-mat-green-120);
76
77
  --rt-color-state-warning: var(--rt-mat-orange-100);
77
78
  --rt-color-state-warning-bg: var(--rt-mat-orange-5);
78
79
  --rt-color-state-warning-text: var(--rt-mat-orange-100);
79
- --rt-color-state-danger: var(--rt-mat-red-100);
80
- --rt-color-state-danger-bg: var(--rt-mat-red-10);
81
- --rt-color-state-error-text: var(--rt-mat-red-100);
82
- --rt-color-state-info: var(--rt-mat-blue-100);
83
- --rt-color-state-info-bg: var(--rt-mat-blue-20);
80
+ --rt-color-state-danger: var(--mat-sys-error, var(--rt-mat-red-100));
81
+ --rt-color-state-danger-bg: var(--mat-sys-error-container, var(--rt-mat-red-10));
82
+ --rt-color-state-error-text: var(--mat-sys-error, var(--rt-mat-red-100));
83
+ --rt-color-state-info: var(--mat-sys-primary, var(--rt-mat-blue-100));
84
+ --rt-color-state-info-bg: var(--mat-sys-primary-container, var(--rt-mat-blue-20));
84
85
 
85
86
  /* Рельса шагов */
86
87
  --rt-color-stepper-track: var(--rt-mat-neutral-30);
@@ -90,9 +91,183 @@
90
91
  --rt-color-skeleton-base: var(--rt-mat-neutral-10);
91
92
  --rt-color-skeleton-wave: var(--rt-mat-neutral-25);
92
93
 
94
+ /* Шапка таблицы первого кита залита тем же цветом, что залитое поле Material. */
95
+ --rt-color-table-head-bg: var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant, var(--rt-mat-overlay-black-4)));
96
+
97
+ /* Черта снизу у залитого поля Material — цвет on-surface-variant темы. */
98
+ --rt-color-field-fill-underline: var(--mat-sys-on-surface-variant, var(--rt-mat-neutral-30));
99
+
100
+ /* Поиск списка первого кита — обведённое или залитое поле Material при плотности −1:
101
+ 52px, скругление 4px, рамка цвета outline темы, внутри прозрачное. Ступени 52px нет, высота собрана из ступени
102
+ xl без ступени 1. */
103
+ --rt-list-search-height: calc(var(--rt-control-height-xl) - var(--rt-space-1));
104
+ --rt-list-search-radius: var(--rt-radius-sm);
105
+ --rt-list-search-color-border: var(--mat-sys-outline, var(--rt-mat-neutral-25));
106
+ --rt-list-search-color-bg: transparent;
107
+ --rt-list-search-width: calc(var(--rt-size-64) + var(--rt-size-24));
108
+ --rt-list-search-padding-x: calc(var(--rt-space-2) + var(--rt-space-1) - var(--rt-border-width-thin));
109
+ --rt-list-search-gap: var(--rt-space-4);
110
+ --rt-list-search-font-size: var(--rt-text-md);
111
+ --rt-list-search-icon-size: var(--rt-size-6);
112
+ --rt-list-search-icon-color: var(--mat-sys-on-surface-variant, var(--rt-mat-neutral-60));
113
+ --rt-list-search-color-placeholder: var(--mat-sys-on-surface-variant, var(--rt-mat-neutral-60));
114
+
115
+ /* Панель настройки колонок первого кита: плашка колонки залита цветом выбранного пункта
116
+ Material, значки — в тоне on-surface-variant темы. Сняты с панели на витрине первого кита. */
117
+ --rt-list-settings-item-bg: var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container, var(--rt-mat-neutral-10)));
118
+ --rt-list-settings-icon-color: var(--mat-sys-on-surface-variant, var(--rt-mat-neutral-60));
119
+
120
+ /* Кнопки действий панели списка — mat-mini-fab первого кита: круг без заливки с подъёмом 6,
121
+ под указателем подъём 8 и тёмный значок вместо серого; значок 24px, промежуток 16px. */
122
+ --rt-list-action-gap: var(--rt-space-md);
123
+ --rt-list-action-divider-height: var(--rt-size-8);
124
+ --rt-list-action-radius: var(--rt-radius-full);
125
+ --rt-list-action-shadow: var(--rt-mat-shadow-fab);
126
+ --rt-list-action-shadow-hover: var(--rt-mat-shadow-fab-hover);
127
+ --rt-list-action-icon-size: var(--rt-size-6);
128
+ --rt-list-action-color: var(--rt-mat-neutral-60);
129
+ --rt-list-table-icon-size: var(--rt-size-6);
130
+ --rt-list-table-icon-color: var(--mat-sys-on-surface-variant, var(--rt-mat-neutral-60));
131
+ --rt-list-table-head-divider-color: var(--mat-sys-outline, var(--rt-mat-neutral-30));
132
+ --rt-list-table-button-size: calc(var(--rt-size-8) + var(--rt-size-1));
133
+ --rt-list-table-button-radius: var(--rt-radius-full);
134
+ --rt-list-copy-button-size: var(--rt-size-6);
135
+ --rt-list-copy-button-radius: var(--rt-mat-radius-5);
136
+ --rt-list-settings-item-radius: var(--rt-mat-radius-5);
137
+ --rt-list-filter-line-height: var(--rt-size-6);
138
+ --rt-list-copy-button-bg: var(--mat-fab-small-container-color, var(--rt-mat-neutral-0));
139
+ --rt-list-copy-button-bg-hover: var(--mat-fab-small-container-color, var(--rt-mat-neutral-0));
140
+ --rt-list-copy-button-color: var(--rt-mat-neutral-60);
141
+ --rt-list-action-color-hover: var(--rt-mat-neutral-100);
142
+ --rt-list-action-color-bg-hover: transparent;
143
+ --rt-list-toolbar-padding-top: var(--rt-space-4);
144
+ --rt-list-toolbar-padding-bottom: 0px;
145
+ --rt-list-toolbar-gap: var(--rt-space-4);
146
+ --rt-list-empty-icon-wrap-size: var(--rt-size-12);
147
+ --rt-list-empty-icon-wrap-bg: transparent;
148
+ --rt-list-empty-icon-size: var(--rt-size-12);
149
+ --rt-list-empty-title-size: var(--rt-text-3xl);
150
+ --rt-list-empty-title-weight: var(--rt-font-weight-regular);
151
+ --rt-list-selector-label-color: var(--rt-mat-neutral-60);
152
+
153
+ /* Полоса страниц первого кита: ячейки 34px в серой рамке со скруглением 12px, промежуток 8px,
154
+ текущая залита серым с белой цифрой, стрелки такими же ячейками. Подписи диапазона нет,
155
+ номера и выбор размера стоят рядом через 32px, поле размера 32px высотой. */
156
+ --rt-pagination-justify: flex-start;
157
+ --rt-pagination-gap: var(--rt-space-xl);
158
+ --rt-pagination-padding-y: var(--rt-space-sm);
159
+ --rt-pagination-padding-x: 0px;
160
+ --rt-pagination-nav-gap: var(--rt-space-sm);
161
+ --rt-pagination-range-display: none;
162
+ --rt-pagination-box-size: calc(var(--rt-space-xl) + 2 * var(--rt-border-width-thin));
163
+ --rt-pagination-box-radius: calc(var(--rt-radius-lg) + var(--rt-radius-xs));
164
+ --rt-pagination-box-color-border: var(--rt-mat-neutral-30);
165
+ --rt-pagination-box-color-text: var(--rt-mat-neutral-60);
166
+ --rt-pagination-box-current-color-bg: var(--rt-mat-neutral-60);
167
+ --rt-pagination-box-current-color-text: var(--rt-mat-neutral-0);
168
+ --rt-pagination-box-current-color-border: var(--rt-mat-neutral-30);
169
+ --rt-pagination-box-current-font-weight: var(--rt-font-weight-regular);
170
+ --rt-pagination-arrow-size: calc(var(--rt-space-xl) + 2 * var(--rt-border-width-thin));
171
+ --rt-pagination-arrow-radius: calc(var(--rt-radius-lg) + var(--rt-radius-xs));
172
+ --rt-pagination-arrow-shadow: inset 0 0 0 var(--rt-border-width-thin) var(--rt-mat-neutral-30);
173
+ --rt-pagination-arrow-color: var(--rt-mat-neutral-60);
174
+ --rt-pagination-per-page-gap: calc(var(--rt-space-sm) + var(--rt-space-xs));
175
+ --rt-pagination-per-page-label-white-space: nowrap;
176
+ --rt-pagination-field-height: var(--rt-control-height-sm);
177
+ --rt-pagination-field-radius: calc(var(--rt-radius-lg) + var(--rt-radius-xs));
178
+ --rt-pagination-field-color-border: var(--rt-mat-neutral-30);
179
+ --rt-pagination-field-padding-x: var(--rt-space-sm);
180
+ --rt-pagination-field-color-bg: transparent;
181
+ --rt-pagination-field-color-text: var(--rt-mat-neutral-60);
182
+
183
+ /* Переключатель первого кита — свой, не Material: серый трек в рамке, включённый — в цвете
184
+ действия темы, как у кнопки. Тёмная тема отвечает на эти имена своими цветами. */
185
+ --rt-toggle-color-track: var(--rt-mat-neutral-20);
186
+ --rt-toggle-color-track-on: var(--rt-color-action-primary);
187
+ --rt-toggle-color-border: var(--rt-mat-neutral-30);
188
+
93
189
  /* Кнопка и поле первого кита скруглены заметно сильнее: 1.5rem против 10px.
94
190
  Значение снято числом — ссылки на токены первого кита во второй кит не едут. */
95
191
  --rt-radius-control: 1.5rem;
192
+
193
+ /* Панели над страницей — скругления и подъём первого кита: меню 4px, выпадающий список
194
+ скруглён только снизу, подсказка 4px без тени. Тень — подъём 2 Material, как у mat-menu и
195
+ mat-select. */
196
+ --rt-overlay-menu-radius: var(--rt-mat-radius-4);
197
+ --rt-overlay-menu-shadow: var(--mat-sys-level2, var(--rt-mat-shadow-level-2));
198
+ --rt-overlay-select-radius: 0 0 var(--rt-mat-radius-4) var(--rt-mat-radius-4);
199
+ --rt-overlay-select-shadow: var(--mat-sys-level2, var(--rt-mat-shadow-level-2));
200
+ --rt-overlay-tooltip-radius: var(--rt-mat-radius-4);
201
+ --rt-overlay-tooltip-shadow: none;
202
+
203
+ /* Меню строки — mat-menu первого кита: фон контейнера Material, отступ 8px сверху и снизу,
204
+ подписи весом 500, опасный пункт красным первого кита. Выпадающий список — mat-select: пункты
205
+ 16px, выбранный — фон текста 12% без жирного и с галочкой. */
206
+ --rt-overlay-menu-bg: var(--mat-menu-container-color, var(--rt-mat-neutral-0));
207
+ --rt-overlay-menu-padding-y: var(--rt-space-sm);
208
+ --rt-overlay-menu-item-weight: var(--rt-font-weight-medium);
209
+ --rt-overlay-menu-danger-color: var(--rt-mat-red-100);
210
+ --rt-overlay-select-option-font-size: var(--rt-text-md);
211
+ --rt-overlay-select-selected-bg: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-100)) 12%, transparent);
212
+ --rt-overlay-select-selected-weight: var(--rt-font-weight-regular);
213
+ --rt-overlay-select-check-display: inline-flex;
214
+ --rt-overlay-menu-current-bg: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-100)) 12%, transparent);
215
+ --rt-overlay-menu-min-width: var(--rt-mat-menu-min-width);
216
+ --rt-overlay-menu-item-min-height: var(--rt-size-12);
217
+ --rt-overlay-menu-item-padding-y: 0px;
218
+ --rt-overlay-menu-item-padding-x: var(--rt-size-3);
219
+ --rt-overlay-menu-item-icon-size: var(--rt-size-6);
220
+ --rt-overlay-menu-sm-item-min-height: var(--rt-mat-menu-sm-item-height);
221
+ --rt-overlay-menu-sm-item-icon-size: var(--rt-mat-menu-sm-icon-size);
222
+ --rt-overlay-menu-danger-label-color: var(--rt-color-text-primary);
223
+ --rt-overlay-select-option-min-height: var(--rt-size-12);
224
+ --rt-overlay-select-panel-border-width: 0px;
225
+ --rt-icon-button-disabled-opacity: 1;
226
+ --rt-icon-button-disabled-color: var(--rt-color-text-disabled);
227
+ --rt-icon-button-disabled-fill: 0%;
228
+ }
229
+
230
+ /* The preset under a dark theme: the names the preset reads from Material keep the Material chain,
231
+ and its last fallback is the dark answer. Material switches its own colours with the application's
232
+ theme, so the search, the fields and the pagination follow the page; without Material the look is
233
+ the former dark one. A name mixed by `color-mix` has no fallback to swap and stays on its dark answer. */
234
+ @mixin rt-preset-material-dark-tokens {
235
+ --rt-color-bg-surface: var(--mat-sys-surface, var(--rt-charcoal-800));
236
+ --rt-color-bg-surface-subtle-2: var(--mat-form-field-filled-container-color, var(--mat-sys-surface-variant, var(--rt-charcoal-950)));
237
+ --rt-color-bg-inverse: var(--mat-sys-inverse-surface, var(--rt-neutral-0));
238
+ --rt-color-text-primary: var(--mat-sys-on-surface, var(--rt-neutral-50));
239
+ --rt-color-text-disabled: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-0)) 38%, transparent);
240
+ --rt-color-text-inverse: var(--mat-sys-inverse-on-surface, var(--rt-neutral-900));
241
+ --rt-color-text-link: var(--mat-sys-primary, var(--rt-brand-300));
242
+ --rt-color-border-subtle: var(--rt-mat-dark-20);
243
+ --rt-color-action-disabled: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-0)) 12%, transparent);
244
+ --rt-color-state-danger-bg: var(--mat-sys-error-container, color-mix(in srgb, var(--rt-danger-500) 12%, transparent));
245
+ --rt-color-state-error-text: var(--mat-sys-error, var(--rt-danger-500));
246
+ --rt-color-state-info-bg: var(--mat-sys-primary-container, color-mix(in srgb, var(--rt-info-500) 12%, transparent));
247
+ --rt-color-table-head-bg: var(
248
+ --mat-form-field-filled-container-color,
249
+ var(--mat-sys-surface-variant, var(--rt-color-bg-surface-subtle))
250
+ );
251
+ --rt-color-field-fill-underline: var(--mat-sys-on-surface-variant, var(--rt-color-border-strong));
252
+ --rt-list-search-color-border: var(--mat-sys-outline, var(--rt-input-color-border));
253
+ --rt-list-search-color-bg: transparent;
254
+ --rt-list-search-icon-color: var(--mat-sys-on-surface-variant, var(--rt-input-icon-color));
255
+ --rt-list-search-color-placeholder: var(--mat-sys-on-surface-variant, var(--rt-input-color-text-placeholder));
256
+ --rt-list-settings-item-bg: var(--mat-option-selected-state-layer-color, var(--mat-sys-secondary-container, var(--rt-color-bg-subtle)));
257
+ --rt-list-settings-icon-color: var(--mat-sys-on-surface-variant, var(--rt-color-text-muted));
258
+ --rt-list-table-icon-color: var(--mat-sys-on-surface-variant, var(--rt-color-text-primary));
259
+ --rt-list-table-head-divider-color: var(--mat-sys-outline, var(--rt-color-border-strong));
260
+ --rt-list-copy-button-bg: var(--mat-fab-small-container-color, transparent);
261
+ --rt-list-copy-button-bg-hover: var(--mat-fab-small-container-color, var(--rt-icon-button-color-bg-hover));
262
+ --rt-pagination-box-color-border: var(--rt-mat-dark-30);
263
+ --rt-pagination-box-color-text: var(--rt-mat-neutral-40);
264
+ --rt-pagination-box-current-color-bg: var(--rt-mat-neutral-40);
265
+ --rt-pagination-box-current-color-text: var(--rt-mat-neutral-0);
266
+ --rt-pagination-box-current-color-border: var(--rt-mat-dark-30);
267
+ --rt-pagination-arrow-shadow: inset 0 0 0 var(--rt-border-width-thin) var(--rt-mat-dark-30);
268
+ --rt-overlay-menu-bg: var(--mat-menu-container-color, var(--rt-color-bg-surface));
269
+ --rt-overlay-select-selected-bg: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-0)) 12%, transparent);
270
+ --rt-overlay-menu-current-bg: color-mix(in srgb, var(--mat-sys-on-surface, var(--rt-mat-neutral-0)) 12%, transparent);
96
271
  }
97
272
 
98
273
  :root[data-preset='material'],
@@ -82,6 +82,10 @@
82
82
  нажатие действия берут именно эти ступени, и такая пара их сливала. */
83
83
  --rt-success-50: #ecfdf5;
84
84
  --rt-success-100: #eafaf5;
85
+
86
+ /* Ступень 400 — на шаг светлоты выше 500 тем же шагом, что 600 и 700 ниже: подпись успеха
87
+ на графите тёмной темы. Сама 500 на графите порога контраста для текста не берёт. */
88
+ --rt-success-400: #31ac7d;
85
89
  --rt-success-500: #059669;
86
90
  --rt-success-600: #017f58;
87
91
  --rt-success-700: #006848;
@@ -137,11 +141,15 @@
137
141
 
138
142
  /* Typography — font-family */
139
143
 
140
- /* Noto-начертания идут после Montserrat запасными: они подхватывают тайский,
141
- хангыль и деванагари, которых в основном шрифте нет, и не трогают латиницу
142
- с кириллицей — браузер берёт из них только недостающие знаки. */
143
- --rt-font-family-sans: 'Montserrat', 'Noto Sans Thai', 'Noto Sans KR', 'Noto Sans Devanagari', system-ui, sans-serif;
144
- --rt-font-family-mono: 'JetBrains Mono', ui-monospace, monospace;
144
+ /* Montserrat кит везёт сам — объявления в `_fonts.scss`, файлы в `assets/fonts`.
145
+ Остальные имена здесь не стоят: названное, но не привезённое семейство кит
146
+ обещает и не даёт, и у потребителя рисуется то, что случайно стоит на машине
147
+ читателя. Письменности, которых в Montserrat нет — тайская, хангыль,
148
+ деванагари, — добавляются потребителем: как, сказано в README кита.
149
+ Одноширинного начертания кит тоже не везёт, поэтому называет только
150
+ системные. */
151
+ --rt-font-family-sans: 'Montserrat', system-ui, sans-serif;
152
+ --rt-font-family-mono: ui-monospace, monospace;
145
153
 
146
154
  /* Typography — text size scale */
147
155
 
@@ -306,6 +314,12 @@
306
314
  --rt-mat-neutral-80: #323033;
307
315
  --rt-mat-neutral-100: #181818;
308
316
 
317
+ /* Тёмные нейтральные первого кита: рамки и фон его тёмной темы */
318
+ --rt-mat-dark-10: #2e2d31;
319
+ --rt-mat-dark-20: #3f3e43;
320
+ --rt-mat-dark-30: #4a494e;
321
+ --rt-mat-dark-40: #5c5b60;
322
+
309
323
  /* Материальный набор: синий — действие, ссылка, кольцо фокуса */
310
324
  --rt-mat-blue-20: #eaedfc;
311
325
  --rt-mat-blue-40: #b3ceef;
@@ -339,6 +353,11 @@
339
353
  --rt-mat-green-80: #21b18e;
340
354
  --rt-mat-green-100: #01af8d;
341
355
 
356
+ /* Своей тёмной ступени зелёного у первого кита нет, а его 100 на белом даёт 2.8:1 — подпись
357
+ успеха ею не читается. Ступень 120 взята от 100 двумя шагами светлоты вниз (OKLCH, тон и
358
+ цветность те же): это ближайшая к виду первого кита ступень, что берёт порог текста. */
359
+ --rt-mat-green-120: #008465;
360
+
342
361
  /* Материальный набор: марка первого кита и подложка его обвязки */
343
362
  --rt-mat-navy-100: #0d1c2b;
344
363
 
@@ -361,4 +380,21 @@
361
380
  --rt-mat-red-active: color-mix(in srgb, var(--rt-mat-red-100) 80%, #000);
362
381
  --rt-mat-neutral-hover: color-mix(in srgb, var(--rt-mat-neutral-60) 90%, #000);
363
382
  --rt-mat-neutral-active: color-mix(in srgb, var(--rt-mat-neutral-60) 80%, #000);
383
+
384
+ /* Материальный набор: тени круглой кнопки действия первого кита — подъём 6 в покое и 8 под
385
+ указателем, как у mat-mini-fab. Составное значение — ступень целиком, по частям не собирается. */
386
+ --rt-mat-shadow-fab: 0 3px 5px -1px rgb(0 0 0 / 20%), 0 6px 10px 0 rgb(0 0 0 / 14%), 0 1px 18px 0 rgb(0 0 0 / 12%);
387
+ --rt-mat-shadow-fab-hover: 0 5px 5px -3px rgb(0 0 0 / 20%), 0 8px 10px 1px rgb(0 0 0 / 14%), 0 3px 14px 2px rgb(0 0 0 / 12%);
388
+
389
+ /* Материальный набор: подъём 2 Material — тень меню и выпадающего списка первого кита */
390
+ --rt-mat-shadow-level-2: 0 3px 3px -2px rgb(0 0 0 / 20%), 0 3px 4px 0 rgb(0 0 0 / 14%), 0 1px 8px 0 rgb(0 0 0 / 12%);
391
+
392
+ /* Материальный набор: скругления первого кита. Свои ступени, а не --rt-radius-*: первый кит
393
+ объявляет те же имена на корне страницы своими значениями, и без файла совместимости набор
394
+ рисовал бы его числа вместо своих. */
395
+ --rt-mat-radius-4: 4px;
396
+ --rt-mat-radius-5: 5px;
397
+ --rt-mat-menu-min-width: 112px;
398
+ --rt-mat-menu-sm-item-height: 38px;
399
+ --rt-mat-menu-sm-icon-size: 13px;
364
400
  }