gbs-add-block 2.1.0 → 2.3.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 (129) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -134
  2. package/.gbs/skills/gbs-components/references/install.md +25 -3
  3. package/.gbs/skills/gbs-components/references/styling.md +246 -207
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +154 -23
  6. package/index.cjs +212 -3
  7. package/package.json +41 -10
  8. package/schema/passport-v1.schema.json +204 -0
  9. package/source/beta-components/accordion/passport.json +259 -0
  10. package/source/beta-components/accordion/styles.css +207 -208
  11. package/source/beta-components/alert/passport.json +250 -0
  12. package/source/beta-components/alert/styles.css +154 -155
  13. package/source/beta-components/avatar/passport.json +294 -0
  14. package/source/beta-components/avatar/styles.css +225 -226
  15. package/source/beta-components/badge/passport.json +332 -0
  16. package/source/beta-components/badge/styles.css +203 -204
  17. package/source/beta-components/breadcrumb/passport.json +243 -0
  18. package/source/beta-components/breadcrumb/styles.css +138 -140
  19. package/source/beta-components/button/passport.json +402 -0
  20. package/source/beta-components/button/passport.manual.json +31 -0
  21. package/source/beta-components/button/styles.css +232 -234
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -232
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -213
  26. package/source/beta-components/combobox/passport.json +456 -0
  27. package/source/beta-components/combobox/styles.css +419 -417
  28. package/source/beta-components/data-grid/agent/coerce.ts +368 -0
  29. package/source/beta-components/data-grid/agent/contract.ts +410 -0
  30. package/source/beta-components/data-grid/agent/dataset.ts +92 -0
  31. package/source/beta-components/data-grid/agent/engine.ts +470 -0
  32. package/source/beta-components/data-grid/agent/executors.ts +155 -0
  33. package/source/beta-components/data-grid/agent/index.ts +79 -0
  34. package/source/beta-components/data-grid/agent/intent.ts +324 -0
  35. package/source/beta-components/data-grid/agent/operations.ts +335 -0
  36. package/source/beta-components/data-grid/agent/validate.ts +630 -0
  37. package/source/beta-components/data-grid/agent/webmcp.ts +107 -0
  38. package/source/beta-components/data-grid/index.ts +14 -7
  39. package/source/beta-components/data-grid/passport.json +1051 -0
  40. package/source/beta-components/data-grid/passport.manual.json +255 -0
  41. package/source/beta-components/data-grid/react/AskGrid.tsx +164 -0
  42. package/source/beta-components/data-grid/react/DataGrid.tsx +39 -0
  43. package/source/beta-components/data-grid/styles.css +874 -716
  44. package/source/beta-components/date-picker/passport.json +407 -0
  45. package/source/beta-components/date-picker/styles.css +445 -446
  46. package/source/beta-components/dialog/passport.json +344 -0
  47. package/source/beta-components/dialog/styles.css +280 -279
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -396
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -297
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -223
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -240
  56. package/source/beta-components/number-input/passport.json +541 -0
  57. package/source/beta-components/number-input/styles.css +230 -231
  58. package/source/beta-components/popover/passport.json +238 -0
  59. package/source/beta-components/popover/styles.css +148 -147
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -201
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +269 -270
  64. package/source/beta-components/shared/core/agent/adapter.ts +65 -0
  65. package/source/beta-components/shared/core/agent/history.ts +120 -0
  66. package/source/beta-components/shared/core/agent/index.ts +46 -0
  67. package/source/beta-components/shared/core/agent/numbers.ts +217 -0
  68. package/source/beta-components/shared/core/agent/schema.ts +180 -0
  69. package/source/beta-components/shared/core/agent/types.ts +169 -0
  70. package/source/beta-components/shared/core/agent/webmcp.ts +328 -0
  71. package/source/beta-components/shared/index.ts +9 -0
  72. package/source/beta-components/shared/react/GramproAIProvider.tsx +50 -0
  73. package/source/beta-components/shared/react/useAskAgent.ts +217 -0
  74. package/source/beta-components/shared/styles.css +79 -0
  75. package/source/beta-components/shared/version.json +4 -4
  76. package/source/beta-components/shared/version.ts +6 -6
  77. package/source/beta-components/skeleton/passport.json +251 -0
  78. package/source/beta-components/skeleton/styles.css +185 -187
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +173 -174
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +227 -229
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +263 -264
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -160
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -282
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -73
  91. package/tools/env.cjs +61 -0
  92. package/tools/passport/cli.cjs +79 -0
  93. package/tools/passport/extract.cjs +493 -0
  94. package/tools/passport/index.cjs +185 -0
  95. package/tools/passport/merge.cjs +131 -0
  96. package/tools/passport/policy.cjs +65 -0
  97. package/tools/passport/validate.cjs +277 -0
  98. package/tools/ts-require.cjs +79 -0
  99. package/source/beta-components/accordion/__tests__/core.test.ts +0 -58
  100. package/source/beta-components/alert/__tests__/core.test.ts +0 -17
  101. package/source/beta-components/avatar/__tests__/core.test.ts +0 -88
  102. package/source/beta-components/badge/__tests__/core.test.ts +0 -46
  103. package/source/beta-components/breadcrumb/__tests__/core.test.ts +0 -58
  104. package/source/beta-components/button/__tests__/core.test.ts +0 -31
  105. package/source/beta-components/card/__tests__/core.test.ts +0 -57
  106. package/source/beta-components/checkbox/__tests__/core.test.ts +0 -40
  107. package/source/beta-components/combobox/__tests__/core.test.ts +0 -134
  108. package/source/beta-components/data-grid/__tests__/core.test.ts +0 -356
  109. package/source/beta-components/data-grid/__tests__/export.test.ts +0 -70
  110. package/source/beta-components/data-grid/__tests__/pdf.test.ts +0 -209
  111. package/source/beta-components/date-picker/__tests__/core.test.ts +0 -273
  112. package/source/beta-components/dialog/__tests__/core.test.ts +0 -86
  113. package/source/beta-components/file-uploader/__tests__/core.test.ts +0 -395
  114. package/source/beta-components/input/__tests__/core.test.ts +0 -75
  115. package/source/beta-components/menu/__tests__/core.test.ts +0 -120
  116. package/source/beta-components/modal/__tests__/core.test.ts +0 -55
  117. package/source/beta-components/number-input/__tests__/core.test.ts +0 -151
  118. package/source/beta-components/progress/__tests__/core.test.ts +0 -56
  119. package/source/beta-components/radio-group/__tests__/core.test.ts +0 -64
  120. package/source/beta-components/shared/__tests__/boundaries.test.ts +0 -95
  121. package/source/beta-components/shared/__tests__/core.test.ts +0 -55
  122. package/source/beta-components/shared/__tests__/position.test.ts +0 -143
  123. package/source/beta-components/skeleton/__tests__/core.test.ts +0 -41
  124. package/source/beta-components/spinner/__tests__/core.test.ts +0 -48
  125. package/source/beta-components/switch/__tests__/core.test.ts +0 -64
  126. package/source/beta-components/tabs/__tests__/core.test.ts +0 -51
  127. package/source/beta-components/textarea/__tests__/core.test.ts +0 -38
  128. package/source/beta-components/toaster/__tests__/core.test.ts +0 -256
  129. package/source/beta-components/tooltip/__tests__/core.test.ts +0 -42
@@ -1,240 +1,241 @@
1
- /*
2
- * Modal styles.
3
- *
4
- * Tokens read the shared --gbs-* variables when they are set on an ancestor
5
- * (set them on :root to theme every component at once) and fall back to the
6
- * same default palette otherwise. Rules live in the `gbs` layer. Declare
7
- * where that sits in your global CSS — e.g. `@layer reset, gbs, app,
8
- * utilities;` — and anything in a later layer, Tailwind utilities included,
9
- * overrides them.
10
- */
11
-
12
- @layer gbs {
13
- .md-root {
14
- --md-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
15
- --md-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
16
- --md-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
17
- --md-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
18
- --md-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
19
- --md-footer-bg: var(--gbs-header-bg, var(--dg-header-bg, light-dark(#fafafa, #111114)));
20
- --md-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
21
- --md-shadow: 0 24px 64px -16px light-dark(rgb(0 0 0 / 0.3), rgb(0 0 0 / 0.8));
22
- --md-backdrop: var(--gbs-backdrop, light-dark(rgb(9 9 11 / 0.45), rgb(0 0 0 / 0.65)));
23
- --md-radius: var(--gbs-radius, var(--dg-radius, 12px));
24
- --md-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
25
- --md-width: 520px;
26
- --md-gutter: 16px;
27
- --md-px: 20px;
28
- --md-duration: 200ms;
29
- --md-enter: 0 8px;
30
-
31
- color-scheme: inherit;
32
- box-sizing: border-box;
33
- width: min(var(--md-width), 100vw - 2 * var(--md-gutter));
34
- max-width: none;
35
- max-height: calc(100dvh - 2 * var(--md-gutter));
36
- margin: auto;
37
- padding: 0;
38
- overflow: hidden;
39
- border: 1px solid var(--md-border);
40
- border-radius: var(--md-radius);
41
- background: var(--md-bg);
42
- color: var(--md-fg);
43
- box-shadow: var(--md-shadow);
44
- font-size: var(--md-font-size);
45
- line-height: 1.5;
46
- opacity: 0;
47
- translate: var(--md-enter);
48
- transition:
49
- opacity var(--md-duration) ease,
50
- translate var(--md-duration) ease,
51
- overlay var(--md-duration) allow-discrete,
52
- display var(--md-duration) allow-discrete;
53
- }
54
- .md-root[open] {
55
- display: flex;
56
- flex-direction: column;
57
- opacity: 1;
58
- translate: 0 0;
59
- }
60
- @starting-style {
61
- .md-root[open] {
62
- opacity: 0;
63
- translate: var(--md-enter);
64
- }
65
- }
66
-
67
- .md-root::backdrop {
68
- background: var(--md-backdrop, rgb(9 9 11 / 0.45));
69
- opacity: 0;
70
- transition:
71
- opacity var(--md-duration) ease,
72
- overlay var(--md-duration) allow-discrete,
73
- display var(--md-duration) allow-discrete;
74
- }
75
- .md-root[open]::backdrop {
76
- opacity: 1;
77
- }
78
- @starting-style {
79
- .md-root[open]::backdrop {
80
- opacity: 0;
81
- }
82
- }
83
-
84
- :where(.dark, [data-theme="dark"]) .md-root {
85
- color-scheme: dark;
86
- }
87
- :where(.light, [data-theme="light"]) .md-root {
88
- color-scheme: light;
89
- }
90
-
91
- :where(.md-root) *,
92
- :where(.md-root) *::before,
93
- :where(.md-root) *::after {
94
- box-sizing: border-box;
95
- }
96
-
97
- /* The page behind an open modal doesn't scroll. */
98
- :root:has(.md-root[open]) {
99
- overflow: hidden;
100
- }
101
-
102
- /* --------------------------------------------------------------- sizes */
103
-
104
- .md-root[data-size="sm"] {
105
- --md-width: 400px;
106
- }
107
- .md-root[data-size="lg"] {
108
- --md-width: 720px;
109
- }
110
- .md-root[data-size="xl"] {
111
- --md-width: 960px;
112
- }
113
- .md-root[data-size="full"] {
114
- --md-width: 100vw;
115
- --md-gutter: 0px;
116
- height: 100dvh;
117
- max-height: 100dvh;
118
- border: 0;
119
- border-radius: 0;
120
- }
121
-
122
- /* ----------------------------------------------------------- placement */
123
-
124
- .md-root[data-placement="top"] {
125
- margin-top: min(10vh, 80px);
126
- }
127
-
128
- .md-root:is([data-placement="left"], [data-placement="right"]) {
129
- --md-gutter: 0px;
130
- height: 100dvh;
131
- max-height: 100dvh;
132
- border-block: 0;
133
- border-radius: 0;
134
- }
135
- .md-root[data-placement="left"] {
136
- --md-enter: -100% 0;
137
- margin: 0 auto 0 0;
138
- border-inline-start: 0;
139
- }
140
- .md-root[data-placement="right"] {
141
- --md-enter: 100% 0;
142
- margin: 0 0 0 auto;
143
- border-inline-end: 0;
144
- }
145
- .md-root[data-placement="bottom"] {
146
- --md-enter: 0 100%;
147
- width: 100vw;
148
- max-height: min(var(--md-width), 90dvh);
149
- margin: auto 0 0;
150
- border-bottom: 0;
151
- border-radius: var(--md-radius) var(--md-radius) 0 0;
152
- }
153
-
154
- /* -------------------------------------------------------------- layout */
155
-
156
- .md-header {
157
- display: flex;
158
- flex: none;
159
- align-items: flex-start;
160
- gap: 12px;
161
- padding: 16px 12px 12px var(--md-px);
162
- }
163
- .md-heading {
164
- flex: 1 1 auto;
165
- min-width: 0;
166
- }
167
- .md-title {
168
- margin: 0;
169
- font-size: 1.15em;
170
- font-weight: 600;
171
- line-height: 1.35;
172
- }
173
- .md-description {
174
- margin: 4px 0 0;
175
- color: var(--md-muted);
176
- }
177
- .md-close {
178
- display: inline-grid;
179
- flex: none;
180
- place-items: center;
181
- width: 30px;
182
- height: 30px;
183
- margin-top: -4px;
184
- padding: 0;
185
- border: 0;
186
- border-radius: 6px;
187
- background: transparent;
188
- color: var(--md-muted);
189
- cursor: pointer;
190
- }
191
- .md-close:hover {
192
- background: var(--md-hover);
193
- color: var(--md-fg);
194
- }
195
- .md-close:focus-visible {
196
- outline: 2px solid var(--md-focus);
197
- outline-offset: 1px;
198
- }
199
-
200
- .md-body {
201
- flex: 1 1 auto;
202
- min-height: 0;
203
- padding: 0 var(--md-px) 20px;
204
- overflow: auto;
205
- overscroll-behavior: contain;
206
- }
207
- .md-body:first-child {
208
- padding-top: 20px;
209
- }
210
- .md-body:focus-visible {
211
- outline: 2px solid var(--md-focus);
212
- outline-offset: -2px;
213
- }
214
-
215
- .md-footer {
216
- display: flex;
217
- flex: none;
218
- flex-wrap: wrap;
219
- align-items: center;
220
- justify-content: flex-end;
221
- gap: 8px;
222
- padding: 12px var(--md-px);
223
- border-top: 1px solid var(--md-border);
224
- background: var(--md-footer-bg);
225
- }
226
-
227
- @media (prefers-reduced-motion: reduce) {
228
- .md-root,
229
- .md-root::backdrop {
230
- --md-enter: 0 0;
231
- transition-duration: 0s;
232
- }
233
- }
234
-
235
- @media (forced-colors: active) {
236
- .md-root {
237
- border: 1px solid CanvasText;
238
- }
239
- }
240
- }
1
+ /*
2
+ * Modal styles.
3
+ *
4
+ * Tokens read the shared --gbs-* variables when they are set on an ancestor
5
+ * (set them on :root to theme every component at once) and fall back to the
6
+ * same default palette otherwise. Rules are unlayered: they beat a framework
7
+ * reset on specificity, and lose to anything you pass through `className`.
8
+ * With Tailwind v4, import this file after the framework and inside its
9
+ * components layer - see the README.
10
+ */
11
+
12
+ .md-root {
13
+ --md-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
14
+ --md-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
15
+ --md-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
16
+ --md-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
17
+ --md-hover: var(--gbs-hover, var(--dg-hover, light-dark(#f4f4f5, #1f1f23)));
18
+ --md-footer-bg: var(--gbs-header-bg, var(--dg-header-bg, light-dark(#fafafa, #111114)));
19
+ --md-focus: var(--gbs-focus, var(--dg-focus, light-dark(#2563eb, #60a5fa)));
20
+ --md-shadow: 0 24px 64px -16px light-dark(rgb(0 0 0 / 0.3), rgb(0 0 0 / 0.8));
21
+ --md-backdrop: var(--gbs-backdrop, light-dark(rgb(9 9 11 / 0.45), rgb(0 0 0 / 0.65)));
22
+ --md-radius: var(--gbs-radius, var(--dg-radius, 12px));
23
+ --md-font-size: var(--gbs-font-size, var(--dg-font-size, 13px));
24
+ --md-width: 520px;
25
+ --md-gutter: 16px;
26
+ --md-px: 20px;
27
+ --md-duration: 200ms;
28
+ --md-enter: 0 8px;
29
+
30
+ color-scheme: inherit;
31
+ box-sizing: border-box;
32
+ width: min(var(--md-width), 100vw - 2 * var(--md-gutter));
33
+ max-width: none;
34
+ max-height: calc(100dvh - 2 * var(--md-gutter));
35
+ margin: auto;
36
+ padding: 0;
37
+ overflow: hidden;
38
+ border: 1px solid var(--md-border);
39
+ border-radius: var(--md-radius);
40
+ background: var(--md-bg);
41
+ color: var(--md-fg);
42
+ box-shadow: var(--md-shadow);
43
+ font-size: var(--md-font-size);
44
+ line-height: 1.5;
45
+ opacity: 0;
46
+ translate: var(--md-enter);
47
+ transition:
48
+ opacity var(--md-duration) ease,
49
+ translate var(--md-duration) ease,
50
+ overlay var(--md-duration) allow-discrete,
51
+ display var(--md-duration) allow-discrete;
52
+ }
53
+ .md-root[open] {
54
+ display: flex;
55
+ flex-direction: column;
56
+ opacity: 1;
57
+ translate: 0 0;
58
+ }
59
+ @starting-style {
60
+ .md-root[open] {
61
+ opacity: 0;
62
+ translate: var(--md-enter);
63
+ }
64
+ }
65
+
66
+ .md-root::backdrop {
67
+ background: var(--md-backdrop, rgb(9 9 11 / 0.45));
68
+ opacity: 0;
69
+ transition:
70
+ opacity var(--md-duration) ease,
71
+ overlay var(--md-duration) allow-discrete,
72
+ display var(--md-duration) allow-discrete;
73
+ }
74
+ .md-root[open]::backdrop {
75
+ opacity: 1;
76
+ }
77
+ @starting-style {
78
+ .md-root[open]::backdrop {
79
+ opacity: 0;
80
+ }
81
+ }
82
+
83
+ :where(.dark, [data-theme="dark"]) .md-root {
84
+ color-scheme: dark;
85
+ }
86
+ :where(.light, [data-theme="light"]) .md-root {
87
+ color-scheme: light;
88
+ }
89
+
90
+ :where(.md-root) *,
91
+ :where(.md-root) *::before,
92
+ :where(.md-root) *::after {
93
+ box-sizing: border-box;
94
+ }
95
+
96
+ /* The page behind an open modal doesn't scroll. */
97
+ :root:has(.md-root[open]) {
98
+ overflow: hidden;
99
+ }
100
+
101
+ /* --------------------------------------------------------------- sizes */
102
+
103
+ .md-root[data-size="sm"] {
104
+ --md-width: 400px;
105
+ }
106
+ .md-root[data-size="lg"] {
107
+ --md-width: 720px;
108
+ }
109
+ .md-root[data-size="xl"] {
110
+ --md-width: 960px;
111
+ }
112
+ .md-root[data-size="full"] {
113
+ --md-width: 100vw;
114
+ --md-gutter: 0px;
115
+ height: 100dvh;
116
+ max-height: 100dvh;
117
+ border: 0;
118
+ border-radius: 0;
119
+ }
120
+
121
+ /* ----------------------------------------------------------- placement */
122
+
123
+ .md-root[data-placement="top"] {
124
+ margin-top: min(10vh, 80px);
125
+ }
126
+
127
+ .md-root:is([data-placement="left"], [data-placement="right"]) {
128
+ --md-gutter: 0px;
129
+ height: 100dvh;
130
+ max-height: 100dvh;
131
+ border-block: 0;
132
+ border-radius: 0;
133
+ }
134
+ .md-root[data-placement="left"] {
135
+ --md-enter: -100% 0;
136
+ margin: 0 auto 0 0;
137
+ border-inline-start: 0;
138
+ }
139
+ .md-root[data-placement="right"] {
140
+ --md-enter: 100% 0;
141
+ margin: 0 0 0 auto;
142
+ border-inline-end: 0;
143
+ }
144
+ .md-root[data-placement="bottom"] {
145
+ --md-enter: 0 100%;
146
+ width: 100vw;
147
+ max-height: min(var(--md-width), 90dvh);
148
+ margin: auto 0 0;
149
+ border-bottom: 0;
150
+ border-radius: var(--md-radius) var(--md-radius) 0 0;
151
+ }
152
+
153
+ /* -------------------------------------------------------------- layout */
154
+
155
+ .md-header {
156
+ display: flex;
157
+ flex: none;
158
+ align-items: flex-start;
159
+ gap: 12px;
160
+ padding: 16px 12px 12px var(--md-px);
161
+ }
162
+ .md-heading {
163
+ flex: 1 1 auto;
164
+ min-width: 0;
165
+ }
166
+ .md-title {
167
+ margin: 0;
168
+ font-size: 1.15em;
169
+ font-weight: 600;
170
+ line-height: 1.35;
171
+ }
172
+ .md-description {
173
+ margin: 4px 0 0;
174
+ color: var(--md-muted);
175
+ }
176
+ .md-close {
177
+ display: inline-grid;
178
+ flex: none;
179
+ place-items: center;
180
+ width: 30px;
181
+ height: 30px;
182
+ margin-top: -4px;
183
+ padding: 0;
184
+ border: 0;
185
+ border-radius: 6px;
186
+ background: transparent;
187
+ color: var(--md-muted);
188
+ cursor: pointer;
189
+ }
190
+ .md-close:hover {
191
+ background: var(--md-hover);
192
+ color: var(--md-fg);
193
+ }
194
+ .md-close:focus-visible {
195
+ outline: 2px solid var(--md-focus);
196
+ outline-offset: 1px;
197
+ }
198
+
199
+ .md-body {
200
+ flex: 1 1 auto;
201
+ min-height: 0;
202
+ padding: 0 var(--md-px) 20px;
203
+ overflow: auto;
204
+ overscroll-behavior: contain;
205
+ scrollbar-width: var(--gbs-scrollbar-width, thin);
206
+ scrollbar-color: var(--gbs-scrollbar-thumb, light-dark(#c4c4ca, #3f3f46))
207
+ var(--gbs-scrollbar-track, transparent);
208
+ }
209
+ .md-body:first-child {
210
+ padding-top: 20px;
211
+ }
212
+ .md-body:focus-visible {
213
+ outline: 2px solid var(--md-focus);
214
+ outline-offset: -2px;
215
+ }
216
+
217
+ .md-footer {
218
+ display: flex;
219
+ flex: none;
220
+ flex-wrap: wrap;
221
+ align-items: center;
222
+ justify-content: flex-end;
223
+ gap: 8px;
224
+ padding: 12px var(--md-px);
225
+ border-top: 1px solid var(--md-border);
226
+ background: var(--md-footer-bg);
227
+ }
228
+
229
+ @media (prefers-reduced-motion: reduce) {
230
+ .md-root,
231
+ .md-root::backdrop {
232
+ --md-enter: 0 0;
233
+ transition-duration: 0s;
234
+ }
235
+ }
236
+
237
+ @media (forced-colors: active) {
238
+ .md-root {
239
+ border: 1px solid CanvasText;
240
+ }
241
+ }