gbs-add-block 2.0.4 → 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 -201
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +157 -11
  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 +201 -203
  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 -139
  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 -233
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -231
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -212
  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 -717
  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 -278
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -395
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -296
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -222
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -239
  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 -146
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -202
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +241 -242
  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 -186
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +145 -146
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +194 -196
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +234 -235
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -159
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -283
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -72
  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,239 +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 `components` layer, so utility classes passed
7
- * through `className` / `classNames` override them.
8
- */
9
- @layer theme, base, components, utilities;
10
-
11
- @layer components {
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
- }
206
- .md-body:first-child {
207
- padding-top: 20px;
208
- }
209
- .md-body:focus-visible {
210
- outline: 2px solid var(--md-focus);
211
- outline-offset: -2px;
212
- }
213
-
214
- .md-footer {
215
- display: flex;
216
- flex: none;
217
- flex-wrap: wrap;
218
- align-items: center;
219
- justify-content: flex-end;
220
- gap: 8px;
221
- padding: 12px var(--md-px);
222
- border-top: 1px solid var(--md-border);
223
- background: var(--md-footer-bg);
224
- }
225
-
226
- @media (prefers-reduced-motion: reduce) {
227
- .md-root,
228
- .md-root::backdrop {
229
- --md-enter: 0 0;
230
- transition-duration: 0s;
231
- }
232
- }
233
-
234
- @media (forced-colors: active) {
235
- .md-root {
236
- border: 1px solid CanvasText;
237
- }
238
- }
239
- }
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
+ }