gw-admin 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 (166) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/LICENSE +21 -0
  3. package/README.md +569 -0
  4. package/dist/account/admin-logout-button.d.ts +21 -0
  5. package/dist/account/admin-logout-button.d.ts.map +1 -0
  6. package/dist/account/admin-logout-button.js +57 -0
  7. package/dist/account/admin-logout-button.js.map +1 -0
  8. package/dist/account/index.d.ts +2 -0
  9. package/dist/account/index.d.ts.map +1 -0
  10. package/dist/account/index.js +3 -0
  11. package/dist/account/index.js.map +1 -0
  12. package/dist/attachments/admin-attachment-list.d.ts +12 -0
  13. package/dist/attachments/admin-attachment-list.d.ts.map +1 -0
  14. package/dist/attachments/admin-attachment-list.js +11 -0
  15. package/dist/attachments/admin-attachment-list.js.map +1 -0
  16. package/dist/attachments/admin-file-attachments.d.ts +33 -0
  17. package/dist/attachments/admin-file-attachments.d.ts.map +1 -0
  18. package/dist/attachments/admin-file-attachments.js +94 -0
  19. package/dist/attachments/admin-file-attachments.js.map +1 -0
  20. package/dist/attachments/index.d.ts +4 -0
  21. package/dist/attachments/index.d.ts.map +1 -0
  22. package/dist/attachments/index.js +3 -0
  23. package/dist/attachments/index.js.map +1 -0
  24. package/dist/attachments/types.d.ts +12 -0
  25. package/dist/attachments/types.d.ts.map +1 -0
  26. package/dist/attachments/types.js +2 -0
  27. package/dist/attachments/types.js.map +1 -0
  28. package/dist/crud/form/admin-crud-form.d.ts +41 -0
  29. package/dist/crud/form/admin-crud-form.d.ts.map +1 -0
  30. package/dist/crud/form/admin-crud-form.js +56 -0
  31. package/dist/crud/form/admin-crud-form.js.map +1 -0
  32. package/dist/crud/form/form-state.d.ts +12 -0
  33. package/dist/crud/form/form-state.d.ts.map +1 -0
  34. package/dist/crud/form/form-state.js +48 -0
  35. package/dist/crud/form/form-state.js.map +1 -0
  36. package/dist/crud/form/index.d.ts +3 -0
  37. package/dist/crud/form/index.d.ts.map +1 -0
  38. package/dist/crud/form/index.js +3 -0
  39. package/dist/crud/form/index.js.map +1 -0
  40. package/dist/crud/index.d.ts +3 -0
  41. package/dist/crud/index.d.ts.map +1 -0
  42. package/dist/crud/index.js +3 -0
  43. package/dist/crud/index.js.map +1 -0
  44. package/dist/crud/pages/admin-crud-detail-page.d.ts +33 -0
  45. package/dist/crud/pages/admin-crud-detail-page.d.ts.map +1 -0
  46. package/dist/crud/pages/admin-crud-detail-page.js +39 -0
  47. package/dist/crud/pages/admin-crud-detail-page.js.map +1 -0
  48. package/dist/crud/pages/admin-crud-form-pages.d.ts +27 -0
  49. package/dist/crud/pages/admin-crud-form-pages.d.ts.map +1 -0
  50. package/dist/crud/pages/admin-crud-form-pages.js +44 -0
  51. package/dist/crud/pages/admin-crud-form-pages.js.map +1 -0
  52. package/dist/crud/pages/admin-crud-list-page.d.ts +27 -0
  53. package/dist/crud/pages/admin-crud-list-page.d.ts.map +1 -0
  54. package/dist/crud/pages/admin-crud-list-page.js +33 -0
  55. package/dist/crud/pages/admin-crud-list-page.js.map +1 -0
  56. package/dist/crud/pages/admin-delete-form.d.ts +12 -0
  57. package/dist/crud/pages/admin-delete-form.d.ts.map +1 -0
  58. package/dist/crud/pages/admin-delete-form.js +15 -0
  59. package/dist/crud/pages/admin-delete-form.js.map +1 -0
  60. package/dist/crud/pages/format-admin-value.d.ts +5 -0
  61. package/dist/crud/pages/format-admin-value.d.ts.map +1 -0
  62. package/dist/crud/pages/format-admin-value.js +38 -0
  63. package/dist/crud/pages/format-admin-value.js.map +1 -0
  64. package/dist/crud/pages/index.d.ts +6 -0
  65. package/dist/crud/pages/index.d.ts.map +1 -0
  66. package/dist/crud/pages/index.js +6 -0
  67. package/dist/crud/pages/index.js.map +1 -0
  68. package/dist/crud/preset/client.d.ts +2 -0
  69. package/dist/crud/preset/client.d.ts.map +1 -0
  70. package/dist/crud/preset/client.js +3 -0
  71. package/dist/crud/preset/client.js.map +1 -0
  72. package/dist/crud/preset/create-admin-crud-form.d.ts +41 -0
  73. package/dist/crud/preset/create-admin-crud-form.d.ts.map +1 -0
  74. package/dist/crud/preset/create-admin-crud-form.js +68 -0
  75. package/dist/crud/preset/create-admin-crud-form.js.map +1 -0
  76. package/dist/crud/preset/create-admin-crud-pages.d.ts +29 -0
  77. package/dist/crud/preset/create-admin-crud-pages.d.ts.map +1 -0
  78. package/dist/crud/preset/create-admin-crud-pages.js +46 -0
  79. package/dist/crud/preset/create-admin-crud-pages.js.map +1 -0
  80. package/dist/crud/preset/create-admin-crud-route-page.d.ts +18 -0
  81. package/dist/crud/preset/create-admin-crud-route-page.d.ts.map +1 -0
  82. package/dist/crud/preset/create-admin-crud-route-page.js +26 -0
  83. package/dist/crud/preset/create-admin-crud-route-page.js.map +1 -0
  84. package/dist/crud/preset/index.d.ts +3 -0
  85. package/dist/crud/preset/index.d.ts.map +1 -0
  86. package/dist/crud/preset/index.js +3 -0
  87. package/dist/crud/preset/index.js.map +1 -0
  88. package/dist/header/admin-page-header.d.ts +15 -0
  89. package/dist/header/admin-page-header.d.ts.map +1 -0
  90. package/dist/header/admin-page-header.js +10 -0
  91. package/dist/header/admin-page-header.js.map +1 -0
  92. package/dist/header/index.d.ts +2 -0
  93. package/dist/header/index.d.ts.map +1 -0
  94. package/dist/header/index.js +2 -0
  95. package/dist/header/index.js.map +1 -0
  96. package/dist/index.d.ts +7 -0
  97. package/dist/index.d.ts.map +1 -0
  98. package/dist/index.js +7 -0
  99. package/dist/index.js.map +1 -0
  100. package/dist/internal/class-names.d.ts +5 -0
  101. package/dist/internal/class-names.d.ts.map +1 -0
  102. package/dist/internal/class-names.js +7 -0
  103. package/dist/internal/class-names.js.map +1 -0
  104. package/dist/layout/admin-layout.d.ts +16 -0
  105. package/dist/layout/admin-layout.d.ts.map +1 -0
  106. package/dist/layout/admin-layout.js +17 -0
  107. package/dist/layout/admin-layout.js.map +1 -0
  108. package/dist/layout/admin-shell.d.ts +12 -0
  109. package/dist/layout/admin-shell.d.ts.map +1 -0
  110. package/dist/layout/admin-shell.js +10 -0
  111. package/dist/layout/admin-shell.js.map +1 -0
  112. package/dist/layout/admin-sidebar.d.ts +11 -0
  113. package/dist/layout/admin-sidebar.d.ts.map +1 -0
  114. package/dist/layout/admin-sidebar.js +10 -0
  115. package/dist/layout/admin-sidebar.js.map +1 -0
  116. package/dist/layout/index.d.ts +4 -0
  117. package/dist/layout/index.d.ts.map +1 -0
  118. package/dist/layout/index.js +4 -0
  119. package/dist/layout/index.js.map +1 -0
  120. package/dist/layout/mobile.d.ts +15 -0
  121. package/dist/layout/mobile.d.ts.map +1 -0
  122. package/dist/layout/mobile.js +32 -0
  123. package/dist/layout/mobile.js.map +1 -0
  124. package/dist/navigation/admin-navigation.d.ts +21 -0
  125. package/dist/navigation/admin-navigation.d.ts.map +1 -0
  126. package/dist/navigation/admin-navigation.js +22 -0
  127. package/dist/navigation/admin-navigation.js.map +1 -0
  128. package/dist/navigation/index.d.ts +2 -0
  129. package/dist/navigation/index.d.ts.map +1 -0
  130. package/dist/navigation/index.js +2 -0
  131. package/dist/navigation/index.js.map +1 -0
  132. package/dist/pages/admin-account-page.d.ts +13 -0
  133. package/dist/pages/admin-account-page.d.ts.map +1 -0
  134. package/dist/pages/admin-account-page.js +11 -0
  135. package/dist/pages/admin-account-page.js.map +1 -0
  136. package/dist/pages/admin-dashboard-page.d.ts +15 -0
  137. package/dist/pages/admin-dashboard-page.d.ts.map +1 -0
  138. package/dist/pages/admin-dashboard-page.js +8 -0
  139. package/dist/pages/admin-dashboard-page.js.map +1 -0
  140. package/dist/pages/index.d.ts +3 -0
  141. package/dist/pages/index.d.ts.map +1 -0
  142. package/dist/pages/index.js +3 -0
  143. package/dist/pages/index.js.map +1 -0
  144. package/dist/rich-text/admin-rich-text-editor.d.ts +27 -0
  145. package/dist/rich-text/admin-rich-text-editor.d.ts.map +1 -0
  146. package/dist/rich-text/admin-rich-text-editor.js +102 -0
  147. package/dist/rich-text/admin-rich-text-editor.js.map +1 -0
  148. package/dist/rich-text/admin-rich-text-file.d.ts +24 -0
  149. package/dist/rich-text/admin-rich-text-file.d.ts.map +1 -0
  150. package/dist/rich-text/admin-rich-text-file.js +80 -0
  151. package/dist/rich-text/admin-rich-text-file.js.map +1 -0
  152. package/dist/rich-text/admin-rich-text-view.d.ts +9 -0
  153. package/dist/rich-text/admin-rich-text-view.d.ts.map +1 -0
  154. package/dist/rich-text/admin-rich-text-view.js +9 -0
  155. package/dist/rich-text/admin-rich-text-view.js.map +1 -0
  156. package/dist/rich-text/index.d.ts +5 -0
  157. package/dist/rich-text/index.d.ts.map +1 -0
  158. package/dist/rich-text/index.js +5 -0
  159. package/dist/rich-text/index.js.map +1 -0
  160. package/dist/rich-text/plain-text.d.ts +9 -0
  161. package/dist/rich-text/plain-text.d.ts.map +1 -0
  162. package/dist/rich-text/plain-text.js +24 -0
  163. package/dist/rich-text/plain-text.js.map +1 -0
  164. package/package.json +163 -0
  165. package/rich-text.css +1 -0
  166. package/styles.css +901 -0
package/styles.css ADDED
@@ -0,0 +1,901 @@
1
+ :root {
2
+ --gw-admin-background: #f7f7f7;
3
+ --gw-admin-surface: #ffffff;
4
+ --gw-admin-surface-muted: #f5f5f5;
5
+ --gw-admin-text: #171717;
6
+ --gw-admin-text-muted: #666666;
7
+ --gw-admin-border: #d4d4d4;
8
+ --gw-admin-border-soft: #e5e5e5;
9
+ --gw-admin-primary: #171717;
10
+ --gw-admin-primary-text: #ffffff;
11
+ --gw-admin-danger: #b91c1c;
12
+ --gw-admin-danger-soft: #fecaca;
13
+ --gw-admin-error-background: #fef2f2;
14
+ --gw-admin-focus: #404040;
15
+ --gw-admin-sidebar-width: 15rem;
16
+ --gw-admin-mobile-header-height: 3.75rem;
17
+ --gw-admin-content-width: 80rem;
18
+ --gw-admin-radius: 0.25rem;
19
+ }
20
+
21
+ .gw-admin-shell,
22
+ .gw-admin-shell *,
23
+ .gw-admin-shell *::before,
24
+ .gw-admin-shell *::after {
25
+ box-sizing: border-box;
26
+ }
27
+
28
+ .gw-admin-shell {
29
+ min-height: 100svh;
30
+ background: var(--gw-admin-background);
31
+ color: var(--gw-admin-text);
32
+ }
33
+
34
+ .gw-admin-shell__body {
35
+ display: flex;
36
+ min-height: 100svh;
37
+ }
38
+
39
+ .gw-admin-shell__content {
40
+ display: flex;
41
+ width: 100%;
42
+ min-width: 0;
43
+ flex: 1;
44
+ flex-direction: column;
45
+ padding-inline: 1rem;
46
+ }
47
+
48
+ .gw-admin-sidebar {
49
+ position: sticky;
50
+ top: 0;
51
+ display: none;
52
+ width: var(--gw-admin-sidebar-width);
53
+ height: 100svh;
54
+ flex: 0 0 var(--gw-admin-sidebar-width);
55
+ overflow-y: auto;
56
+ border-right: 1px solid var(--gw-admin-border-soft);
57
+ background: var(--gw-admin-surface);
58
+ }
59
+
60
+ .gw-admin-sidebar__brand {
61
+ display: flex;
62
+ min-height: 12.5rem;
63
+ align-items: center;
64
+ justify-content: center;
65
+ color: inherit;
66
+ text-decoration: none;
67
+ }
68
+
69
+ .gw-admin-sidebar__brand img,
70
+ .gw-admin-mobile-header__brand img {
71
+ display: block;
72
+ max-width: 100%;
73
+ height: auto;
74
+ }
75
+
76
+ .gw-admin-sidebar__navigation {
77
+ padding-block: 0.5rem 2rem;
78
+ }
79
+
80
+ .gw-admin-navigation__list {
81
+ display: grid;
82
+ gap: 0.25rem;
83
+ margin: 0;
84
+ padding: 0;
85
+ list-style: none;
86
+ }
87
+
88
+ .gw-admin-navigation__link {
89
+ display: flex;
90
+ min-height: 2.75rem;
91
+ align-items: center;
92
+ justify-content: space-between;
93
+ gap: 0.75rem;
94
+ padding-inline: 1.5rem;
95
+ border-left: 3px solid transparent;
96
+ color: var(--gw-admin-text-muted);
97
+ font-size: 1rem;
98
+ font-weight: 600;
99
+ text-decoration: none;
100
+ }
101
+
102
+ .gw-admin-navigation__link:hover,
103
+ .gw-admin-navigation__link:focus-visible,
104
+ .gw-admin-navigation__link.is-current {
105
+ background: var(--gw-admin-surface-muted);
106
+ color: var(--gw-admin-text);
107
+ }
108
+
109
+ .gw-admin-navigation__link.is-current {
110
+ border-left-color: var(--gw-admin-primary);
111
+ }
112
+
113
+ .gw-admin-mobile-header {
114
+ position: sticky;
115
+ z-index: 50;
116
+ top: 0;
117
+ display: flex;
118
+ height: var(--gw-admin-mobile-header-height);
119
+ align-items: center;
120
+ justify-content: space-between;
121
+ border-bottom: 1px solid var(--gw-admin-border-soft);
122
+ background: var(--gw-admin-surface);
123
+ padding-inline: 1rem 0.5rem;
124
+ }
125
+
126
+ .gw-admin-mobile-header__brand {
127
+ display: flex;
128
+ max-width: 9rem;
129
+ align-items: center;
130
+ color: inherit;
131
+ text-decoration: none;
132
+ }
133
+
134
+ .gw-admin-icon-button {
135
+ display: inline-grid;
136
+ width: 2.75rem;
137
+ height: 2.75rem;
138
+ place-items: center;
139
+ border: 0;
140
+ border-radius: 50%;
141
+ background: transparent;
142
+ color: var(--gw-admin-text);
143
+ cursor: pointer;
144
+ font: inherit;
145
+ }
146
+
147
+ .gw-admin-icon-button:hover,
148
+ .gw-admin-icon-button:focus-visible {
149
+ background: var(--gw-admin-surface-muted);
150
+ }
151
+
152
+ .gw-admin-icon-button svg {
153
+ width: 1.5rem;
154
+ height: 1.5rem;
155
+ }
156
+
157
+ .gw-admin-drawer-backdrop {
158
+ position: fixed;
159
+ z-index: 60;
160
+ inset: 0;
161
+ background: rgb(0 0 0 / 40%);
162
+ opacity: 0;
163
+ pointer-events: none;
164
+ transition: opacity 180ms ease;
165
+ }
166
+
167
+ .gw-admin-drawer-backdrop.is-open {
168
+ opacity: 1;
169
+ pointer-events: auto;
170
+ }
171
+
172
+ .gw-admin-drawer {
173
+ position: fixed;
174
+ z-index: 70;
175
+ inset-block: 0;
176
+ right: 0;
177
+ display: flex;
178
+ width: min(22rem, 82vw);
179
+ flex-direction: column;
180
+ background: var(--gw-admin-surface);
181
+ transform: translateX(100%);
182
+ transition: transform 180ms ease;
183
+ pointer-events: none;
184
+ }
185
+
186
+ .gw-admin-drawer.is-open {
187
+ transform: translateX(0);
188
+ pointer-events: auto;
189
+ }
190
+
191
+ .gw-admin-drawer__header {
192
+ display: flex;
193
+ min-height: var(--gw-admin-mobile-header-height);
194
+ align-items: center;
195
+ justify-content: flex-end;
196
+ padding-inline: 0.5rem;
197
+ }
198
+
199
+ .gw-admin-page {
200
+ width: 100%;
201
+ max-width: var(--gw-admin-content-width);
202
+ margin-inline: auto;
203
+ padding-bottom: 4rem;
204
+ }
205
+
206
+ .gw-admin-page--detail {
207
+ max-width: 64rem;
208
+ }
209
+
210
+ .gw-admin-page--form {
211
+ max-width: 56rem;
212
+ }
213
+
214
+ .gw-admin-dashboard__grid {
215
+ display: grid;
216
+ gap: 1rem;
217
+ }
218
+
219
+ .gw-admin-dashboard__item {
220
+ display: grid;
221
+ gap: 0.5rem;
222
+ min-height: 7rem;
223
+ align-content: center;
224
+ border: 1px solid var(--gw-admin-border-soft);
225
+ background: var(--gw-admin-surface);
226
+ padding: 1.5rem;
227
+ color: var(--gw-admin-text);
228
+ text-decoration: none;
229
+ }
230
+
231
+ .gw-admin-dashboard__item:hover,
232
+ .gw-admin-dashboard__item:focus-visible {
233
+ border-color: var(--gw-admin-text-muted);
234
+ }
235
+
236
+ .gw-admin-dashboard__item strong {
237
+ font-size: 1.125rem;
238
+ font-weight: 700;
239
+ }
240
+
241
+ .gw-admin-dashboard__item span {
242
+ color: var(--gw-admin-text-muted);
243
+ font-size: 0.875rem;
244
+ line-height: 1.6;
245
+ }
246
+
247
+ .gw-admin-account-page {
248
+ max-width: 64rem;
249
+ }
250
+
251
+ .gw-admin-account-page__section {
252
+ max-width: 42rem;
253
+ border: 1px solid var(--gw-admin-border-soft);
254
+ background: var(--gw-admin-surface);
255
+ padding: 1.5rem;
256
+ }
257
+
258
+ .gw-admin-account-page__section h2 {
259
+ margin: 0;
260
+ font-size: 1.25rem;
261
+ line-height: 1.4;
262
+ }
263
+
264
+ .gw-admin-account-page__section p {
265
+ margin: 0.75rem 0 0;
266
+ color: var(--gw-admin-text-muted);
267
+ font-size: 0.875rem;
268
+ line-height: 1.6;
269
+ }
270
+
271
+ .gw-admin-account-page__section .gw-admin-logout {
272
+ margin-top: 1.5rem;
273
+ }
274
+
275
+ .gw-admin-page-header {
276
+ display: flex;
277
+ min-height: 12.5rem;
278
+ flex-wrap: wrap;
279
+ align-items: center;
280
+ justify-content: space-between;
281
+ gap: 1rem;
282
+ }
283
+
284
+ .gw-admin-page-header__heading {
285
+ min-width: 0;
286
+ }
287
+
288
+ .gw-admin-page-header__title {
289
+ margin: 0.75rem 0 0;
290
+ color: var(--gw-admin-text);
291
+ font-size: clamp(2rem, 5vw, 2.5rem);
292
+ font-weight: 700;
293
+ line-height: 1.15;
294
+ }
295
+
296
+ .gw-admin-page-header__heading > .gw-admin-page-header__title:first-child {
297
+ margin-top: 0;
298
+ }
299
+
300
+ .gw-admin-page-header__actions {
301
+ display: flex;
302
+ flex-wrap: wrap;
303
+ align-items: center;
304
+ gap: 0.75rem;
305
+ }
306
+
307
+ .gw-admin-breadcrumbs {
308
+ color: var(--gw-admin-text-muted);
309
+ font-size: 0.875rem;
310
+ }
311
+
312
+ .gw-admin-breadcrumbs__list {
313
+ display: flex;
314
+ flex-wrap: wrap;
315
+ align-items: center;
316
+ margin: 0;
317
+ padding: 0;
318
+ list-style: none;
319
+ }
320
+
321
+ .gw-admin-breadcrumbs__item {
322
+ display: flex;
323
+ align-items: center;
324
+ }
325
+
326
+ .gw-admin-breadcrumbs__separator {
327
+ margin-inline: 0.375rem;
328
+ }
329
+
330
+ .gw-admin-breadcrumbs__link {
331
+ color: inherit;
332
+ text-decoration: none;
333
+ }
334
+
335
+ .gw-admin-breadcrumbs__link:hover,
336
+ .gw-admin-breadcrumbs__link:focus-visible {
337
+ color: var(--gw-admin-text);
338
+ }
339
+
340
+ .gw-admin-button {
341
+ display: inline-flex;
342
+ min-height: 2.75rem;
343
+ align-items: center;
344
+ justify-content: center;
345
+ border: 1px solid transparent;
346
+ border-radius: var(--gw-admin-radius);
347
+ padding-inline: 1.25rem;
348
+ cursor: pointer;
349
+ font: inherit;
350
+ font-size: 0.875rem;
351
+ font-weight: 700;
352
+ line-height: 1.2;
353
+ text-decoration: none;
354
+ }
355
+
356
+ .gw-admin-button:disabled {
357
+ cursor: not-allowed;
358
+ opacity: 0.5;
359
+ }
360
+
361
+ .gw-admin-button--primary {
362
+ background: var(--gw-admin-primary);
363
+ color: var(--gw-admin-primary-text);
364
+ }
365
+
366
+ .gw-admin-button--muted {
367
+ background: #404040;
368
+ color: #ffffff;
369
+ }
370
+
371
+ .gw-admin-button--secondary {
372
+ border-color: var(--gw-admin-border);
373
+ background: var(--gw-admin-surface);
374
+ color: var(--gw-admin-text);
375
+ }
376
+
377
+ .gw-admin-button--danger {
378
+ border-color: var(--gw-admin-danger-soft);
379
+ background: var(--gw-admin-surface);
380
+ color: var(--gw-admin-danger);
381
+ }
382
+
383
+ .gw-admin-button--disabled {
384
+ border-color: var(--gw-admin-border-soft);
385
+ color: #b0b0b0;
386
+ cursor: default;
387
+ }
388
+
389
+ .gw-admin-logout {
390
+ margin-top: 1.5rem;
391
+ }
392
+
393
+ .gw-admin-search {
394
+ display: flex;
395
+ flex-wrap: wrap;
396
+ align-items: flex-end;
397
+ gap: 0.75rem;
398
+ margin-bottom: 1.5rem;
399
+ }
400
+
401
+ .gw-admin-search__query {
402
+ min-width: min(100%, 14rem);
403
+ flex: 1;
404
+ }
405
+
406
+ .gw-admin-search__filter {
407
+ min-width: min(100%, 10rem);
408
+ }
409
+
410
+ .gw-admin-input {
411
+ width: 100%;
412
+ min-height: 2.75rem;
413
+ border: 1px solid var(--gw-admin-border);
414
+ border-radius: var(--gw-admin-radius);
415
+ outline: 0;
416
+ background: var(--gw-admin-surface);
417
+ padding-inline: 0.75rem;
418
+ color: var(--gw-admin-text);
419
+ font: inherit;
420
+ font-size: 0.875rem;
421
+ }
422
+
423
+ .gw-admin-input:focus {
424
+ border-color: var(--gw-admin-focus);
425
+ }
426
+
427
+ .gw-admin-input:disabled {
428
+ background: var(--gw-admin-surface-muted);
429
+ }
430
+
431
+ .gw-admin-input::placeholder {
432
+ color: #a3a3a3;
433
+ }
434
+
435
+ .gw-admin-textarea {
436
+ min-height: 8rem;
437
+ padding-block: 0.75rem;
438
+ resize: vertical;
439
+ }
440
+
441
+ .gw-admin-table-wrap {
442
+ overflow-x: auto;
443
+ border: 1px solid var(--gw-admin-border-soft);
444
+ background: var(--gw-admin-surface);
445
+ }
446
+
447
+ .gw-admin-table {
448
+ width: 100%;
449
+ min-width: 53.75rem;
450
+ border-collapse: collapse;
451
+ color: var(--gw-admin-text-muted);
452
+ font-size: 0.875rem;
453
+ text-align: left;
454
+ }
455
+
456
+ .gw-admin-table thead {
457
+ background: var(--gw-admin-surface-muted);
458
+ color: #404040;
459
+ }
460
+
461
+ .gw-admin-table th {
462
+ border-bottom: 1px solid var(--gw-admin-border-soft);
463
+ padding: 0.75rem 1rem;
464
+ font-weight: 700;
465
+ }
466
+
467
+ .gw-admin-table td {
468
+ max-width: 20rem;
469
+ border-bottom: 1px solid #f0f0f0;
470
+ padding: 1rem;
471
+ vertical-align: top;
472
+ }
473
+
474
+ .gw-admin-table tbody tr:last-child td {
475
+ border-bottom: 0;
476
+ }
477
+
478
+ .gw-admin-table__sort {
479
+ display: inline-flex;
480
+ align-items: center;
481
+ gap: 0.25rem;
482
+ color: inherit;
483
+ text-decoration: none;
484
+ }
485
+
486
+ .gw-admin-table__primary-link {
487
+ color: var(--gw-admin-text);
488
+ font-weight: 700;
489
+ text-decoration: none;
490
+ }
491
+
492
+ .gw-admin-table__primary-link:hover,
493
+ .gw-admin-table__primary-link:focus-visible {
494
+ text-decoration: underline;
495
+ text-underline-offset: 0.25rem;
496
+ }
497
+
498
+ .gw-admin-table__value {
499
+ display: -webkit-box;
500
+ overflow: hidden;
501
+ -webkit-box-orient: vertical;
502
+ -webkit-line-clamp: 2;
503
+ }
504
+
505
+ .gw-admin-table__actions {
506
+ display: flex;
507
+ gap: 0.75rem;
508
+ }
509
+
510
+ .gw-admin-table__actions a {
511
+ color: var(--gw-admin-text-muted);
512
+ font-weight: 700;
513
+ text-decoration: none;
514
+ }
515
+
516
+ .gw-admin-table__actions a:hover,
517
+ .gw-admin-table__actions a:focus-visible {
518
+ color: var(--gw-admin-text);
519
+ }
520
+
521
+ .gw-admin-table__empty {
522
+ padding-block: 4rem !important;
523
+ color: var(--gw-admin-text-muted);
524
+ text-align: center;
525
+ }
526
+
527
+ .gw-admin-pagination {
528
+ display: flex;
529
+ flex-wrap: wrap;
530
+ align-items: center;
531
+ justify-content: space-between;
532
+ gap: 1rem;
533
+ margin-top: 1.25rem;
534
+ color: var(--gw-admin-text-muted);
535
+ font-size: 0.875rem;
536
+ }
537
+
538
+ .gw-admin-pagination p {
539
+ margin: 0;
540
+ }
541
+
542
+ .gw-admin-pagination__navigation {
543
+ display: flex;
544
+ gap: 0.5rem;
545
+ }
546
+
547
+ .gw-admin-detail {
548
+ margin: 0;
549
+ border-top: 1px solid var(--gw-admin-border);
550
+ background: var(--gw-admin-surface);
551
+ }
552
+
553
+ .gw-admin-detail__row {
554
+ display: grid;
555
+ gap: 0.5rem;
556
+ border-bottom: 1px solid var(--gw-admin-border-soft);
557
+ padding-block: 1rem;
558
+ }
559
+
560
+ .gw-admin-detail__row.is-long {
561
+ min-height: 8rem;
562
+ }
563
+
564
+ .gw-admin-detail dt {
565
+ color: var(--gw-admin-text-muted);
566
+ font-size: 0.875rem;
567
+ font-weight: 700;
568
+ }
569
+
570
+ .gw-admin-detail dd {
571
+ min-width: 0;
572
+ margin: 0;
573
+ overflow-wrap: anywhere;
574
+ color: var(--gw-admin-text);
575
+ font-size: 0.875rem;
576
+ line-height: 1.75;
577
+ }
578
+
579
+ .gw-admin-page__footer-action {
580
+ margin-top: 2rem;
581
+ }
582
+
583
+ .gw-admin-crud-form__fields {
584
+ display: grid;
585
+ gap: 1.5rem;
586
+ }
587
+
588
+ .gw-admin-field {
589
+ display: block;
590
+ }
591
+
592
+ .gw-admin-field__label {
593
+ display: block;
594
+ margin-bottom: 0.5rem;
595
+ color: #333333;
596
+ font-size: 0.875rem;
597
+ font-weight: 700;
598
+ }
599
+
600
+ .gw-admin-field__required {
601
+ margin-left: 0.25rem;
602
+ color: var(--gw-admin-danger);
603
+ }
604
+
605
+ .gw-admin-field__description {
606
+ display: block;
607
+ margin-top: 0.5rem;
608
+ color: var(--gw-admin-text-muted);
609
+ font-size: 0.75rem;
610
+ }
611
+
612
+ .gw-admin-field-error {
613
+ display: block;
614
+ margin: 0.5rem 0 0;
615
+ color: var(--gw-admin-danger);
616
+ font-size: 0.875rem;
617
+ }
618
+
619
+ .gw-admin-checkbox {
620
+ display: flex;
621
+ min-height: 2.75rem;
622
+ align-items: center;
623
+ gap: 0.75rem;
624
+ color: var(--gw-admin-text-muted);
625
+ font-size: 0.875rem;
626
+ }
627
+
628
+ .gw-admin-checkbox__input {
629
+ width: 1.25rem;
630
+ height: 1.25rem;
631
+ }
632
+
633
+ .gw-admin-alert {
634
+ border: 1px solid var(--gw-admin-border);
635
+ border-radius: var(--gw-admin-radius);
636
+ padding: 0.75rem 1rem;
637
+ font-size: 0.875rem;
638
+ }
639
+
640
+ .gw-admin-alert--error {
641
+ border-color: var(--gw-admin-danger-soft);
642
+ background: var(--gw-admin-error-background);
643
+ color: var(--gw-admin-danger);
644
+ }
645
+
646
+ .gw-admin-attachment-list {
647
+ display: grid;
648
+ gap: 0.5rem;
649
+ margin: 0;
650
+ padding: 0;
651
+ list-style: none;
652
+ }
653
+
654
+ .gw-admin-attachment-list__link,
655
+ .gw-admin-rich-text-file {
656
+ display: inline-flex;
657
+ align-items: center;
658
+ gap: 0.5rem;
659
+ color: var(--gw-admin-text);
660
+ font-weight: 700;
661
+ text-decoration: underline;
662
+ text-underline-offset: 0.25rem;
663
+ }
664
+
665
+ .gw-admin-attachment-list__empty,
666
+ .gw-admin-file-input__empty {
667
+ color: #a3a3a3;
668
+ }
669
+
670
+ .gw-admin-file-input__dropzone {
671
+ display: flex;
672
+ min-height: 8rem;
673
+ cursor: pointer;
674
+ align-items: center;
675
+ justify-content: center;
676
+ border: 1px dashed var(--gw-admin-border);
677
+ background: var(--gw-admin-surface);
678
+ padding: 2rem 1.5rem;
679
+ color: var(--gw-admin-text-muted);
680
+ text-align: center;
681
+ }
682
+
683
+ .gw-admin-file-input__dropzone.is-drag-over,
684
+ .gw-admin-file-input__dropzone:hover,
685
+ .gw-admin-file-input__dropzone:focus-visible {
686
+ border-color: var(--gw-admin-text);
687
+ background: var(--gw-admin-surface-muted);
688
+ color: var(--gw-admin-text);
689
+ }
690
+
691
+ .gw-admin-file-input__previews {
692
+ display: grid;
693
+ gap: 0.5rem;
694
+ margin-top: 0.75rem;
695
+ }
696
+
697
+ .gw-admin-file-preview {
698
+ display: grid;
699
+ min-height: 3rem;
700
+ grid-template-columns: minmax(0, 1fr) auto;
701
+ align-items: center;
702
+ gap: 1rem;
703
+ background: var(--gw-admin-surface-muted);
704
+ padding: 0.75rem 1rem;
705
+ color: #333333;
706
+ font-size: 0.875rem;
707
+ }
708
+
709
+ .gw-admin-file-preview__thumbnail {
710
+ width: 3rem;
711
+ height: 3rem;
712
+ object-fit: cover;
713
+ }
714
+
715
+ .gw-admin-file-preview__progress {
716
+ margin-left: 0.75rem;
717
+ vertical-align: middle;
718
+ }
719
+
720
+ .gw-admin-file-preview__actions {
721
+ display: flex;
722
+ align-items: center;
723
+ gap: 0.75rem;
724
+ }
725
+
726
+ .gw-admin-link-button {
727
+ border: 0;
728
+ background: transparent;
729
+ padding: 0;
730
+ color: var(--gw-admin-text);
731
+ cursor: pointer;
732
+ font: inherit;
733
+ font-weight: 700;
734
+ text-decoration: underline;
735
+ text-underline-offset: 0.25rem;
736
+ }
737
+
738
+ .gw-admin-link-button--danger {
739
+ color: var(--gw-admin-danger);
740
+ }
741
+
742
+ .gw-admin-rich-text-editor {
743
+ border: 1px solid var(--gw-admin-border);
744
+ background: var(--gw-admin-surface);
745
+ }
746
+
747
+ .gw-admin-rich-text-editor:focus-within {
748
+ border-color: var(--gw-admin-focus);
749
+ }
750
+
751
+ .gw-admin-rich-text-editor__toolbar {
752
+ display: flex;
753
+ flex-wrap: wrap;
754
+ gap: 0.25rem;
755
+ border-bottom: 1px solid var(--gw-admin-border-soft);
756
+ background: var(--gw-admin-surface-muted);
757
+ padding: 0.25rem;
758
+ }
759
+
760
+ .gw-admin-rich-text-editor__tool {
761
+ display: grid;
762
+ width: 2.25rem;
763
+ height: 2.25rem;
764
+ place-items: center;
765
+ border: 0;
766
+ background: var(--gw-admin-surface);
767
+ color: #404040;
768
+ cursor: pointer;
769
+ }
770
+
771
+ .gw-admin-rich-text-editor__tool:hover,
772
+ .gw-admin-rich-text-editor__tool:focus-visible {
773
+ background: #e5e5e5;
774
+ color: var(--gw-admin-text);
775
+ }
776
+
777
+ .gw-admin-rich-text-editor__tool svg {
778
+ width: 1.125rem;
779
+ height: 1.125rem;
780
+ }
781
+
782
+ .gw-admin-rich-text-editor__surface {
783
+ min-height: 18.75rem;
784
+ padding: 0.75rem;
785
+ }
786
+
787
+ .gw-admin-rich-text-editor__surface .ProseMirror {
788
+ min-height: 17rem;
789
+ outline: 0;
790
+ color: var(--gw-admin-text);
791
+ line-height: 1.75;
792
+ }
793
+
794
+ .gw-admin-rich-text-view {
795
+ color: var(--gw-admin-text);
796
+ line-height: 1.75;
797
+ }
798
+
799
+ .gw-admin-rich-text-editor__surface .ProseMirror h2,
800
+ .gw-admin-rich-text-view h2 {
801
+ margin: 1.5rem 0 0.75rem;
802
+ font-size: 1.5rem;
803
+ font-weight: 700;
804
+ line-height: 1.4;
805
+ }
806
+
807
+ .gw-admin-rich-text-editor__surface .ProseMirror p,
808
+ .gw-admin-rich-text-view p {
809
+ margin: 0.75rem 0;
810
+ }
811
+
812
+ .gw-admin-rich-text-editor__surface .ProseMirror ul,
813
+ .gw-admin-rich-text-view ul {
814
+ margin: 0.75rem 0;
815
+ padding-left: 1.5rem;
816
+ list-style: disc;
817
+ }
818
+
819
+ .gw-admin-rich-text-editor__surface .ProseMirror ol,
820
+ .gw-admin-rich-text-view ol {
821
+ margin: 0.75rem 0;
822
+ padding-left: 1.5rem;
823
+ list-style: decimal;
824
+ }
825
+
826
+ .gw-admin-rich-text-editor__surface .ProseMirror a,
827
+ .gw-admin-rich-text-view a {
828
+ color: #075985;
829
+ text-decoration: underline;
830
+ text-underline-offset: 0.2em;
831
+ }
832
+
833
+ .gw-admin-rich-text-editor__surface img,
834
+ .gw-admin-rich-text-view img,
835
+ .gw-admin-rich-text-editor__surface video,
836
+ .gw-admin-rich-text-view video {
837
+ max-width: 100%;
838
+ height: auto;
839
+ }
840
+
841
+ .gw-admin-rich-text-view > :first-child {
842
+ margin-top: 0;
843
+ }
844
+
845
+ .gw-admin-rich-text-view > :last-child {
846
+ margin-bottom: 0;
847
+ }
848
+
849
+ .gw-admin-rich-text-file {
850
+ justify-content: flex-start;
851
+ }
852
+
853
+ .gw-admin-rich-text-file small {
854
+ color: var(--gw-admin-text-muted);
855
+ font-size: 0.75rem;
856
+ font-weight: 400;
857
+ }
858
+
859
+ .gw-admin-visually-hidden {
860
+ position: absolute;
861
+ width: 1px;
862
+ height: 1px;
863
+ overflow: hidden;
864
+ clip: rect(0, 0, 0, 0);
865
+ clip-path: inset(50%);
866
+ white-space: nowrap;
867
+ }
868
+
869
+ @media (min-width: 48rem) {
870
+ .gw-admin-dashboard__grid {
871
+ grid-template-columns: repeat(3, minmax(0, 1fr));
872
+ }
873
+
874
+ .gw-admin-account-page__section {
875
+ padding: 2rem;
876
+ }
877
+
878
+ .gw-admin-mobile-header {
879
+ display: none;
880
+ }
881
+
882
+ .gw-admin-sidebar {
883
+ display: block;
884
+ }
885
+
886
+ .gw-admin-shell__content {
887
+ padding-inline: 2.5rem;
888
+ }
889
+
890
+ .gw-admin-detail__row {
891
+ grid-template-columns: 10rem minmax(0, 1fr);
892
+ gap: 1.5rem;
893
+ }
894
+ }
895
+
896
+ @media (prefers-reduced-motion: reduce) {
897
+ .gw-admin-drawer,
898
+ .gw-admin-drawer-backdrop {
899
+ transition: none;
900
+ }
901
+ }