@granularjs/ui 0.1.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 (220) hide show
  1. package/README.md +116 -0
  2. package/dist/fonts/Arimo-400.ttf +0 -0
  3. package/dist/fonts/Arimo-500.ttf +1449 -0
  4. package/dist/fonts/Arimo-600.ttf +1449 -0
  5. package/dist/fonts/Arimo-700.ttf +0 -0
  6. package/dist/fonts/Inter-400.woff2 +0 -0
  7. package/dist/fonts/Inter-500.woff2 +0 -0
  8. package/dist/fonts/Inter-600.woff2 +0 -0
  9. package/dist/fonts/Inter-700.woff2 +0 -0
  10. package/dist/fonts/Poppins-400.ttf +0 -0
  11. package/dist/fonts/Poppins-500.ttf +0 -0
  12. package/dist/fonts/Poppins-600.ttf +0 -0
  13. package/dist/fonts/Poppins-700.ttf +0 -0
  14. package/dist/granular-ui.min.js +3605 -0
  15. package/dist/granular-ui.min.js.map +7 -0
  16. package/package.json +55 -0
  17. package/src/components/Accordion.js +25 -0
  18. package/src/components/ActionIcon.js +20 -0
  19. package/src/components/Affix.js +11 -0
  20. package/src/components/Alert.js +33 -0
  21. package/src/components/Anchor.js +8 -0
  22. package/src/components/AppBar.js +14 -0
  23. package/src/components/Avatar.js +13 -0
  24. package/src/components/AvatarGroup.js +8 -0
  25. package/src/components/Badge.js +22 -0
  26. package/src/components/BadgeGroup.js +8 -0
  27. package/src/components/Blockquote.js +8 -0
  28. package/src/components/BottomBar.js +43 -0
  29. package/src/components/Breadcrumbs.js +19 -0
  30. package/src/components/Burger.js +13 -0
  31. package/src/components/Button.js +37 -0
  32. package/src/components/Calendar.js +109 -0
  33. package/src/components/Card.js +40 -0
  34. package/src/components/Center.js +8 -0
  35. package/src/components/Checkbox.js +46 -0
  36. package/src/components/CheckboxGroup.js +8 -0
  37. package/src/components/Chip.js +35 -0
  38. package/src/components/Code.js +8 -0
  39. package/src/components/Col.js +8 -0
  40. package/src/components/Collapse.js +8 -0
  41. package/src/components/Container.js +19 -0
  42. package/src/components/CopyButton.js +30 -0
  43. package/src/components/DateInput.js +123 -0
  44. package/src/components/DatePicker.js +7 -0
  45. package/src/components/Divider.js +22 -0
  46. package/src/components/Drawer.js +32 -0
  47. package/src/components/EventCalendar.js +972 -0
  48. package/src/components/Fieldset.js +12 -0
  49. package/src/components/Flex.js +25 -0
  50. package/src/components/Grid.js +8 -0
  51. package/src/components/GridTable.js +99 -0
  52. package/src/components/Group.js +29 -0
  53. package/src/components/HoverCard.js +24 -0
  54. package/src/components/Icon.js +19 -0
  55. package/src/components/Image.js +8 -0
  56. package/src/components/Indicator.js +21 -0
  57. package/src/components/Kbd.js +8 -0
  58. package/src/components/List.js +77 -0
  59. package/src/components/Loading.js +29 -0
  60. package/src/components/LoadingOverlay.js +9 -0
  61. package/src/components/Menu.js +129 -0
  62. package/src/components/Modal.js +61 -0
  63. package/src/components/MultiSelect.js +153 -0
  64. package/src/components/NavLink.js +72 -0
  65. package/src/components/Notification.js +42 -0
  66. package/src/components/Notifications.js +59 -0
  67. package/src/components/NumberField.js +389 -0
  68. package/src/components/NumberInput.js +5 -0
  69. package/src/components/Pagination.js +56 -0
  70. package/src/components/Paper.js +20 -0
  71. package/src/components/PasswordInput.js +29 -0
  72. package/src/components/PinInput.js +218 -0
  73. package/src/components/Popover.js +38 -0
  74. package/src/components/Popper.js +25 -0
  75. package/src/components/Progress.js +27 -0
  76. package/src/components/ProgressRing.js +11 -0
  77. package/src/components/Radio.js +22 -0
  78. package/src/components/RadioGroup.js +8 -0
  79. package/src/components/RangePicker.js +45 -0
  80. package/src/components/RangeSlider.js +143 -0
  81. package/src/components/Rating.js +42 -0
  82. package/src/components/ScrollArea.js +11 -0
  83. package/src/components/SearchInput.js +17 -0
  84. package/src/components/SegmentedControl.js +39 -0
  85. package/src/components/Select.js +71 -0
  86. package/src/components/SelectSearch.js +37 -0
  87. package/src/components/Sidebar.js +136 -0
  88. package/src/components/SimpleGrid.js +11 -0
  89. package/src/components/Skeleton.js +24 -0
  90. package/src/components/Slider.js +126 -0
  91. package/src/components/Space.js +8 -0
  92. package/src/components/Stack.js +27 -0
  93. package/src/components/Stepper.js +20 -0
  94. package/src/components/Switch.js +16 -0
  95. package/src/components/SwitchGroup.js +8 -0
  96. package/src/components/Table.js +42 -0
  97. package/src/components/Tabs.js +194 -0
  98. package/src/components/Tag.js +8 -0
  99. package/src/components/Text.js +42 -0
  100. package/src/components/TextInput.js +74 -0
  101. package/src/components/Textarea.js +15 -0
  102. package/src/components/Timeline.js +22 -0
  103. package/src/components/Title.js +18 -0
  104. package/src/components/Toast.js +16 -0
  105. package/src/components/ToastStack.js +21 -0
  106. package/src/components/Tooltip.js +12 -0
  107. package/src/hooks/useDisclosure.js +13 -0
  108. package/src/index.js +98 -0
  109. package/src/theme/fonts/Arimo-400.ttf +0 -0
  110. package/src/theme/fonts/Arimo-500.ttf +1449 -0
  111. package/src/theme/fonts/Arimo-600.ttf +1449 -0
  112. package/src/theme/fonts/Arimo-700.ttf +0 -0
  113. package/src/theme/fonts/Inter-400.woff2 +0 -0
  114. package/src/theme/fonts/Inter-500.woff2 +0 -0
  115. package/src/theme/fonts/Inter-600.woff2 +0 -0
  116. package/src/theme/fonts/Inter-700.woff2 +0 -0
  117. package/src/theme/fonts/Poppins-400.ttf +0 -0
  118. package/src/theme/fonts/Poppins-500.ttf +0 -0
  119. package/src/theme/fonts/Poppins-600.ttf +0 -0
  120. package/src/theme/fonts/Poppins-700.ttf +0 -0
  121. package/src/theme/icons.js +10 -0
  122. package/src/theme/styles.js +3630 -0
  123. package/src/theme/theme.js +71 -0
  124. package/src/utils.js +75 -0
  125. package/types/components/Accordion.d.ts +1 -0
  126. package/types/components/ActionIcon.d.ts +1 -0
  127. package/types/components/Affix.d.ts +1 -0
  128. package/types/components/Alert.d.ts +1 -0
  129. package/types/components/Anchor.d.ts +1 -0
  130. package/types/components/AppBar.d.ts +1 -0
  131. package/types/components/Avatar.d.ts +1 -0
  132. package/types/components/AvatarGroup.d.ts +1 -0
  133. package/types/components/Badge.d.ts +1 -0
  134. package/types/components/BadgeGroup.d.ts +1 -0
  135. package/types/components/Blockquote.d.ts +1 -0
  136. package/types/components/BottomBar.d.ts +4 -0
  137. package/types/components/Breadcrumbs.d.ts +1 -0
  138. package/types/components/Burger.d.ts +1 -0
  139. package/types/components/Button.d.ts +1 -0
  140. package/types/components/Calendar.d.ts +1 -0
  141. package/types/components/Card.d.ts +1 -0
  142. package/types/components/Center.d.ts +1 -0
  143. package/types/components/Checkbox.d.ts +1 -0
  144. package/types/components/CheckboxGroup.d.ts +1 -0
  145. package/types/components/Chip.d.ts +1 -0
  146. package/types/components/Code.d.ts +1 -0
  147. package/types/components/Col.d.ts +1 -0
  148. package/types/components/Collapse.d.ts +1 -0
  149. package/types/components/Container.d.ts +1 -0
  150. package/types/components/CopyButton.d.ts +1 -0
  151. package/types/components/DateInput.d.ts +1 -0
  152. package/types/components/DatePicker.d.ts +1 -0
  153. package/types/components/Divider.d.ts +1 -0
  154. package/types/components/Drawer.d.ts +1 -0
  155. package/types/components/EventCalendar.d.ts +1 -0
  156. package/types/components/Fieldset.d.ts +1 -0
  157. package/types/components/Flex.d.ts +1 -0
  158. package/types/components/Grid.d.ts +1 -0
  159. package/types/components/GridTable.d.ts +5 -0
  160. package/types/components/Group.d.ts +1 -0
  161. package/types/components/HoverCard.d.ts +1 -0
  162. package/types/components/Icon.d.ts +1 -0
  163. package/types/components/Image.d.ts +1 -0
  164. package/types/components/Indicator.d.ts +1 -0
  165. package/types/components/Kbd.d.ts +1 -0
  166. package/types/components/List.d.ts +5 -0
  167. package/types/components/Loading.d.ts +1 -0
  168. package/types/components/LoadingOverlay.d.ts +1 -0
  169. package/types/components/Menu.d.ts +2 -0
  170. package/types/components/Modal.d.ts +1 -0
  171. package/types/components/MultiSelect.d.ts +1 -0
  172. package/types/components/NavLink.d.ts +1 -0
  173. package/types/components/Notification.d.ts +1 -0
  174. package/types/components/Notifications.d.ts +1 -0
  175. package/types/components/NumberField.d.ts +1 -0
  176. package/types/components/NumberInput.d.ts +1 -0
  177. package/types/components/Pagination.d.ts +1 -0
  178. package/types/components/Paper.d.ts +1 -0
  179. package/types/components/PasswordInput.d.ts +1 -0
  180. package/types/components/PinInput.d.ts +1 -0
  181. package/types/components/Popover.d.ts +1 -0
  182. package/types/components/Popper.d.ts +1 -0
  183. package/types/components/Progress.d.ts +1 -0
  184. package/types/components/ProgressRing.d.ts +1 -0
  185. package/types/components/Radio.d.ts +1 -0
  186. package/types/components/RadioGroup.d.ts +1 -0
  187. package/types/components/RangePicker.d.ts +1 -0
  188. package/types/components/RangeSlider.d.ts +1 -0
  189. package/types/components/Rating.d.ts +1 -0
  190. package/types/components/ScrollArea.d.ts +1 -0
  191. package/types/components/SearchInput.d.ts +1 -0
  192. package/types/components/SegmentedControl.d.ts +1 -0
  193. package/types/components/Select.d.ts +1 -0
  194. package/types/components/SelectSearch.d.ts +1 -0
  195. package/types/components/Sidebar.d.ts +1 -0
  196. package/types/components/SimpleGrid.d.ts +1 -0
  197. package/types/components/Skeleton.d.ts +1 -0
  198. package/types/components/Slider.d.ts +5 -0
  199. package/types/components/Space.d.ts +1 -0
  200. package/types/components/Stack.d.ts +1 -0
  201. package/types/components/Stepper.d.ts +1 -0
  202. package/types/components/Switch.d.ts +1 -0
  203. package/types/components/SwitchGroup.d.ts +1 -0
  204. package/types/components/Table.d.ts +1 -0
  205. package/types/components/Tabs.d.ts +1 -0
  206. package/types/components/Tag.d.ts +1 -0
  207. package/types/components/Text.d.ts +1 -0
  208. package/types/components/TextInput.d.ts +1 -0
  209. package/types/components/Textarea.d.ts +1 -0
  210. package/types/components/Timeline.d.ts +1 -0
  211. package/types/components/Title.d.ts +1 -0
  212. package/types/components/Toast.d.ts +1 -0
  213. package/types/components/ToastStack.d.ts +1 -0
  214. package/types/components/Tooltip.d.ts +1 -0
  215. package/types/hooks/useDisclosure.d.ts +1 -0
  216. package/types/index.d.ts +93 -0
  217. package/types/theme/icons.d.ts +10 -0
  218. package/types/theme/styles.d.ts +1 -0
  219. package/types/theme/theme.d.ts +2 -0
  220. package/types/utils.d.ts +12 -0
@@ -0,0 +1,3630 @@
1
+ const STYLE_ID = 'granular-ui-styles';
2
+
3
+ const poppins400 = new URL('./fonts/Poppins-400.ttf', import.meta.url).href;
4
+ const poppins500 = new URL('./fonts/Poppins-500.ttf', import.meta.url).href;
5
+ const poppins600 = new URL('./fonts/Poppins-600.ttf', import.meta.url).href;
6
+ const poppins700 = new URL('./fonts/Poppins-700.ttf', import.meta.url).href;
7
+
8
+ const arimo400 = new URL('./fonts/Arimo-400.ttf', import.meta.url).href;
9
+ const arimo500 = new URL('./fonts/Arimo-500.ttf', import.meta.url).href;
10
+ const arimo600 = new URL('./fonts/Arimo-600.ttf', import.meta.url).href;
11
+ const arimo700 = new URL('./fonts/Arimo-700.ttf', import.meta.url).href;
12
+
13
+ const inter400 = new URL('./fonts/Inter-400.woff2', import.meta.url).href;
14
+ const inter500 = new URL('./fonts/Inter-500.woff2', import.meta.url).href;
15
+ const inter600 = new URL('./fonts/Inter-600.woff2', import.meta.url).href;
16
+ const inter700 = new URL('./fonts/Inter-700.woff2', import.meta.url).href;
17
+
18
+ const css = `
19
+ @font-face {
20
+ font-family: 'Poppins';
21
+ font-style: normal;
22
+ font-weight: 400;
23
+ font-display: swap;
24
+ src: url('${poppins400}') format('truetype');
25
+ }
26
+ @font-face {
27
+ font-family: 'Poppins';
28
+ font-style: normal;
29
+ font-weight: 500;
30
+ font-display: swap;
31
+ src: url('${poppins500}') format('truetype');
32
+ }
33
+ @font-face {
34
+ font-family: 'Poppins';
35
+ font-style: normal;
36
+ font-weight: 600;
37
+ font-display: swap;
38
+ src: url('${poppins600}') format('truetype');
39
+ }
40
+ @font-face {
41
+ font-family: 'Poppins';
42
+ font-style: normal;
43
+ font-weight: 700;
44
+ font-display: swap;
45
+ src: url('${poppins700}') format('truetype');
46
+ }
47
+
48
+ @font-face {
49
+ font-family: 'Arimo';
50
+ font-style: normal;
51
+ font-weight: 400;
52
+ font-display: swap;
53
+ src: url('${arimo400}') format('truetype');
54
+ }
55
+ @font-face {
56
+ font-family: 'Arimo';
57
+ font-style: normal;
58
+ font-weight: 500;
59
+ font-display: swap;
60
+ src: url('${arimo500}') format('truetype');
61
+ }
62
+ @font-face {
63
+ font-family: 'Arimo';
64
+ font-style: normal;
65
+ font-weight: 600;
66
+ font-display: swap;
67
+ src: url('${arimo600}') format('truetype');
68
+ }
69
+ @font-face {
70
+ font-family: 'Arimo';
71
+ font-style: normal;
72
+ font-weight: 700;
73
+ font-display: swap;
74
+ src: url('${arimo700}') format('truetype');
75
+ }
76
+
77
+ @font-face {
78
+ font-family: 'Inter';
79
+ font-style: normal;
80
+ font-weight: 400;
81
+ font-display: swap;
82
+ src: url('${inter400}') format('woff2');
83
+ }
84
+ @font-face {
85
+ font-family: 'Inter';
86
+ font-style: normal;
87
+ font-weight: 500;
88
+ font-display: swap;
89
+ src: url('${inter500}') format('woff2');
90
+ }
91
+ @font-face {
92
+ font-family: 'Inter';
93
+ font-style: normal;
94
+ font-weight: 600;
95
+ font-display: swap;
96
+ src: url('${inter600}') format('woff2');
97
+ }
98
+ @font-face {
99
+ font-family: 'Inter';
100
+ font-style: normal;
101
+ font-weight: 700;
102
+ font-display: swap;
103
+ src: url('${inter700}') format('woff2');
104
+ }
105
+
106
+ :root {
107
+ /* Color scales - base colors */
108
+ --g-ui-white: #ffffff;
109
+ --g-ui-black: #000000;
110
+
111
+ --g-ui-gray-50: #f9fafb;
112
+ --g-ui-gray-100: #f2f4f7;
113
+ --g-ui-gray-200: #e4e7ec;
114
+ --g-ui-gray-300: #cdd1d9;
115
+ --g-ui-gray-400: #98a2b3;
116
+ --g-ui-gray-500: #667085;
117
+ --g-ui-gray-600: #475467;
118
+ --g-ui-gray-700: #344054;
119
+ --g-ui-gray-800: #1d2939;
120
+ --g-ui-gray-900: #101828;
121
+ --g-ui-gray-950: #0c111d;
122
+
123
+ --g-ui-red-50: #fef3f2;
124
+ --g-ui-red-100: #fee4e2;
125
+ --g-ui-red-200: #fecdca;
126
+ --g-ui-red-300: #fda29b;
127
+ --g-ui-red-400: #f97066;
128
+ --g-ui-red-500: #f04438;
129
+ --g-ui-red-600: #d92d20;
130
+ --g-ui-red-700: #b42318;
131
+ --g-ui-red-800: #912018;
132
+ --g-ui-red-900: #7a271a;
133
+ --g-ui-red-950: #55160c;
134
+
135
+ --g-ui-orange-50: #fff6ed;
136
+ --g-ui-orange-100: #ffead5;
137
+ --g-ui-orange-200: #fddcab;
138
+ --g-ui-orange-300: #feb273;
139
+ --g-ui-orange-400: #fd853a;
140
+ --g-ui-orange-500: #ef6820;
141
+ --g-ui-orange-600: #e04f16;
142
+ --g-ui-orange-700: #b93815;
143
+ --g-ui-orange-800: #932f19;
144
+ --g-ui-orange-900: #7a2e0e;
145
+ --g-ui-orange-950: #511c10;
146
+
147
+ --g-ui-green-50: #ecfdf3;
148
+ --g-ui-green-100: #dcfae6;
149
+ --g-ui-green-200: #abefc6;
150
+ --g-ui-green-300: #75e0a7;
151
+ --g-ui-green-400: #47cd89;
152
+ --g-ui-green-500: #17b26a;
153
+ --g-ui-green-600: #079455;
154
+ --g-ui-green-700: #067647;
155
+ --g-ui-green-800: #085d3a;
156
+ --g-ui-green-900: #074d31;
157
+ --g-ui-green-950: #053321;
158
+
159
+ --g-ui-blue-50: #eff8ff;
160
+ --g-ui-blue-100: #d1e9ff;
161
+ --g-ui-blue-200: #b2ddff;
162
+ --g-ui-blue-300: #84caff;
163
+ --g-ui-blue-400: #53b1fd;
164
+ --g-ui-blue-500: #2e90fa;
165
+ --g-ui-blue-600: #1570ef;
166
+ --g-ui-blue-700: #175cd3;
167
+ --g-ui-blue-800: #1849a9;
168
+ --g-ui-blue-900: #194185;
169
+ --g-ui-blue-950: #102a56;
170
+
171
+ --g-ui-yellow-50: #fefbe8;
172
+ --g-ui-yellow-100: #fef7c3;
173
+ --g-ui-yellow-200: #feee95;
174
+ --g-ui-yellow-300: #fde272;
175
+ --g-ui-yellow-400: #fac515;
176
+ --g-ui-yellow-500: #eaaa08;
177
+ --g-ui-yellow-600: #ca8504;
178
+ --g-ui-yellow-700: #a15c07;
179
+ --g-ui-yellow-800: #854a0e;
180
+ --g-ui-yellow-900: #713b12;
181
+ --g-ui-yellow-950: #422006;
182
+
183
+ --g-ui-teal-50: #f0fdf9;
184
+ --g-ui-teal-100: #ccfbef;
185
+ --g-ui-teal-200: #99f6e0;
186
+ --g-ui-teal-300: #5fe9d0;
187
+ --g-ui-teal-400: #2ed3b7;
188
+ --g-ui-teal-500: #15b79e;
189
+ --g-ui-teal-600: #0e9384;
190
+ --g-ui-teal-700: #107569;
191
+ --g-ui-teal-800: #125d56;
192
+ --g-ui-teal-900: #134e48;
193
+ --g-ui-teal-950: #0a2926;
194
+
195
+ --g-ui-purple-50: #f4f3ff;
196
+ --g-ui-purple-100: #ebe9fe;
197
+ --g-ui-purple-200: #d9d6fe;
198
+ --g-ui-purple-300: #bdb4fe;
199
+ --g-ui-purple-400: #9b8afb;
200
+ --g-ui-purple-500: #7a5af8;
201
+ --g-ui-purple-600: #6938ef;
202
+ --g-ui-purple-700: #5925dc;
203
+ --g-ui-purple-800: #4a1fb8;
204
+ --g-ui-purple-900: #3e1c96;
205
+ --g-ui-purple-950: #27115a;
206
+
207
+ --g-ui-pink-50: #fdf2fa;
208
+ --g-ui-pink-100: #fce7f6;
209
+ --g-ui-pink-200: #fcceee;
210
+ --g-ui-pink-300: #faa7e0;
211
+ --g-ui-pink-400: #f670c7;
212
+ --g-ui-pink-500: #ee46bc;
213
+ --g-ui-pink-600: #dd2590;
214
+ --g-ui-pink-700: #c11574;
215
+ --g-ui-pink-800: #9e165f;
216
+ --g-ui-pink-900: #851651;
217
+ --g-ui-pink-950: #4e0d30;
218
+
219
+ --g-ui-cyan-50: #ecfdff;
220
+ --g-ui-cyan-100: #cff9fe;
221
+ --g-ui-cyan-200: #a5f0fc;
222
+ --g-ui-cyan-300: #67e3f9;
223
+ --g-ui-cyan-400: #22ccee;
224
+ --g-ui-cyan-500: #06aed4;
225
+ --g-ui-cyan-600: #088ab2;
226
+ --g-ui-cyan-700: #0e7090;
227
+ --g-ui-cyan-800: #155b75;
228
+ --g-ui-cyan-900: #164c63;
229
+ --g-ui-cyan-950: #0d2d3a;
230
+
231
+ /* Semantic colors - Dark theme (default) */
232
+ --g-ui-bg: var(--g-ui-gray-950);
233
+ --g-ui-bg-subtle: var(--g-ui-gray-900);
234
+ --g-ui-bg-muted: var(--g-ui-gray-800);
235
+ --g-ui-bg-emphasized: var(--g-ui-gray-700);
236
+ --g-ui-bg-inverted: var(--g-ui-gray-50);
237
+ --g-ui-bg-panel: var(--g-ui-gray-900);
238
+ --g-ui-bg-error: var(--g-ui-red-950);
239
+ --g-ui-bg-warning: var(--g-ui-orange-950);
240
+ --g-ui-bg-success: var(--g-ui-green-950);
241
+ --g-ui-bg-info: var(--g-ui-blue-950);
242
+
243
+ --g-ui-fg: var(--g-ui-gray-50);
244
+ --g-ui-fg-muted: var(--g-ui-gray-400);
245
+ --g-ui-fg-subtle: var(--g-ui-gray-500);
246
+ --g-ui-fg-inverted: var(--g-ui-gray-950);
247
+ --g-ui-fg-error: var(--g-ui-red-400);
248
+ --g-ui-fg-warning: var(--g-ui-orange-300);
249
+ --g-ui-fg-success: var(--g-ui-green-400);
250
+ --g-ui-fg-info: var(--g-ui-blue-400);
251
+
252
+ --g-ui-border: var(--g-ui-gray-700);
253
+ --g-ui-border-subtle: var(--g-ui-gray-900);
254
+ --g-ui-border-muted: var(--g-ui-gray-800);
255
+ --g-ui-border-emphasized: var(--g-ui-gray-600);
256
+ --g-ui-border-inverted: var(--g-ui-gray-200);
257
+ --g-ui-border-error: var(--g-ui-red-400);
258
+ --g-ui-border-warning: var(--g-ui-orange-400);
259
+ --g-ui-border-success: var(--g-ui-green-400);
260
+ --g-ui-border-info: var(--g-ui-blue-400);
261
+
262
+ /* Gray semantic */
263
+ --g-ui-gray-contrast: var(--g-ui-gray-950);
264
+ --g-ui-gray-fg: var(--g-ui-gray-200);
265
+ --g-ui-gray-subtle: var(--g-ui-gray-800);
266
+ --g-ui-gray-muted: var(--g-ui-gray-700);
267
+ --g-ui-gray-emphasized: var(--g-ui-gray-600);
268
+ --g-ui-gray-solid: var(--g-ui-gray-50);
269
+ --g-ui-gray-focus-ring: var(--g-ui-gray-400);
270
+ --g-ui-gray-border: var(--g-ui-gray-700);
271
+
272
+ /* Red semantic */
273
+ --g-ui-red-contrast: white;
274
+ --g-ui-red-fg: var(--g-ui-red-300);
275
+ --g-ui-red-subtle: var(--g-ui-red-900);
276
+ --g-ui-red-muted: var(--g-ui-red-800);
277
+ --g-ui-red-emphasized: var(--g-ui-red-700);
278
+ --g-ui-red-solid: var(--g-ui-red-600);
279
+ --g-ui-red-focus-ring: var(--g-ui-red-500);
280
+ --g-ui-red-border: var(--g-ui-red-400);
281
+
282
+ /* Orange semantic */
283
+ --g-ui-orange-contrast: black;
284
+ --g-ui-orange-fg: var(--g-ui-orange-300);
285
+ --g-ui-orange-subtle: var(--g-ui-orange-900);
286
+ --g-ui-orange-muted: var(--g-ui-orange-800);
287
+ --g-ui-orange-emphasized: var(--g-ui-orange-700);
288
+ --g-ui-orange-solid: var(--g-ui-orange-500);
289
+ --g-ui-orange-focus-ring: var(--g-ui-orange-500);
290
+ --g-ui-orange-border: var(--g-ui-orange-400);
291
+
292
+ /* Green semantic */
293
+ --g-ui-green-contrast: white;
294
+ --g-ui-green-fg: var(--g-ui-green-300);
295
+ --g-ui-green-subtle: var(--g-ui-green-900);
296
+ --g-ui-green-muted: var(--g-ui-green-800);
297
+ --g-ui-green-emphasized: var(--g-ui-green-700);
298
+ --g-ui-green-solid: var(--g-ui-green-600);
299
+ --g-ui-green-focus-ring: var(--g-ui-green-500);
300
+ --g-ui-green-border: var(--g-ui-green-400);
301
+
302
+ /* Blue semantic */
303
+ --g-ui-blue-contrast: white;
304
+ --g-ui-blue-fg: var(--g-ui-blue-300);
305
+ --g-ui-blue-subtle: var(--g-ui-blue-900);
306
+ --g-ui-blue-muted: var(--g-ui-blue-800);
307
+ --g-ui-blue-emphasized: var(--g-ui-blue-700);
308
+ --g-ui-blue-solid: var(--g-ui-blue-600);
309
+ --g-ui-blue-focus-ring: var(--g-ui-blue-500);
310
+ --g-ui-blue-border: var(--g-ui-blue-400);
311
+
312
+ /* Yellow semantic */
313
+ --g-ui-yellow-contrast: black;
314
+ --g-ui-yellow-fg: var(--g-ui-yellow-300);
315
+ --g-ui-yellow-subtle: var(--g-ui-yellow-900);
316
+ --g-ui-yellow-muted: var(--g-ui-yellow-800);
317
+ --g-ui-yellow-emphasized: var(--g-ui-yellow-700);
318
+ --g-ui-yellow-solid: var(--g-ui-yellow-300);
319
+ --g-ui-yellow-focus-ring: var(--g-ui-yellow-500);
320
+ --g-ui-yellow-border: var(--g-ui-yellow-500);
321
+
322
+ /* Teal semantic */
323
+ --g-ui-teal-contrast: white;
324
+ --g-ui-teal-fg: var(--g-ui-teal-300);
325
+ --g-ui-teal-subtle: var(--g-ui-teal-900);
326
+ --g-ui-teal-muted: var(--g-ui-teal-800);
327
+ --g-ui-teal-emphasized: var(--g-ui-teal-700);
328
+ --g-ui-teal-solid: var(--g-ui-teal-600);
329
+ --g-ui-teal-focus-ring: var(--g-ui-teal-500);
330
+ --g-ui-teal-border: var(--g-ui-teal-400);
331
+
332
+ /* Purple semantic */
333
+ --g-ui-purple-contrast: white;
334
+ --g-ui-purple-fg: var(--g-ui-purple-300);
335
+ --g-ui-purple-subtle: var(--g-ui-purple-900);
336
+ --g-ui-purple-muted: var(--g-ui-purple-800);
337
+ --g-ui-purple-emphasized: var(--g-ui-purple-700);
338
+ --g-ui-purple-solid: var(--g-ui-purple-600);
339
+ --g-ui-purple-focus-ring: var(--g-ui-purple-500);
340
+ --g-ui-purple-border: var(--g-ui-purple-400);
341
+
342
+ /* Pink semantic */
343
+ --g-ui-pink-contrast: white;
344
+ --g-ui-pink-fg: var(--g-ui-pink-300);
345
+ --g-ui-pink-subtle: var(--g-ui-pink-900);
346
+ --g-ui-pink-muted: var(--g-ui-pink-800);
347
+ --g-ui-pink-emphasized: var(--g-ui-pink-700);
348
+ --g-ui-pink-solid: var(--g-ui-pink-600);
349
+ --g-ui-pink-focus-ring: var(--g-ui-pink-500);
350
+ --g-ui-pink-border: var(--g-ui-pink-400);
351
+
352
+ /* Cyan semantic */
353
+ --g-ui-cyan-contrast: white;
354
+ --g-ui-cyan-fg: var(--g-ui-cyan-300);
355
+ --g-ui-cyan-subtle: var(--g-ui-cyan-900);
356
+ --g-ui-cyan-muted: var(--g-ui-cyan-800);
357
+ --g-ui-cyan-emphasized: var(--g-ui-cyan-700);
358
+ --g-ui-cyan-solid: var(--g-ui-cyan-600);
359
+ --g-ui-cyan-focus-ring: var(--g-ui-cyan-500);
360
+ --g-ui-cyan-border: var(--g-ui-cyan-400);
361
+
362
+ /* Primary (indigo #6366f1 - Linear inspired) */
363
+ --g-ui-primary: #6366f1;
364
+ --g-ui-primary-hover: #818cf8;
365
+ --g-ui-primary-active: #4f46e5;
366
+ --g-ui-primary-subtle: rgba(99, 102, 241, 0.1);
367
+ --g-ui-primary-muted: rgba(99, 102, 241, 0.2);
368
+ --g-ui-primary-emphasized: rgba(99, 102, 241, 0.3);
369
+ --g-ui-primary-fg: var(--g-ui-white);
370
+
371
+ /* Aliases for common usage */
372
+ --g-ui-success: var(--g-ui-green-500);
373
+ --g-ui-danger: var(--g-ui-red-500);
374
+ --g-ui-warning: var(--g-ui-yellow-500);
375
+ --g-ui-info: var(--g-ui-cyan-500);
376
+
377
+ /* Shadows - Dark theme (dual-layer, Linear/Vercel inspired) */
378
+ --g-ui-shadow-xs: 0px 1px 2px rgba(0, 0, 0, 0.48);
379
+ --g-ui-shadow-sm: 0px 1px 3px rgba(0, 0, 0, 0.48), 0px 1px 2px rgba(0, 0, 0, 0.32);
380
+ --g-ui-shadow-md: 0px 4px 8px -2px rgba(0, 0, 0, 0.48), 0px 2px 4px -2px rgba(0, 0, 0, 0.32);
381
+ --g-ui-shadow-lg: 0px 12px 16px -4px rgba(0, 0, 0, 0.48), 0px 4px 6px -2px rgba(0, 0, 0, 0.24);
382
+ --g-ui-shadow-xl: 0px 20px 24px -4px rgba(0, 0, 0, 0.48), 0px 8px 8px -4px rgba(0, 0, 0, 0.24);
383
+ --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(0, 0, 0, 0.64);
384
+
385
+ /* Legacy (compatibility) */
386
+ --g-ui-text: var(--g-ui-fg);
387
+ --g-ui-muted: var(--g-ui-fg-muted);
388
+ --g-ui-surface: var(--g-ui-bg-panel);
389
+ --g-ui-primary-strong: var(--g-ui-primary-active);
390
+ --g-ui-shadow: var(--g-ui-shadow-md);
391
+
392
+ /* Misc */
393
+ --g-ui-radius: 4px;
394
+ --g-ui-font: 'Inter', 'Arimo', 'Poppins', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
395
+ --g-ui-space-2: 2px;
396
+ --g-ui-space-3: 3px;
397
+ --g-ui-space-4: 4px;
398
+ --g-ui-space-5: 5px;
399
+ --g-ui-space-6: 6px;
400
+ --g-ui-space-7: 7px;
401
+ --g-ui-space-8: 8px;
402
+ --g-ui-space-9: 9px;
403
+ --g-ui-space-10: 10px;
404
+ --g-ui-space-12: 12px;
405
+ --g-ui-space-13: 13px;
406
+ --g-ui-space-14: 14px;
407
+ --g-ui-space-15: 15px;
408
+ --g-ui-space-16: 16px;
409
+ --g-ui-space-18: 18px;
410
+ --g-ui-space-20: 20px;
411
+ --g-ui-space-22: 22px;
412
+ --g-ui-space-24: 24px;
413
+ --g-ui-space-26: 26px;
414
+ --g-ui-space-28: 28px;
415
+ --g-ui-space-30: 30px;
416
+ --g-ui-space-32: 32px;
417
+ --g-ui-space-36: 36px;
418
+ --g-ui-space-38: 38px;
419
+ --g-ui-space-40: 40px;
420
+ --g-ui-container-padding: var(--g-ui-space-16);
421
+ }
422
+
423
+ .g-ui-theme-dark {
424
+ --g-ui-bg: var(--g-ui-gray-950);
425
+ --g-ui-bg-subtle: var(--g-ui-gray-800);
426
+ --g-ui-bg-muted: var(--g-ui-gray-700);
427
+ --g-ui-bg-emphasized: var(--g-ui-gray-600);
428
+ --g-ui-bg-inverted: var(--g-ui-gray-50);
429
+ --g-ui-bg-panel: var(--g-ui-gray-900);
430
+
431
+ --g-ui-fg: var(--g-ui-gray-50);
432
+ --g-ui-fg-muted: var(--g-ui-gray-400);
433
+ --g-ui-fg-subtle: var(--g-ui-gray-500);
434
+ --g-ui-fg-inverted: var(--g-ui-gray-950);
435
+
436
+ --g-ui-border: var(--g-ui-gray-700);
437
+ --g-ui-border-subtle: var(--g-ui-gray-900);
438
+ --g-ui-border-muted: var(--g-ui-gray-800);
439
+ --g-ui-border-emphasized: var(--g-ui-gray-600);
440
+
441
+ /* Gray semantic */
442
+ --g-ui-gray-contrast: var(--g-ui-gray-950);
443
+ --g-ui-gray-subtle: var(--g-ui-gray-800);
444
+ --g-ui-gray-muted: var(--g-ui-gray-700);
445
+ --g-ui-gray-emphasized: var(--g-ui-gray-600);
446
+ --g-ui-gray-solid: var(--g-ui-gray-50);
447
+ --g-ui-gray-border: var(--g-ui-gray-700);
448
+
449
+ /* Primary (dark mode) */
450
+ --g-ui-primary-hover: #818cf8;
451
+ --g-ui-primary-active: #4f46e5;
452
+
453
+ --g-ui-shadow-xs: 0px 1px 2px rgba(0, 0, 0, 0.48);
454
+ --g-ui-shadow-sm: 0px 1px 3px rgba(0, 0, 0, 0.48), 0px 1px 2px rgba(0, 0, 0, 0.32);
455
+ --g-ui-shadow-md: 0px 4px 8px -2px rgba(0, 0, 0, 0.48), 0px 2px 4px -2px rgba(0, 0, 0, 0.32);
456
+ --g-ui-shadow-lg: 0px 12px 16px -4px rgba(0, 0, 0, 0.48), 0px 4px 6px -2px rgba(0, 0, 0, 0.24);
457
+ --g-ui-shadow-xl: 0px 20px 24px -4px rgba(0, 0, 0, 0.48), 0px 8px 8px -4px rgba(0, 0, 0, 0.24);
458
+ --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(0, 0, 0, 0.64);
459
+ }
460
+
461
+ .g-ui-theme-light {
462
+ /* Semantic colors - Light theme */
463
+ --g-ui-bg: var(--g-ui-white);
464
+ --g-ui-bg-subtle: var(--g-ui-gray-50);
465
+ --g-ui-bg-muted: var(--g-ui-gray-100);
466
+ --g-ui-bg-emphasized: var(--g-ui-gray-200);
467
+ --g-ui-bg-inverted: var(--g-ui-gray-950);
468
+ --g-ui-bg-panel: var(--g-ui-white);
469
+ --g-ui-bg-error: var(--g-ui-red-50);
470
+ --g-ui-bg-warning: var(--g-ui-orange-50);
471
+ --g-ui-bg-success: var(--g-ui-green-50);
472
+ --g-ui-bg-info: var(--g-ui-blue-50);
473
+
474
+ --g-ui-fg: var(--g-ui-gray-900);
475
+ --g-ui-fg-muted: var(--g-ui-gray-600);
476
+ --g-ui-fg-subtle: var(--g-ui-gray-400);
477
+ --g-ui-fg-inverted: var(--g-ui-gray-50);
478
+ --g-ui-fg-error: var(--g-ui-red-600);
479
+ --g-ui-fg-warning: var(--g-ui-orange-600);
480
+ --g-ui-fg-success: var(--g-ui-green-600);
481
+ --g-ui-fg-info: var(--g-ui-blue-600);
482
+
483
+ /* Legacy override for light theme */
484
+ --g-ui-text: var(--g-ui-fg);
485
+ --g-ui-muted: var(--g-ui-fg-muted);
486
+
487
+ --g-ui-border: var(--g-ui-gray-200);
488
+ --g-ui-border-subtle: var(--g-ui-gray-100);
489
+ --g-ui-border-muted: var(--g-ui-gray-200);
490
+ --g-ui-border-emphasized: var(--g-ui-gray-300);
491
+ --g-ui-border-inverted: var(--g-ui-gray-800);
492
+ --g-ui-border-error: var(--g-ui-red-300);
493
+ --g-ui-border-warning: var(--g-ui-orange-300);
494
+ --g-ui-border-success: var(--g-ui-green-300);
495
+ --g-ui-border-info: var(--g-ui-blue-300);
496
+
497
+ /* Gray semantic */
498
+ --g-ui-gray-contrast: var(--g-ui-gray-50);
499
+ --g-ui-gray-fg: var(--g-ui-gray-700);
500
+ --g-ui-gray-subtle: var(--g-ui-gray-50);
501
+ --g-ui-gray-muted: var(--g-ui-gray-100);
502
+ --g-ui-gray-emphasized: var(--g-ui-gray-200);
503
+ --g-ui-gray-solid: var(--g-ui-gray-900);
504
+ --g-ui-gray-focus-ring: var(--g-ui-gray-400);
505
+ --g-ui-gray-border: var(--g-ui-gray-200);
506
+
507
+ /* Red semantic */
508
+ --g-ui-red-contrast: white;
509
+ --g-ui-red-fg: var(--g-ui-red-600);
510
+ --g-ui-red-subtle: var(--g-ui-red-50);
511
+ --g-ui-red-muted: var(--g-ui-red-100);
512
+ --g-ui-red-emphasized: var(--g-ui-red-200);
513
+ --g-ui-red-solid: var(--g-ui-red-600);
514
+ --g-ui-red-focus-ring: var(--g-ui-red-500);
515
+ --g-ui-red-border: var(--g-ui-red-300);
516
+
517
+ /* Orange semantic */
518
+ --g-ui-orange-contrast: white;
519
+ --g-ui-orange-fg: var(--g-ui-orange-600);
520
+ --g-ui-orange-subtle: var(--g-ui-orange-50);
521
+ --g-ui-orange-muted: var(--g-ui-orange-100);
522
+ --g-ui-orange-emphasized: var(--g-ui-orange-200);
523
+ --g-ui-orange-solid: var(--g-ui-orange-600);
524
+ --g-ui-orange-focus-ring: var(--g-ui-orange-500);
525
+ --g-ui-orange-border: var(--g-ui-orange-300);
526
+
527
+ /* Green semantic */
528
+ --g-ui-green-contrast: white;
529
+ --g-ui-green-fg: var(--g-ui-green-600);
530
+ --g-ui-green-subtle: var(--g-ui-green-50);
531
+ --g-ui-green-muted: var(--g-ui-green-100);
532
+ --g-ui-green-emphasized: var(--g-ui-green-200);
533
+ --g-ui-green-solid: var(--g-ui-green-600);
534
+ --g-ui-green-focus-ring: var(--g-ui-green-500);
535
+ --g-ui-green-border: var(--g-ui-green-300);
536
+
537
+ /* Blue semantic */
538
+ --g-ui-blue-contrast: white;
539
+ --g-ui-blue-fg: var(--g-ui-blue-600);
540
+ --g-ui-blue-subtle: var(--g-ui-blue-50);
541
+ --g-ui-blue-muted: var(--g-ui-blue-100);
542
+ --g-ui-blue-emphasized: var(--g-ui-blue-200);
543
+ --g-ui-blue-solid: var(--g-ui-blue-600);
544
+ --g-ui-blue-focus-ring: var(--g-ui-blue-500);
545
+ --g-ui-blue-border: var(--g-ui-blue-300);
546
+
547
+ /* Yellow semantic */
548
+ --g-ui-yellow-contrast: black;
549
+ --g-ui-yellow-fg: var(--g-ui-yellow-700);
550
+ --g-ui-yellow-subtle: var(--g-ui-yellow-50);
551
+ --g-ui-yellow-muted: var(--g-ui-yellow-100);
552
+ --g-ui-yellow-emphasized: var(--g-ui-yellow-200);
553
+ --g-ui-yellow-solid: var(--g-ui-yellow-400);
554
+ --g-ui-yellow-focus-ring: var(--g-ui-yellow-500);
555
+ --g-ui-yellow-border: var(--g-ui-yellow-300);
556
+
557
+ /* Teal semantic */
558
+ --g-ui-teal-contrast: white;
559
+ --g-ui-teal-fg: var(--g-ui-teal-600);
560
+ --g-ui-teal-subtle: var(--g-ui-teal-50);
561
+ --g-ui-teal-muted: var(--g-ui-teal-100);
562
+ --g-ui-teal-emphasized: var(--g-ui-teal-200);
563
+ --g-ui-teal-solid: var(--g-ui-teal-600);
564
+ --g-ui-teal-focus-ring: var(--g-ui-teal-500);
565
+ --g-ui-teal-border: var(--g-ui-teal-300);
566
+
567
+ /* Purple semantic */
568
+ --g-ui-purple-contrast: white;
569
+ --g-ui-purple-fg: var(--g-ui-purple-600);
570
+ --g-ui-purple-subtle: var(--g-ui-purple-50);
571
+ --g-ui-purple-muted: var(--g-ui-purple-100);
572
+ --g-ui-purple-emphasized: var(--g-ui-purple-200);
573
+ --g-ui-purple-solid: var(--g-ui-purple-600);
574
+ --g-ui-purple-focus-ring: var(--g-ui-purple-500);
575
+ --g-ui-purple-border: var(--g-ui-purple-300);
576
+
577
+ /* Pink semantic */
578
+ --g-ui-pink-contrast: white;
579
+ --g-ui-pink-fg: var(--g-ui-pink-600);
580
+ --g-ui-pink-subtle: var(--g-ui-pink-50);
581
+ --g-ui-pink-muted: var(--g-ui-pink-100);
582
+ --g-ui-pink-emphasized: var(--g-ui-pink-200);
583
+ --g-ui-pink-solid: var(--g-ui-pink-600);
584
+ --g-ui-pink-focus-ring: var(--g-ui-pink-500);
585
+ --g-ui-pink-border: var(--g-ui-pink-300);
586
+
587
+ /* Cyan semantic */
588
+ --g-ui-cyan-contrast: white;
589
+ --g-ui-cyan-fg: var(--g-ui-cyan-600);
590
+ --g-ui-cyan-subtle: var(--g-ui-cyan-50);
591
+ --g-ui-cyan-muted: var(--g-ui-cyan-100);
592
+ --g-ui-cyan-emphasized: var(--g-ui-cyan-200);
593
+ --g-ui-cyan-solid: var(--g-ui-cyan-600);
594
+ --g-ui-cyan-focus-ring: var(--g-ui-cyan-500);
595
+ --g-ui-cyan-border: var(--g-ui-cyan-300);
596
+
597
+ /* Primary overrides for light theme */
598
+ --g-ui-primary-hover: #4f46e5;
599
+ --g-ui-primary-active: #4338ca;
600
+ --g-ui-primary-subtle: rgba(99, 102, 241, 0.06);
601
+ --g-ui-primary-muted: rgba(99, 102, 241, 0.12);
602
+ --g-ui-primary-emphasized: rgba(99, 102, 241, 0.2);
603
+
604
+ /* Shadows - Light theme (dual-layer, Untitled UI inspired) */
605
+ --g-ui-shadow-xs: 0px 1px 2px rgba(16, 24, 40, 0.05);
606
+ --g-ui-shadow-sm: 0px 1px 3px rgba(16, 24, 40, 0.1), 0px 1px 2px rgba(16, 24, 40, 0.06);
607
+ --g-ui-shadow-md: 0px 4px 8px -2px rgba(16, 24, 40, 0.1), 0px 2px 4px -2px rgba(16, 24, 40, 0.06);
608
+ --g-ui-shadow-lg: 0px 12px 16px -4px rgba(16, 24, 40, 0.08), 0px 4px 6px -2px rgba(16, 24, 40, 0.03);
609
+ --g-ui-shadow-xl: 0px 20px 24px -4px rgba(16, 24, 40, 0.08), 0px 8px 8px -4px rgba(16, 24, 40, 0.03);
610
+ --g-ui-shadow-2xl: 0px 24px 48px -12px rgba(16, 24, 40, 0.18);
611
+ }
612
+ body {
613
+ margin: 0;
614
+ padding: 0;
615
+ background: var(--g-ui-bg);
616
+ color: var(--g-ui-text);
617
+ font-family: var(--g-ui-font);
618
+ font-size: 14px;
619
+ }
620
+
621
+ .g-ui-reset {
622
+ font-family: var(--g-ui-font);
623
+ color: var(--g-ui-text);
624
+ }
625
+
626
+ .g-ui-text {
627
+ font-family: var(--g-ui-font);
628
+ font-weight: 400;
629
+ color: var(--g-ui-text);
630
+ }
631
+ .g-ui-text-size-xs { font-size: 12px; line-height: 1.4; }
632
+ .g-ui-text-size-sm { font-size: 14px; line-height: 1.45; }
633
+ .g-ui-text-size-md { font-size: 16px; line-height: 1.5; }
634
+ .g-ui-text-size-lg { font-size: 18px; line-height: 1.55; }
635
+ .g-ui-text-size-xl { font-size: 20px; line-height: 1.6; }
636
+ .g-ui-text-weight-400 { font-weight: 400; }
637
+ .g-ui-text-weight-500 { font-weight: 500; }
638
+ .g-ui-text-weight-600 { font-weight: 600; }
639
+ .g-ui-text-weight-700 { font-weight: 700; }
640
+ .g-ui-text-dimmed { color: var(--g-ui-muted); }
641
+ .g-ui-text-muted { color: var(--g-ui-muted); }
642
+ .g-ui-text-primary { color: var(--g-ui-primary); }
643
+ .g-ui-text-success { color: var(--g-ui-success); }
644
+ .g-ui-text-danger { color: var(--g-ui-danger); }
645
+ .g-ui-text-align-left { text-align: left; }
646
+ .g-ui-text-align-center { text-align: center; }
647
+ .g-ui-text-align-right { text-align: right; }
648
+
649
+ .g-ui-title {
650
+ font-family: var(--g-ui-font);
651
+ color: var(--g-ui-text);
652
+ margin: 0;
653
+ font-weight: 700;
654
+ }
655
+ .g-ui-title-order-1 { font-size: 38px; }
656
+ .g-ui-title-order-2 { font-size: 32px; }
657
+ .g-ui-title-order-3 { font-size: 28px; }
658
+ .g-ui-title-order-4 { font-size: 22px; }
659
+ .g-ui-title-order-5 { font-size: 18px; }
660
+ .g-ui-title-order-6 { font-size: 16px; }
661
+
662
+ .g-ui-stack {
663
+ display: flex;
664
+ flex-direction: column;
665
+ gap: var(--g-ui-stack-gap, 0);
666
+ }
667
+ .g-ui-gap-none { gap: 0; }
668
+ .g-ui-gap-xs { gap: var(--g-ui-space-4); }
669
+ .g-ui-gap-sm { gap: var(--g-ui-space-8); }
670
+ .g-ui-gap-md { gap: var(--g-ui-space-12); }
671
+ .g-ui-gap-lg { gap: var(--g-ui-space-16); }
672
+ .g-ui-gap-xl { gap: var(--g-ui-space-20); }
673
+ .g-ui-align-start { align-items: flex-start; }
674
+ .g-ui-align-center { align-items: center; }
675
+ .g-ui-align-end { align-items: flex-end; }
676
+ .g-ui-justify-start { justify-content: flex-start; }
677
+ .g-ui-justify-center { justify-content: center; }
678
+ .g-ui-justify-end { justify-content: flex-end; }
679
+ .g-ui-justify-between { justify-content: space-between; }
680
+
681
+ .g-ui-group {
682
+ display: flex;
683
+ align-items: center;
684
+ flex-wrap: wrap;
685
+ }
686
+ .g-ui-no-wrap { flex-wrap: nowrap; }
687
+
688
+ .g-ui-container {
689
+ width: 100%;
690
+ margin: 0 auto;
691
+ padding: 0 var(--g-ui-container-padding, var(--g-ui-space-16));
692
+ box-sizing: border-box;
693
+ }
694
+ .g-ui-container-size-xs { max-width: 540px; }
695
+ .g-ui-container-size-sm { max-width: 720px; }
696
+ .g-ui-container-size-md { max-width: 960px; }
697
+ .g-ui-container-size-lg { max-width: 1140px; }
698
+ .g-ui-container-size-xl { max-width: 1320px; }
699
+ .g-ui-container-fluid { max-width: 100%; }
700
+
701
+ .g-ui-card {
702
+ background: var(--g-ui-surface);
703
+ border-radius: var(--g-ui-radius);
704
+ box-shadow: none;
705
+ border: 1px solid var(--g-ui-border);
706
+ }
707
+ .g-ui-card-border-default { border: 1px solid var(--g-ui-border); }
708
+ .g-ui-card-border-none { border: none; }
709
+ .g-ui-card-border-light { border: 1px solid var(--g-ui-border-light); }
710
+ .g-ui-card-border-dark { border: 1px solid var(--g-ui-border-dark); }
711
+ .g-ui-card-border-primary { border: 1px solid var(--g-ui-primary); }
712
+ .g-ui-card-border-success { border: 1px solid var(--g-ui-success); }
713
+ .g-ui-card-border-danger { border: 1px solid var(--g-ui-danger); }
714
+ .g-ui-card-border-warning { border: 1px solid var(--g-ui-warning); }
715
+ .g-ui-card-border-info { border: 1px solid var(--g-ui-info); }
716
+ .g-ui-card-border-subtle { border: 1px solid var(--g-ui-border-subtle); }
717
+ .g-ui-card-border-emphasized { border: 1px solid var(--g-ui-border-emphasized); }
718
+ .g-ui-card-border-inverted { border: 1px solid var(--g-ui-border-inverted); }
719
+ .g-ui-card-border-error { border: 1px solid var(--g-ui-border-error); }
720
+ .g-ui-card-border-warning { border: 1px solid var(--g-ui-border-warning); }
721
+ .g-ui-card-border-success { border: 1px solid var(--g-ui-border-success); }
722
+ .g-ui-card-border-info { border: 1px solid var(--g-ui-border-info); }
723
+
724
+ .g-ui-card-padding-xs { padding: var(--g-ui-space-10); }
725
+ .g-ui-card-padding-sm { padding: var(--g-ui-space-14); }
726
+ .g-ui-card-padding-md { padding: var(--g-ui-space-18); }
727
+ .g-ui-card-padding-lg { padding: var(--g-ui-space-24); }
728
+ .g-ui-card-radius-sm { border-radius: 8px; }
729
+ .g-ui-card-radius-md { border-radius: 10px; }
730
+ .g-ui-card-radius-lg { border-radius: 14px; }
731
+ .g-ui-card-shadow-none { box-shadow: none; }
732
+ .g-ui-card-shadow-sm { box-shadow: var(--g-ui-shadow-sm); }
733
+ .g-ui-card-shadow-md { box-shadow: var(--g-ui-shadow-md); }
734
+ .g-ui-card-shadow-lg { box-shadow: var(--g-ui-shadow-lg); }
735
+ .g-ui-card-title {
736
+ margin-bottom: var(--g-ui-space-8);
737
+ font-weight: 600;
738
+ font-size: 16px;
739
+ color: var(--g-ui-text);
740
+ }
741
+ .g-ui-card-content {
742
+ color: var(--g-ui-muted);
743
+ margin-bottom: var(--g-ui-space-10);
744
+ }
745
+ .g-ui-card-actions {
746
+ position:relative;
747
+ margin-top: var(--g-ui-space-10);
748
+ display: flex;
749
+ justify-content: flex-end;
750
+ gap: var(--g-ui-space-8);
751
+ border-top: 1px solid var(--g-ui-border);
752
+ box-sizing: border-box;
753
+ }
754
+
755
+ .g-ui-card-padding-xs .g-ui-card-title, .g-ui-card-padding-xs .g-ui-card-content { margin-bottom: var(--g-ui-space-10); }
756
+ .g-ui-card-padding-sm .g-ui-card-title, .g-ui-card-padding-sm .g-ui-card-content { margin-bottom: var(--g-ui-space-14); }
757
+ .g-ui-card-padding-md .g-ui-card-title, .g-ui-card-padding-md .g-ui-card-content { margin-bottom: var(--g-ui-space-18); }
758
+ .g-ui-card-padding-lg .g-ui-card-title, .g-ui-card-padding-lg .g-ui-card-content { margin-bottom: var(--g-ui-space-24); }
759
+
760
+ .g-ui-card-padding-xs .g-ui-card-actions { left: calc(0px - var(--g-ui-space-10)); width: calc(100% + var(--g-ui-space-10) + var(--g-ui-space-10)); padding: var(--g-ui-space-10) var(--g-ui-space-10) 0 var(--g-ui-space-10); }
761
+ .g-ui-card-padding-sm .g-ui-card-actions { left: calc(0px - var(--g-ui-space-14)); width: calc(100% + var(--g-ui-space-14) + var(--g-ui-space-14)); padding: var(--g-ui-space-14) var(--g-ui-space-14) 0 var(--g-ui-space-14); }
762
+ .g-ui-card-padding-md .g-ui-card-actions { left: calc(0px - var(--g-ui-space-18)); width: calc(100% + var(--g-ui-space-18) + var(--g-ui-space-18)); padding: var(--g-ui-space-18) var(--g-ui-space-18) 0 var(--g-ui-space-18); }
763
+ .g-ui-card-padding-lg .g-ui-card-actions { left: calc(0px - var(--g-ui-space-24)); width: calc(100% + var(--g-ui-space-24) + var(--g-ui-space-24)); padding: var(--g-ui-space-24) var(--g-ui-space-24) 0 var(--g-ui-space-24); }
764
+
765
+ .g-ui-badge {
766
+ display: inline-flex;
767
+ align-items: center;
768
+ gap: var(--g-ui-space-6);
769
+ border-radius: 999px;
770
+ font-weight: 700;
771
+ text-transform: uppercase;
772
+ letter-spacing: 0.25px;
773
+ white-space: nowrap;
774
+ }
775
+ .g-ui-badge-size-xs { font-size: 9px; height: 16px; padding: 0 var(--g-ui-space-6); }
776
+ .g-ui-badge-size-sm { font-size: 10px; height: 18px; padding: 0 var(--g-ui-space-8); }
777
+ .g-ui-badge-size-md { font-size: 11px; height: 20px; padding: 0 var(--g-ui-space-10); }
778
+ .g-ui-badge-size-lg { font-size: 13px; height: 26px; padding: 0 var(--g-ui-space-12); }
779
+ .g-ui-badge-size-xl { font-size: 16px; height: 32px; padding: 0 var(--g-ui-space-16); }
780
+ .g-ui-badge-variant-filled {
781
+ background: var(--g-ui-primary);
782
+ color: var(--g-ui-primary-fg);
783
+ border: 1px solid transparent;
784
+ }
785
+ .g-ui-badge-variant-light {
786
+ background: var(--g-ui-primary-subtle);
787
+ color: var(--g-ui-primary);
788
+ border: 1px solid var(--g-ui-primary-muted);
789
+ }
790
+ .g-ui-badge-variant-outline {
791
+ background: transparent;
792
+ color: var(--g-ui-primary);
793
+ border: 1px solid var(--g-ui-primary);
794
+ }
795
+ .g-ui-badge-variant-dot {
796
+ background: transparent;
797
+ color: var(--g-ui-text);
798
+ border: 1px solid var(--g-ui-border);
799
+ }
800
+ .g-ui-badge-dot {
801
+ display: inline-flex;
802
+ align-items: center;
803
+ gap: var(--g-ui-space-6);
804
+ }
805
+ .g-ui-badge-dot::before {
806
+ content: '';
807
+ width: 6px;
808
+ height: 6px;
809
+ border-radius: 50%;
810
+ background: var(--g-ui-success);
811
+ }
812
+
813
+ .g-ui-button {
814
+ border: 0;
815
+ border-radius: 8px;
816
+ cursor: pointer;
817
+ font-weight: 600;
818
+ transition: transform .08s ease, background .12s ease, border .12s ease, color .12s ease;
819
+ line-height: 1;
820
+ display: inline-flex;
821
+ align-items: center;
822
+ justify-content: center;
823
+ }
824
+ .g-ui-button:active { transform: translateY(1px); }
825
+ .g-ui-button:disabled { opacity: 0.6; cursor: not-allowed; }
826
+ .g-ui-button-full { width: 100%; }
827
+ .g-ui-button-loading { opacity: 0.8; }
828
+ .g-ui-button-section-left { margin-right: var(--g-ui-space-8); display: inline-flex; }
829
+ .g-ui-button-section-right { margin-left: var(--g-ui-space-8); display: inline-flex; }
830
+ .g-ui-button-variant-filled { background: var(--g-ui-primary); color: var(--g-ui-primary-fg); border: 1px solid transparent; }
831
+ .g-ui-button-variant-light { background: var(--g-ui-primary-subtle); color: var(--g-ui-primary); border: 1px solid var(--g-ui-primary-muted); }
832
+ .g-ui-button-variant-outline { background: transparent; color: var(--g-ui-primary); border: 1px solid var(--g-ui-primary); }
833
+ .g-ui-button-variant-subtle { background: transparent; color: var(--g-ui-text); border: 1px solid var(--g-ui-border); }
834
+ .g-ui-button-variant-transparent { background: transparent; color: var(--g-ui-text); border: 1px solid transparent; }
835
+ .g-ui-button-variant-filled:hover { background: var(--g-ui-primary-hover); }
836
+ .g-ui-button-variant-light:hover { background: var(--g-ui-primary-muted); }
837
+ .g-ui-button-variant-outline:hover { background: var(--g-ui-primary-subtle); }
838
+ .g-ui-button-variant-subtle:hover { background: var(--g-ui-bg-muted); }
839
+ .g-ui-button-variant-transparent:hover { background: var(--g-ui-bg-muted); }
840
+ .g-ui-button-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-8); }
841
+ .g-ui-button-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-10); }
842
+ .g-ui-button-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-10); }
843
+ .g-ui-button-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-11); }
844
+ .g-ui-button-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-12); }
845
+
846
+ .g-ui-input-wrapper {
847
+ width: 100%;
848
+ border-radius: 8px;
849
+ border: 1px solid var(--g-ui-border);
850
+ background: var(--g-ui-surface);
851
+ color: var(--g-ui-text);
852
+ display: flex;
853
+ align-items: center;
854
+ gap: var(--g-ui-space-8);
855
+ padding: 0 var(--g-ui-space-12);
856
+ box-sizing: border-box;
857
+ }
858
+ .g-ui-input-wrapper:focus-within {
859
+ border-color: var(--g-ui-primary);
860
+ }
861
+ .g-ui-input {
862
+ width: 100%;
863
+ border: 0;
864
+ background: transparent;
865
+ color: inherit;
866
+ padding: 0;
867
+ height: 100%;
868
+ font-size: inherit;
869
+ }
870
+ .g-ui-input:focus,
871
+ .g-ui-input:focus-within {
872
+ outline: none;
873
+ }
874
+ .g-ui-input::placeholder {
875
+ color: var(--g-ui-muted);
876
+ transition: opacity .12s ease;
877
+ }
878
+ .g-ui-input:focus::placeholder {
879
+ opacity: 0.5;
880
+ }
881
+ .g-ui-input-section {
882
+ display: inline-flex;
883
+ align-items: center;
884
+ color: var(--g-ui-muted);
885
+ }
886
+ .g-ui-input-error {
887
+ border-color: var(--g-ui-danger);
888
+ }
889
+ .g-ui-input-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-10); }
890
+ .g-ui-input-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-12); }
891
+ .g-ui-input-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-14); }
892
+ .g-ui-input-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-16); }
893
+ .g-ui-input-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-20); }
894
+ .g-ui-text-input {
895
+ display: flex;
896
+ flex-direction: column;
897
+ gap: var(--g-ui-space-6);
898
+ }
899
+ .g-ui-text-input-label {
900
+ font-size: 13px;
901
+ font-weight: 500;
902
+ color: var(--g-ui-text);
903
+ }
904
+ .g-ui-text-input-description {
905
+ font-size: 12px;
906
+ color: var(--g-ui-muted);
907
+ }
908
+ .g-ui-text-input-error-text {
909
+ font-size: 12px;
910
+ color: var(--g-ui-danger);
911
+ }
912
+ .g-ui-date-input-popover .g-ui-popover-dropdown {
913
+ padding: 0;
914
+ border-width:0;
915
+ }
916
+
917
+ .g-ui-modal-overlay {
918
+ position: fixed;
919
+ inset: 0;
920
+ background: rgba(0,0,0,0.6);
921
+ display: flex;
922
+ align-items: center;
923
+ justify-content: center;
924
+ z-index: 999;
925
+ }
926
+ .g-ui-modal-overlay-light { background: rgba(0,0,0,0.4); }
927
+ .g-ui-modal-overlay-normal { background: rgba(0,0,0,0.6); }
928
+ .g-ui-modal-overlay-dark { background: rgba(0,0,0,0.8); }
929
+ .g-ui-modal-centered { align-items: center; justify-content: center; }
930
+ .g-ui-modal-top { align-items: flex-start; justify-content: center; padding-top: var(--g-ui-space-40); }
931
+ .g-ui-modal-position-top-left { align-items: flex-start; justify-content: flex-start; padding: var(--g-ui-space-40) var(--g-ui-space-20); }
932
+ .g-ui-modal-position-top-center { align-items: flex-start; justify-content: center; padding: var(--g-ui-space-40) var(--g-ui-space-20); }
933
+ .g-ui-modal-position-top-right { align-items: flex-start; justify-content: flex-end; padding: var(--g-ui-space-40) var(--g-ui-space-20); }
934
+ .g-ui-modal-position-center-left { align-items: center; justify-content: flex-start; padding: var(--g-ui-space-20); }
935
+ .g-ui-modal-position-center { align-items: center; justify-content: center; padding: var(--g-ui-space-20); }
936
+ .g-ui-modal-position-center-right { align-items: center; justify-content: flex-end; padding: var(--g-ui-space-20); }
937
+ .g-ui-modal-position-bottom-left { align-items: flex-end; justify-content: flex-start; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }
938
+ .g-ui-modal-position-bottom-center { align-items: flex-end; justify-content: center; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }
939
+ .g-ui-modal-position-bottom-right { align-items: flex-end; justify-content: flex-end; padding: var(--g-ui-space-20); padding-bottom: var(--g-ui-space-40); }
940
+ .g-ui-modal {
941
+ background: var(--g-ui-bg);
942
+ border: 1px solid var(--g-ui-border-muted);
943
+ border-radius: 8px;
944
+ padding: var(--g-ui-space-16);
945
+ min-width: 320px;
946
+ max-width: 780px;
947
+ box-shadow: var(--g-ui-shadow-lg);
948
+ }
949
+ .g-ui-modal-size-sm { width: 380px; }
950
+ .g-ui-modal-size-md { width: 440px; }
951
+ .g-ui-modal-size-lg { width: 620px; }
952
+ .g-ui-modal-size-xl { width: 780px; }
953
+ .g-ui-modal-header {
954
+ display: flex;
955
+ justify-content: space-between;
956
+ align-items: center;
957
+ margin-bottom: var(--g-ui-space-12);
958
+ }
959
+ .g-ui-modal-title { font-weight: 700; }
960
+ .g-ui-modal-close {
961
+ padding: 0;
962
+ width: 28px;
963
+ height: 28px;
964
+ }
965
+ .g-ui-modal-close svg {
966
+ width: 16px;
967
+ height: 16px;
968
+ fill: currentColor;
969
+ }
970
+
971
+ .g-ui-checkbox {
972
+ display: flex;
973
+ flex-direction: column;
974
+ gap: var(--g-ui-space-6);
975
+ box-sizing: border-box;
976
+ }
977
+ .g-ui-checkbox-control {
978
+ position: relative;
979
+ display: inline-flex;
980
+ align-items: center;
981
+ gap: var(--g-ui-space-10);
982
+ cursor: pointer;
983
+ }
984
+ .g-ui-checkbox-indeterminate,
985
+ .g-ui-checkbox-checked {
986
+ position:absolute;
987
+ color: var(--g-ui-primary-fg);
988
+ fill: var(--g-ui-primary-fg);
989
+ }
990
+ .g-ui-checkbox-indeterminate svg,
991
+ .g-ui-checkbox-checked svg {
992
+ fill: var(--g-ui-primary-fg);
993
+ }
994
+ .g-ui-checkbox-input {
995
+ appearance: none;
996
+ width: var(--g-ui-control-size, 16px);
997
+ height: var(--g-ui-control-size, 16px);
998
+ border: 1px solid var(--g-ui-border);
999
+ border-radius: 4px;
1000
+ background: var(--g-ui-bg);
1001
+ position: relative;
1002
+ transition: background-color .12s ease, border-color .12s ease;
1003
+ }
1004
+ .g-ui-checkbox-input:focus-visible {
1005
+ outline: 2px solid var(--g-ui-primary);
1006
+ outline-offset: 2px;
1007
+ }
1008
+ .g-ui-checkbox-input:checked {
1009
+ background: var(--g-ui-primary);
1010
+ border-color: var(--g-ui-primary);
1011
+ }
1012
+ .g-ui-checkbox-input:indeterminate {
1013
+ background: var(--g-ui-primary);
1014
+ border-color: var(--g-ui-primary);
1015
+ }
1016
+
1017
+ .g-ui-checkbox-label { font-size: 14px; }
1018
+ .g-ui-checkbox-description { font-size: 12px; color: var(--g-ui-muted); }
1019
+ .g-ui-checkbox-size-xs { --g-ui-control-size: 16px; --g-ui-control-inner-offset: 4px; }
1020
+ .g-ui-checkbox-size-sm { --g-ui-control-size: 20px; --g-ui-control-inner-offset: 5px; }
1021
+ .g-ui-checkbox-size-md { --g-ui-control-size: 24px; --g-ui-control-inner-offset: 6px; }
1022
+ .g-ui-checkbox-size-lg { --g-ui-control-size: 30px; --g-ui-control-inner-offset: 7px; }
1023
+ .g-ui-checkbox-size-xl { --g-ui-control-size: 36px; --g-ui-control-inner-offset: 8px; }
1024
+
1025
+ .g-ui-checkbox-size-xs .g-ui-checkbox-indeterminate { top: 2px;left:4px; }
1026
+ .g-ui-checkbox-size-xs .g-ui-checkbox-indeterminate svg { width: 16px; height: 16px; }
1027
+ .g-ui-checkbox-size-sm .g-ui-checkbox-indeterminate { top:3px; left:4px; }
1028
+ .g-ui-checkbox-size-sm .g-ui-checkbox-indeterminate svg { width: 20px; height:20px; }
1029
+ .g-ui-checkbox-size-md .g-ui-checkbox-indeterminate { top:3px; left:4px; }
1030
+ .g-ui-checkbox-size-md .g-ui-checkbox-indeterminate svg { width: 24px; height: 24px; }
1031
+ .g-ui-checkbox-size-lg .g-ui-checkbox-indeterminate { top:4px; left:5px; }
1032
+ .g-ui-checkbox-size-lg .g-ui-checkbox-indeterminate svg { width: 28px; height: 28px; }
1033
+ .g-ui-checkbox-size-xl .g-ui-checkbox-indeterminate { top:5px; left:6px; }
1034
+ .g-ui-checkbox-size-xl .g-ui-checkbox-indeterminate svg { width: 32px; height: 32px; }
1035
+
1036
+ .g-ui-checkbox-size-xs .g-ui-checkbox-checked { top: 2px;left:4px; }
1037
+ .g-ui-checkbox-size-xs .g-ui-checkbox-checked svg { width: 16px; height: 16px; }
1038
+ .g-ui-checkbox-size-sm .g-ui-checkbox-checked { top:3px; left:4px; }
1039
+ .g-ui-checkbox-size-sm .g-ui-checkbox-checked svg { width: 20px; height:20px; }
1040
+ .g-ui-checkbox-size-md .g-ui-checkbox-checked { top:3px; left:4px; }
1041
+ .g-ui-checkbox-size-md .g-ui-checkbox-checked svg { width: 24px; height: 24px; }
1042
+ .g-ui-checkbox-size-lg .g-ui-checkbox-checked { top:4px; left:5px; }
1043
+ .g-ui-checkbox-size-lg .g-ui-checkbox-checked svg { width: 28px; height: 28px; }
1044
+ .g-ui-checkbox-size-xl .g-ui-checkbox-checked { top:5px; left:6px; }
1045
+ .g-ui-checkbox-size-xl .g-ui-checkbox-checked svg { width: 32px; height: 32px; }
1046
+
1047
+ .g-ui-switch {
1048
+ display: inline-flex;
1049
+ align-items: center;
1050
+ gap: var(--g-ui-space-10);
1051
+ cursor: pointer;
1052
+ }
1053
+ .g-ui-switch-input {
1054
+ appearance: none;
1055
+ width: var(--g-ui-switch-width, 36px);
1056
+ height: var(--g-ui-switch-height, 20px);
1057
+ border-radius: 999px;
1058
+ background: var(--g-ui-bg-muted);
1059
+ border: 1px solid var(--g-ui-border);
1060
+ position: relative;
1061
+ transition: background .15s ease, border .15s ease;
1062
+ }
1063
+ .g-ui-switch-input:focus-visible {
1064
+ outline: 2px solid var(--g-ui-primary);
1065
+ outline-offset: 2px;
1066
+ }
1067
+ .g-ui-switch-input::after {
1068
+ content: '';
1069
+ position: absolute;
1070
+ width: var(--g-ui-switch-thumb, 14px);
1071
+ height: var(--g-ui-switch-thumb, 14px);
1072
+ border-radius: 50%;
1073
+ background: #fff;
1074
+ top: var(--g-ui-switch-offset, 2px);
1075
+ left: var(--g-ui-switch-offset, 2px);
1076
+ transition: transform .15s ease;
1077
+ }
1078
+ .g-ui-switch-input:checked {
1079
+ background: var(--g-ui-primary);
1080
+ border-color: var(--g-ui-primary);
1081
+ }
1082
+ .g-ui-switch-input:checked::after {
1083
+ transform: translateX(calc(var(--g-ui-switch-width, 36px) - var(--g-ui-switch-thumb, 14px) - (var(--g-ui-switch-offset, 2px) * 2)));
1084
+ }
1085
+ .g-ui-switch-label { font-size: 14px; }
1086
+ .g-ui-switch-size-xs { --g-ui-switch-width: 32px; --g-ui-switch-height: 16px; --g-ui-switch-thumb: 12px; --g-ui-switch-offset: 2px; }
1087
+ .g-ui-switch-size-sm { --g-ui-switch-width: 38px; --g-ui-switch-height: 20px; --g-ui-switch-thumb: 14px; --g-ui-switch-offset: 3px; }
1088
+ .g-ui-switch-size-md { --g-ui-switch-width: 46px; --g-ui-switch-height: 24px; --g-ui-switch-thumb: 18px; --g-ui-switch-offset: 3px; }
1089
+ .g-ui-switch-size-lg { --g-ui-switch-width: 56px; --g-ui-switch-height: 30px; --g-ui-switch-thumb: 22px; --g-ui-switch-offset: 4px; }
1090
+ .g-ui-switch-size-xl { --g-ui-switch-width: 72px; --g-ui-switch-height: 36px; --g-ui-switch-thumb: 28px; --g-ui-switch-offset: 4px; }
1091
+
1092
+ .g-ui-select-root {
1093
+ position: relative;
1094
+ width: 100%;
1095
+ }
1096
+ .g-ui-select {
1097
+ flex: 1;
1098
+ display: flex;
1099
+ align-items: center;
1100
+ min-height: 100%;
1101
+ cursor: pointer;
1102
+ color: var(--g-ui-text);
1103
+ font-size: inherit;
1104
+ }
1105
+ .g-ui-select-value {
1106
+ flex: 1;
1107
+ }
1108
+ .g-ui-select-placeholder {
1109
+ color: var(--g-ui-muted);
1110
+ }
1111
+ .g-ui-select-caret {
1112
+ color: var(--g-ui-muted);
1113
+ font-size: 12px;
1114
+ }
1115
+ .g-ui-select-dropdown {
1116
+ position: absolute;
1117
+ top: calc(100% + var(--g-ui-space-6));
1118
+ left: 0;
1119
+ right: 0;
1120
+ border: 1px solid var(--g-ui-border-muted);
1121
+ border-radius: var(--g-ui-radius);
1122
+ background: var(--g-ui-bg);
1123
+ box-shadow: var(--g-ui-shadow-sm);
1124
+ padding: var(--g-ui-space-6);
1125
+ display: flex;
1126
+ flex-direction: column;
1127
+ gap: var(--g-ui-space-4);
1128
+ z-index: 60;
1129
+ max-height: 240px;
1130
+ overflow: auto;
1131
+ }
1132
+ .g-ui-select-item {
1133
+ padding: var(--g-ui-space-6) var(--g-ui-space-8);
1134
+ border-radius: 6px;
1135
+ cursor: pointer;
1136
+ display: flex;
1137
+ align-items: center;
1138
+ gap: var(--g-ui-space-8);
1139
+ }
1140
+ .g-ui-select-item:hover {
1141
+ background: var(--g-ui-bg-subtle);
1142
+ }
1143
+ .g-ui-select-item-active {
1144
+ background: var(--g-ui-primary-subtle);
1145
+ color: var(--g-ui-primary);
1146
+ }
1147
+ .g-ui-select-item-disabled {
1148
+ opacity: 0.6;
1149
+ cursor: not-allowed;
1150
+ }
1151
+ .g-ui-select-item-disabled:hover {
1152
+ background: transparent;
1153
+ }
1154
+ .g-ui-select-size-xs { font-size: 12px; height: 30px; padding: 0 var(--g-ui-space-10); }
1155
+ .g-ui-select-size-sm { font-size: 13px; height: 36px; padding: 0 var(--g-ui-space-12); }
1156
+ .g-ui-select-size-md { font-size: 14px; height: 42px; padding: 0 var(--g-ui-space-14); }
1157
+ .g-ui-select-size-lg { font-size: 15px; height: 50px; padding: 0 var(--g-ui-space-16); }
1158
+ .g-ui-select-size-xl { font-size: 16px; height: 60px; padding: 0 var(--g-ui-space-20); }
1159
+
1160
+ .g-ui-tabs { display: flex; flex-direction: column; }
1161
+ .g-ui-tabs-list { display: flex; flex-wrap: wrap; gap: 0; }
1162
+ .g-ui-tabs-tab {
1163
+ position: relative;
1164
+ padding: var(--g-ui-space-8) var(--g-ui-space-16);
1165
+ font-size: 13px;
1166
+ line-height: 1;
1167
+ display: flex;
1168
+ align-items: center;
1169
+ cursor: pointer;
1170
+ background: transparent;
1171
+ border: 0;
1172
+ color: var(--g-ui-text);
1173
+ margin-bottom: calc(0px - var(--g-ui-space-2));
1174
+ }
1175
+ .g-ui-tabs-panel { padding-top: var(--g-ui-space-12); }
1176
+ .g-ui-tabs-variant-default .g-ui-tabs-list {
1177
+ border-bottom: 2px solid var(--g-ui-border-muted);
1178
+ }
1179
+ .g-ui-tabs-variant-default .g-ui-tabs-tab {
1180
+ border-bottom: 2px solid var(--g-ui-border-muted);
1181
+ border-radius: 4px 4px 0 0;
1182
+ }
1183
+ .g-ui-tabs-variant-default .g-ui-tabs-tab:hover {
1184
+ background: var(--g-ui-bg-muted);
1185
+ }
1186
+ .g-ui-tabs-variant-default .g-ui-tabs-tab-active {
1187
+ border-color: var(--g-ui-primary);
1188
+ color: var(--g-ui-primary);
1189
+ }
1190
+ .g-ui-tabs-variant-outline .g-ui-tabs-list {
1191
+ border-bottom: 1px solid var(--g-ui-border-muted);
1192
+ }
1193
+ .g-ui-tabs-variant-outline .g-ui-tabs-tab {
1194
+ border: 1px solid transparent;
1195
+ border-bottom: 0;
1196
+ border-radius: 8px 8px 0 0;
1197
+ }
1198
+ .g-ui-tabs-variant-outline .g-ui-tabs-tab-active {
1199
+ border-color: var(--g-ui-border);
1200
+ background: var(--g-ui-bg);
1201
+ color: var(--g-ui-primary);
1202
+ }
1203
+ .g-ui-tabs-variant-pills .g-ui-tabs-list {
1204
+ gap: var(--g-ui-space-8);
1205
+ }
1206
+ .g-ui-tabs-variant-pills .g-ui-tabs-tab {
1207
+ border-radius: 8px;
1208
+ background: transparent;
1209
+ }
1210
+ .g-ui-tabs-variant-pills .g-ui-tabs-tab:hover {
1211
+ background: var(--g-ui-bg-muted);
1212
+ }
1213
+ .g-ui-tabs-variant-pills .g-ui-tabs-tab-active {
1214
+ background: var(--g-ui-primary);
1215
+ color: var(--g-ui-primary-fg);
1216
+ }
1217
+
1218
+ .g-ui-table {
1219
+ width: 100%;
1220
+ border-collapse: collapse;
1221
+ color: var(--g-ui-text);
1222
+ font-size: 13px;
1223
+ }
1224
+ .g-ui-table-with-border {
1225
+ border: 1px solid var(--g-ui-border-muted);
1226
+ border-radius: var(--g-ui-radius);
1227
+ overflow: hidden;
1228
+ }
1229
+ .g-ui-table th,
1230
+ .g-ui-table td {
1231
+ border-bottom: 1px solid var(--g-ui-border-muted);
1232
+ padding: var(--g-ui-space-10) var(--g-ui-space-12);
1233
+ text-align: left;
1234
+ }
1235
+ .g-ui-table th {
1236
+ font-weight: 500;
1237
+ color: var(--g-ui-muted);
1238
+ }
1239
+ .g-ui-table-column-borders th,
1240
+ .g-ui-table-column-borders td {
1241
+ border-right: 1px solid var(--g-ui-border);
1242
+ }
1243
+ .g-ui-table-column-borders th:last-child,
1244
+ .g-ui-table-column-borders td:last-child {
1245
+ border-right: 0;
1246
+ }
1247
+ .g-ui-table-striped tbody tr:nth-child(odd) { background: var(--g-ui-bg-subtle); }
1248
+ .g-ui-table-hover tbody tr:hover { background: var(--g-ui-bg-muted); }
1249
+
1250
+ .g-ui-accordion {
1251
+ width: calc(100%);
1252
+ display: flex;
1253
+ flex-direction: column;
1254
+ border-bottom: 1px solid var(--g-ui-border);
1255
+ }
1256
+ .g-ui-accordion-header {
1257
+ box-sizing: border-box;
1258
+ padding: var(--g-ui-space-12) var(--g-ui-space-15);
1259
+ font-size: 14px;
1260
+ display: flex;
1261
+ align-items: flex-start;
1262
+ flex-direction: column;
1263
+ justify-content: flex-start;
1264
+ cursor: pointer;
1265
+ }
1266
+ .g-ui-accordion-content {
1267
+ padding: var(--g-ui-space-12);
1268
+ }
1269
+
1270
+ .g-ui-tooltip {
1271
+ position: relative;
1272
+ display: inline-flex;
1273
+ }
1274
+ .g-ui-tooltip-content {
1275
+ position: absolute;
1276
+ bottom: calc(100% + var(--g-ui-space-8));
1277
+ left: 50%;
1278
+ transform: translateX(-50%);
1279
+ background: var(--g-ui-gray-900);
1280
+ color: var(--g-ui-gray-50);
1281
+ border: 0;
1282
+ padding: var(--g-ui-space-6) var(--g-ui-space-10);
1283
+ border-radius: 6px;
1284
+ font-size: 12px;
1285
+ white-space: nowrap;
1286
+ opacity: 0;
1287
+ pointer-events: none;
1288
+ transition: opacity .12s ease, transform .12s ease;
1289
+ }
1290
+ .g-ui-tooltip:hover .g-ui-tooltip-content {
1291
+ opacity: 1;
1292
+ transform: translateX(-50%) translateY(-2px);
1293
+ }
1294
+
1295
+ .g-ui-menu {
1296
+ position: relative;
1297
+ display: inline-flex;
1298
+ }
1299
+ .g-ui-menu-dropdown {
1300
+ position: fixed;
1301
+ right: 0;
1302
+ width:10px;
1303
+ min-width: 180px;
1304
+ background: var(--g-ui-surface);
1305
+ border: 1px solid var(--g-ui-border-muted);
1306
+ border-radius: var(--g-ui-radius);
1307
+ box-shadow: var(--g-ui-shadow-sm);
1308
+ padding: var(--g-ui-space-4);
1309
+ z-index: 10000;
1310
+ }
1311
+ .g-ui-menu-left { left: 0; right: auto; }
1312
+ .g-ui-menu-center { left: 50%; right: auto; transform: translateX(-50%); }
1313
+ .g-ui-menu-right { right: 0; left: auto; }
1314
+ .g-ui-menu-item {
1315
+ display: flex;
1316
+ align-items: center;
1317
+ gap: var(--g-ui-space-8);
1318
+ padding: var(--g-ui-space-6) var(--g-ui-space-12);
1319
+ border-radius: 8px;
1320
+ cursor: pointer;
1321
+ color: var(--g-ui-text);
1322
+ font-size: 13px;
1323
+ }
1324
+ .g-ui-menu-item:hover { background: var(--g-ui-bg-subtle); }
1325
+
1326
+ .g-ui-menu-overlay {
1327
+ position: fixed;
1328
+ top:0;
1329
+ left:0;
1330
+ right:0;
1331
+ bottom:0;
1332
+ inset: 0;
1333
+ z-index: 9999;
1334
+ }
1335
+
1336
+ .g-ui-drawer-overlay {
1337
+ position: fixed;
1338
+ inset: 0;
1339
+ z-index: 998;
1340
+ }
1341
+ .g-ui-drawer-overlay-normal { background: rgba(0,0,0,0.6); }
1342
+ .g-ui-drawer-overlay-light { background: rgba(0,0,0,0.4); }
1343
+ .g-ui-drawer-overlay-dark { background: rgba(0,0,0,0.8); }
1344
+ .g-ui-drawer {
1345
+ position: fixed;
1346
+ top: 0;
1347
+ bottom: 0;
1348
+ width: 320px;
1349
+ background: var(--g-ui-bg);
1350
+ border-left: 1px solid var(--g-ui-border-muted);
1351
+ box-shadow: var(--g-ui-shadow-lg);
1352
+ z-index: 999;
1353
+ padding: var(--g-ui-space-16);
1354
+ }
1355
+ .g-ui-drawer-right { right: 0; }
1356
+ .g-ui-drawer-left { left: 0; border-left: 0; border-right: 1px solid var(--g-ui-border-muted); }
1357
+ .g-ui-drawer-size-sm { width: 380px; }
1358
+ .g-ui-drawer-size-md { width: 440px; }
1359
+ .g-ui-drawer-size-lg { width: 620px; }
1360
+ .g-ui-drawer-size-xl { width: 780px; }
1361
+
1362
+ .g-ui-notification {
1363
+ border-radius: var(--g-ui-radius);
1364
+ padding: var(--g-ui-space-10) var(--g-ui-space-12) var(--g-ui-space-10) var(--g-ui-space-22);
1365
+ background: var(--g-ui-surface);
1366
+ display: flex;
1367
+ align-items: center;
1368
+ gap: var(--g-ui-space-8);
1369
+ box-shadow: var(--g-ui-shadow-lg);
1370
+ position: relative;
1371
+ overflow: hidden;
1372
+ }
1373
+ .g-ui-notification-bordered {
1374
+ border: 1px solid var(--g-ui-border);
1375
+ }
1376
+ .g-ui-notification::before {
1377
+ content: '';
1378
+ position: absolute;
1379
+ left: 4px;
1380
+ top: 4px;
1381
+ bottom: 4px;
1382
+ width: 6px;
1383
+ border-radius: 999px;
1384
+ background: var(--g-ui-primary);
1385
+ }
1386
+ .g-ui-notification-with-icon::before {
1387
+ display: none;
1388
+ }
1389
+ .g-ui-notification-body {
1390
+ flex: 1;
1391
+ overflow: hidden;
1392
+ }
1393
+ .g-ui-notification-icon {
1394
+ display: inline-flex;
1395
+ align-items: center;
1396
+ justify-content: center;
1397
+ width: 28px;
1398
+ height: 28px;
1399
+ border-radius: 999px;
1400
+ background: var(--g-ui-primary);
1401
+ color: var(--g-ui-primary-fg);
1402
+ }
1403
+ .g-ui-notification-loader { margin-right: var(--g-ui-space-8); }
1404
+ .g-ui-notification-close {
1405
+ margin-left: auto;
1406
+ border: 0;
1407
+ background: transparent;
1408
+ color: var(--g-ui-muted);
1409
+ cursor: pointer;
1410
+ display: flex;
1411
+ align-items: center;
1412
+ justify-content: center;
1413
+ width: 24px;
1414
+ height: 24px;
1415
+ }
1416
+ .g-ui-notification-close span {
1417
+ display: flex;
1418
+ align-items: center;
1419
+ justify-content: center;
1420
+ width: 24px;
1421
+ height: 24px;
1422
+ }
1423
+ .g-ui-notification-close svg{
1424
+ width: 24px;
1425
+ height: 24px;
1426
+ }
1427
+
1428
+ .g-ui-notification-title { font-weight: 500; font-size: 13px; line-height: 1.35; }
1429
+ .g-ui-notification-primary::before { background: var(--g-ui-primary); }
1430
+ .g-ui-notification-blue::before { background: var(--g-ui-blue-500); }
1431
+ .g-ui-notification-success::before { background: var(--g-ui-success); }
1432
+ .g-ui-notification-danger::before { background: var(--g-ui-danger); }
1433
+ .g-ui-notification-primary .g-ui-notification-icon { background: var(--g-ui-primary); }
1434
+ .g-ui-notification-blue .g-ui-notification-icon { background: var(--g-ui-blue-500); }
1435
+ .g-ui-notification-success .g-ui-notification-icon { background: var(--g-ui-success); }
1436
+ .g-ui-notification-danger .g-ui-notification-icon { background: var(--g-ui-danger); }
1437
+
1438
+ .g-ui-divider {
1439
+ width: 100%;
1440
+ border: 0;
1441
+ height: 1px;
1442
+ background: var(--g-ui-border);
1443
+ margin-top: var(--g-ui-space-9);
1444
+ margin-bottom: var(--g-ui-space-9);
1445
+ }
1446
+ .g-ui-divider-size-xs { height: 1px; }
1447
+ .g-ui-divider-size-sm { height: 2px; }
1448
+ .g-ui-divider-size-md { height: 3px; }
1449
+ .g-ui-divider-size-lg { height: 4px; }
1450
+ .g-ui-divider-size-xl { height: 5px; }
1451
+ .g-ui-divider.label {
1452
+ display: flex;
1453
+ align-items: center;
1454
+ gap: var(--g-ui-space-10);
1455
+ color: var(--g-ui-muted);
1456
+ font-size: 12px;
1457
+ background: transparent;
1458
+ }
1459
+ .g-ui-divider.label::before,
1460
+ .g-ui-divider.label::after {
1461
+ content: '';
1462
+ height: 1px;
1463
+ flex: 1;
1464
+ background: var(--g-ui-border);
1465
+ }
1466
+ .g-ui-divider-label-left.label::before { flex: 0 0 12px; }
1467
+ .g-ui-divider-label-right.label::after { flex: 0 0 12px; }
1468
+ .g-ui-divider-label-text {
1469
+ color: var(--g-ui-muted);
1470
+ font-size: 12px;
1471
+ padding: 0 var(--g-ui-space-10);
1472
+ position: relative;
1473
+ z-index: 1;
1474
+ }
1475
+ .g-ui-divider-vertical {
1476
+ width: 1px;
1477
+ height: 100%;
1478
+ background: var(--g-ui-border);
1479
+ margin: 0 var(--g-ui-space-10);
1480
+ }
1481
+
1482
+ .g-ui-paper {
1483
+ background: var(--g-ui-surface);
1484
+ border: 0;
1485
+ border-radius: 10px;
1486
+ }
1487
+
1488
+ .g-ui-textarea {
1489
+ min-height: 120px;
1490
+ resize: vertical;
1491
+ padding: var(--g-ui-space-8) 0;
1492
+ height: auto;
1493
+ }
1494
+ .g-ui-input-multiline {
1495
+ align-items: stretch;
1496
+ padding: 0 var(--g-ui-space-12);
1497
+ height: auto;
1498
+ }
1499
+ .g-ui-input-multiline .g-ui-input {
1500
+ padding: var(--g-ui-space-8) 0;
1501
+ height: auto;
1502
+ }
1503
+ .g-ui-number-field {
1504
+ width: 100%;
1505
+ }
1506
+ .g-ui-number-field-controls {
1507
+ display: flex;
1508
+ flex-direction: column;
1509
+ gap: var(--g-ui-space-2);
1510
+ margin-left: auto;
1511
+ }
1512
+ .g-ui-number-field-control {
1513
+ width: 18px;
1514
+ height: 18px;
1515
+ border-radius: 6px;
1516
+ display: inline-flex;
1517
+ align-items: center;
1518
+ justify-content: center;
1519
+ border: 1px solid var(--g-ui-border);
1520
+ background: var(--g-ui-bg);
1521
+ color: var(--g-ui-text);
1522
+ cursor: pointer;
1523
+ user-select: none;
1524
+ font-size: 12px;
1525
+ line-height: 1;
1526
+ }
1527
+ .g-ui-number-field-control:hover {
1528
+ background: var(--g-ui-bg-subtle);
1529
+ }
1530
+
1531
+ .g-ui-alert {
1532
+ border-radius: var(--g-ui-radius);
1533
+ border: 1px solid transparent;
1534
+ padding: var(--g-ui-space-16);
1535
+ background: var(--g-ui-primary-subtle);
1536
+ color: var(--g-ui-primary);
1537
+ display: flex;
1538
+ flex-direction: column;
1539
+ gap: var(--g-ui-space-6);
1540
+ }
1541
+ .g-ui-alert-header {
1542
+ display: flex;
1543
+ align-items: center;
1544
+ gap: var(--g-ui-space-8);
1545
+ }
1546
+ .g-ui-alert-icon {
1547
+ display: inline-flex;
1548
+ align-items: center;
1549
+ width: 20px;
1550
+ height: 20px;
1551
+ margin-right: var(--g-ui-space-8);
1552
+ }
1553
+ .g-ui-alert-close {
1554
+ margin-left: auto;
1555
+ border: 0;
1556
+ background: transparent;
1557
+ color: var(--g-ui-muted);
1558
+ cursor: pointer;
1559
+ }
1560
+ .g-ui-alert-title { font-weight: 700; }
1561
+ .g-ui-alert-primary { background: var(--g-ui-primary-subtle); color: var(--g-ui-primary); border-color: transparent; }
1562
+ .g-ui-alert-blue { background: var(--g-ui-blue-subtle); color: var(--g-ui-blue-fg); border-color: transparent; }
1563
+ .g-ui-alert-success { background: var(--g-ui-green-subtle); color: var(--g-ui-green-fg); border-color: transparent; }
1564
+ .g-ui-alert-danger { background: var(--g-ui-red-subtle); color: var(--g-ui-red-fg); border-color: transparent; }
1565
+ .g-ui-alert-warning { background: var(--g-ui-orange-subtle); color: var(--g-ui-orange-fg); border-color: transparent; }
1566
+
1567
+ .g-ui-avatar {
1568
+ display: inline-flex;
1569
+ align-items: center;
1570
+ justify-content: center;
1571
+ border-radius: 50%;
1572
+ background: var(--g-ui-bg-muted);
1573
+ color: var(--g-ui-text);
1574
+ overflow: hidden;
1575
+ border: 1px solid var(--g-ui-border);
1576
+ font-weight: 600;
1577
+ }
1578
+ .g-ui-avatar-size-xs { width: 16px; height: 16px; font-size: 8px; }
1579
+ .g-ui-avatar-size-sm { width: 26px; height: 26px; font-size: 10px; }
1580
+ .g-ui-avatar-size-md { width: 38px; height: 38px; font-size: 13px; }
1581
+ .g-ui-avatar-size-lg { width: 56px; height: 56px; font-size: 18px; }
1582
+ .g-ui-avatar-size-xl { width: 84px; height: 84px; font-size: 24px; }
1583
+
1584
+ .g-ui-icon {
1585
+ display: inline-flex;
1586
+ align-items: center;
1587
+ justify-content: center;
1588
+ flex-shrink: 0;
1589
+ line-height: 1;
1590
+ }
1591
+ .g-ui-icon-size-xs { font-size: 14px; }
1592
+ .g-ui-icon-size-sm { font-size: 18px; }
1593
+ .g-ui-icon-size-md { font-size: 22px; }
1594
+ .g-ui-icon-size-lg { font-size: 28px; }
1595
+ .g-ui-icon-size-xl { font-size: 36px; }
1596
+ .g-ui-icon-color-primary { color: var(--g-ui-primary); }
1597
+ .g-ui-icon-color-success { color: var(--g-ui-green-500); }
1598
+ .g-ui-icon-color-warning { color: var(--g-ui-yellow-500); }
1599
+ .g-ui-icon-color-error { color: var(--g-ui-red-500); }
1600
+ .g-ui-icon-color-muted { color: var(--g-ui-fg-muted); }
1601
+ .g-ui-avatar-img { width: 100%; height: 100%; object-fit: cover; }
1602
+
1603
+ .g-ui-kbd {
1604
+ display: inline-flex;
1605
+ align-items: center;
1606
+ padding: var(--g-ui-space-2) var(--g-ui-space-6);
1607
+ border-radius: 6px;
1608
+ border: 1px solid var(--g-ui-border-muted);
1609
+ border-bottom-width: 3px;
1610
+ background: var(--g-ui-bg-muted);
1611
+ font-size: 12px;
1612
+ color: var(--g-ui-text);
1613
+ }
1614
+
1615
+ .g-ui-code {
1616
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
1617
+ background: var(--g-ui-bg-muted);
1618
+ border: 1px solid var(--g-ui-border-muted);
1619
+ border-radius: var(--g-ui-radius);
1620
+ padding: var(--g-ui-space-2) var(--g-ui-space-6);
1621
+ font-size: 11px;
1622
+ color: var(--g-ui-text);
1623
+ }
1624
+
1625
+ .g-ui-blockquote {
1626
+ border-left: 5px solid var(--g-ui-primary);
1627
+ padding: var(--g-ui-space-24) var(--g-ui-space-38);
1628
+ background: var(--g-ui-bg-muted);
1629
+ color: var(--g-ui-text);
1630
+ border-radius: 4px;
1631
+ }
1632
+
1633
+ .g-ui-grid {
1634
+ display: grid;
1635
+ }
1636
+ .g-ui-grid-cols-1 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
1637
+ .g-ui-grid-cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
1638
+ .g-ui-grid-cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
1639
+ .g-ui-grid-cols-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
1640
+ .g-ui-grid-cols-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
1641
+ .g-ui-grid-cols-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
1642
+
1643
+ .g-ui-list {
1644
+ margin: 0;
1645
+ color: var(--g-ui-text);
1646
+ list-style: none;
1647
+ padding-left: 0;
1648
+ }
1649
+ .g-ui-list-item {
1650
+ list-style: none;
1651
+ padding: var(--g-ui-space-6) 0;
1652
+ }
1653
+ .g-ui-list-item-border {
1654
+ border-bottom: 1px solid var(--g-ui-border-muted);
1655
+ }
1656
+ .g-ui-list-item-section {
1657
+ display: inline-flex;
1658
+ align-items: center;
1659
+ flex-shrink: 0;
1660
+ }
1661
+ .g-ui-list-item-shell {
1662
+ display: flex;
1663
+ align-items: center;
1664
+ gap: var(--g-ui-space-10);
1665
+ grid-column: 2;
1666
+ flex-wrap: wrap;
1667
+ }
1668
+ .g-ui-list-item-content {
1669
+ display: flex;
1670
+ flex-direction: column;
1671
+ gap: var(--g-ui-space-2);
1672
+ flex: 1;
1673
+ }
1674
+ .g-ui-list-item-title {
1675
+ font-weight: 600;
1676
+ }
1677
+ .g-ui-list-item-body {
1678
+ color: var(--g-ui-muted);
1679
+ }
1680
+ .g-ui-list-unordered { padding-left: 0; }
1681
+ .g-ui-list-ordered { padding-left: 0; counter-reset: g-ui-list; }
1682
+ .g-ui-list-none { padding-left: 0; }
1683
+ .g-ui-list-unordered > li,
1684
+ .g-ui-list-ordered > li {
1685
+ display: grid;
1686
+ grid-template-columns: max-content 1fr;
1687
+ column-gap: var(--g-ui-space-8);
1688
+ align-items: center;
1689
+ }
1690
+ .g-ui-list-ordered > li:not(.g-ui-list-nested-item) { counter-increment: g-ui-list; }
1691
+ .g-ui-list-unordered > li:not(.g-ui-list-nested-item)::before,
1692
+ .g-ui-list-ordered > li:not(.g-ui-list-nested-item)::before {
1693
+ grid-column: 1;
1694
+ align-self: flex-start;
1695
+ justify-self: end;
1696
+ color: currentColor;
1697
+ }
1698
+ .g-ui-list-unordered > li:not(.g-ui-list-nested-item)::before {
1699
+ content: '•';
1700
+ }
1701
+ .g-ui-list-ordered > li:not(.g-ui-list-nested-item)::before {
1702
+ content: counters(g-ui-list, '.') '.';
1703
+ }
1704
+ .g-ui-list-nested-item {
1705
+ list-style: none;
1706
+ padding-left: 0;
1707
+ grid-template-columns: 1fr;
1708
+ column-gap: 0;
1709
+ }
1710
+ .g-ui-list-nested-item::before {
1711
+ content: none;
1712
+ }
1713
+ .g-ui-list-unordered > li > :not(.g-ui-list-item-shell),
1714
+ .g-ui-list-ordered > li > :not(.g-ui-list-item-shell) {
1715
+ grid-column: 2;
1716
+ }
1717
+ .g-ui-list > li > .g-ui-list {
1718
+ grid-column: 2;
1719
+ margin-top: var(--g-ui-space-6);
1720
+ }
1721
+ .g-ui-list-item-shell > .g-ui-list {
1722
+ flex-basis: 100%;
1723
+ margin-left: 0;
1724
+ }
1725
+ .g-ui-list .g-ui-list {
1726
+ margin-left: var(--g-ui-space-12);
1727
+ }
1728
+ .g-ui-list .g-ui-list-unordered,
1729
+ .g-ui-list .g-ui-list-ordered {
1730
+ padding-left: 0;
1731
+ }
1732
+ .g-ui-list-with-padding { padding-left: var(--g-ui-space-36); }
1733
+ .g-ui-list-size-xs { font-size: 12px; line-height: 1.4; }
1734
+ .g-ui-list-size-sm { font-size: 13px; line-height: 1.45; }
1735
+ .g-ui-list-size-md { font-size: 14px; line-height: 1.5; }
1736
+ .g-ui-list-size-lg { font-size: 16px; line-height: 1.6; }
1737
+ .g-ui-list-size-xl { font-size: 18px; line-height: 1.65; }
1738
+
1739
+ .g-ui-anchor {
1740
+ color: var(--g-ui-primary);
1741
+ text-decoration: none;
1742
+ }
1743
+ .g-ui-anchor:hover { text-decoration: underline; }
1744
+
1745
+ .g-ui-image {
1746
+ max-width: 100%;
1747
+ border-radius: var(--g-ui-radius);
1748
+ }
1749
+
1750
+ .g-ui-progress {
1751
+ width: 100%;
1752
+ height: 8px;
1753
+ border-radius: 999px;
1754
+ background: var(--g-ui-bg-muted);
1755
+ border: 0;
1756
+ overflow: hidden;
1757
+ }
1758
+ .g-ui-progress-bar {
1759
+ height: 100%;
1760
+ background: var(--g-ui-primary);
1761
+ }
1762
+ .g-ui-progress-size-xs { height: 3px; }
1763
+ .g-ui-progress-size-sm { height: 5px; }
1764
+ .g-ui-progress-size-md { height: 8px; }
1765
+ .g-ui-progress-size-lg { height: 12px; }
1766
+ .g-ui-progress-size-xl { height: 16px; }
1767
+ .g-ui-progress-0 .g-ui-progress-bar { width: 0%; }
1768
+ .g-ui-progress-5 .g-ui-progress-bar { width: 5%; }
1769
+ .g-ui-progress-10 .g-ui-progress-bar { width: 10%; }
1770
+ .g-ui-progress-15 .g-ui-progress-bar { width: 15%; }
1771
+ .g-ui-progress-20 .g-ui-progress-bar { width: 20%; }
1772
+ .g-ui-progress-25 .g-ui-progress-bar { width: 25%; }
1773
+ .g-ui-progress-30 .g-ui-progress-bar { width: 30%; }
1774
+ .g-ui-progress-35 .g-ui-progress-bar { width: 35%; }
1775
+ .g-ui-progress-40 .g-ui-progress-bar { width: 40%; }
1776
+ .g-ui-progress-45 .g-ui-progress-bar { width: 45%; }
1777
+ .g-ui-progress-50 .g-ui-progress-bar { width: 50%; }
1778
+ .g-ui-progress-55 .g-ui-progress-bar { width: 55%; }
1779
+ .g-ui-progress-60 .g-ui-progress-bar { width: 60%; }
1780
+ .g-ui-progress-65 .g-ui-progress-bar { width: 65%; }
1781
+ .g-ui-progress-70 .g-ui-progress-bar { width: 70%; }
1782
+ .g-ui-progress-75 .g-ui-progress-bar { width: 75%; }
1783
+ .g-ui-progress-80 .g-ui-progress-bar { width: 80%; }
1784
+ .g-ui-progress-85 .g-ui-progress-bar { width: 85%; }
1785
+ .g-ui-progress-90 .g-ui-progress-bar { width: 90%; }
1786
+ .g-ui-progress-95 .g-ui-progress-bar { width: 95%; }
1787
+ .g-ui-progress-100 .g-ui-progress-bar { width: 100%; }
1788
+ .g-ui-progress-success .g-ui-progress-bar { background: var(--g-ui-success); }
1789
+ .g-ui-progress-danger .g-ui-progress-bar { background: var(--g-ui-danger); }
1790
+
1791
+ .g-ui-slider {
1792
+ width: 100%;
1793
+ --g-ui-slider-size: 8px;
1794
+ height: calc(var(--g-ui-slider-size) * 2);
1795
+ padding: 0 var(--g-ui-slider-size);
1796
+ display: flex;
1797
+ align-items: center;
1798
+ position: relative;
1799
+ }
1800
+ .g-ui-range-slider {
1801
+ width: 100%;
1802
+ --g-ui-slider-size: 8px;
1803
+ height: calc(var(--g-ui-slider-size) * 2);
1804
+ padding: 0 var(--g-ui-slider-size);
1805
+ display: flex;
1806
+ align-items: center;
1807
+ position: relative;
1808
+ }
1809
+ .g-ui-slider-track {
1810
+ position: relative;
1811
+ width: 100%;
1812
+ height: var(--g-ui-slider-size);
1813
+ border-radius: 999px;
1814
+ background: var(--g-ui-bg-emphasized);
1815
+ }
1816
+ .g-ui-slider-bar {
1817
+ position: absolute;
1818
+ left: 0;
1819
+ top: 0;
1820
+ bottom: 0;
1821
+ background: var(--g-ui-primary);
1822
+ border-radius: 999px;
1823
+ }
1824
+ .g-ui-slider-thumb {
1825
+ position: absolute;
1826
+ top: 50%;
1827
+ transform: translate(-50%, -50%);
1828
+ width: calc(var(--g-ui-slider-size) * 2);
1829
+ height: calc(var(--g-ui-slider-size) * 2);
1830
+ border-radius: 50%;
1831
+ background: var(--g-ui-surface);
1832
+ border: 4px solid var(--g-ui-primary);
1833
+ cursor: pointer;
1834
+ }
1835
+ .g-ui-slider-marks {
1836
+ position: absolute;
1837
+ top: calc(100% + var(--g-ui-space-10));
1838
+ left:10px;
1839
+ right:15px;
1840
+ height: 18px;
1841
+ box-sizing: border-box;
1842
+ padding: 0 var(--g-ui-slider-size);
1843
+ }
1844
+ .g-ui-slider-mark {
1845
+ position: absolute;
1846
+ top: 0;
1847
+ transform: translateX(-50%);
1848
+ }
1849
+ .g-ui-slider-mark-label {
1850
+ font-size: 11px;
1851
+ color: var(--g-ui-muted);
1852
+ }
1853
+
1854
+ .g-ui-slider-disabled .g-ui-slider-track { background: var(--g-ui-border); }
1855
+ .g-ui-slider-disabled .g-ui-slider-bar { background: var(--g-ui-border-emphasized); }
1856
+ .g-ui-slider-disabled .g-ui-slider-thumb { cursor: not-allowed; opacity: 0.6; }
1857
+ .g-ui-slider-size-xs { --g-ui-slider-size: 4px; }
1858
+ .g-ui-slider-size-sm { --g-ui-slider-size: 6px; }
1859
+ .g-ui-slider-size-md { --g-ui-slider-size: 8px; }
1860
+ .g-ui-slider-size-lg { --g-ui-slider-size: 10px; }
1861
+ .g-ui-slider-size-xl { --g-ui-slider-size: 12px; }
1862
+
1863
+ .g-ui-skeleton {
1864
+ background: var(--g-ui-border-muted);
1865
+ animation: g-ui-skeleton-fade 1.5s ease-in-out infinite;
1866
+ border-radius: 4px;
1867
+ }
1868
+ @keyframes g-ui-skeleton-fade { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }
1869
+
1870
+ .g-ui-chip {
1871
+ display: inline-flex;
1872
+ align-items: center;
1873
+ border: 1px solid transparent;
1874
+ border-radius: 999px;
1875
+ cursor: pointer;
1876
+ background: transparent;
1877
+ color: var(--g-ui-text);
1878
+ }
1879
+ .g-ui-chip-active {
1880
+ background: var(--g-ui-primary);
1881
+ border-color: transparent;
1882
+ color: var(--g-ui-primary-fg);
1883
+ }
1884
+ .g-ui-chip-size-xs { font-size: 12px; height: 20px; padding: 0 var(--g-ui-space-6); }
1885
+ .g-ui-chip-size-sm { font-size: 13px; height: 21px; padding: 0 var(--g-ui-space-5); }
1886
+ .g-ui-chip-size-md { font-size: 14px; height: 22px; padding: 0 var(--g-ui-space-6); }
1887
+ .g-ui-chip-size-lg { font-size: 15px; height: 23px; padding: 0 var(--g-ui-space-7); }
1888
+ .g-ui-chip-size-xl { font-size: 16px; height: 24px; padding: 0 var(--g-ui-space-8); }
1889
+ .g-ui-chip-variant-filled { background: var(--g-ui-bg-muted); color: var(--g-ui-text); border-color: transparent; }
1890
+ .g-ui-chip-variant-light { background: var(--g-ui-bg-muted); color: var(--g-ui-text); border-color: transparent; }
1891
+ .g-ui-chip-variant-outline { background: var(--g-ui-surface); color: var(--g-ui-text); border-color: var(--g-ui-border); }
1892
+ .g-ui-chip-variant-filled.g-ui-chip-active,
1893
+ .g-ui-chip-variant-light.g-ui-chip-active,
1894
+ .g-ui-chip-variant-outline.g-ui-chip-active {
1895
+ background: var(--g-ui-primary);
1896
+ border-color: transparent;
1897
+ color: var(--g-ui-primary-fg);
1898
+ }
1899
+
1900
+ .g-ui-segmented {
1901
+ display: inline-flex;
1902
+ border-radius: 10px;
1903
+ overflow: hidden;
1904
+ padding: var(--g-ui-space-4);
1905
+ background: var(--g-ui-bg-muted);
1906
+ }
1907
+ .g-ui-segmented-item {
1908
+ padding: var(--g-ui-space-4) var(--g-ui-space-14);
1909
+ cursor: pointer;
1910
+ background: transparent;
1911
+ color: var(--g-ui-text);
1912
+ border-radius: 8px;
1913
+ }
1914
+ .g-ui-segmented-active {
1915
+ background: var(--g-ui-bg);
1916
+ color: var(--g-ui-text);
1917
+ }
1918
+ .g-ui-segmented-size-xs .g-ui-segmented-item { padding: var(--g-ui-space-2) var(--g-ui-space-6); font-size: 12px; }
1919
+ .g-ui-segmented-size-sm .g-ui-segmented-item { padding: var(--g-ui-space-3) var(--g-ui-space-10); font-size: 13px; }
1920
+ .g-ui-segmented-size-md .g-ui-segmented-item { padding: var(--g-ui-space-4) var(--g-ui-space-14); font-size: 14px; }
1921
+ .g-ui-segmented-size-lg .g-ui-segmented-item { padding: var(--g-ui-space-7) var(--g-ui-space-16); font-size: 15px; }
1922
+ .g-ui-segmented-size-xl .g-ui-segmented-item { padding: var(--g-ui-space-10) var(--g-ui-space-20); font-size: 16px; }
1923
+
1924
+ .g-ui-pagination {
1925
+ display: inline-flex;
1926
+ gap: var(--g-ui-space-6);
1927
+ align-items: center;
1928
+ }
1929
+ .g-ui-pagination-item {
1930
+ min-width: 32px;
1931
+ height: 32px;
1932
+ border-radius: 8px;
1933
+ border: 1px solid var(--g-ui-border-muted);
1934
+ background: var(--g-ui-bg);
1935
+ color: var(--g-ui-text);
1936
+ cursor: pointer;
1937
+ font-size: 14px;
1938
+ }
1939
+ .g-ui-pagination-item-active {
1940
+ background: var(--g-ui-primary);
1941
+ border-color: var(--g-ui-primary);
1942
+ color: var(--g-ui-primary-fg);
1943
+ }
1944
+ .g-ui-pagination-item.g-ui-pagination-item-active:hover{
1945
+ background: var(--g-ui-primary-hover);
1946
+ border-color: var(--g-ui-primary-hover);
1947
+ color: var(--g-ui-primary-fg);
1948
+ }
1949
+ .g-ui-pagination-item:hover {
1950
+ background: var(--g-ui-bg-subtle);
1951
+ }
1952
+ .g-ui-pagination-size-xs .g-ui-pagination-item { min-width: 22px; height: 22px; font-size: 12px; }
1953
+ .g-ui-pagination-size-sm .g-ui-pagination-item { min-width: 26px; height: 26px; font-size: 12px; }
1954
+ .g-ui-pagination-size-md .g-ui-pagination-item { min-width: 32px; height: 32px; font-size: 14px; }
1955
+ .g-ui-pagination-size-lg .g-ui-pagination-item { min-width: 38px; height: 38px; font-size: 15px; }
1956
+ .g-ui-pagination-size-xl .g-ui-pagination-item { min-width: 44px; height: 44px; font-size: 16px; }
1957
+
1958
+ .g-ui-timeline {
1959
+ display: flex;
1960
+ flex-direction: column;
1961
+ gap: 0;
1962
+ }
1963
+ .g-ui-timeline-item {
1964
+ display: grid;
1965
+ grid-template-columns: 28px 1fr;
1966
+ gap: var(--g-ui-space-16);
1967
+ align-items: start;
1968
+ position: relative;
1969
+ padding-bottom: var(--g-ui-space-24);
1970
+ }
1971
+ .g-ui-timeline-item:last-child {
1972
+ padding-bottom: 0;
1973
+ }
1974
+ .g-ui-timeline-item::before {
1975
+ content: '';
1976
+ position: absolute;
1977
+ left: 8px;
1978
+ top: 20px;
1979
+ bottom: 0;
1980
+ width: 4px;
1981
+ background: var(--g-ui-border-muted);
1982
+ }
1983
+ .g-ui-timeline-item:last-child::before {
1984
+ display: none;
1985
+ }
1986
+ .g-ui-timeline-dot {
1987
+ width: 20px;
1988
+ height: 20px;
1989
+ border-radius: 50%;
1990
+ background: var(--g-ui-bg);
1991
+ border: 4px solid var(--g-ui-primary);
1992
+ margin-top: 0;
1993
+ position: relative;
1994
+ z-index: 1;
1995
+ }
1996
+ .g-ui-timeline-content {
1997
+ display: flex;
1998
+ flex-direction: column;
1999
+ gap: var(--g-ui-space-4);
2000
+ }
2001
+ .g-ui-timeline-title { font-weight: 600; }
2002
+ .g-ui-timeline-desc { color: var(--g-ui-muted); font-size: 13px; }
2003
+
2004
+ .g-ui-stepper {
2005
+ display: flex;
2006
+ gap: var(--g-ui-space-12);
2007
+ align-items: center;
2008
+ }
2009
+ .g-ui-stepper-item {
2010
+ display: flex;
2011
+ align-items: center;
2012
+ gap: var(--g-ui-space-8);
2013
+ }
2014
+ .g-ui-stepper-index {
2015
+ width: 42px;
2016
+ height: 42px;
2017
+ border-radius: 50%;
2018
+ border: 1px solid var(--g-ui-border-muted);
2019
+ display: inline-flex;
2020
+ align-items: center;
2021
+ justify-content: center;
2022
+ font-size: 14px;
2023
+ font-weight: 600;
2024
+ background: var(--g-ui-bg);
2025
+ }
2026
+ .g-ui-stepper-active .g-ui-stepper-index {
2027
+ background: var(--g-ui-primary-subtle);
2028
+ border-color: var(--g-ui-primary);
2029
+ color: var(--g-ui-primary);
2030
+ }
2031
+ .g-ui-stepper-label { font-size: 14px; font-weight: 500; }
2032
+
2033
+ .g-ui-rating {
2034
+ display: inline-flex;
2035
+ gap: var(--g-ui-space-2);
2036
+ }
2037
+ .g-ui-rating-item {
2038
+ cursor: pointer;
2039
+ color: var(--g-ui-border);
2040
+ }
2041
+ .g-ui-rating-item-active {
2042
+ color: var(--g-ui-primary);
2043
+ }
2044
+ .g-ui-rating-size-xs { font-size: 14px; }
2045
+ .g-ui-rating-size-sm { font-size: 18px; }
2046
+ .g-ui-rating-size-md { font-size: 20px; }
2047
+ .g-ui-rating-size-lg { font-size: 28px; }
2048
+ .g-ui-rating-size-xl { font-size: 32px; }
2049
+
2050
+ .g-ui-tag {
2051
+ display: inline-flex;
2052
+ align-items: center;
2053
+ gap: var(--g-ui-space-6);
2054
+ border: 1px solid var(--g-ui-border-muted);
2055
+ border-radius: 999px;
2056
+ padding: var(--g-ui-space-4) var(--g-ui-space-10);
2057
+ font-size: 12px;
2058
+ color: var(--g-ui-text);
2059
+ background: var(--g-ui-bg);
2060
+ }
2061
+
2062
+
2063
+ .g-ui-calendar {
2064
+ width: 100%;
2065
+ border: 1px solid var(--g-ui-border);
2066
+ border-radius: var(--g-ui-radius);
2067
+ background: var(--g-ui-bg);
2068
+ padding: var(--g-ui-space-12);
2069
+ }
2070
+ .g-ui-calendar-header {
2071
+ display: flex;
2072
+ align-items: center;
2073
+ justify-content: space-between;
2074
+ margin-bottom: var(--g-ui-space-10);
2075
+ }
2076
+ .g-ui-calendar-title-group {
2077
+ display: flex;
2078
+ align-items: center;
2079
+ gap: var(--g-ui-space-6);
2080
+ }
2081
+ .g-ui-calendar-title-button {
2082
+ border: 0;
2083
+ background: transparent;
2084
+ padding: var(--g-ui-space-2) var(--g-ui-space-6);
2085
+ border-radius: 6px;
2086
+ font-weight: 500;
2087
+ font-size: 14px;
2088
+ color: var(--g-ui-text);
2089
+ cursor: pointer;
2090
+ }
2091
+ .g-ui-calendar-title-button:hover {
2092
+ background: var(--g-ui-bg-subtle);
2093
+ }
2094
+ .g-ui-calendar-title {
2095
+ font-weight: 500;
2096
+ font-size: 14px;
2097
+ }
2098
+ .g-ui-calendar-nav-icon svg {
2099
+ width: 14px;
2100
+ height: 14px;
2101
+ fill: currentColor;
2102
+ }
2103
+
2104
+
2105
+ .g-ui-calendar-size-xs { width: 220px; }
2106
+ .g-ui-calendar-size-sm { width: 260px; }
2107
+ .g-ui-calendar-size-md { width: 300px; }
2108
+ .g-ui-calendar-size-lg { width: 370px; }
2109
+ .g-ui-calendar-size-xl { width: 420px; }
2110
+
2111
+ .g-ui-calendar-size-xs .g-ui-calendar-grid { gap: var(--g-ui-space-2); }
2112
+ .g-ui-calendar-size-sm .g-ui-calendar-grid { gap: var(--g-ui-space-4); }
2113
+ .g-ui-calendar-size-md .g-ui-calendar-grid { gap: var(--g-ui-space-6); }
2114
+ .g-ui-calendar-size-lg .g-ui-calendar-grid { gap: var(--g-ui-space-8); }
2115
+ .g-ui-calendar-size-xl .g-ui-calendar-grid { gap: var(--g-ui-space-10); }
2116
+
2117
+ .g-ui-calendar-size-xs .g-ui-calendar-cell { width: 26px; height: 26px; font-size: 12px; }
2118
+ .g-ui-calendar-size-sm .g-ui-calendar-cell { width: 30px; height: 30px; font-size: 13px; }
2119
+ .g-ui-calendar-size-md .g-ui-calendar-cell { width: 34px; height: 34px; font-size: 14px; }
2120
+ .g-ui-calendar-size-lg .g-ui-calendar-cell { width: 42px; height: 34px; font-size: 16px; }
2121
+ .g-ui-calendar-size-xl .g-ui-calendar-cell { width: 48px; height: 38px; font-size: 18px; }
2122
+
2123
+
2124
+ .g-ui-calendar-grid {
2125
+ display: grid;
2126
+ grid-template-columns: repeat(7, 1fr);
2127
+ gap: var(--g-ui-space-6);
2128
+ }
2129
+ .g-ui-calendar-cell {
2130
+ width: 32px;
2131
+ height: 32px;
2132
+ border-radius: 8px;
2133
+ display: flex;
2134
+ align-items: center;
2135
+ justify-content: center;
2136
+ cursor: pointer;
2137
+ color: var(--g-ui-text);
2138
+ }
2139
+ .g-ui-calendar-cell:hover {
2140
+ background: var(--g-ui-bg-subtle);
2141
+ }
2142
+ .g-ui-calendar-cell-muted {
2143
+ color: var(--g-ui-muted);
2144
+ }
2145
+ .g-ui-calendar-cell-active,
2146
+ .g-ui-calendar-cell-active:hover {
2147
+ background: var(--g-ui-primary);
2148
+ color: var(--g-ui-primary-fg);
2149
+ }
2150
+
2151
+ /* EventCalendar */
2152
+ .g-ui-event-calendar {
2153
+ display: flex;
2154
+ flex-direction: column;
2155
+ width: 100%;
2156
+ min-height: 480px;
2157
+ background: var(--g-ui-bg);
2158
+ border: 1px solid var(--g-ui-border);
2159
+ border-radius: var(--g-ui-radius);
2160
+ overflow: hidden;
2161
+ }
2162
+ .g-ui-event-calendar-header {
2163
+ display: flex;
2164
+ align-items: center;
2165
+ justify-content: space-between;
2166
+ flex-wrap: wrap;
2167
+ gap: var(--g-ui-space-10);
2168
+ padding: var(--g-ui-space-12) var(--g-ui-space-16);
2169
+ border-bottom: 1px solid var(--g-ui-border);
2170
+ background: var(--g-ui-bg);
2171
+ }
2172
+ .g-ui-event-calendar-nav-group {
2173
+ display: flex;
2174
+ align-items: center;
2175
+ gap: var(--g-ui-space-4);
2176
+ }
2177
+ .g-ui-event-calendar-nav {
2178
+ border-radius: 8px;
2179
+ }
2180
+ .g-ui-event-calendar-today {
2181
+ margin-left: var(--g-ui-space-8);
2182
+ }
2183
+ .g-ui-event-calendar-today-icon {
2184
+ margin-right: var(--g-ui-space-6);
2185
+ }
2186
+ .g-ui-event-calendar-title {
2187
+ font-weight: 600;
2188
+ font-size: 18px;
2189
+ color: var(--g-ui-text);
2190
+ min-width: 200px;
2191
+ text-align: center;
2192
+ }
2193
+ .g-ui-event-calendar-actions {
2194
+ display: flex;
2195
+ align-items: center;
2196
+ gap: var(--g-ui-space-8);
2197
+ }
2198
+ .g-ui-event-calendar-view-option {
2199
+ padding: var(--g-ui-space-6) var(--g-ui-space-12);
2200
+ border-radius: 8px;
2201
+ font-size: 13px;
2202
+ font-weight: 500;
2203
+ color: var(--g-ui-text);
2204
+ cursor: pointer;
2205
+ background: transparent;
2206
+ border: 1px solid transparent;
2207
+ }
2208
+ .g-ui-event-calendar-view-option:hover {
2209
+ background: var(--g-ui-bg-subtle);
2210
+ }
2211
+ .g-ui-event-calendar-view-option-active {
2212
+ background: var(--g-ui-primary-subtle);
2213
+ color: var(--g-ui-primary);
2214
+ }
2215
+ .g-ui-event-calendar-create-btn {
2216
+ display: inline-flex;
2217
+ align-items: center;
2218
+ gap: var(--g-ui-space-6);
2219
+ }
2220
+ .g-ui-event-calendar-month {
2221
+ flex: 1;
2222
+ display: flex;
2223
+ flex-direction: column;
2224
+ min-height: 0;
2225
+ }
2226
+ .g-ui-event-calendar-weekdays {
2227
+ display: grid;
2228
+ grid-template-columns: repeat(7, 1fr);
2229
+ padding: var(--g-ui-space-8) var(--g-ui-space-16);
2230
+ border-bottom: 1px solid var(--g-ui-border);
2231
+ font-size: 11px;
2232
+ font-weight: 600;
2233
+ text-transform: uppercase;
2234
+ letter-spacing: 0.02em;
2235
+ color: var(--g-ui-muted);
2236
+ }
2237
+ .g-ui-event-calendar-weekday {
2238
+ text-align: center;
2239
+ }
2240
+ .g-ui-event-calendar-month-grid {
2241
+ flex: 1;
2242
+ display: grid;
2243
+ grid-template-columns: repeat(7, 1fr);
2244
+ grid-auto-rows: minmax(100px, 1fr);
2245
+ gap: 1px;
2246
+ padding: var(--g-ui-space-8);
2247
+ background: var(--g-ui-border);
2248
+ overflow: auto;
2249
+ }
2250
+ .g-ui-event-calendar-month-cell {
2251
+ background: var(--g-ui-bg);
2252
+ min-height: 100px;
2253
+ display: flex;
2254
+ flex-direction: column;
2255
+ padding: var(--g-ui-space-4);
2256
+ }
2257
+ .g-ui-event-calendar-month-cell-outside {
2258
+ background: var(--g-ui-bg-subtle);
2259
+ }
2260
+ .g-ui-event-calendar-month-cell-today {
2261
+ background: var(--g-ui-primary-subtle);
2262
+ }
2263
+ .g-ui-event-calendar-month-cell-header {
2264
+ flex-shrink: 0;
2265
+ font-size: 13px;
2266
+ font-weight: 500;
2267
+ color: var(--g-ui-text);
2268
+ cursor: pointer;
2269
+ padding: var(--g-ui-space-2) 0;
2270
+ border-radius: 4px;
2271
+ margin: -2px 0;
2272
+ }
2273
+ .g-ui-event-calendar-month-cell-header:hover {
2274
+ background: var(--g-ui-bg-muted);
2275
+ }
2276
+ .g-ui-event-calendar-month-cell-events {
2277
+ flex: 1;
2278
+ display: flex;
2279
+ flex-direction: column;
2280
+ gap: 2px;
2281
+ min-height: 0;
2282
+ overflow: hidden;
2283
+ }
2284
+ .g-ui-event-calendar-month-event {
2285
+ font-size: 12px;
2286
+ padding: 2px 6px;
2287
+ border-radius: 4px;
2288
+ border-left: 3px solid var(--g-ui-primary);
2289
+ background: var(--g-ui-primary-subtle);
2290
+ color: var(--g-ui-text);
2291
+ cursor: pointer;
2292
+ overflow: hidden;
2293
+ text-overflow: ellipsis;
2294
+ white-space: nowrap;
2295
+ }
2296
+ .g-ui-event-calendar-month-event:hover {
2297
+ opacity: 0.9;
2298
+ }
2299
+ .g-ui-event-calendar-month-more {
2300
+ font-size: 11px;
2301
+ color: var(--g-ui-primary);
2302
+ cursor: pointer;
2303
+ padding: 2px 4px;
2304
+ margin-top: 2px;
2305
+ }
2306
+ .g-ui-event-calendar-month-more:hover {
2307
+ text-decoration: underline;
2308
+ }
2309
+ .g-ui-event-calendar-week {
2310
+ flex: 1;
2311
+ display: flex;
2312
+ flex-direction: column;
2313
+ min-height: 0;
2314
+ overflow: auto;
2315
+ }
2316
+ .g-ui-event-calendar-week-days {
2317
+ display: grid;
2318
+ grid-template-columns: 60px repeat(7, 1fr);
2319
+ border-bottom: 1px solid var(--g-ui-border);
2320
+ background: var(--g-ui-bg);
2321
+ }
2322
+ .g-ui-event-calendar-week-day-col {
2323
+ padding: var(--g-ui-space-8);
2324
+ text-align: center;
2325
+ font-size: 12px;
2326
+ font-weight: 500;
2327
+ color: var(--g-ui-text);
2328
+ }
2329
+ .g-ui-event-calendar-week-time-col {
2330
+ width: 60px;
2331
+ flex-shrink: 0;
2332
+ font-size: 11px;
2333
+ color: var(--g-ui-muted);
2334
+ padding: var(--g-ui-space-4);
2335
+ }
2336
+ .g-ui-event-calendar-week-body {
2337
+ display: flex;
2338
+ flex: 1;
2339
+ min-height: 400px;
2340
+ }
2341
+ .g-ui-event-calendar-week-body .g-ui-event-calendar-week-time-col {
2342
+ display: flex;
2343
+ flex-direction: column;
2344
+ gap: 0;
2345
+ }
2346
+ .g-ui-event-calendar-week-slot-label {
2347
+ height: 48px;
2348
+ font-size: 10px;
2349
+ color: var(--g-ui-muted);
2350
+ display: flex;
2351
+ align-items: flex-start;
2352
+ padding-top: 2px;
2353
+ }
2354
+ .g-ui-event-calendar-week-grid-cols {
2355
+ display: grid;
2356
+ grid-template-columns: repeat(7, 1fr);
2357
+ flex: 1;
2358
+ position: relative;
2359
+ border-left: 1px solid var(--g-ui-border);
2360
+ }
2361
+ .g-ui-event-calendar-week-day-col-body {
2362
+ position: relative;
2363
+ display: flex;
2364
+ flex-direction: column;
2365
+ border-right: 1px solid var(--g-ui-border);
2366
+ }
2367
+ .g-ui-event-calendar-week-slot {
2368
+ height: 48px;
2369
+ border-bottom: 1px solid var(--g-ui-border-muted);
2370
+ cursor: pointer;
2371
+ }
2372
+ .g-ui-event-calendar-week-slot:hover {
2373
+ background: var(--g-ui-bg-subtle);
2374
+ }
2375
+ .g-ui-event-calendar-week-event {
2376
+ position: absolute;
2377
+ left: 2px;
2378
+ right: 2px;
2379
+ border-left: 3px solid var(--g-ui-primary);
2380
+ background: var(--g-ui-primary-subtle);
2381
+ border-radius: 4px;
2382
+ padding: 4px 6px;
2383
+ overflow: hidden;
2384
+ cursor: pointer;
2385
+ font-size: 12px;
2386
+ color: var(--g-ui-text);
2387
+ pointer-events: auto;
2388
+ }
2389
+ .g-ui-event-calendar-week-event:hover {
2390
+ opacity: 0.95;
2391
+ }
2392
+ .g-ui-event-calendar-week-event-title {
2393
+ font-weight: 500;
2394
+ overflow: hidden;
2395
+ text-overflow: ellipsis;
2396
+ white-space: nowrap;
2397
+ }
2398
+ .g-ui-event-calendar-week-event-time {
2399
+ font-size: 10px;
2400
+ color: var(--g-ui-muted);
2401
+ display: block;
2402
+ }
2403
+ .g-ui-event-calendar-day {
2404
+ flex: 1;
2405
+ display: flex;
2406
+ flex-direction: column;
2407
+ min-height: 0;
2408
+ overflow: auto;
2409
+ }
2410
+ .g-ui-event-calendar-day-body {
2411
+ display: flex;
2412
+ flex: 1;
2413
+ min-height: 400px;
2414
+ }
2415
+ .g-ui-event-calendar-day-time-col {
2416
+ width: 60px;
2417
+ flex-shrink: 0;
2418
+ display: flex;
2419
+ flex-direction: column;
2420
+ font-size: 11px;
2421
+ color: var(--g-ui-muted);
2422
+ padding: var(--g-ui-space-4);
2423
+ border-right: 1px solid var(--g-ui-border);
2424
+ }
2425
+ .g-ui-event-calendar-day-slot-label {
2426
+ height: 48px;
2427
+ display: flex;
2428
+ align-items: flex-start;
2429
+ padding-top: 2px;
2430
+ }
2431
+ .g-ui-event-calendar-day-slots {
2432
+ flex: 1;
2433
+ position: relative;
2434
+ border-left: 1px solid var(--g-ui-border);
2435
+ }
2436
+ .g-ui-event-calendar-day-slot {
2437
+ height: 48px;
2438
+ border-bottom: 1px solid var(--g-ui-border-muted);
2439
+ cursor: pointer;
2440
+ }
2441
+ .g-ui-event-calendar-day-slot:hover {
2442
+ background: var(--g-ui-bg-subtle);
2443
+ }
2444
+ .g-ui-event-calendar-day-event {
2445
+ position: absolute;
2446
+ left: 4px;
2447
+ right: 4px;
2448
+ border-left: 3px solid var(--g-ui-primary);
2449
+ background: var(--g-ui-primary-subtle);
2450
+ border-radius: 4px;
2451
+ padding: 6px 8px;
2452
+ overflow: hidden;
2453
+ cursor: pointer;
2454
+ font-size: 13px;
2455
+ color: var(--g-ui-text);
2456
+ }
2457
+ .g-ui-event-calendar-day-event:hover {
2458
+ opacity: 0.95;
2459
+ }
2460
+ .g-ui-event-calendar-day-event-title {
2461
+ font-weight: 500;
2462
+ }
2463
+ .g-ui-event-calendar-day-event-time {
2464
+ font-size: 11px;
2465
+ color: var(--g-ui-muted);
2466
+ display: block;
2467
+ }
2468
+ .g-ui-event-calendar-form {
2469
+ display: flex;
2470
+ flex-direction: column;
2471
+ gap: var(--g-ui-space-12);
2472
+ }
2473
+ .g-ui-event-calendar-form-row {
2474
+ display: flex;
2475
+ flex-direction: column;
2476
+ gap: var(--g-ui-space-6);
2477
+ }
2478
+ .g-ui-event-calendar-form-row-inline {
2479
+ flex-direction: row;
2480
+ flex-wrap: wrap;
2481
+ align-items: flex-end;
2482
+ gap: var(--g-ui-space-12);
2483
+ }
2484
+ .g-ui-event-calendar-form-field {
2485
+ display: flex;
2486
+ flex-direction: column;
2487
+ gap: var(--g-ui-space-4);
2488
+ min-width: 140px;
2489
+ }
2490
+ .g-ui-event-calendar-form-label {
2491
+ font-size: 13px;
2492
+ font-weight: 500;
2493
+ color: var(--g-ui-text);
2494
+ }
2495
+ .g-ui-event-calendar-form-actions {
2496
+ display: flex;
2497
+ justify-content: flex-end;
2498
+ gap: var(--g-ui-space-10);
2499
+ margin-top: var(--g-ui-space-8);
2500
+ padding-top: var(--g-ui-space-12);
2501
+ border-top: 1px solid var(--g-ui-border);
2502
+ }
2503
+ .g-ui-event-calendar-form-suggestions {
2504
+ max-height: 180px;
2505
+ overflow-y: auto;
2506
+ border: 1px solid var(--g-ui-border);
2507
+ border-radius: 8px;
2508
+ margin-top: var(--g-ui-space-4);
2509
+ background: var(--g-ui-bg);
2510
+ }
2511
+ .g-ui-event-calendar-form-suggestion-item {
2512
+ padding: var(--g-ui-space-10) var(--g-ui-space-12);
2513
+ font-size: 14px;
2514
+ cursor: pointer;
2515
+ border-bottom: 1px solid var(--g-ui-border-muted);
2516
+ }
2517
+ .g-ui-event-calendar-form-suggestion-item:last-child {
2518
+ border-bottom: 0;
2519
+ }
2520
+ .g-ui-event-calendar-form-suggestion-item:hover {
2521
+ background: var(--g-ui-bg-subtle);
2522
+ }
2523
+ .g-ui-event-calendar-form-chips {
2524
+ display: flex;
2525
+ flex-wrap: wrap;
2526
+ gap: var(--g-ui-space-6);
2527
+ margin-top: var(--g-ui-space-4);
2528
+ }
2529
+ .g-ui-event-calendar-form-chip {
2530
+ display: inline-flex;
2531
+ align-items: center;
2532
+ padding: var(--g-ui-space-4) var(--g-ui-space-8);
2533
+ border-radius: 6px;
2534
+ font-size: 13px;
2535
+ background: var(--g-ui-bg-muted);
2536
+ color: var(--g-ui-text);
2537
+ }
2538
+ .g-ui-event-calendar-form-chip-removable {
2539
+ cursor: pointer;
2540
+ }
2541
+ .g-ui-event-calendar-form-chip-removable:hover {
2542
+ background: var(--g-ui-bg-subtle);
2543
+ }
2544
+ .g-ui-event-calendar-form-colors {
2545
+ display: flex;
2546
+ flex-wrap: wrap;
2547
+ gap: var(--g-ui-space-6);
2548
+ margin-top: var(--g-ui-space-4);
2549
+ }
2550
+ .g-ui-event-calendar-form-color-swatch {
2551
+ width: 28px;
2552
+ height: 28px;
2553
+ border-radius: 50%;
2554
+ cursor: pointer;
2555
+ border: 2px solid transparent;
2556
+ }
2557
+ .g-ui-event-calendar-form-color-swatch:hover {
2558
+ transform: scale(1.1);
2559
+ }
2560
+ .g-ui-event-calendar-form-color-swatch-active {
2561
+ border-color: var(--g-ui-text);
2562
+ box-shadow: 0 0 0 2px var(--g-ui-bg);
2563
+ }
2564
+ .g-ui-event-calendar-view-modal {
2565
+ display: flex;
2566
+ flex-direction: column;
2567
+ gap: var(--g-ui-space-12);
2568
+ }
2569
+ .g-ui-event-calendar-view-modal-title {
2570
+ font-size: 18px;
2571
+ font-weight: 600;
2572
+ color: var(--g-ui-text);
2573
+ }
2574
+ .g-ui-event-calendar-view-modal-meta {
2575
+ font-size: 14px;
2576
+ color: var(--g-ui-muted);
2577
+ }
2578
+ .g-ui-event-calendar-view-modal-date {
2579
+ display: block;
2580
+ margin-bottom: var(--g-ui-space-4);
2581
+ }
2582
+ .g-ui-event-calendar-view-modal-field {
2583
+ font-size: 14px;
2584
+ color: var(--g-ui-text);
2585
+ line-height: 1.5;
2586
+ }
2587
+ .g-ui-event-calendar-view-modal-actions {
2588
+ display: flex;
2589
+ flex-wrap: wrap;
2590
+ gap: var(--g-ui-space-10);
2591
+ margin-top: var(--g-ui-space-8);
2592
+ padding-top: var(--g-ui-space-12);
2593
+ border-top: 1px solid var(--g-ui-border);
2594
+ }
2595
+ .g-ui-event-calendar-view-modal-delete {
2596
+ color: var(--g-ui-danger);
2597
+ }
2598
+ .g-ui-event-calendar-view-modal-delete:hover {
2599
+ background: var(--g-ui-danger-subtle);
2600
+ }
2601
+
2602
+ .g-ui-select-multi-root {
2603
+ position: relative;
2604
+ width: 100%;
2605
+ }
2606
+ .g-ui-select-multi {
2607
+ width: 100%;
2608
+ border-radius: 8px;
2609
+ border: 1px solid var(--g-ui-border);
2610
+ background: var(--g-ui-surface);
2611
+ color: var(--g-ui-text);
2612
+ padding: var(--g-ui-space-10) var(--g-ui-space-12);
2613
+ min-height: 44px;
2614
+ display: flex;
2615
+ flex-wrap: wrap;
2616
+ gap: var(--g-ui-space-6);
2617
+ align-items: center;
2618
+ }
2619
+ .g-ui-select-multi-placeholder {
2620
+ color: var(--g-ui-muted);
2621
+ }
2622
+ .g-ui-select-multi-input {
2623
+ border: 0;
2624
+ background: transparent;
2625
+ color: var(--g-ui-text);
2626
+ min-width: 120px;
2627
+ flex: 1;
2628
+ }
2629
+ .g-ui-select-multi-input:focus {
2630
+ outline: none;
2631
+ }
2632
+ .g-ui-select-multi-size-xs { font-size: 12px; min-height: 30px; padding: var(--g-ui-space-5) var(--g-ui-space-10); }
2633
+ .g-ui-select-multi-size-sm { font-size: 13px; min-height: 36px; padding: var(--g-ui-space-6) var(--g-ui-space-12); }
2634
+ .g-ui-select-multi-size-md { font-size: 14px; min-height: 42px; padding: var(--g-ui-space-8) var(--g-ui-space-14); }
2635
+ .g-ui-select-multi-size-lg { font-size: 15px; min-height: 50px; padding: var(--g-ui-space-10) var(--g-ui-space-16); }
2636
+ .g-ui-select-multi-size-xl { font-size: 16px; min-height: 60px; padding: var(--g-ui-space-13) var(--g-ui-space-20); }
2637
+ .g-ui-select-tag {
2638
+ border: 1px solid var(--g-ui-border);
2639
+ border-radius: 999px;
2640
+ padding: var(--g-ui-space-2) var(--g-ui-space-8);
2641
+ color: var(--g-ui-text);
2642
+ }
2643
+ .g-ui-select-multi-size-xs .g-ui-select-tag { font-size: 11px; }
2644
+ .g-ui-select-multi-size-sm .g-ui-select-tag { font-size: 12px; }
2645
+ .g-ui-select-multi-size-md .g-ui-select-tag { font-size: 13px; }
2646
+ .g-ui-select-multi-size-lg .g-ui-select-tag { font-size: 14px; }
2647
+ .g-ui-select-multi-size-xl .g-ui-select-tag { font-size: 15px; }
2648
+ .g-ui-select-tag {
2649
+ display: inline-flex;
2650
+ align-items: center;
2651
+ gap: var(--g-ui-space-6);
2652
+ }
2653
+ .g-ui-select-tag-remove {
2654
+ display: inline-flex;
2655
+ align-items: center;
2656
+ justify-content: center;
2657
+ cursor: pointer;
2658
+ }
2659
+ .g-ui-select-tag-remove svg {
2660
+ width: 12px;
2661
+ height: 12px;
2662
+ fill: currentColor;
2663
+ }
2664
+ .g-ui-select-item-check {
2665
+ width: 16px;
2666
+ height: 16px;
2667
+ display: inline-flex;
2668
+ align-items: center;
2669
+ justify-content: center;
2670
+ color: var(--g-ui-primary);
2671
+ line-height: 0;
2672
+ }
2673
+ .g-ui-select-item-check svg {
2674
+ width: 14px;
2675
+ height: 14px;
2676
+ fill: currentColor;
2677
+ }
2678
+ .g-ui-select-item-label {
2679
+ line-height: 1.4;
2680
+ }
2681
+
2682
+ .g-ui-toast-stack {
2683
+ position: fixed;
2684
+ right: var(--g-ui-space-20);
2685
+ top: var(--g-ui-space-20);
2686
+ display: flex;
2687
+ flex-direction: column;
2688
+ gap: var(--g-ui-space-12);
2689
+ z-index: 1001;
2690
+ }
2691
+ .g-ui-toast {
2692
+ border: 1px solid var(--g-ui-border-muted);
2693
+ border-radius: var(--g-ui-radius);
2694
+ padding: var(--g-ui-space-10) var(--g-ui-space-12);
2695
+ background: var(--g-ui-bg);
2696
+ min-width: 220px;
2697
+ box-shadow: var(--g-ui-shadow-sm);
2698
+ }
2699
+ .g-ui-toast-title { font-weight: 600; }
2700
+
2701
+ .g-ui-tabs-vertical {
2702
+ display: grid;
2703
+ grid-template-columns: 200px 1fr;
2704
+ gap: var(--g-ui-space-16);
2705
+ }
2706
+ .g-ui-tabs-vertical .g-ui-tabs-list {
2707
+ flex-direction: column;
2708
+ }
2709
+
2710
+ .g-ui-drawer-shadowed {
2711
+ box-shadow: var(--g-ui-shadow);
2712
+ }
2713
+
2714
+ .g-ui-notifications {
2715
+ position: fixed;
2716
+ right: var(--g-ui-space-20);
2717
+ top: var(--g-ui-space-20);
2718
+ display: flex;
2719
+ flex-direction: column;
2720
+ gap: var(--g-ui-space-10);
2721
+ z-index: 1001;
2722
+ }
2723
+ .g-ui-notifications-position-top-left { top: var(--g-ui-space-20); left: var(--g-ui-space-20); right: auto; }
2724
+ .g-ui-notifications-position-top-center { top: var(--g-ui-space-20); left: 50%; right: auto; transform: translateX(-50%); }
2725
+ .g-ui-notifications-position-top-right { top: var(--g-ui-space-20); right: var(--g-ui-space-20); left: auto; }
2726
+ .g-ui-notifications-position-bottom-left { bottom: var(--g-ui-space-20); left: var(--g-ui-space-20); right: auto; top: auto; flex-direction: column-reverse; }
2727
+ .g-ui-notifications-position-bottom-center { bottom: var(--g-ui-space-20); left: 50%; right: auto; top: auto; transform: translateX(-50%); flex-direction: column-reverse; }
2728
+ .g-ui-notifications-position-bottom-right { bottom: var(--g-ui-space-20); right: var(--g-ui-space-20); left: auto; top: auto; flex-direction: column-reverse; }
2729
+
2730
+ .g-ui-range {
2731
+ display: grid;
2732
+ grid-template-columns: 1fr 1fr;
2733
+ gap: var(--g-ui-space-10);
2734
+ }
2735
+
2736
+ .g-ui-input-number {
2737
+ width: 100%;
2738
+ }
2739
+
2740
+ .g-ui-popper {
2741
+ position: relative;
2742
+ display: inline-flex;
2743
+ }
2744
+ .g-ui-popper-dropdown {
2745
+ position: absolute;
2746
+ top: calc(100% + var(--g-ui-space-8));
2747
+ left: 0;
2748
+ min-width: 220px;
2749
+ background: var(--g-ui-bg);
2750
+ border: 1px solid var(--g-ui-border-muted);
2751
+ border-radius: var(--g-ui-radius);
2752
+ box-shadow: var(--g-ui-shadow-sm);
2753
+ padding: var(--g-ui-space-12) var(--g-ui-space-16);
2754
+ z-index: 50;
2755
+ }
2756
+
2757
+ .g-ui-pill {
2758
+ display: inline-flex;
2759
+ align-items: center;
2760
+ gap: var(--g-ui-space-6);
2761
+ border-radius: 999px;
2762
+ border: 1px solid var(--g-ui-border);
2763
+ padding: var(--g-ui-space-4) var(--g-ui-space-10);
2764
+ font-size: 12px;
2765
+ }
2766
+
2767
+ .g-ui-pagination-compact .g-ui-pagination-item {
2768
+ min-width: 26px;
2769
+ height: 26px;
2770
+ font-size: 12px;
2771
+ }
2772
+
2773
+
2774
+ .g-ui-password-toggle {
2775
+ border: 0;
2776
+ background: transparent;
2777
+ color: var(--g-ui-muted);
2778
+ cursor: pointer;
2779
+ font-size: 12px;
2780
+ }
2781
+
2782
+ .g-ui-copy-button {
2783
+ border: 1px solid var(--g-ui-border-muted);
2784
+ background: var(--g-ui-bg);
2785
+ color: var(--g-ui-text);
2786
+ border-radius: 8px;
2787
+ padding: var(--g-ui-space-6) var(--g-ui-space-10);
2788
+ cursor: pointer;
2789
+ font-size: 12px;
2790
+ }
2791
+ .g-ui-copy-button:hover {
2792
+ background: var(--g-ui-bg-subtle);
2793
+ }
2794
+ .g-ui-copy-button-done {
2795
+ color: var(--g-ui-success);
2796
+ border-color: rgba(18,184,134,0.5);
2797
+ }
2798
+
2799
+ .g-ui-progress-ring {
2800
+ width: 48px;
2801
+ height: 48px;
2802
+ border-radius: 50%;
2803
+ border: 4px solid var(--g-ui-border-muted);
2804
+ border-top-color: var(--g-ui-primary);
2805
+ animation: g-ui-spin 1s linear infinite;
2806
+ }
2807
+ .g-ui-progress-ring-size-sm { width: 32px; height: 32px; }
2808
+ .g-ui-progress-ring-size-md { width: 48px; height: 48px; }
2809
+ .g-ui-progress-ring-size-lg { width: 64px; height: 64px; }
2810
+
2811
+ .g-ui-toast-close {
2812
+ margin-left: auto;
2813
+ border: 0;
2814
+ background: transparent;
2815
+ color: var(--g-ui-muted);
2816
+ cursor: pointer;
2817
+ }
2818
+
2819
+ .g-ui-toast-row {
2820
+ display: flex;
2821
+ align-items: center;
2822
+ gap: var(--g-ui-space-8);
2823
+ }
2824
+
2825
+ .g-ui-select-search {
2826
+ display: flex;
2827
+ flex-direction: column;
2828
+ gap: var(--g-ui-space-8);
2829
+ }
2830
+ .g-ui-input-size-sm .g-ui-search-input-left-section { width: 16px; height: 16px; }
2831
+ .g-ui-input-size-md .g-ui-search-input-left-section { width: 20px; height: 20px; }
2832
+ .g-ui-input-size-lg .g-ui-search-input-left-section { width: 24px; height: 24px; }
2833
+ .g-ui-input-size-xl .g-ui-search-input-left-section { width: 28px; height: 28px; }
2834
+ .g-ui-search-input-left-section {
2835
+ width: 24px;
2836
+ height: 24px;
2837
+ display: flex;
2838
+ align-items: center;
2839
+ justify-content: center;
2840
+ color: var(--g-ui-muted);
2841
+ font-size: 16px;
2842
+ }
2843
+ .g-ui-search-input-left-section svg {
2844
+ width: 100%;
2845
+ height: 100%;
2846
+ fill: inherit;
2847
+ }
2848
+
2849
+ .g-ui-select-search-input {
2850
+ width: 100%;
2851
+ border-radius: var(--g-ui-radius);
2852
+ border: 1px solid var(--g-ui-border-muted);
2853
+ background: var(--g-ui-bg);
2854
+ color: var(--g-ui-text);
2855
+ padding: var(--g-ui-space-8) var(--g-ui-space-10);
2856
+ }
2857
+ .g-ui-select-search-list {
2858
+ display: flex;
2859
+ flex-direction: column;
2860
+ gap: var(--g-ui-space-6);
2861
+ max-height: 160px;
2862
+ overflow: auto;
2863
+ }
2864
+ .g-ui-select-search-item {
2865
+ padding: var(--g-ui-space-6) var(--g-ui-space-8);
2866
+ border-radius: 8px;
2867
+ cursor: pointer;
2868
+ }
2869
+ .g-ui-select-search-item:hover {
2870
+ background: var(--g-ui-bg-subtle);
2871
+ }
2872
+
2873
+ .g-ui-switch-group {
2874
+ display: flex;
2875
+ flex-direction: column;
2876
+ gap: var(--g-ui-space-8);
2877
+ }
2878
+
2879
+ .g-ui-segmented-scroll {
2880
+ overflow-x: auto;
2881
+ max-width: 100%;
2882
+ }
2883
+
2884
+ .g-ui-range-picker {
2885
+ display: grid;
2886
+ grid-template-columns: 1fr 1fr;
2887
+ gap: var(--g-ui-space-12);
2888
+ }
2889
+
2890
+ .g-ui-toast-auto {
2891
+ border-color: var(--g-ui-primary);
2892
+ }
2893
+
2894
+ .g-ui-flex {
2895
+ display: flex;
2896
+ }
2897
+ .g-ui-flex-column { flex-direction: column; }
2898
+ .g-ui-flex-row { flex-direction: row; }
2899
+ .g-ui-flex-wrap { flex-wrap: wrap; }
2900
+
2901
+ .g-ui-navlink-root {
2902
+ display: flex;
2903
+ flex-direction: column;
2904
+ }
2905
+ .g-ui-navlink {
2906
+ display: flex;
2907
+ align-items: center;
2908
+ gap: var(--g-ui-space-8);
2909
+ padding: var(--g-ui-space-8) var(--g-ui-space-12);
2910
+ border-radius: 0;
2911
+ color: var(--g-ui-text);
2912
+ text-decoration: none;
2913
+ cursor: pointer;
2914
+ font-size: 14px;
2915
+ font-weight: 500;
2916
+ }
2917
+ .g-ui-navlink-body {
2918
+ display: flex;
2919
+ flex-direction: column;
2920
+ gap: var(--g-ui-space-2);
2921
+ flex: 1;
2922
+ }
2923
+ .g-ui-navlink-description {
2924
+ font-size: 12px;
2925
+ color: var(--g-ui-muted);
2926
+ font-weight: 400;
2927
+ }
2928
+ .g-ui-navlink-section {
2929
+ display: inline-flex;
2930
+ align-items: center;
2931
+ justify-content: center;
2932
+ }
2933
+ .g-ui-navlink-variant-subtle:hover { background: var(--g-ui-bg-subtle); }
2934
+ .g-ui-navlink-variant-light:hover { background: var(--g-ui-primary-muted); }
2935
+ .g-ui-navlink-variant-filled:hover { background: var(--g-ui-primary-hover); color: var(--g-ui-primary-fg); }
2936
+ .g-ui-navlink-active.g-ui-navlink-variant-subtle {
2937
+ background: var(--g-ui-primary-subtle);
2938
+ color: var(--g-ui-primary);
2939
+ }
2940
+ .g-ui-navlink-active.g-ui-navlink-variant-light {
2941
+ background: var(--g-ui-primary-muted);
2942
+ color: var(--g-ui-primary);
2943
+ }
2944
+ .g-ui-navlink-active.g-ui-navlink-variant-filled {
2945
+ background: var(--g-ui-primary);
2946
+ color: var(--g-ui-primary-fg);
2947
+ }
2948
+ .g-ui-navlink-disabled {
2949
+ opacity: 0.6;
2950
+ pointer-events: none;
2951
+ }
2952
+ .g-ui-navlink-children {
2953
+ display: flex;
2954
+ flex-direction: column;
2955
+ gap: var(--g-ui-space-4);
2956
+ }
2957
+ .g-ui-navlink-padding-none { padding: 0; }
2958
+ .g-ui-navlink-padding-sm { padding: var(--g-ui-space-8); }
2959
+ .g-ui-navlink-padding-md { padding: var(--g-ui-space-12); }
2960
+ .g-ui-navlink-padding-lg { padding: var(--g-ui-space-16); }
2961
+ .g-ui-navlink-padding-xl { padding: var(--g-ui-space-20); }
2962
+ .g-ui-navlink-padding-h-sm { padding: var(--g-ui-space-8) var(--g-ui-space-8) ; }
2963
+ .g-ui-navlink-padding-h-md { padding: var(--g-ui-space-8) var(--g-ui-space-12) ; }
2964
+ .g-ui-navlink-padding-h-lg { padding: var(--g-ui-space-8) var(--g-ui-space-20) ; }
2965
+ .g-ui-navlink-padding-h-xl { padding: var(--g-ui-space-8) var(--g-ui-space-24) ; }
2966
+
2967
+ .g-ui-indicator {
2968
+ position: relative;
2969
+ display: inline-flex;
2970
+ }
2971
+ .g-ui-indicator-badge {
2972
+ position: absolute;
2973
+ top: -4px;
2974
+ right: -4px;
2975
+ width: 10px;
2976
+ height: 10px;
2977
+ border-radius: 50%;
2978
+ background: var(--g-ui-danger);
2979
+ border: 2px solid var(--g-ui-bg);
2980
+ }
2981
+ .g-ui-indicator-size-xs .g-ui-indicator-badge { width: 6px; height: 6px; border-width: 1px; }
2982
+ .g-ui-indicator-size-sm .g-ui-indicator-badge { width: 8px; height: 8px; border-width: 2px; }
2983
+ .g-ui-indicator-size-md .g-ui-indicator-badge { width: 10px; height: 10px; border-width: 2px; }
2984
+ .g-ui-indicator-size-lg .g-ui-indicator-badge { width: 12px; height: 12px; border-width: 2px; }
2985
+ .g-ui-indicator-size-xl .g-ui-indicator-badge { width: 14px; height: 14px; border-width: 3px; }
2986
+ .g-ui-indicator-position-top-right .g-ui-indicator-badge { top: -4px; right: -4px; bottom: auto; left: auto; }
2987
+ .g-ui-indicator-position-top-left .g-ui-indicator-badge { top: -4px; left: -4px; bottom: auto; right: auto; }
2988
+ .g-ui-indicator-position-bottom-right .g-ui-indicator-badge { bottom: -4px; right: -4px; top: auto; left: auto; }
2989
+ .g-ui-indicator-position-bottom-left .g-ui-indicator-badge { bottom: -4px; left: -4px; top: auto; right: auto; }
2990
+ .g-ui-indicator-color-danger .g-ui-indicator-badge { background: var(--g-ui-danger); }
2991
+ .g-ui-indicator-color-success .g-ui-indicator-badge { background: var(--g-ui-success); }
2992
+ .g-ui-indicator-color-warning .g-ui-indicator-badge { background: var(--g-ui-warning); }
2993
+ .g-ui-indicator-color-info .g-ui-indicator-badge { background: var(--g-ui-info); }
2994
+
2995
+ .g-ui-burger {
2996
+ width: 28px;
2997
+ height: 28px;
2998
+ position: relative;
2999
+ display: inline-block;
3000
+ }
3001
+ .g-ui-burger span {
3002
+ position: absolute;
3003
+ left: 0;
3004
+ width: 100%;
3005
+ height: 2px;
3006
+ background: var(--g-ui-text);
3007
+ transition: transform .2s ease, opacity .2s ease, top .2s ease;
3008
+ }
3009
+ .g-ui-burger span:nth-child(1) { top: 6px; }
3010
+ .g-ui-burger span:nth-child(2) { top: 13px; }
3011
+ .g-ui-burger span:nth-child(3) { top: 20px; }
3012
+ .g-ui-burger-open span:nth-child(1) { top: 7px; transform: rotate(45deg); }
3013
+ .g-ui-burger-open span:nth-child(2) { opacity: 0; }
3014
+ .g-ui-burger-open span:nth-child(3) { top: 7px; transform: rotate(-45deg); }
3015
+
3016
+ .g-ui-loading-overlay {
3017
+ position: absolute;
3018
+ inset: 0;
3019
+ background: rgba(15,17,21,0.6);
3020
+ display: flex;
3021
+ align-items: center;
3022
+ justify-content: center;
3023
+ z-index: 10;
3024
+ }
3025
+
3026
+ .g-ui-grid-system {
3027
+ display: grid;
3028
+ grid-template-columns: repeat(12, minmax(0, 1fr));
3029
+ }
3030
+ .g-ui-col-span-1 { grid-column: span 1; }
3031
+ .g-ui-col-span-2 { grid-column: span 2; }
3032
+ .g-ui-col-span-3 { grid-column: span 3; }
3033
+ .g-ui-col-span-4 { grid-column: span 4; }
3034
+ .g-ui-col-span-5 { grid-column: span 5; }
3035
+ .g-ui-col-span-6 { grid-column: span 6; }
3036
+ .g-ui-col-span-7 { grid-column: span 7; }
3037
+ .g-ui-col-span-8 { grid-column: span 8; }
3038
+ .g-ui-col-span-9 { grid-column: span 9; }
3039
+ .g-ui-col-span-10 { grid-column: span 10; }
3040
+ .g-ui-col-span-11 { grid-column: span 11; }
3041
+ .g-ui-col-span-12 { grid-column: span 12; }
3042
+
3043
+ .g-ui-scroll-area {
3044
+ overflow: auto;
3045
+ border: 1px solid var(--g-ui-border-muted);
3046
+ border-radius: var(--g-ui-radius);
3047
+ background: var(--g-ui-bg);
3048
+ padding: 0;
3049
+ }
3050
+ .g-ui-scroll-area::-webkit-scrollbar { width: 10px; height: 10px; }
3051
+ .g-ui-scroll-area::-webkit-scrollbar-track { background: transparent; }
3052
+ .g-ui-scroll-area::-webkit-scrollbar-thumb {
3053
+ background: color-mix(in srgb, var(--g-ui-muted) 30%, transparent);
3054
+ border-radius: 999px;
3055
+ }
3056
+ .g-ui-scroll-area:hover::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--g-ui-muted) 50%, transparent); }
3057
+ .g-ui-scroll-area-sm { max-height: 120px; }
3058
+ .g-ui-scroll-area-md { max-height: 200px; }
3059
+ .g-ui-scroll-area-lg { max-height: 320px; }
3060
+ .g-ui-scroll-area-auto { max-height: auto; }
3061
+
3062
+ .g-ui-pin-input {
3063
+ display: inline-flex;
3064
+ align-items: center;
3065
+ cursor: text;
3066
+ box-sizing: border-box;
3067
+ }
3068
+ .g-ui-pin-input-wrapper {
3069
+ display: flex;
3070
+ gap: var(--g-ui-space-8);
3071
+ box-sizing: border-box;
3072
+ }
3073
+ .g-ui-pin-input-field {
3074
+ width: 40px;
3075
+ height: 40px;
3076
+ padding: 0;
3077
+ text-align: center;
3078
+ font-size: var(--g-ui-font-md);
3079
+ font-weight: 500;
3080
+ border: 1px solid var(--g-ui-border-muted);
3081
+ border-radius: var(--g-ui-radius);
3082
+ background: var(--g-ui-bg);
3083
+ color: var(--g-ui-text);
3084
+ outline: none;
3085
+ transition: border-color 0.15s, box-shadow 0.15s;
3086
+ }
3087
+ .g-ui-pin-input-field::placeholder {
3088
+ color: var(--g-ui-muted);
3089
+ opacity: 0.5;
3090
+ }
3091
+ .g-ui-pin-input-field:focus {
3092
+ border-color: var(--g-ui-primary);
3093
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--g-ui-primary) 20%, transparent);
3094
+ }
3095
+ .g-ui-pin-input-field:disabled {
3096
+ background: var(--g-ui-bg-subtle);
3097
+ color: var(--g-ui-muted);
3098
+ cursor: not-allowed;
3099
+ }
3100
+ .g-ui-pin-input-error {
3101
+ border-color: var(--g-ui-danger);
3102
+ }
3103
+ .g-ui-pin-input-error:focus {
3104
+ border-color: var(--g-ui-danger);
3105
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--g-ui-danger) 20%, transparent);
3106
+ }
3107
+ .g-ui-pin-input.g-ui-input-size-xs .g-ui-pin-input-field { width: 28px; height: 28px; font-size: var(--g-ui-font-xs); }
3108
+ .g-ui-pin-input.g-ui-input-size-sm .g-ui-pin-input-field { width: 34px; height: 34px; font-size: var(--g-ui-font-sm); }
3109
+ .g-ui-pin-input.g-ui-input-size-md .g-ui-pin-input-field { width: 40px; height: 40px; font-size: var(--g-ui-font-md); }
3110
+ .g-ui-pin-input.g-ui-input-size-lg .g-ui-pin-input-field { width: 48px; height: 48px; font-size: var(--g-ui-font-lg); }
3111
+ .g-ui-pin-input.g-ui-input-size-xl .g-ui-pin-input-field { width: 56px; height: 56px; font-size: var(--g-ui-font-xl); }
3112
+
3113
+ .g-ui-checkbox-group {
3114
+ display: flex;
3115
+ flex-direction: column;
3116
+ gap: var(--g-ui-space-8);
3117
+ }
3118
+
3119
+ .g-ui-avatar-group {
3120
+ display: inline-flex;
3121
+ align-items: center;
3122
+ }
3123
+ .g-ui-avatar-group .g-ui-avatar {
3124
+ margin-left: calc(0px - var(--g-ui-space-8));
3125
+ border: 2px solid var(--g-ui-bg);
3126
+ }
3127
+ .g-ui-avatar-group .g-ui-avatar:first-child {
3128
+ margin-left: 0;
3129
+ }
3130
+
3131
+ .g-ui-badge-group {
3132
+ display: inline-flex;
3133
+ flex-wrap: wrap;
3134
+ gap: var(--g-ui-space-6);
3135
+ }
3136
+
3137
+ .g-ui-radio {
3138
+ display: flex;
3139
+ flex-direction: column;
3140
+ gap: var(--g-ui-space-6);
3141
+ }
3142
+ .g-ui-radio-control {
3143
+ display: inline-flex;
3144
+ align-items: center;
3145
+ gap: var(--g-ui-space-10);
3146
+ cursor: pointer;
3147
+ }
3148
+ .g-ui-radio-input {
3149
+ appearance: none;
3150
+ width: var(--g-ui-control-size, 16px);
3151
+ height: var(--g-ui-control-size, 16px);
3152
+ border-radius: 50%;
3153
+ border: 1px solid var(--g-ui-border);
3154
+ background: var(--g-ui-bg);
3155
+ position: relative;
3156
+ transition: background-color .12s ease, border-color .12s ease;
3157
+ }
3158
+ .g-ui-radio-input:focus-visible {
3159
+ outline: 2px solid var(--g-ui-primary);
3160
+ outline-offset: 2px;
3161
+ }
3162
+ .g-ui-radio-input:checked {
3163
+ border-color: var(--g-ui-primary);
3164
+ }
3165
+ .g-ui-radio-input:checked::after {
3166
+ content: '';
3167
+ position: absolute;
3168
+ width: var(--g-ui-control-inner-size, 8px);
3169
+ height: var(--g-ui-control-inner-size, 8px);
3170
+ border-radius: 50%;
3171
+ background: var(--g-ui-primary);
3172
+ top: var(--g-ui-control-inner-offset, 3px);
3173
+ left: var(--g-ui-control-inner-offset, 3px);
3174
+ }
3175
+ .g-ui-radio-label { font-size: 14px; }
3176
+ .g-ui-radio-description { font-size: 12px; color: var(--g-ui-muted); }
3177
+ .g-ui-radio-size-xs { --g-ui-control-size: 16px; --g-ui-control-inner-size: 6px; --g-ui-control-inner-offset: 4px; }
3178
+ .g-ui-radio-size-sm { --g-ui-control-size: 20px; --g-ui-control-inner-size: 8px; --g-ui-control-inner-offset: 5px; }
3179
+ .g-ui-radio-size-md { --g-ui-control-size: 24px; --g-ui-control-inner-size: 10px; --g-ui-control-inner-offset: 6px; }
3180
+ .g-ui-radio-size-lg { --g-ui-control-size: 30px; --g-ui-control-inner-size: 14px; --g-ui-control-inner-offset: 7px; }
3181
+ .g-ui-radio-size-xl { --g-ui-control-size: 36px; --g-ui-control-inner-size: 16px; --g-ui-control-inner-offset: 9px; }
3182
+
3183
+ .g-ui-breadcrumbs {
3184
+ display: inline-flex;
3185
+ gap: var(--g-ui-space-8);
3186
+ align-items: center;
3187
+ color: var(--g-ui-muted);
3188
+ font-size: 13px;
3189
+ flex-wrap: wrap;
3190
+ }
3191
+ .g-ui-breadcrumbs-separator { opacity: 0.6; }
3192
+
3193
+ .g-ui-center {
3194
+ display: flex;
3195
+ align-items: center;
3196
+ justify-content: center;
3197
+ }
3198
+
3199
+ .g-ui-space { display: block; width: var(--g-ui-space-16); height: var(--g-ui-space-16); }
3200
+ .g-ui-space-xs { width: var(--g-ui-space-8); height: var(--g-ui-space-8); }
3201
+ .g-ui-space-sm { width: var(--g-ui-space-12); height: var(--g-ui-space-12); }
3202
+ .g-ui-space-md { width: var(--g-ui-space-16); height: var(--g-ui-space-16); }
3203
+ .g-ui-space-lg { width: var(--g-ui-space-24); height: var(--g-ui-space-24); }
3204
+ .g-ui-space-xl { width: var(--g-ui-space-32); height: var(--g-ui-space-32); }
3205
+
3206
+ .g-ui-collapse-hidden { display: none; }
3207
+
3208
+ .g-ui-action-icon {
3209
+ width: 28px;
3210
+ height: 28px;
3211
+ border-radius: 8px;
3212
+ border: 1px solid var(--g-ui-border);
3213
+ background: transparent;
3214
+ color: var(--g-ui-text);
3215
+ display: inline-flex;
3216
+ align-items: center;
3217
+ justify-content: center;
3218
+ cursor: pointer;
3219
+ }
3220
+ .g-ui-action-icon-size-xs { width: 18px; height: 18px; }
3221
+ .g-ui-action-icon-size-sm { width: 22px; height: 22px; }
3222
+ .g-ui-action-icon-size-md { width: 28px; height: 28px; }
3223
+ .g-ui-action-icon-size-lg { width: 34px; height: 34px; }
3224
+ .g-ui-action-icon-size-xl { width: 44px; height: 44px; }
3225
+
3226
+ .g-ui-action-icon-size-xs .g-ui-icon { font-size: 12px; }
3227
+ .g-ui-action-icon-size-sm .g-ui-icon { font-size: 14px; }
3228
+ .g-ui-action-icon-size-md .g-ui-icon { font-size: 16px; }
3229
+ .g-ui-action-icon-size-lg .g-ui-icon { font-size: 20px; }
3230
+ .g-ui-action-icon-size-xl .g-ui-icon { font-size: 24px; }
3231
+
3232
+ .g-ui-action-icon-filled {
3233
+ background: var(--g-ui-primary);
3234
+ border-color: transparent;
3235
+ color: var(--g-ui-primary-fg);
3236
+ }
3237
+ .g-ui-action-icon-subtle {
3238
+ background: transparent;
3239
+ border-color: var(--g-ui-border);
3240
+ }
3241
+ .g-ui-action-icon-light {
3242
+ background: var(--g-ui-primary-subtle);
3243
+ border-color: var(--g-ui-primary-muted);
3244
+ color: var(--g-ui-primary);
3245
+ }
3246
+ .g-ui-action-icon-outline {
3247
+ background: transparent;
3248
+ border-color: var(--g-ui-primary);
3249
+ color: var(--g-ui-primary);
3250
+ }
3251
+ .g-ui-action-icon-filled:hover { background: var(--g-ui-primary-hover); }
3252
+ .g-ui-action-icon-light:hover { background: var(--g-ui-primary-muted); }
3253
+ .g-ui-action-icon-outline:hover { background: var(--g-ui-primary-subtle); }
3254
+ .g-ui-action-icon-subtle:hover { background: var(--g-ui-bg-muted); }
3255
+
3256
+ .g-ui-popover {
3257
+ position: relative;
3258
+ display: inline-flex;
3259
+ }
3260
+ .g-ui-popover-dropdown {
3261
+ position: absolute;
3262
+ top: calc(100% + var(--g-ui-space-8));
3263
+ left: 0;
3264
+ min-width: 220px;
3265
+ background: var(--g-ui-surface);
3266
+ border: 1px solid var(--g-ui-border-muted);
3267
+ border-radius: 10px;
3268
+ box-shadow: var(--g-ui-shadow-sm);
3269
+ padding: var(--g-ui-space-10) var(--g-ui-space-12);
3270
+ z-index: 50;
3271
+ }
3272
+ .g-ui-popover-right { left: auto; right: 0; }
3273
+ .g-ui-popover-center { left: 50%; transform: translateX(-50%); }
3274
+
3275
+ .g-ui-hover-card {
3276
+ position: relative;
3277
+ display: inline-flex;
3278
+ }
3279
+ .g-ui-hover-card-dropdown {
3280
+ position: absolute;
3281
+ top: calc(100% + var(--g-ui-space-8));
3282
+ left: 0;
3283
+ min-width: 220px;
3284
+ background: var(--g-ui-surface);
3285
+ border: 1px solid var(--g-ui-border-muted);
3286
+ border-radius: var(--g-ui-radius);
3287
+ box-shadow: var(--g-ui-shadow-sm);
3288
+ padding: var(--g-ui-space-12) var(--g-ui-space-16);
3289
+ z-index: 50;
3290
+ opacity: 0;
3291
+ pointer-events: none;
3292
+ transition: opacity .12s ease, transform .12s ease;
3293
+ transform: translateY(-4px);
3294
+ }
3295
+ .g-ui-hover-card:hover .g-ui-hover-card-dropdown {
3296
+ opacity: 1;
3297
+ pointer-events: auto;
3298
+ transform: translateY(0);
3299
+ }
3300
+ .g-ui-hover-card-right { left: auto; right: 0; }
3301
+ .g-ui-hover-card-center { left: 50%; transform: translateX(-50%) translateY(-4px); }
3302
+ .g-ui-hover-card:hover .g-ui-hover-card-center { transform: translateX(-50%) translateY(0); }
3303
+
3304
+ .g-ui-affix {
3305
+ position: fixed;
3306
+ z-index: 1000;
3307
+ }
3308
+ .g-ui-affix-bottom-right { right: var(--g-ui-space-20); bottom: var(--g-ui-space-20); }
3309
+ .g-ui-affix-bottom-left { left: var(--g-ui-space-20); bottom: var(--g-ui-space-20); }
3310
+ .g-ui-affix-top-right { right: var(--g-ui-space-20); top: var(--g-ui-space-20); }
3311
+ .g-ui-affix-top-left { left: var(--g-ui-space-20); top: var(--g-ui-space-20); }
3312
+ .g-ui-affix-center-center { left: 50%; top: 50%; transform: translate(-50%, -50%); }
3313
+ .g-ui-affix-top-center { left: 50%; top: var(--g-ui-space-20); transform: translateX(-50%); }
3314
+ .g-ui-affix-bottom-center { left: 50%; bottom: var(--g-ui-space-20); transform: translateX(-50%); }
3315
+ .g-ui-affix-left-center { left: var(--g-ui-space-20); top: 50%; transform: translateY(-50%); }
3316
+ .g-ui-affix-right-center { right: var(--g-ui-space-20); top: 50%; transform: translateY(-50%); }
3317
+
3318
+
3319
+ .g-ui-fieldset {
3320
+ border: 1px solid var(--g-ui-border-muted);
3321
+ border-radius: var(--g-ui-radius);
3322
+ padding: var(--g-ui-space-14);
3323
+ }
3324
+ .g-ui-legend {
3325
+ padding: 0 var(--g-ui-space-6);
3326
+ color: var(--g-ui-muted);
3327
+ font-size: 12px;
3328
+ }
3329
+
3330
+ .g-ui-appbar {
3331
+ width: 100%;
3332
+ height: 60px;
3333
+ display: flex;
3334
+ align-items: center;
3335
+ justify-content: flex-start;
3336
+ gap: var(--g-ui-space-12);
3337
+ padding: 0 var(--g-ui-space-16);
3338
+ background: var(--g-ui-bg);
3339
+ border-bottom: 1px solid var(--g-ui-border);
3340
+ z-index: 100;
3341
+ position: relative;
3342
+ }
3343
+ .g-ui-appbar-static { position: static; }
3344
+ .g-ui-appbar-sticky { position: sticky; top: 0; }
3345
+ .g-ui-appbar-fixed { position: fixed; top: 0; left: 0; right: 0; }
3346
+
3347
+ .g-ui-sidebar {
3348
+ width: 260px;
3349
+ min-width: 260px;
3350
+ background: var(--g-ui-bg);
3351
+ border-right: 1px solid var(--g-ui-border);
3352
+ display: flex;
3353
+ flex-direction: column;
3354
+ box-sizing: border-box;
3355
+ }
3356
+ .g-ui-sidebar-position-right { border-right: 0; border-left: 1px solid var(--g-ui-border-muted); }
3357
+ .g-ui-sidebar-size-sm { width: 220px; min-width: 220px; }
3358
+ .g-ui-sidebar-size-md { width: 260px; min-width: 260px; }
3359
+ .g-ui-sidebar-size-lg { width: 320px; min-width: 320px; }
3360
+ .g-ui-sidebar-size-xl { width: 380px; min-width: 380px; }
3361
+ .g-ui-sidebar-min-button { min-width: 38px; width: 38px; }
3362
+ .g-ui-sidebar-min-xs { min-width: 48px; width: 48px; }
3363
+ .g-ui-sidebar-min-sm { min-width: 64px; width: 64px; }
3364
+ .g-ui-sidebar-min-md { min-width: 80px; width: 80px; }
3365
+ .g-ui-sidebar-fixed {
3366
+ position: relative;
3367
+ width: 45px;
3368
+ min-width: 45px;
3369
+ max-width: 45px;
3370
+ height: 100%;
3371
+ transition:
3372
+ width .22s cubic-bezier(.2,.8,.2,1),
3373
+ min-width .22s cubic-bezier(.2,.8,.2,1),
3374
+ max-width .22s cubic-bezier(.2,.8,.2,1);
3375
+ }
3376
+ .g-ui-sidebar-fixed.g-ui-sidebar-size-sm { width: 40px; min-width: 40px; max-width: 40px; }
3377
+ .g-ui-sidebar-fixed.g-ui-sidebar-size-md { width: 45px; min-width: 45px; max-width: 45px; }
3378
+ .g-ui-sidebar-fixed.g-ui-sidebar-size-lg { width: 50px; min-width: 50px; max-width: 50px; }
3379
+ .g-ui-sidebar-fixed.g-ui-sidebar-size-xl { width: 60px; min-width: 60px; max-width: 60px; }
3380
+
3381
+ .g-ui-sidebar-fixed-open.g-ui-sidebar-size-sm { width: 220px; min-width: 220px; max-width: 220px; }
3382
+ .g-ui-sidebar-fixed-open.g-ui-sidebar-size-md { width: 260px; min-width: 260px; max-width: 260px; }
3383
+ .g-ui-sidebar-fixed-open.g-ui-sidebar-size-lg { width: 320px; min-width: 320px; max-width: 320px; }
3384
+ .g-ui-sidebar-fixed-open.g-ui-sidebar-size-xl { width: 380px; min-width: 380px; max-width: 380px; }
3385
+
3386
+ .g-ui-sidebar-drawer {
3387
+ position: fixed;
3388
+ top: 0;
3389
+ bottom: 0;
3390
+ z-index: 999;
3391
+ transition: transform .22s cubic-bezier(.2,.8,.2,1), opacity .22s ease;
3392
+ opacity: 0;
3393
+ transform: translateX(-100%);
3394
+ height: 100%;
3395
+ min-height: 100vh;
3396
+ }
3397
+ .g-ui-sidebar-drawer-left.g-ui-sidebar-drawer-open,
3398
+ .g-ui-sidebar-drawer-right.g-ui-sidebar-drawer-open {
3399
+ opacity: 1;
3400
+ transform: translateX(0);
3401
+ }
3402
+ .g-ui-sidebar-drawer-right {
3403
+ right: 0;
3404
+ left: auto;
3405
+ transform: translateX(100%);
3406
+ }
3407
+ .g-ui-sidebar-drawer-left {
3408
+ left: 0;
3409
+ right: auto;
3410
+ }
3411
+ .g-ui-sidebar-overlay {
3412
+ position: fixed;
3413
+ inset: 0;
3414
+ z-index: 998;
3415
+ background: rgba(0,0,0,0.6);
3416
+ opacity: 0;
3417
+ pointer-events: none;
3418
+ transition: opacity .22s ease, backdrop-filter .22s ease;
3419
+ backdrop-filter: blur(10px);
3420
+ }
3421
+ .g-ui-sidebar-overlay-noblur {
3422
+ backdrop-filter: none;
3423
+ }
3424
+ .g-ui-sidebar-overlay-open {
3425
+ opacity: 1;
3426
+ pointer-events: auto;
3427
+ }
3428
+ .g-ui-sidebar-title {
3429
+ font-weight: 700;
3430
+ font-size: 14px;
3431
+ color: var(--g-ui-muted);
3432
+ text-transform: uppercase;
3433
+ letter-spacing: .08em;
3434
+ }
3435
+ .g-ui-sidebar-item {
3436
+ display: flex;
3437
+ align-items: center;
3438
+ gap: var(--g-ui-space-10);
3439
+ padding: var(--g-ui-space-8) var(--g-ui-space-12);
3440
+ border-radius: 8px;
3441
+ cursor: pointer;
3442
+ color: var(--g-ui-text);
3443
+ text-decoration: none;
3444
+ font-size: 14px;
3445
+ }
3446
+ .g-ui-sidebar-item:hover {
3447
+ background: var(--g-ui-bg-subtle);
3448
+ }
3449
+ .g-ui-sidebar-item-active {
3450
+ background: var(--g-ui-primary-subtle);
3451
+ color: var(--g-ui-primary);
3452
+ }
3453
+ .g-ui-sidebar-item-active:hover { background: var(--g-ui-primary-muted); }
3454
+ .g-ui-skeleton-h-xs { height: 8px; }
3455
+ .g-ui-skeleton-h-sm { height: 12px; }
3456
+ .g-ui-skeleton-h-md { height: 16px; }
3457
+ .g-ui-skeleton-h-lg { height: 24px; }
3458
+ .g-ui-skeleton-h-xl { height: 32px; }
3459
+ .g-ui-skeleton-w-xs { width: 60px; }
3460
+ .g-ui-skeleton-w-sm { width: 120px; }
3461
+ .g-ui-skeleton-w-md { width: 180px; }
3462
+ .g-ui-skeleton-w-lg { width: 240px; }
3463
+ .g-ui-skeleton-w-xl { width: 320px; }
3464
+ .g-ui-skeleton-w-full { width: 100%; }
3465
+ .g-ui-loading {
3466
+ display: inline-flex;
3467
+ align-items: center;
3468
+ justify-content: center;
3469
+ }
3470
+ .g-ui-spinner {
3471
+ border: 3px solid var(--g-ui-border-muted);
3472
+ border-top-color: var(--g-ui-primary);
3473
+ border-radius: 50%;
3474
+ animation: g-ui-spin 1s linear infinite;
3475
+ }
3476
+ .g-ui-loading-size-xs .g-ui-spinner { width: 14px; height: 14px; }
3477
+ .g-ui-loading-size-sm .g-ui-spinner { width: 18px; height: 18px; }
3478
+ .g-ui-loading-size-md .g-ui-spinner { width: 22px; height: 22px; }
3479
+ .g-ui-loading-size-lg .g-ui-spinner { width: 28px; height: 28px; }
3480
+ .g-ui-loading-size-xl .g-ui-spinner { width: 36px; height: 36px; }
3481
+ .g-ui-dots::before,
3482
+ .g-ui-dots::after {
3483
+ content: '';
3484
+ display: inline-block;
3485
+ width: 6px;
3486
+ height: 6px;
3487
+ border-radius: 50%;
3488
+ background: var(--g-ui-primary);
3489
+ margin: 0 var(--g-ui-space-3);
3490
+ animation: g-ui-bounce 1s infinite ease-in-out;
3491
+ }
3492
+ .g-ui-dots::after { animation-delay: .2s; }
3493
+ .g-ui-loading-size-xs.g-ui-dots::before,
3494
+ .g-ui-loading-size-xs.g-ui-dots::after { width: 4px; height: 4px; }
3495
+ .g-ui-loading-size-sm.g-ui-dots::before,
3496
+ .g-ui-loading-size-sm.g-ui-dots::after { width: 6px; height: 6px; }
3497
+ .g-ui-loading-size-md.g-ui-dots::before,
3498
+ .g-ui-loading-size-md.g-ui-dots::after { width: 8px; height: 8px; }
3499
+ .g-ui-loading-size-lg.g-ui-dots::before,
3500
+ .g-ui-loading-size-lg.g-ui-dots::after { width: 10px; height: 10px; }
3501
+ .g-ui-loading-size-xl.g-ui-dots::before,
3502
+ .g-ui-loading-size-xl.g-ui-dots::after { width: 12px; height: 12px; }
3503
+ .g-ui-bars span {
3504
+ width: 4px;
3505
+ height: 16px;
3506
+ background: var(--g-ui-primary);
3507
+ margin: 0 var(--g-ui-space-2);
3508
+ display: inline-block;
3509
+ animation: g-ui-bars 1s infinite ease-in-out;
3510
+ }
3511
+ .g-ui-bars span:nth-child(2) { animation-delay: .15s; }
3512
+ .g-ui-bars span:nth-child(3) { animation-delay: .3s; }
3513
+ .g-ui-loading-size-xs.g-ui-bars span { width: 3px; height: 12px; }
3514
+ .g-ui-loading-size-sm.g-ui-bars span { width: 4px; height: 14px; }
3515
+ .g-ui-loading-size-md.g-ui-bars span { width: 4px; height: 16px; }
3516
+ .g-ui-loading-size-lg.g-ui-bars span { width: 5px; height: 20px; }
3517
+ .g-ui-loading-size-xl.g-ui-bars span { width: 6px; height: 24px; }
3518
+
3519
+
3520
+ .g-ui-grid-table {
3521
+ display: grid;
3522
+ }
3523
+ .g-ui-grid-table-row {
3524
+ display: contents;
3525
+ }
3526
+ .g-ui-grid-table-cell {
3527
+ padding: var(--g-ui-space-8);
3528
+ border-bottom: 1px solid var(--g-ui-border-muted);
3529
+ }
3530
+ .g-ui-grid-table-row-header .g-ui-grid-table-cell {
3531
+ font-weight: 200;
3532
+ }
3533
+ .g-ui-grid-table-cell-sortable {
3534
+ cursor: pointer;
3535
+ user-select: none;
3536
+ }
3537
+ .g-ui-grid-table-cell-sortable:hover {
3538
+ background: var(--g-ui-bg-hover, rgba(0,0,0,0.04));
3539
+ }
3540
+ .g-ui-grid-table-sort-icon {
3541
+ opacity: 0.5;
3542
+ }
3543
+ .g-ui-grid-table-sticky .g-ui-grid-table-row-header .g-ui-grid-table-cell {
3544
+ position: sticky;
3545
+ top: 0;
3546
+ z-index: 1;
3547
+ background: var(--g-ui-bg, #fff);
3548
+ }
3549
+
3550
+ .g-ui-bottombar {
3551
+ position: fixed;
3552
+ bottom: 0;
3553
+ left: 0;
3554
+ right: 0;
3555
+ display: flex;
3556
+ align-items: center;
3557
+ justify-content: center;
3558
+ gap: var(--g-ui-space-4);
3559
+ padding: var(--g-ui-space-4) var(--g-ui-space-8);
3560
+ background: var(--g-ui-bg);
3561
+ border-top: 1px solid var(--g-ui-border);
3562
+ z-index: 100;
3563
+ box-sizing: border-box;
3564
+ }
3565
+ .g-ui-bottombar-grow .g-ui-bottombar-action { flex: 1; }
3566
+
3567
+ .g-ui-bottombar-action {
3568
+ all: unset;
3569
+ display: flex;
3570
+ flex-direction: column;
3571
+ align-items: center;
3572
+ justify-content: center;
3573
+ gap: 2px;
3574
+ padding: var(--g-ui-space-6) var(--g-ui-space-12);
3575
+ border-radius: var(--g-ui-radius-sm);
3576
+ cursor: pointer;
3577
+ transition: background 150ms ease, color 150ms ease;
3578
+ color: var(--g-ui-text-muted);
3579
+ font-size: var(--g-ui-fz-xs);
3580
+ min-width: 48px;
3581
+ box-sizing: border-box;
3582
+ -webkit-tap-highlight-color: transparent;
3583
+ user-select: none;
3584
+ }
3585
+ .g-ui-bottombar-action:hover { background: var(--g-ui-hover); }
3586
+ .g-ui-bottombar-action:active { background: var(--g-ui-active); }
3587
+ .g-ui-bottombar-action-active { color: var(--g-ui-primary); }
3588
+ .g-ui-bottombar-action-active:hover { background: var(--g-ui-primary-light-hover); }
3589
+ .g-ui-bottombar-action-disabled {
3590
+ opacity: 0.5;
3591
+ pointer-events: none;
3592
+ cursor: default;
3593
+ }
3594
+
3595
+ .g-ui-bottombar-action-variant-filled.g-ui-bottombar-action-active {
3596
+ background: var(--g-ui-primary);
3597
+ color: var(--g-ui-white);
3598
+ }
3599
+ .g-ui-bottombar-action-variant-filled.g-ui-bottombar-action-active:hover {
3600
+ background: var(--g-ui-primary-dark);
3601
+ }
3602
+
3603
+ .g-ui-bottombar-action-icon {
3604
+ display: flex;
3605
+ align-items: center;
3606
+ justify-content: center;
3607
+ font-size: 20px;
3608
+ line-height: 1;
3609
+ }
3610
+ .g-ui-bottombar-action-label {
3611
+ font-size: 12px;
3612
+ line-height: 1.2;
3613
+ white-space: nowrap;
3614
+ text-align: center;
3615
+ }
3616
+
3617
+
3618
+ @keyframes g-ui-spin { to { transform: rotate(360deg); } }
3619
+ @keyframes g-ui-bounce { 0%, 100% { transform: translateY(0); opacity: .6; } 50% { transform: translateY(-5px); opacity: 1; } }
3620
+ @keyframes g-ui-bars { 0%, 100% { transform: scaleY(.6); } 50% { transform: scaleY(1.2); } }
3621
+ `;
3622
+
3623
+ export function ensureStyles() {
3624
+ if (typeof document === 'undefined') return;
3625
+ if (document.getElementById(STYLE_ID)) return;
3626
+ const style = document.createElement('style');
3627
+ style.id = STYLE_ID;
3628
+ style.textContent = css;
3629
+ document.head.appendChild(style);
3630
+ }